Pythonで国際化した(ソースコードと国際化用ファイルのディレクトリを分けた)。
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
res/i18n
src
LICENSE.txt
ReadMe.md

ReadMe.md

このソフトウェアについて

Pythonで国際化した(ソースコードと国際化用ファイルのディレクトリを分けた)。

Hello World!!こんにちは世界!へ置き換える等。

参考

実行

$ 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
        • en/
          • LC_MESSAGES/
            • hello.mo
        • ja/
          • LC_MESSAGES/
            • hello.mo
      • hello_de.po
      • hello_en.po
      • hello_ja.po
      • messages.pot
      • msgfmt.py
      • pygettext.py

手順

  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 !!でなくこんにちは世界!と表示されたら成功

main.py

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ファイルのヘッダ部分はこちらを参照。

hello_ja.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 へ!"

開発環境

ライセンス

Library License Copyright
http://code.activestate.com/recipes/65207/ PSF Copyright (c) 2001 Python Software Foundation; All Rights Reserved