gettextで日本語化の検討(3)
複数ファイルからなるソースコードを日本語化する場合の方法。
xgettextでmessages.poファイルを作成するときに、引数で必要なファイルをすべて指定すればうまくいく。
(例)以下の3つのソースファイルからなるプログラムの場合
# file-name: progress.py import wx import progress_sub import setting setting.set_translation() app = wx.PySimpleApp() progressMax = 5 dialog = wx.ProgressDialog(_("A progress box"), _("Time remaining"), progressMax, style=wx.PD_ELAPSED_TIME | wx.PD_REMAINING_TIME | wx.PD_AUTO_HIDE) keepGoing = True count = 0 while keepGoing and count < progressMax: count = count + 1 wx.Sleep(1) keepGoing = dialog.Update(count) dialog.Destroy() progress_sub.sub()
# file-name: progress_sub.py import setting def sub(): setting.set_translation() print _("Success")
# file-name: setting.py import wx import os import sys import gettext def set_translation(): basepath = os.path.abspath(os.path.dirname(sys.argv[0])) localedir = os.path.join(basepath, "locale") domain = "progress" langid = wx.LANGUAGE_DEFAULT mylocale = wx.Locale(langid) mytranslation = gettext.translation(domain, localedir, [mylocale.GetCanonicalName()], fallback = True) mytranslation.install()
1番目と2番目のファイルに、日本語化したい文字列が含まれる。
xgettextでmessages.poファイルを作る。
$ xgettext *.py
こうすると、すべての*.pyファイルの中の文字列を含んだmessages.poファイルができるので、そのファイルを編集すればいい。charset=UTF-8にして、msgstrに日本語を書き込む。
msgfmtでprogress.moファイルを作る。
$ msgfmt -o progress.mo messages.po
作成したprogress.moファイルを、./locale/ja/LC_MESSAGES/に移動する。以上ですべて完了。progress.pyを実行すると、日本語化されたダイアログが表示される。