旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

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

settings.py

LANGUAGE_CODE = 'en-us'

gettext = lambda s: s
LANGUAGES = (
    ('en', gettext('English')),
    ('ja', gettext('Japanese')),
)

LOCALE_PATHS = (
    PROJECT_ROOT + '/locale',
)
  • 英語をベースにして、日本語に対応するという、二カ国語対応の例です
  • lambda の部分は、ココとか、ココに書いてあるのをそのまま使いました、詳細不明スマソ
  • PROJECT_ROOT は別途定義済みとします

メッセージファイルの作成、コンパイル

まず、事前に一カ所で良いので _() や {% 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 を確認する
  • コチラの手順通りにデバッグ