i18n_patterns を使用して、URL に言語コードを含めるようにします。
Djangoの構成は下記の通りです。
$ mkdir /example
$ cd /example
$ django-admin startproject mysite
$ cd mysite
$ python manage.py startapp myapp
Django の setting.py(/example/mysite/mysite/setting.py)に下記の設定を入れます。
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',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
from django.utils.translation import ugettext_lazy as _
LANGUAGES = [
('en', _('English')),
('ja', _('Japanese')),
]
USE_I18N = True
urls.py (/example/mysite/myapp/urls.py)に下記の設定を入れます。
from django.contrib import admin
from django.urls import include,path
from django.conf.urls.i18n import i18n_patterns
urlpatterns = i18n_patterns(
path('admin/', admin.site.urls),
path('myapp', include('myapp.urls')),
prefix_default_language=False
)
プロジェクト mysite に localeディレクトリを作成
$ cd /example/mysite
$ mkdir myapp/locale
makemessages コマンドで日本語と英語の翻訳をファイルを作成します。
$ python manage.py makemessages -l ja
$ python manage.py makemessages -l en
下記ファイルが生成されます。
- /example/mysite/mayapp/locale/ja/LC_MESSAGES/django.po
- /example/mysite/mayapp/locale/en/LC_MESSAGES/django.po
poファイルの中身は下記のようになります。
myapp/model.py のclass Metaのカラムに「tel = models.CharField(_(‘tel’), max_length=15)」を指定しておくと、下記のように該当ファイル:行数、msgid、msgstrが自動生成されました。
#: myapp/models.py:43
msgid "tel"
msgstr ""
msgstrは自動生成された段階では空文字なので、ここに日本語と英語それぞれ表示したい内容を追記します。
poファイルの編集が終ったら、django.po ファイルをコンパイルして django.mo ファイルを作成します。moファイルはpoファイルと同じ階層に作成されます。
$ python manage.py compilemessages
templatesの中で、 i18n をloadして、htmlファイルに trans を指定することで多言語対応ができます。
{% load i18n %}
{% trans 'tel' %}
英語を表示したい場合は、URLのドメインの後ろに「/en/」を挿入してください。