Pythonで国際化した(日本語、英語、ドイツ語を動的に変更)
3ヶ国語を用意してみた。実行中に任意の言語で表示する。
成果物
前回
ソースコード
実行結果
main.py
#!python3.6 import gettext import os gettext.install('hello', os.path.join(os.path.dirname(__file__))) print(_('Hello World !!')) langs = ['ja', 'en', 'de'] lang = 'ja' while lang: print(f'言語コードを入力してください(未入力+Enterで終了) {langs}: ', end='') lang = input() if lang not in langs: continue l = gettext.translation('hello', os.path.join(os.path.dirname(__file__)), languages=[lang]) l.install() print(_('Welcome i18n !!'))
一部日本語なのは手抜き。そこはシステム言語にするのが理想だと思うが、少し面倒になりそうなので固定にした。
$ python main.py こんにちは世界! 言語コードを入力してください(未入力+Enterで終了) ['ja', 'en', 'de']: de Willkommen bei i18n! 言語コードを入力してください(未入力+Enterで終了) ['ja', 'en', 'de']: en Welcome to i18n ! 言語コードを入力してください(未入力+Enterで終了) ['ja', 'en', 'de']: ja ようこそ i18n へ! 言語コードを入力してください(未入力+Enterで終了) ['ja', 'en', 'de']:
3ヶ国語のWelcome。
手順
- コードを書く
- 以下のファイルを入手する
$ python pygettext.py main.py
でmessages.pot
ファイルが出力されるmessages.pot
ファイルをコピーしてhello_ja.po
にリネームするhello_ja.po
の項目を任意に埋める(msgstr ""
をmsgstr "こんにちは世界!"
とする等)$ python msgfmt.py hello_ja.po
でhello_ja.mo
ファイルが出力される./ja/LC_MESSAGES/hello.mo
に配置する(ファイル名から_ja
をとる(gettext.install()の第一引数と同一名にする
))$ python main.py
を実行してHello World !!
でなくこんにちは世界!
と表示されたら成功
基本的に前回と同じ。各言語ごとに、po, moファイルを作成し、配置する。Google翻訳したテキストをpoファイルにコピペした。ドイツ語わからないし。
所感
pot, po, mo, mo用ディレクトリ, が増えてきた。コードとは別にしたい。