Skip to content

ytyaru/Python.i18n.201709151022

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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

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

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages