GUIアプリケーションの日本語表示と英語表示を切り替える
GUIアプリケーション上で、表示されている文字の表記を日本語と英語、どちらにも切り替えられる方法を考えてみた。例えば過去に作成した、郵便番号から住所を検索するコードの中では以下のようにして日本語表示のアプリケーションにしている。
...(コードの一部のみ表示) class MainFrame(wx.Frame): def __init__(self, id, title): width, height = 300, 100 wx.Frame.__init__(self, id, title=u"郵便番号から住所を検索", size=wx.Size(width, height)) self.Pan = wx.Panel(self, -1) Hsizer = wx.BoxSizer(wx.HORIZONTAL) Vsizer = wx.BoxSizer(wx.VERTICAL) StTxt1 = wx.StaticText(self.Pan, -1, u"郵便番号を入力してください") self.TxtCtrl = wx.TextCtrl(self.Pan, -1, "", size=(200, -1)) self.RBtn1 = wx.Button(self.Pan, -1, u"検索") self.RBtn1.Bind(wx.EVT_BUTTON, self.showAddress) ...
ウィンドウのタイトル、ボタンの上の文字、メッセージ等を日本語で直接、コードの中に埋め込んでいる。アプリケーションを英語化したい場合、日本語表記の部分を全部英語に修正するのはとても面倒な作業になる。
簡単にすべての文字列を英語にしたり、または日本語に戻したりするために、ヘッダファイル(のようなもの)にすべての文字列を定義しておくのがやはり一般的な方法のような気がする。このコードの場合だと、英語表記の文字列を定義したファイル
# coding: utf-8 #これは英語だからいらないよな # English.py windowTitle = "Zip code to Address" staticLine1 = "Input Zip code" buttonLabel = "Search" errorMessage = "Not exist in this database" messageTitle = "Result"
と、日本語表記を定義したファイル
# coding: utf-8 # Japanese.py windowTitle = u"郵便番号から住所を検索" staticLine1 = u"郵便番号を入力してください" buttonLabel = u"検索" errorMessage = u"データベースには存在しません" messageTitle = u"住所の検索結果"
を作成する。これらヘッダファイル(と呼んでいいのか、pythonではわからないが)の読み込みをif文で制御する。
例えば、下のように変数ENがTrueの場合、英語表記になり、Falseの場合、日本語表記になる。
...(コードの一部のみ表示) EN = True if EN: from English import * else: from Japanese import * file_name = "KEN_ALL.csv" # download from 'http://www.post.japanpost.jp/zipcode/dl/kogaki.html' class MainFrame(wx.Frame): def __init__(self, id, title): width, height = 300, 100 wx.Frame.__init__(self, id, title=windowTitle, size=wx.Size(width, height)) self.Pan = wx.Panel(self, -1) Hsizer = wx.BoxSizer(wx.HORIZONTAL) Vsizer = wx.BoxSizer(wx.VERTICAL) StTxt1 = wx.StaticText(self.Pan, -1, staticLine1) self.TxtCtrl = wx.TextCtrl(self.Pan, -1, "", size=(200, -1)) self.RBtn1 = wx.Button(self.Pan, -1, buttonLabel) self.RBtn1.Bind(wx.EVT_BUTTON, self.showAddress) ...
日本語表示を指定して起動したとき(EN=False)
英語表示を指定して起動したとき(EN=True)
とりあえずはうまくいった。ヘッダファイルなら拡張子を.hにしたいところだが、すべてのファイルを.pyにしなければいけない?のが残念。ファイルが増えるとどれがヘッダファイル(の役割をしているもの)なのか、判別が難しくなりそう。