🐡

つぶやきpybabel

2021/04/14に公開

pybabelとは

  • Djangoなど、Pythonベースのアプリケーションで国際化のロケール別カタログを管理するツールです。
  • 言い換えるなら、「アプリケーションのこの部分は英語ではこう、日本語ではこう表示するよ」ということをあれこれやってくれるという感じです。
  • 登場人物はPOTファイル・POファイル・MOファイルの3人。ざっくりいうと、<u>Pythonファイル(.py)からPOTファイル(.pot)をつくり、POTからPO(.po)を、POからMO(.mo)を</u>、という流れです。

pybabelコマンド

$ pybabel (コマンド) [オプション] [引数]

extract

  • .pyファイルから.potファイルを生成するためのコマンドです。
  • 指定したディレクトリ以下を再帰的に検索し、.pyファイルに含まれる "_(...)"の内容を抽出します。
  • 例えば以下の例では、.potファイルには "ABCDE" という文字列が記載されます。
_('ABCDE')

使用例:

# -o オプションで.potファイル名を指定(デフォルトはmessages.pot)
$ pybabel extract --input-dirs=sample/src -o hoge.pot

init

  • .potファイルから.poファイルを生成するためのコマンドです。
  • オプションでドメイン名、ロケール名(言語名)、入力ファイルパス、出力ディレクトリなどを指定できます。
# -lオプション:ロケール名
# -iオプション:入力ファイルパス
# -dオプション:出力ディレクトリ
$ pybabel init -l ja -i hoge.pot -d ./sample_app/translations

compile

  • 国際化定義情報をバイナリファイルにコンパイルします。
  • ファイル拡張子で言うと、.poファイルを基にして .moファイルを生成します。
# -dオプションでコンパイル元のファイルがあるディレクトリを指定します
$ pybabel compile -d ./sample_app/translations

update

  • .potファイルの変更内容を .poファイルに反映します。
  • イメージとしては <u>"init" で初回の.poファイル生成、それ以降の更新は "update" で</u>、という感じです。
# -iオプションで .potファイルのパスを指定します
$ pybabel update -i hoge.pot -d ./website/translations

参考

Discussion