やってみる

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

Pythonで国際化した(日本語、英語、ドイツ語を動的に変更)

3ヶ国語を用意してみた。実行中に任意の言語で表示する。

成果物

GitHubPython.i18n.201709150804

前回

ソースコード

実行結果

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。

手順

  1. コードを書く
  2. 以下のファイルを入手する
  3. $ python pygettext.py main.pymessages.potファイルが出力される
  4. messages.potファイルをコピーしてhello_ja.poにリネームする
  5. hello_ja.poの項目を任意に埋める(msgstr ""msgstr "こんにちは世界!"とする等)
  6. $ python msgfmt.py hello_ja.pohello_ja.moファイルが出力される
  7. ./ja/LC_MESSAGES/hello.moに配置する(ファイル名から_jaをとる(gettext.install()の第一引数と同一名にする))
  8. $ python main.pyを実行してHello World !!でなくこんにちは世界!と表示されたら成功

基本的に前回と同じ。各言語ごとに、po, moファイルを作成し、配置する。Google翻訳したテキストをpoファイルにコピペした。ドイツ語わからないし。

言語コードこちらを参考にした。

所感

pot, po, mo, mo用ディレクトリ, が増えてきた。コードとは別にしたい。