この記事では、Pythonの翻訳機能について記載します。
GNU gettext
Djangoの多言語機能を使うためには、GNU gettextパッケージが必要。
gettextパッケージは、Pythonだけではなく、他の言語等でも使用されている。
gettext モジュールは、 Python のモジュールやアプリケーションの国際化 (I18N, I-nternationalizatio-N) および地域化 (L10N, L-ocalizatio-N) サービスを提供します。 このモジュールは GNU gettext メッセージカタログの API と、より高水準で Python ファイルに適しているクラス形式の API の両方をサポートしてます。
`https://docs.python.org/ja/3/library/gettext.html#module-gettext`
このパッケージには、標準で翻訳に使えるメソッドが豊富にある。
以下の公式ドキュメントに、以下のように各メソッドについての詳細が記載されている。
gettext.gettext(message)
現在のグローバルドメイン、言語、およびロケールディレクトリに基づいて、 message の地域化された訳文を返します。 通常、この関数はローカルな名前空間にある _() という別名を持ちます (下の例を参照してください)。
`https://docs.python.org/ja/3.7/library/gettext.html`
po、mo、potファイルについて.
翻訳を行うにあたって、以下のファイルを使用する必要がある。
.potファイル
poの元になるファイル(テキストファイル)
.poファイル
potファイルに翻訳文を記入したファイル
.moファイル
poファイルからgettextにより作成されたバイナリファイル。
- poファイル
msgid "this is a string"
msgstr "これは文字です"
msgid
に翻訳文の元。
msgstr
に翻訳後の文。
gettextなどで、.poから.moを作成する。
- 作業手順
- gettextのインストール
- 設定変更
settings.pyに設定を追加する。
LANGUAGE_CODE = 'ja'
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
3.ローケルファイル作成
workspaceにおいては、以下にファイルがある。
workspace
- locale
- en
- LC_MESSAGES
- django.mo
- django.po
- ja
- LC_MESSAGES
- django.mo
- django.po
4.ローケルファイルの編集とコンパイル
.poファイルに追加したい翻訳を追加などする。
そして、以下のコマンドを実行する。
docker-compose run server python manage.py compilemessages -l ja
docker-compose run server python manage.py compilemessages -l en