python i18n on windows
wxPythonの調査途上 まずは純粋にpythonのgettextで
i18n.pyの中身
import gettext import locale import os,sys if __name__=="__main__": #ref http://wiki.wxpython.org/Internationalization # and http://www.learningpython.com/2006/12/03/translating-your-pythonpygtk-application/ domain ='i18n' # which normally is the application name local_path = os.path.realpath(os.path.dirname(sys.argv[0])) lc, encoding = locale.getdefaultlocale() langs = [lc] language = os.environ.get('LANGUAGE', None) # -- begin debug print "(language code, encoding) =",lc, encoding print 'language = ',language print "textdomain() = ",gettext.textdomain() print "domain,local_path,langs=",domain,local_path,langs # -- end debug if gettext.find(domain,local_path,languages=langs)==None: print 'not mo',path exit() else: print 'found mo' t=gettext.translation(domain,local_path ,languages=langs, fallback=True) _=t.ugettext print _("test") print _("test2")
に対して
pygettext.py i18n.py
とやると messages.potができる
これを
copy messages.pot ja.po
とでもする
これでportable objectができた
ja.poの一部
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR, YEAR.
#
msgid ""
msgstr ""
(中略)
"Content-Type: text/plain; charset=Shift_JIS\n"
(中略)
msgid "test"
msgstr "試験"
msgid "test2"
msgstr "てすと"
などと編集する
そのja.poに対して
msgfmt.py ja.po
とやると ja.moができる
これがmachine objectファイルと呼ばれるらしい
ja.moを .\ja_JP\LC_MESSAGES以下に置いて 名前をi18n.pyに変更する
実行
i18n.py
結果
local_path = D:\i18n
(language code, encoding) = ja_JP cp932
language = None
textdomain() = messages
domain,local_path,langs= i18n D:\i18n ['ja_JP']
found mo
試験
てすと
poファイルのマージのやり方や そもそもja_JPに限定してしまってLinuxでちゃんと翻訳してくれるのか といった問題はあとで考える
ref
Internationalization - wxPyWiki
http://wiki.wxpython.org/Internationalization
learning python » Blog Archive » Translating your Python/PyGTK application
http://www.learningpython.com/2006/12/03/translating-your-pythonpygtk-application/
21.1 gettext -- 多言語対応に関する国際化サービス
http://www.python.jp/doc/release/lib/module-gettext.html
wxWidgets でクロスプラットフォーム GUIアプリを作ろう
http://0xcc.net/pub/uu-2004-08/