trybeetle

take it slow!!

DjangoのTranslation機能


Posted on Feb. 6, 2018, 9:15 a.m.



django多言語化ステップ

Djangoプロジェクトで日本語だけでなく、英語でも表示させたいとき、djangoのTranslation機能を使う。

まず、準備としてgettextをインストールする。


  apt-get install gettext

settings.pyの編集

MIDDLEWAREの部分にlocaleの行を加える

'django.middleware.locale.LocaleMiddleware',

locale_pathの設定として、settings.pyの最下部に記載


  LOCALE_PATHS = (
  os.path.join(BASE_DIR, 'locale'),
  )

現状ではすべての言語選択が対象となってしまうので、とりあえず、日本語と英語に絞る


  from django.utils.translation import ugettext_lazy as _
  
  LANGUAGES = [
  ('ja', _('Japanese')),
  ('en', _('English')),
  ]

localeディレクトリの作成

locale_pathをBASE_DIRとしているので、そこにlocaleディレクトリを作成


  mkdir locale

urls.pyの編集

urls.pyのurlpatternsに下記を追加


  url(r'^i18n/', include('django.conf.urls.i18n')),

言語選択後、URLに/enや/jaなどと表示させたい場合


  from django.conf.urls.i18n import i18n_patterns
  ......
  urlpatterns += i18n_patterns(
  url(r'', include('app.urls')),
  )

※上記、application名をappとした場合


htmlファイルの編集

対象のhtmlの頭に下記埋め込んでおく。base.htmlもextendsさせたhtmlも


  {% load i18n %}

翻訳対象の文章を下記のようtransで囲う


  

{% trans 'This is the title' %}

{% trans 'This is the paragraph' %}

html内に言語切替のformを設定


  
{% csrf_token %}

少しフォームを整えてみる

bootstrapで少し飾りつけ
・selectのclassをclass="form-control form-control-sm"
・selectした段階でsubmitする様にselectにonChange="this.form.submit()"を追加


{% csrf_token %}

翻訳ファイルの作成

まず、日本語の翻訳ファイルを作成します


  django-admin.py makemessages -l ja

englishの翻訳ファイルを作成します。


  django-admin.py makemessages -l en

ja, enそれぞれのディレクトリ配下に、django.poファイルがあるので、msgstrの""内に翻訳を記載する


翻訳ファイルの反映

django.poの編集が完了したら、compilemessagesコマンドを投入


  django-admin.py compilemessages

以上、translation機能の設定でした。


追記

makemessages を実行しようとしたところ、下記のエラーが出力されました。


xgettext: ./myprojectenv/lib/python3.5/site-packages/pip/_vendor/webencodings/__init__.py:1: Unknown encoding "utf8". Proceeding with ASCII instead.

gettextではdjangoのutf8が通用しない様です。下記の3ファイルの初めの1行を書き換えました。


vi ./myprojectenv/lib/python3.5/site-packages/pip/_vendor/webencodings/__init__.py
vi ./myprojectenv/lib/python3.5/site-packages/pip/_vendor/webencodings/tests.py
vi ./myprojectenv/lib/python3.5/site-packages/pip/_vendor/webencodings/x_user_defined.py

修正前


# coding: utf8

修正後


# coding: utf-8

Category:django
Tag: django
Feb. 6, 2018, 9:15 a.m.

Comments