DjangoプロジェクトとDjangoアプリケーションの作成
環境
Python 3.8.0
Django 3.1.6
Djangoのインストール
pip install django
Djangoプロジェクトの作成
django-admin startproject DjangoProject
下記のようにDjangoプロジェクトのファイルが作成される
DjangoProject
├── DjangoProject
│ ├── init.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
Djangoアプリケーションの作成
python manage.py startapp DjangoApp
下記のようにDjangoアプリケーションのファイルが作成される
DjangoProject
├── DjangoApp
│ ├── init.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── init.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── DjangoProject
│ ├── init.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
設定
settings.py
importの追加
import os
from django.utils.translation import gettext_lazy as _
MIDDLEWARE
'django.contrib.sessions.middleware.SessionMiddleware'
と'django.middleware.common.CommonMiddleware'
の間に‘django.middleware.locale.LocaleMiddleware’を記述する必要がある。
キャッシュ関連ミドルウェアを使う場合は、キャッシュの後に読み込ませる為にCommonMiddleware
の前に設定を記述する必要がある。
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',
]
LANGUAGE_CODEに設定されている言語は、ユーザー言語がわからない場合に使用される言語なので、多言語を取り扱う’django.middleware.locale.LocaleMiddleware’が設定されていない場合にはLANGUAGE_CODEで設定されている言語が使用される。
TEMPLATES
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'DjangoApp' / 'templates'], # ここにtemplateのディレクトリを設定
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
LANGUAGE_CODE
デフォルト言語の指定
LANGUAGE_CODE = 'ja'
LANGUAGES
言語指定配列の設定
LANGUAGES = [
('en', _('English')),
('ja', _('Japanese')),
]
LOCALE_PATHS
localeディレクトリの位置を指定。
LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'), )
翻訳ファイルディレクトリの作成
manage.pyのあるディレクトリにてlocaleディレクトリを作成
[DjangoProject]
├── [DjangoApp]
│ ├── init.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── init.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
├──[locale]
index.htmlの作成
templatesディレクトリを作成し、templatesディレクトリ直下にindex.htmlを作成する
[DjangoProject] ├── [DjangoApp] │ ├── init.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── init.py │ ├── models.py │ ├── templates │ │ └── index.html │ ├── tests.py │ └── views.py ├── manage.py ├──[locale]
{% load i18n %}
<html>
<head>
</head>
<body>
<p>{% trans 'これはぺんです。' %}</p>
</body>
</html>
views.pyの編集
from django.shortcuts import render
from django.http import HttpRequest, HttpResponse
# Create your views here.
def index(request: HttpRequest) -> HttpResponse:
return render(request, 'index.html', {})
urls.pyの編集
from django.contrib import admin
from django.urls import path
from django.conf.urls.i18n import i18n_patterns
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
]
urlpatterns += i18n_patterns(
path('', views.index, name='index'),
)
翻訳ファイル作成
django-admin makemessages -l [作成言語] -e [翻訳対象ファイル拡張子]
.htmlのファイルを対象に翻訳ファイルを作成する場合には、Djangoプロジェクトのディレクトリにてあるディレクトリにて下記のコマンドを実行
日本語翻訳ファイルを作成
django-admin makemessages -l ja -e html
localeディレクトリの直下に下記のようにjaディレクトリとその中にLC_MESSAGESディレクトリ、そしてdjango.poのファイルが作成される。
├──[locale] │ ├── [ja] │ │ ├── [LC_MESSAGES] │ │ ├── django.po
英語翻訳ファイルを作成
django-admin makemessages -l en -e html
localeディレクトリの直下に下記のようにenディレクトリとその中にLC_MESSAGESディレクトリ、そしてdjango.poのファイルが作成される。
├──[locale] │ ├── [en] │ │ ├── [LC_MESSAGES] │ │ ├── django.po
翻訳ファイルの編集
locale/en/LC_MESSAGES/django.poの編集
django.poファイルにindex.htmlの翻訳対象であるmsgid”これはぺんです。”のmsgstrに”this is a pen.”と書き込む。
#: DjangoApp/templates/index.html:6
msgid "これはぺんです。"
msgstr "this is a pen."
翻訳ファイルのコンパイル
django-admin.py compilemessages
各言語のLC_MESSAGESディレクトリ内にdjango.moファイルが作成される。
├──[locale] │ ├── [ja] │ │ ├── [LC_MESSAGES] │ │ ├── django.mo │ │ ├── django.po │ ├── [en] │ │ ├── [LC_MESSAGES] │ │ ├── django.mo │ │ ├── django.po
動作確認
Djangoプロジェクトの実行
python manage.py runserver 0:8000
WEBブラウザからのアクセス(英語)
http://localhost:8000/en/

WEBブラウザからのアクセス(日本語)
http://localhost:8000/ja/
