環境

  • 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