Catalyst::Plugin::I18N

言語ファイルを事前に po から mo ファイルに変換しておくと、以下のように取得できることがわかりました。これなら、ハッシュの値を上書きすれば、お客さんごとの言語ファイルを使えるかもしれません(それは国際化と別次元だろ!!というつっこみはおいといて・・)。グローバル変数の書き換えになるから相当まずいのかな・・教えてエライ人!

my %lexicon
if ($c->language eq 'ja') {
    %lexicon = %{MyApp::I18N::ja::Lexicon};
} else {
    %lexicon = %{MyApp::I18N::en::Lexicon};
}
$c->stash->{loc} = \%lexicon;

po ファイルは以下のようなただのテキストファイルです。

msgid "MSG001"
msgstr "ほげほげ"

msgid "MSG002"
msgstr "ふがふが"

以下のようにすると mo ファイルに変換できます。

$ msgfmt -o ja.mo ja.po

mo ファイルがないとセグメンテーション違反がおきました(笑)。これで use Locale::Maketext::Gettext; を使わなくても ClearSilver で国際化できます♪