tokuhirom's Blog

Shipped Localizer 0.01

https://metacpan.org/release/Localizer

Abstract: I released yet another localizetion library for us(me and co-workers).

Localizer というモジュールをだした。

Locale::Maketext はよいモジュールだが、OO-ish ではないしドキュメントがわかりづらい。

Locale::Maketext::Lexicon は便利だが、内部のコードが高度すぎてなにをやっているのかよくわからず、オーバースペックな感じだなと感じることがあるし、なにか変えようとしたときになにをしているのかさっぱりわからないので、よく困っていた。

Locale::Maketext::Lexicon をハックする謎コードをつみあげていたのだが、つみあげたコードの方がでかいぐらいのノリになってきた。シンプルなコードで、うちでやりたい多言語化処理をうまくできるやつがほしかったのでかいた。


.po をよんだり書いたりする仕組みはない。弊社では .po フォーマットを採用していないからだ。必要ないものは実装してもしょうがないので、実装しない。 必要なら、単体の .po reader/writer を用意しようとおもう。


Localizer::Resource, Localizer::Style::Gettext, Localizer::Style::Maketext という3つのモジュールによって、l("foo %1", $x) のような関数の解釈が実装されている。

弊社では現在 gettext スタイルの l("foo %1", $x) のようにかいており [_1] のようなタグはつかっていない。であるから、Gettext スタイルの実装を独自におこしている。これにより非常に Localizer::Style::Gettext の実装コードがよみやすくなっていてよい。


xgettext.pl のようなスクリプトは添付していない。結局は自分たちの好きなようにスクリプトかいてつかうことになるので、つけるだけ無駄だからだ。

かわりにライブラリのインターフェイスをできるだけ洗練したものにしてある。

my $result  = Localizer::Dictionary->new();
my $scanner = Localizer::Scanner::Perl->new();
for (zglob("scripts/*.pl"), zglob("lib/*.pm")) {
    $scanner->scan_file($result, '$_.pl');
}

がんばって xgettext.pl をつかうより上記のようなコードをかいた方が楽でしょう?

現状、Xlsate と perl コードをスキャン可能だ。

Localizer::Dictionary クラスのインターフェイスが貧弱というかあきらかにたりてないので、その点については欲しいメソッドがあったらおしえていただければ随時つけていこうとおもっている。

ご意見、ご要望は http://lingr.com/room/perl_jp あたりにおねがいしたい。