Django-1.4.3で国際化対応
2013年1月28日
Djangoの国際化(internationalization)対応の手順まとめ
大体は、ドキュメントに書いてあるっしょ?という内容なんですが、
あまり読まないでやったら自業自得で各所でハマったのでメモっときます
環境は、Django-1.4.3, Python-2.7.3, Mac OSX(Mountain Lion), Homebrew
xgettextを有効にする
brew install gettext brew link gettext
- たぶん、installは済みだと思う
- brew link gettext は sudo 付きで行っている記事を多く見かけましたが、逆にそれでやったら怒られた
settings.py
LANGUAGE_CODE = 'en-us'
gettext = lambda s: s
LANGUAGES = (
('en', gettext('English')),
('ja', gettext('Japanese')),
)
LOCALE_PATHS = (
PROJECT_ROOT + '/locale',
)
メッセージファイルの作成、コンパイル
まず、事前に一カ所で良いので _() や {% trans %} で、翻訳をする文言を定義してください
これをひとつでも行っておかないとメッセージファイルが作られませんでした
これをひとつでも行っておかないとメッセージファイルが作られませんでした
cd /path/to/project_root mkdir locale django-admin.py makemessages -l ja # .poファイルを生成 django-admin.py compilemessages # .moファイルを生成 processing language ja tree locale # 2ファイル作成されていることを確認 locale └── ja └── LC_MESSAGES ├── django.mo └── django.po
- 自分の場合、makemessages を実行したら "Error: errors happened while running xgettext on xxxx.py" というエラーが出ました。
これは Python ファイル1行目の文字コード指定を "coding: utf8" と "utf8" で指定していたために発生したエラーで、"utf-8" に修正したら直りました - compilemessages は、環境によっては –settings を指定しないと動かないかも
- 少なくともDjango開発サーバを使っている場合は、.moファイル生成・変更時にはWebサーバを再起動して下さい
動作確認
ブラウザの言語設定を日本語と英語で変えて、翻訳されたりされなかったりするのを確認します
動かなかったら、以下を確認して下さい
動かなかったら、以下を確認して下さい
- HTTPリクエストヘッダの Accept-Language を確認する
- コチラの手順通りにデバッグ