Pylons 0.9.7 で 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によるメッセージの国際化を行う