gettextで日本語化の検討(1)
gettextを用いて、wxPythonで作る画面を日本語化したい。
まず、Linuxでやってみる。例えば、プログレスバーを表示するだけの例なのだが、下記のソースがある。ファイル名はprogress.pyとする。
import wx if __name__ == "__main__": app = wx.PySimpleApp() progressMax = 15 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()
このコードを実行すると、ダイアログにプログレスバーが表示されて15秒後に自動的に閉じる。
ソースコードの変更
日本語化するための変更点は、
- import gettext以降、3行を加える。
- 日本語にする文字列を_()で囲む。この例では2箇所。
変更後のソースコードは、
import wx import gettext t = gettext.translation('progress', './locale') _ = t.ugettext if __name__ == "__main__": app = wx.PySimpleApp() progressMax = 15 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()
poファイルの作成と編集
pygettext(自分の環境では、コマンドとして既に使える状態であった)を使って、poファイルを作成する。
$ pygettext -o ja.po progress.py
作成されたja.poファイルを編集する。下記のように赤字の部分を修正した。
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2010-12-21 09:40+JST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: japanese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: ENCODING\n" "Generated-By: pygettext.py 1.5\n" #: progress.py:14 msgid "A progress box" msgstr "プログレスバー表示" #: progress.py:15 msgid "Time remaining" msgstr "残り時間"