gymnoの自由談

音楽系、プログラミング系の内容 方針はいずれ

python i18n on windows

wxPythonの調査途上 まずは純粋にpythongettext


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/