wxPython Internationalization
kyosohma at gmail.com
kyosohma at gmail.com
Tue Jul 24 09:11:19 EDT 2007
On Jul 24, 1:31 am, "mojocojo2... at gmail.com" <mojocojo2... at gmail.com>
wrote:
> I know this may have a very simple answer, nonetheless. I am wishing
> to find the cleanest and most pythonic way of implementing the
> following:
>
> I am creating a internationalized application in wxPython and have
> sorted the directory structure in the following manner:
>
> start.py
> <app_name>
> <tools>
> metamenus.py
> main.py
> <data>
> [various files]
> <images>
> [various files]
>
> Here's the code for the files shown above:
>
> # start.py
>
> if __name__ == '__main__':
> import <app_name>.main
> app = <app_name>.MyApp(0)
> app.MainLoop()
>
> # main.py
>
> import wx
> from metamenus import MenuBarEx
>
> class MyFrame(wx.Frame):
> def __init__(self, parent, id, title):
> wx.Frame.__init__(self, parent, id, title,
> wx.DefaultPosition, wx.Size(380, 250))
>
> menu = \
> [[
> [_('&File')],
> [_('Open a new document')],
> [_('Save the document')]
> ],
> [
> [_('&Edit')]
> ],
> [
> [_('&View')]
> ],
> [
> [_('&Quit\tCtrl+Q')],
> [_('Quit the Application')],
> [_('&Help')]
> ]]
>
> self.mainmenu = MenuBarEx(self, menu)
>
> def OnQuit(self, event):
> self.Close()
>
> class MyApp(wx.App):
> def OnInit(self):
> self.frame = MyFrame(None, -1, 'Title')
> self.frame.Raise()
> self.frame.Refresh()
> self.frame.Show(True)
> return True
>
> So here's my question. I wish to add the following code so that the _
> method will become of use.
>
> Here is the codehttp://wiki.wxpython.org/Internationalization
> recommends:
>
> import wx
> import os
> import platform
> import codecs
> import sys
> import gettext
>
> def main():
> # initialise language settings:
> path = sys.path[0].decode(sys.getfilesystemencoding())
> try:
> langIni = codecs.open(os.path.join(path,u'language.ini'),'r',
> 'utf-8')
> except IOError:
> language = u'en' #defaults to english
> pass
> else:
> language = langIni.read()
>
> locales = {
> u'en' : (wx.LANGUAGE_ENGLISH, u'en_US.UTF-8'),
> u'es' : (wx.LANGUAGE_SPANISH, u'es_ES.UTF-8'),
> u'fr' : (wx.LANGUAGE_FRENCH, u'fr_FR.UTF-8'),
> }
> mylocale = wx.Locale(locales[language][0], wx.LOCALE_LOAD_DEFAULT)
> langdir = os.path.join(path,u'locale')
> Lang = gettext.translation(u'messages', langdir,
> languages=[language])
> Lang.install(unicode=1)
>
> if platform.system() == 'Linux':
> try:
> # to get some language settings to display properly:
> os.environ['LANG'] = locales[language][1]
>
> except (ValueError, KeyError):
> pass
>
> #-> Code to launch application goes here. <-#
>
> if __name__ == '__main__':
> if 'unicode' not in wx.PlatformInfo:
> print "\nInstalled version: %s\nYou need a unicode build of
> wxPython to run this application.\n"%version
> else:
> main()
>
> So my question is, where would the best place be to implement the code
> above? In start.py, main.py, in a separate file altogether? The
> problem I seem to be having is needing an instance of wx.App before
> the code recommended by thehttp://wiki.wxpython.org/Internationalization
> can become of use.
>
> I've come up with solutions to my dilemma but none seem to be
> especially clean. Any recommendations would be great. Also if any
> clarifications are needed let me know.
>
> Thanks
You should post this question to the wxPython user's group. They'll be
able to give better advice. See http://www.wxpython.org/maillist.php
Mike
More information about the Python-list
mailing list