Locale::Maketext::Simpleのハマリどころ
Perlには、Gettextを簡便に扱うためのモジュールが幾つか存在します。
その中でも、とても簡単に使えるのがLocale::Maketext::Simpleです。
Perlで国際化フレームワークを開発するのであれば、このモジュールがとてもお勧めです。
このモジュールは、Catalyst::Plugin::I18Nなどでも使われているので、使い方を勉強したい方は見てみるのがよいでしょう。
さて、このモジュールなのですが、PODなどには書いていないので少しハマるところがあります。
それは、POファイルのヘッダに以下のようにcharsetとContent-Transfer-Encodingを記述しておかないと、utf8 bytesとして、Locale::Maketext::Simpleが扱ってしまうということです。
msgid "" msgstr "" "Project-Id-Version: XXX\n" "PO-Revision-Date: \n" "PO-Revision-Date: \n" "Language-Team: XXX\n" "Last-Translator: XXX\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n"
上記のように記述することで、Locale::Maketext::Simpleのlocメソッドによって取得される文字列は、utf8 stringとして扱われます。
最初はこれに気づかずに、utf8 bytesとutf8 stringを混ぜて使ってしまう結果となり、文字化けに悩まされました。PODには記述がないので、どこで化けているのかの調査に時間がかかってしまいました。他の人がこれではまらないようにと...