Locale::Maketext::Lexicon を Xslate でつかう
あたくしは普段 Locale::Maketext::Lexicon を利用しているので、Locale::Maketext::Lexicon をつかったサンプルをかいてみた。
#!perl use strict; use warnings; use utf8; package MyApp::I18N; use FindBin qw($Bin); use parent 'Locale::Maketext'; use Locale::Maketext::Lexicon { '*' => [Gettext => "$Bin/locale/*.po"], _auto => 1, _decode => 1, _style => 'gettext', }; package main; use Encode (); use Text::Xslate; my $i18n = MyApp::I18N->get_handle('ja'); my $xslate = Text::Xslate->new( syntax => 'TTerse', function => { l => sub { return $i18n->maketext(@_); }, }, ); binmode STDOUT, ':utf8'; print $xslate->render_string(<<'TEMPLATE'); [% l('Hello!') %] [% l('Hello! %1.', '太郎') %] [% l('tokyo') %] TEMPLATE
gfx作の、Locale::Maketext::Simple バージョンは以下のもの。ここで Locale::Maketext::Simple は Locale::Maketext::Lexicon のラッパーである。Locale::Maketext::Lexicon がない場合にはそのままのデータをかえすなどの処理をしていて罠がおおいので注意。
#!perl use strict; use warnings; use utf8; use Text::Xslate; use FindBin qw($Bin); use Encode (); use Locale::Maketext::Lexicon; use Locale::Maketext::Simple Style => 'gettext', Encoding => 'UTF-8', Path => "$Bin/locale", ; loc_lang('ja'); my $xslate = Text::Xslate->new( syntax => 'TTerse', function => { l => sub { return Encode::decode_utf8( loc(@_) ); }, }, ); binmode STDOUT, ':utf8'; print $xslate->render_string(<<'TEMPLATE'); [% l('Hello!') %] [% l('tokyo') %] TEMPLATE
【Conclusion】
Locale::Maketext::Simple の罠っぽい感じをみると Locale::Maketext::Lexicon でいいかな、っておもったりする。
あと、Simple っていう名前だけどいうほどシンプルにはなってない。