[Python] Django ロケールファイルを追加して日本語メッセージを変更する

この記事について

PythonのWebアプリケーションフレームワーク「Django」についての解説記事です。

Djangoのエラーメッセージや管理サイトの見出しを、アプリの内容や使うユーザーに合わせて変更したいなと思うときがあります。

そのような場合はロケールファイルの追加で対応すると楽です。日本語の見出しやメッセージを上書き変更することができます。

作業手順

手順1.gettextのインストール

Djangoのロケールファイルはバイナリファイルです(.mo)。対になるテキストファイルをコンパイルして作成します(.po)。コンパイル用のツール「gettext」はpythonのパッケージとして提供されていないので、別途インストールが必要です。

WindowsはDjango公式サイトのリンクからダウンロードサイトへ移動できます。
https://docs.djangoproject.com/en/2.0/topics/i18n/translation/#gettext-on-windows

Macはこちらが参考になるでしょう。
Macで翻訳ファイル*.poをmo形式に変換する

インストール後に「msguniq.exe」を実行するパスを追加する必要があります。Windowsならインストーラーのオプションで指定すればOKです。

手順2.設定変更

settings.pyに設定を追加します。

setting.py
LANGUAGE_CODE = 'ja'

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

プロジェクト直下にロケールファイル用のディレクトリを作成する準備ができました。

手順3.ロケールファイル作成

ここでは例として管理画面のタイトルを変更してみたいと思います。

ビルトインアプリ「admin」のディレクトリcontrib/admin/localeをプロジェクト直下にコピーします。言語ごとに大量のフォルダが存在するのでja以外は削除してしまいましょう。現時点でこのような構造になります。

project_root
  └locale
    └─ja
        └─LC_MESSAGES
              django.mo
              django.po
              djangojs.mo
              djangojs.po

手順4.ロケールファイルの編集とコンパイル

コピーした拡張子「.po」をファイルで開きましょう。テキスト形式の翻訳ファイルとなっています。上の方に翻訳者の名前がありますね。テンプレートを調べて修正対象のmsgidを割り出し、msgstrを変更しましょう。

ちなみに追加したロケールファイルの内容は、ヘッダ部分と対象IDのところだけでOKです。admin以外で変更したい場所があったらここに追加で加えていきましょう。

django.po
msgid ""
msgstr ""
"Project-Id-Version: django\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-19 16:49+0100\n"
"PO-Revision-Date: 2017-09-19 16:41+0000\n"
"Last-Translator: (省略)"
"Language-Team: Japanese (http://www.transifex.com/django/django/language/"
"ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ja\n"
"Plural-Forms: nplurals=1; plural=0;\n"


msgid "Django administration"
msgstr "ここを変更します"

ファイルを保存して以下のコマンドを実行します。

[要gettext]

manage.py compilemessages -l ja

コンパイルの完了後にアプリケーションを起動しましょう。
対象のメッセージの表示が置き換わっているはずです。

image.png

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.