DjangoのLANGUAGE CODEと多言語対応
環境
- Python 3.6.2
- Django 2.0.5
settings.py
1 2 3 4 5 6 7 8
| // ミドルウェアの読み込み MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', // ← 追加 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
|
1 2 3 4 5 6 7 8 9 10
| // 日本語設定 LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
USE_I18N = True
USE_L10N = True
USE_TZ = True
|
1 2 3 4
| // locale出力先 LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'), )
|
template側の設定(html)
1 2 3 4 5 6 7 8 9 10
| // load部分 {% load i18n %} // ← 追加
// LANGUAGE_CODEの取得 {% get_current_language as LANGUAGE_CODE %} // ← 追加
// 取得したLANGUAGE_CODEを出力 <!DOCTYPE HTML> <html lang="{{ LANGUAGE_CODE|default:"en-us" }}"> <head>
|
使用方法(html)
翻訳したい部分にtransで使用します。
1 2 3
| // Sample <li><a href="#">{% trans 'Sign On' %}</a></li> <li><a href="#">{% trans 'Sign In' %}</a></li>
|
翻訳語の設定(makemessages, compilemessages)
日本語のlocaleファイルを生成
1
| django-admin makemessages -l ja
|
settings.py
で設定した、locale出力先で設定したPATHに*.po
ファイルが出力されます
1 2 3 4
| [BASE_DIR]/locale/ └── ja └── LC_MESSAGES └── django.po
|
django.po
を開くと、msgid, msgstrのペアが出力されているので、日本語の文字列を追記します
1 2 3 4 5
| msgid "Sign On" msgstr "新規登録" // ← 設定
msgid "Sign In" msgstr "ログイン" // ← 設定
|
その後compilemessages
を実行
1
| python [BASE_DIR]/manage.py compilemessages
|
settings.py
で設定した、locale出力先で設定したPATHに*.mo
ファイルが出力されます
1 2 3 4 5
| [BASE_DIR]/locale/ └── ja └── LC_MESSAGES ├── django.mo └── django.po
|