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 で国際化できます♪