Djangoで他の人が作ったモジュールを使ってると、英語のメッセージが入ってることがあるので、日本語化してみた。とりあえず英語のメッセージを日本語に変換するとこまで。

準備

gettextが無かったらインストール。Ubuntuの場合

$ sudo aptitude install gettext

プロジェクトにlocaleフォルダを作る。無いと後のコマンドでエラーが出た

poファイル作成

おもむろにpoファイルを作るコマンドを実行

django-admin.py makemessages -l ja

するとpath/to/locale/ja/LC_MESSAGES/django.poってファイルが出来るので、それを修正していく。ただ、このコマンドプロジェクト内だけ捜査してファイルを作るみたいで、外部モジュールの場合、上手く読み取ってくれなかった。

今回はvirtualenvでpipしたdjango-allauthのテンプレートを日本語化したかったので、path/to/virtualenv/dir/lib/python2.7/site-packages/allauth/templates/account/内のファイルを全部path/to/project/templates/account/にコピーしてからコマンド実行すると上手く読み取ってくれた。

翻訳

出来たpoファイルを編集すればオッケー。ファイル内でmsgid以下に書いてあるのが元の文、その次のmsgstr以下に文章書くと、翻訳文になる。元の英文に何かパラメーター付いてる場合は必ずパラメーターを翻訳文に設定しないとエラーが出る。

#: path/to/python/module.py:23
msgid "Welcome to my site."
msgstr "いらっしゃーい"

moファイル作成

おもむろにコマンドを実行するとmoファイルが出来る

django-admin.py compilemessages

settings.pyの設定

これだけで動くと思ったら動かなかったので色々調べてみたらLOCALE_PATHSを設定しないといけなかった。

# settings.py
LOCALE_PATHS = (
    "path/to/locale",
)

これ設定しておいたらちゃんと動いた。

あとは普通にrunserverとかでサーバ起動したら翻訳されてる

参考:翻訳 — Django 1.4 documentation

翻訳したい文字列をマークする方法とかはリンク見れば分かる。あと、使いたい言語を選択出来るようにするとかそういう場合はLocaleMiddlewareを使うとかなんとかあるみたいだけどやってない。