I18N.py :  » GUI » wxPython » wxPython-src-2.8.11.0 » wxPython » demo » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » GUI » wxPython 
wxPython » wxPython src 2.8.11.0 » wxPython » demo » I18N.py
#Boa:FramePanel:LanguageSelectPanel
import os, sys
import wx
from wx.lib import langlistctrl
from Main import opj


# Normally you would just set _ to be a reference to the
# wx.GetTranslation function, and then wrap all you literal strings in
# _() function calls.  Then everytime you use one of your literals, it
# would first pass through the translation function and try to load a
# translated version of the string from the current message catalogs.
# For this example, since we are changinb language on the fly, and
# since we are only translating the label for one widget, we'll not do
# it the automatic way and we'll be more explicit.  See the setup in
# __init__() and the translation done in updateLanguage() below.

_ = wx.GetTranslation

exampleStrings = [
    'the quick brown fox jumps over the lazy dog',  # demo string
    'Tip of the Day',                               # wx built in translation
    'Warning',                                      # wx built in translation
]


[wxID_LANGUAGESELECTPANEL, wxID_LANGUAGESELECTPANELENGLISHBASECH, 
 wxID_LANGUAGESELECTPANELLANGCTRLCONTAINER, 
 wxID_LANGUAGESELECTPANELLANGFILTERRB, wxID_LANGUAGESELECTPANELSTATICLINE1, 
 wxID_LANGUAGESELECTPANELSTATICTEXT1, wxID_LANGUAGESELECTPANELSTATICTEXT2, 
 wxID_LANGUAGESELECTPANELSTATICTEXT3, wxID_LANGUAGESELECTPANELTRANSLATEDST, 
] = [wx.NewId() for _init_ctrls in range(9)]

class LanguageSelectPanel(wx.Panel):
    def _init_coll_boxSizer3_Items(self, parent):
        # generated method, don't edit

        parent.AddWindow(self.langCtrlContainer, 1, border=0, flag=wx.GROW)
        parent.AddSpacer(wx.Size(8, 8), border=0, flag=0)
        parent.AddWindow(self.langFilterRB, 0, border=0, flag=0)

    def _init_coll_flexGridSizer1_Growables(self, parent):
        # generated method, don't edit

        parent.AddGrowableRow(1)
        parent.AddGrowableCol(0)

    def _init_coll_boxSizer1_Items(self, parent):
        # generated method, don't edit

        parent.AddWindow(self.staticText1, 0, border=8, flag=wx.ALL)
        parent.AddSizer(self.boxSizer3, 1, border=8, flag=wx.ALL | wx.GROW)
        parent.AddSizer(self.boxSizer2, 0, border=8, flag=wx.GROW | wx.ALL)

    def _init_coll_boxSizer2_Items(self, parent):
        # generated method, don't edit

        parent.AddWindow(self.staticText2, 0, border=8, flag=wx.ALL)
        parent.AddWindow(self.englishBaseCh, 0, border=8, flag=wx.GROW | wx.ALL)
        parent.AddWindow(self.staticLine1, 0, border=8, flag=wx.GROW | wx.ALL)
        parent.AddWindow(self.staticText3, 0, border=8, flag=wx.ALL)
        parent.AddWindow(self.translatedST, 0, border=8, flag=wx.GROW | wx.ALL)

    def _init_sizers(self):
        # generated method, don't edit
        self.boxSizer1 = wx.BoxSizer(orient=wx.VERTICAL)

        self.flexGridSizer1 = wx.FlexGridSizer(cols=2, hgap=8, rows=0, vgap=8)

        self.boxSizer3 = wx.BoxSizer(orient=wx.HORIZONTAL)

        self.boxSizer2 = wx.BoxSizer(orient=wx.VERTICAL)

        self._init_coll_boxSizer1_Items(self.boxSizer1)
        self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
        self._init_coll_boxSizer3_Items(self.boxSizer3)
        self._init_coll_boxSizer2_Items(self.boxSizer2)

        self.SetSizer(self.boxSizer1)

    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Panel.__init__(self, id=wxID_LANGUAGESELECTPANEL,
              name='LanguageSelectPanel', parent=prnt, 
              style=wx.RESIZE_BORDER | wx.DEFAULT_DIALOG_STYLE)
        
        self.staticText1 = wx.StaticText(id=wxID_LANGUAGESELECTPANELSTATICTEXT1,
              label='Choose a language that will be used for example translation.',
              name='staticText1', parent=self, style=0)

        self.langCtrlContainer = wx.Panel(id=wxID_LANGUAGESELECTPANELLANGCTRLCONTAINER,
              name='langCtrlContainer', parent=self, style=wx.TAB_TRAVERSAL)
        self.langCtrlContainer.SetBackgroundColour(wx.Colour(255, 255, 255))
        self.langCtrlContainer.Bind(wx.EVT_SIZE, self.OnLangCtrlContainerSize)

        self.langFilterRB = wx.RadioBox(choices=['Translated example languages',
              'Available languages on your system', 'All languages'],
              id=wxID_LANGUAGESELECTPANELLANGFILTERRB, label='Filter',
              majorDimension=1, name='langFilterRB', parent=self,
              style=wx.RA_SPECIFY_COLS)
        self.langFilterRB.Bind(wx.EVT_RADIOBOX, self.OnLangFilterRBRadiobox,
              id=wxID_LANGUAGESELECTPANELLANGFILTERRB)

        self.staticText2 = wx.StaticText(id=wxID_LANGUAGESELECTPANELSTATICTEXT2,
              label='English Text:', name='staticText2', parent=self,
              style=0)

        self.staticText3 = wx.StaticText(id=wxID_LANGUAGESELECTPANELSTATICTEXT3,
              label='Translated Text:', name='staticText3', parent=self,
              style=0)

        self.englishBaseCh = wx.Choice(choices=self.choices,
              id=wxID_LANGUAGESELECTPANELENGLISHBASECH, name='englishBaseCh',
              parent=self, style=0)
        self.englishBaseCh.Bind(wx.EVT_CHOICE, self.OnLangSelectAndTranslate,
              id=wxID_LANGUAGESELECTPANELENGLISHBASECH)

        self.staticLine1 = wx.StaticLine(id=wxID_LANGUAGESELECTPANELSTATICLINE1,
              name='staticLine1', parent=self, style=0)

        self.translatedST = wx.StaticText(id=wxID_LANGUAGESELECTPANELTRANSLATEDST,
              label='', name='translatedST', parent=self, style=0)

        self._init_sizers()

    def __init__(self, parent, log):
        self.choices = []
        self.choices = exampleStrings
        
        self._init_ctrls(parent)

        self.log = log

        lang = wx.LANGUAGE_DEFAULT
        filter = 'demo'
        langs = (wx.LANGUAGE_AFRIKAANS, wx.LANGUAGE_ENGLISH, wx.LANGUAGE_DEFAULT, 
                 wx.LANGUAGE_SPANISH, wx.LANGUAGE_GERMAN, wx.LANGUAGE_ITALIAN,
                 wx.LANGUAGE_FRENCH)


        # usually you would define wx.Locale in your wx.App.OnInit class.
        # for the demo we just define it in this module
        self.locale = None
        wx.Locale.AddCatalogLookupPathPrefix(opj('data/locale'))
        self.updateLanguage(wx.LANGUAGE_DEFAULT)

        
        self.filterMap = {'demo': langlistctrl.LC_ONLY, 
                          'available': langlistctrl.LC_AVAILABLE, 
                          'all': langlistctrl.LC_ALL}
                        
        self.filterIdxMap = {0: 'demo', 
                             1: 'available', 
                             2: 'all'}
        self.langs = langs
        self.langCtrl = langlistctrl.LanguageListCtrl(self.langCtrlContainer, -1, 
              filter=self.filterMap[filter], only=langs, select=lang)
        
        self.langCtrl.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnLangSelectAndTranslate)
        self.langCtrl.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnClearTranslatedText)
              
        self.OnLangCtrlContainerSize()
        
        self.englishBaseCh.Select(0)
        self.OnLangSelectAndTranslate()


    def updateLanguage(self, lang):
        # Make *sure* any existing locale is deleted before the new
        # one is created.  The old C++ object needs to be deleted
        # before the new one is created, and if we just assign a new
        # instance to the old Python variable, the old C++ locale will
        # not be destroyed soon enough, likely causing a crash.
        if self.locale:
            assert sys.getrefcount(self.locale) <= 2
            del self.locale
        
        # create a locale object for this language
        self.locale = wx.Locale(lang)
        if self.locale.IsOk():
            self.locale.AddCatalog('wxpydemo')
        else:
            self.locale = None

    def translateExample(self):
        self.translatedST.SetLabel(_(self.englishBaseCh.GetStringSelection()))

    def OnLangCtrlContainerSize(self, event=None):
        if event: event.Skip()
        self.langCtrl.SetSize(self.langCtrlContainer.GetSize())

    def OnLangFilterRBRadiobox(self, event):
        self.langCtrl.SetUpFilter(
            self.filterMap[self.filterIdxMap[self.langFilterRB.GetSelection()]],
            self.langs)

    def OnLangSelectAndTranslate(self, event=None):
        lang = self.langCtrl.GetLanguage()
        
        if lang is not None:
            # set to the selected language
            self.updateLanguage(lang)

            self.translateExample()
            
            # set back to default
            self.updateLanguage(wx.LANGUAGE_DEFAULT)

    def OnClearTranslatedText(self, event):
        self.translatedST.SetLabel('')        


def runTest(frame, nb, log):
    win = LanguageSelectPanel(nb, log) 
    return win

#-------------------------------------------------------------------------------

overview = """<html><body>
<h2>Internationalization (I18N)</h2>
<p>
This demo demonstrates how to setup and use the wx.Locale object to translate text.
<p>
It also shows the langlistctrl.LanguageListCtrl that can be used to display 
languages with their associated countries flags, e.g. for setting the language
in your application.

</body></html>
"""
  
if __name__ == '__main__':
    import sys,os
    import run
    run.main(['', os.path.basename(sys.argv[0])])
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.