読者です 読者をやめる 読者になる 読者になる

Makoのテンプレートから国際化対象文字列を抽出する

Babel

Babelを使って、Makoのテンプレートから国際化対象文字列を抽出する。基本的にはMakoのドキュメントに書いてある通りだが、Babelの設定ファイルのextractorsセクションでextractメソッドを指定しなくてはいけないということに気がつかず、かなりはまった。

http://www.makotemplates.org/docs/usage.html#usage_common_babel


templatesというディレクトリにMakoテンプレートを置いておくとすると、こんな感じ。セクションごとに対象となるファイルのエンコーディングを指定できるので、Pythonコードがutf8で、テンプレートがSJIS(cp932)というケースでも対処できる。

[extractors]
mako = mako.ext.babelplugin:extract

[python: **.py]
input_encoding = utf8

[mako: templates/**.html]
input_encoding = cp932


実際に抽出を行うときには、この設定ファイル-Fオプションで指定して、

$ pybabel extract -F babel.cfg -o message.pot -c NOTE /path/to/myproject

のように行う。

<div id="spam">
## NOTE この英語はちょっと自信がないかも
${ _('Hello World') }
</div>

のように## NOTE(-cオプションで指定した文字列)で翻訳対象文字列へのコメントを着けることができる。このテンプレートをpybabel extractにかけると、potは次のようになる。

#. この英語はちょっと自信がないかも
#: templates/index.html:3
msgid "Hello World"
msgstr ""