#環境
Ubuntu 14.04.4 LTS
Python 3.5.1
Django 1.9.7
#前提条件
- Djangoが日本語環境で動いていること
以下の手順を行うことで、翻訳ファイルを用意すればブラウザの言語環境に合わせて、言語が自動選択されるようになります。
追記:Django1.9 で表示される言語を切り替える
こちらの手順を行うことで、言語をpathで切り替えることができるようになります。
#手順
##settings.pyの変更
-
MIDDLEWARE_CLASSES に
'django.middleware.locale.LocaleMiddleware',
を追記
-
ファイルに以下を追記
settings.pyLOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'), )
##templateの変更
-
{% load i18n %}
を追記 - 翻訳したい箇所を
{% trans 'hoge' %}
のように変更- 翻訳データがない場合には
hoge
が表示されます
- 翻訳データがない場合には
##翻訳リストファイルの作成
-
コマンドラインで以下を実行(英語から日本語の場合)
mkdir /DJANGO_BASE_DIR/locale django-admin.py makemessages -l ja
- 実行すると
/DJANGO_BASE_DIR/locale/ja/LC_MESSAGES/django.po
が作成される
- 実行すると
-
生成されたdjango.po の編集
django.po#: path/to/template/index.html:4 msgid "hoge" msgstr ""
このようにtemplateで
{% trans 'hoge' %}
等と指定した箇所のファイル名と行番号を含めたファイルが用意されるので、 msgstrに翻訳後の文字列を指定します。
##翻訳ファイルのコンパイル
-
コマンドラインで以下を実行
python manage.py compilemessages
- 実行するとコンパイル済みの
/DJANGO_BASE_DIR/locale/ja/LC_MESSAGES/django.mo
が作成される
- 実行するとコンパイル済みの
##追記:言語設定検出の優先順位(公式ドキュメントの内容を転記)
-
はじめに、リクエストされた URL に言語プレフィックスを探します。これはルート
URLconf
でi18n_patterns
関数を使った場合だけ行われます。 参照:Django1.9 で表示される言語を切り替える -
現在のユーザのセッションに
django_language
キーがない か探します。 -
クッキーを探します。クッキーの名前は
LANGUAGE_COOKIE_NAME
設定の値がセットされます。 (デフォルトの名前はdjango_language
です。) -
Accept-Language HTTP ヘッダを見ます。このヘッダは ブラウザから送られ、ユーザの望む言語を優先度順に伝えます。 Djangoは利用可能な翻訳が見つかるまで、渡された全ての言語を調べます。
-
それも失敗したら、グローバルな
LANGUAGE_CODE
設定を使います。