Pylons 0.9.7 で validate エラーメッセージを日本語化



FormEncodeのValidateが出力するエラーメッセージの一部は
日本語化されていますが、英語で表示されるエラーもあります。

また、要件によっては文言を変更したい場合もあるかと思います。


FormEncodeのValidateが使用するメッセージは
環境により異なると思いますが、
/usr/local/lib/python2.5/site-packages/FormEncode-1.2.1-py2.5.egg/formencode/i18n/ja/LC_MESSAGES
ここある
FormEncode.mo FormEncode.po
が使用されます。

このファイルを変更してもよいのですが、お手軽にメッセージを
変更するには、検証ルールにmessagesの辞書を渡せばOKです。

例えばformencode.validators.URLでドメインが不正な場合の
メッセージを変更したい場合には、

my_messages = {'noTLD':u"完全なドメイン名を入力してください(例えば %(domain)s.co.jp)"}
document = formencode.validators.URL(messages=my_messages)


こうしてやることで、日本語のメッセージが表示されるようになります。

※メッセージに指定するキーは
for key in formencode.validators.URL._messages:
    print key

で確認できます。

この方法だと、

my_messages = {'noTLD':u"完全なドメイン名を入力してください(例えば %(domain)s.co.jp)"}
my_messages2 = {'noTLD':u"完全なドメイン名を入力してね"}

document = formencode.validators.URL(not_empty=True,messages=my_messages)
document2 = formencode.validators.URL(not_empty=True,messages=my_messages2)


とすることで、同じ検証クラスでもエラー時、個別のメッセージを
出力させることが可能です。


サイト全体でメッセージを共通化したい場合は、
翻訳用のファイルを作り、指定する方法があるようです。

テストとして
/usr/local/lib/python2.5/site-packages/FormEncode-1.2.1-py2.5.egg/formencode/i18n/my/LC_MESSAGES
というフォルダを作成し、そこへja/LC_MESSAGES/FormEncode.poをコピーします。

FormEncode.poの内容を編集して、

msgfmt -c --statistics FormEncode.po -o FormEncode.mo


として、翻訳ファイルをビルドします。

検証クラス(model/form.py)で

formencode.api.set_stdtranslation(domain="FormEncode",languages=["my"])


架空の言語「my」を翻訳するようしていすると、先ほど作成した
翻訳ファイルを使用してエラーメッセージが出力されるようになります。

※本当は、domainに「MyFormEncode」をしていしてja/LC_MESSAGES/MyFormEncode.moを
作成する。とした方がよいのでしょうが、動いてくれませんでした。


【参考URL】
http://www.formencode.org/Validator.html
Localization of Error Messages (i18n)

Pythonでgettextを使用してNLSによるメッセージの国際化を行う





もどる