やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

pybabelコマンドを半自動実行するshスクリプトを作った

pybabelコマンドの引数が多くて煩雑だったので。

成果物

GitHubPython.i18n.Babel.201709151638

前回

コマンドの引数が多くて面倒。ドメイン名やパスなど自動管理してくれない。

今回

  • pybabelコマンドを半自動実行するshスクリプトを作った
  • msgidが重複したときの挙動を確認した

shスクリプトを作成した

./res/i18n/babel.sh

  • pypot→(翻訳)→pomoの生成をスクリプト化した
    • (翻訳とその入力は手作業である)
    • poが既存なら更新、未だ無いなら新規作成する
  • poファイル内をgrep検索して未翻訳箇所を表示する

いちいちコマンドや引数を確認しながら打つ必要がなくなる。

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のライブラリで関数やフレームワークがないか調べてみるか。