2013年05月09日

Perl で L10N する方法としてはPerl でつくった web サイトを L10N する方法 - tokuhirom's blog.が有名ですが、昨今はうっかりパンケーキとか唐揚げを食べてたらロンドンとかに海外進出しちゃうようなのが当たり前になった現代においては、 blog のコードをコピペするやつは死んどけば良いので、死なないため殺されない為に実用的に CPANize して殺す側に回りました。

https://metacpan.org/release/Amon2-Plugin-L10N/(現在の最新版は v0.1.3 です。)

貴方のプロジェクトのベースクラス、例えば Amazlet.pm などの中に以下のコードを埋め込みます。

__PACKAGE__->load_plugins('L10N' => {
    accept_langs => [qw/ en ja zh-tw zh-cn fr /],
});

その後 xslate の function として以下のような関数を登録するのです。

sub l {
    my $string = shift;
    my @args = map { Text::Xslate::html_escape($_) } @_; # escape arguments
    Text::Xslate::mark_raw( Amazlet-> context-> loc($string, @args) );
}

そうすると temp/index.tt などの中に [% l('hello! amazlet world!') %] などと書けるようになります。

po/ja.po とかが適切な感じで入っていれば 'hello! amazlet world! が適切な言語の物に変換されて表示されます。

po ファイル管理だるい

自前で ja.po とか作るのだるいので簡単なスクリプト添付してあります。ただ、スクリプトを動かす為のモジュールは標準でインストールされないので

$ cpanm --width-suggests Amon2::Plugin::L10N
とやって入れてから
$ amon2-xgettext.pl en ja zh-tw zh-cn fr 
ってすれば lib や tmpl 以下の中から適切に探して作ってくれます。

まとめ

Amon2::Plugin::L10N を使ってみんなで国際化して変化でガラパゴスしましょう。詳細は pod 見ると良いです。

Posted by Yappo at 2013年05月09日 17:38 | TrackBack | Perl
Comments
Post a comment









Remember personal info?






コメントを投稿する前に↓の場所にnospamと入力してください。