9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Django 1.9 で国際化対応

Last updated at Posted at 2016-06-22

#環境
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.py
    LOCALE_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 が作成される

##追記:言語設定検出の優先順位(公式ドキュメントの内容を転記)

  1. はじめに、リクエストされた URL に言語プレフィックスを探します。これはルート URLconfi18n_patterns 関数を使った場合だけ行われます。 参照:Django1.9 で表示される言語を切り替える

  2. 現在のユーザのセッションに django_language キーがない か探します。

  3. クッキーを探します。クッキーの名前は LANGUAGE_COOKIE_NAME 設定の値がセットされます。 (デフォルトの名前は django_language です。)

  4. Accept-Language HTTP ヘッダを見ます。このヘッダは ブラウザから送られ、ユーザの望む言語を優先度順に伝えます。 Djangoは利用可能な翻訳が見つかるまで、渡された全ての言語を調べます。

  5. それも失敗したら、グローバルな LANGUAGE_CODE 設定を使います。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?