pybabelコマンドの引数が多くて煩雑だったので。
成果物
Python.i18n.Babel.201709151638
前回
コマンドの引数が多くて面倒。ドメイン名やパスなど自動管理してくれない。
今回
- pybabelコマンドを半自動実行するshスクリプトを作った
- msgidが重複したときの挙動を確認した
shスクリプトを作成した
./res/i18n/babel.sh
いちいちコマンドや引数を確認しながら打つ必要がなくなる。
msgidが重複したときの挙動を確認した
pybabelを使うと複数ファイルの.py
から.pot
を生成できる。ファイル内を見てみると全ファイルのmsgid
, msgstr
がある。異なる.py
ファイルにあったメッセージで、msgid
が重複していたらどうなるのか。疑問に思ったので試してみた。
同じmsgid
(MessageID)を使った場合、出力されるpot
ファイルのmsgstr
は1箇所だけ。コメントにファイルパスが複数書かれる。実行結果はそのmsgid
に対応するmsgstr
に置き換えられるだけ。
実行例
.py
→.pot
→(翻訳)→.po
→.mo
の流れ。grepで翻訳が必要な箇所を表示している。
$ bash babel.sh Python 3.6.1 pybabel 2.5.1 Python, Babelコマンド準備完了。 extracting messages from ../../src/main.py extracting messages from ../../src/sub.py extracting messages from ../../src/mypackage/mymodule.py writing PO template file to hello.pot .pyファイルから.potファイルを生成しました。 updating catalog ./languages/de/LC_MESSAGES/hello.po based on hello.pot updating catalog ./languages/en/LC_MESSAGES/hello.po based on hello.pot updating catalog ./languages/ja/LC_MESSAGES/hello.po based on hello.pot .potファイルから.poファイルを生成(更新)しました。 -------------------- ./languages/de/LC_MESSAGES/hello.po-6-msgid "" ./languages/de/LC_MESSAGES/hello.po:7:msgstr "" -- ./languages/de/LC_MESSAGES/hello.po-22-msgid "MSG000" ./languages/de/LC_MESSAGES/hello.po:23:msgstr "" -- ./languages/de/LC_MESSAGES/hello.po-26-msgid "Good Luck !" ./languages/de/LC_MESSAGES/hello.po:27:msgstr "" -- ./languages/en/LC_MESSAGES/hello.po-6-msgid "" ./languages/en/LC_MESSAGES/hello.po:7:msgstr "" -- ./languages/en/LC_MESSAGES/hello.po-22-msgid "MSG000" ./languages/en/LC_MESSAGES/hello.po:23:msgstr "" -- ./languages/en/LC_MESSAGES/hello.po-26-msgid "Good Luck !" ./languages/en/LC_MESSAGES/hello.po:27:msgstr "" -- ./languages/ja/LC_MESSAGES/hello.po-6-msgid "" ./languages/ja/LC_MESSAGES/hello.po:7:msgstr "" -- ./languages/ja/LC_MESSAGES/hello.po-26-msgid "Good Luck !" ./languages/ja/LC_MESSAGES/hello.po:27:msgstr "" -------------------- .poファイルにあるmsgstrが空値の箇所は以上です。翻訳して埋めてください。完了したらENTERキーを押下してください。 compiling catalog ./languages/de/LC_MESSAGES/hello.po to ./languages/de/LC_MESSAGES/hello.mo compiling catalog ./languages/en/LC_MESSAGES/hello.po to ./languages/en/LC_MESSAGES/hello.mo compiling catalog ./languages/ja/LC_MESSAGES/hello.po to ./languages/ja/LC_MESSAGES/hello.mo moファイルの作成と配置が完了しました。終了します。
所感
本当は翻訳も自動化したい。Babelのライブラリで関数やフレームワークがないか調べてみるか。