Perl の国際化対応: Locale::Maketext

以下のようなファイル構成にする。$ln $ln->maketext('Selected Language'); の、'Selected Language' に対応して翻訳すべきところを MyProject::L10N::ja や MyProject::L10N::en に書けば、自動的に変換してくれる。
ちなみに I18N は Internationalization の I と n の間に18文字あるからだそう。L10N は? => Localization!

使用するモジュール


Locale::Maketext
注:Locale::Maketext は Perl 5.8 以降、標準で組み入れられているため、この仕組みは Perl 標準のものとなっている。

./MyProject/Test.pm
./MyProject/L10N.pm
./MyProject/L10N/ja.pm
./MyProject/L10N/en.pm
./MyProject/L10N/i_default.pm

Test.pm の内容:

package MyProject::Test; use strict; use MyProject::L10N; sub new {
my $class = shift;
my $self  = {};

return bless $self, $class;
} sub output {
my $lang = shift;

my $lh = MyProject::L10N->get_handle($lang) || die "Error: L10N::$lang¥n";
print $lh->maketext('Selected Language'), "¥n";
}

ja.pm の内容

package MyProject::L10N::ja; use strict; use base qw(MyProject::L10N); our %Lexicon = (
'_AUTO' => 1,
'Selected Language'=>'MyProject::L10N::ja に書いてある日本語'
); 1;

en.pm の内容

package MyProject::L10N::en; use strict; use base qw(MyProject::L10N); our %Lexicon = (
'_AUTO' => 1,
'Selected Language'=>'English in L10N::en'
); 1;

en_us.pm の内容

package MyProject::L10N::en_us; use strict; use base qw(MyProject::L10N::en); 1;

i_default.pm の内容:

package MyProject::L10N::i_default; use base qw(MyProject::L10N); 1; __END__