Validatorメッセージの日本語化(1)
2007年7月18日 (水)
WEBアプリケーションにはValidatorの機能は必須だ。Validatorとは、WEBアプリケーションの画面で入力された各フィールドの値の正当性チェック機能だ。たとえば、フィールドの入力有無チェック、整数フィールドの整数チェックや値の範囲チェックなどである。
このValidator機能はJava/Servletなら自作しなければならないが、WEBアプリケーションフレームワークであればその機能はそのフレームワークに存在している。たとえばJava/Strutsの場合には各フィールドのチェック機能をXMLファイルに設定するValidatorが付いている。Python/TurboGearsにももちろんValidator機能は存在する。それはFormEncodeパッケージのValidator機能をTurboGearsが利用したものだ。
このTurblGearsによるValidator機能は、ドキュメントや解説書どおりにプログラミングしても、エラーメッセージは英語である。たとえば入力必須フィールドに何も入力しなかった場合、TurboGearsのValidatorは’Please enter a value’というメッセージを出力する。さすがに英語のメッセージでは日本語アプリケーションには使えない。そこでこのValidatorメッセージの日本語化が必須なのだが、これがなかなか難物。そこでこの日本語化の過程を数回に分けて報告する。(結論としては、最上位のレベルでの日本語メッセージ化には成功していない。)
最初にやるべきことは、TurboGearsのValidator機能の大元であるFormEncodeのエラーメッセージファイルの日本語化だ。これは、FormEncodeドキュメントによれば次の手順でやるように書いてある。
$ svn co http://svn.formencode.org/FormEncode/trunk/“
$ cd formencode/i18n
$ mkdir <lang>/LC_MESSAGES
$ cp FormEncode.pot <lang>/LC_MESSAGES/FormEncode.po
$ emacs <lang>/LC_MESSAGES/FormEncode.po # or whatever editor you prefer
# make the translation
$ python msgfmt.py <lang>/LC_MESSAGES/FormEncode.po
最初の行のsvnコマンドは、既にインストール済みなので無視。<lang>は日本語なので”ja”とする。”jp”ではない。
emacsの行は、エディターでメッセージファイルを日本語で記述するの意。なおこのファイルの文字コードはutf-8でなければならない。そして結論を先に言うと、FormEncode.poファイル先頭部分の2行も次のように設定する必要がある。
“Content-Type: text/plain; charset=UTF-8\n”
“Content-Transfer-Encoding: 8bit\n”
そして、手順最後の行のmsgfmt.py は、\python\tools下に存在する。最後の行は、こちらの環境(Windows,Python25を”Program Files”下にインストール)では次のようになる。
> python C:\progra~1\Python25\Tools\i18n\msgfmt.py ja/LC_MESSAGES/FormEncode.po
この結果、FormEncode.poと同じディレクトリにバイナリメッセージファイルのFormEncode.moファイルが生成される。
次のステップは、日本語FormEncode.moファイルが正しく表示されるかどうかのテストだ。先ず一番下のgettextレベルでテストした。
... trans = gettext.translation(domain="FormEncode", localedir="C:\\PROGRA~1\\Python25\\Lib\\SITE-P~1\\ FORMEN~1.EGG\\FORMEN~1\\i18n", languages=["ja"]) msg = trans.gettext("Please enter a value") ...
(localedirパラメータは1行。)
ここで重要なことは、translation()メソッドのlocaledirパラメータだ。このパラメータにはFormEncodeのi18nディレクトリを指定するが、Windows環境ではファイルのロング名を指定してはならないのだ。
localedir=”C:\\Program Files\\Python25\\…
では駄目。完全なショート名でなければならない。この周辺の話題はこのブログの記事Pythonは空白がお嫌いにある。
上記テストの結果、最後にある変数msgに”Please enter a value”に対応する日本語メッセージが正しく格納されていることを確認した。
ここまでは割りと順調。この後が大変だった。(続く。)
コメント・トラックバック一覧(0)
この記事にはまだコメントがついていません。