Pythonで国際化した(ソースコードと国際化用ファイルのディレクトリを分けた)。
Hello World!!
をこんにちは世界!
へ置き換える等。
- http://d.hatena.ne.jp/fgshun/20100319/1269004530
- https://docs.python.jp/3/library/gettext.html
- https://ja.wikipedia.org/wiki/ISO_639-1%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7
$ 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']:
- src/
- main.py
- res/
- i18n/
- languages/
- de/
- LC_MESSAGES/
- hello.mo
- LC_MESSAGES/
- en/
- LC_MESSAGES/
- hello.mo
- LC_MESSAGES/
- ja/
- LC_MESSAGES/
- hello.mo
- LC_MESSAGES/
- de/
- hello_de.po
- hello_en.po
- hello_ja.po
- messages.pot
- msgfmt.py
- pygettext.py
- languages/
- i18n/
- コードを書く
- 以下のファイルを入手する
$ 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 !!
でなくこんにちは世界!
と表示されたら成功
main.py
#!python3.6
import gettext
import pathlib
langPath = str(pathlib.Path('../res/i18n/languages').resolve())
gettext.install('hello', langPath)
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', langPath, 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']:
- domain:
hello.mo
ファイルと同じ名前にする(拡張子をとる) - localedir:
(ここで指定したディレクトリ)/ja/LC_MESSAGES/hello.mo
- fallback: moファイルが見つからない場合そのまま実行する
_(...)
で囲った文字列が翻訳対象となる
poファイルのヘッダ部分はこちらを参照。
msgstr ""
の部分をそれぞれ翻訳して埋める。以下、日本語用ファイルの場合。
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2017 ytyaru
# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
"POT-Creation-Date: 2017-09-15 08:30+0900\n"
"PO-Revision-Date: 2017-09-15 08:31+0900\n"
"Last-Translator: ytyaru <EMAIL@ADDRESS>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: main.py:5
msgid "Hello World !!"
msgstr "こんにちは世界!"
#: main.py:15
msgid "Welcome i18n !!"
msgstr "ようこそ i18n へ!"
- Linux Mint 17.3 MATE 32bit
- pyenv 1.0.10
- Python 3.6.1
- pygettext.py
- msgfmt.py
Library | License | Copyright |
---|---|---|
http://code.activestate.com/recipes/65207/ | PSF | Copyright (c) 2001 Python Software Foundation; All Rights Reserved |