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 っていう名前だけどいうほどシンプルにはなってない。
Published: 2011-11-03(Thu) 01:12