--- a/Beremiz.py Mon Jul 20 16:28:56 2009 +0200
+++ b/Beremiz.py Tue Jul 28 17:43:19 2009 +0200
@@ -29,9 +29,10 @@
import shutil
import random
-_local_path = os.path.split(os.path.realpath(__file__))[0]
+CWD = os.path.split(os.path.realpath(__file__))[0]
+
def Bpath(*args):
- return os.path.join(_local_path,*args)
+ return os.path.join(CWD,*args)
if __name__ == '__main__':
def usage():
@@ -72,6 +73,33 @@
splash=wx.SplashScreen(bmp,wx.SPLASH_CENTRE_ON_SCREEN, 1000, None)
wx.Yield()
+# Import module for internationalization
+import gettext
+import __builtin__
+
+# Get folder containing translation files
+localedir = os.path.join(CWD,"locale")
+# Get the default language
+langid = wx.LANGUAGE_DEFAULT
+# Define translation domain (name of translation files)
+domain = "Beremiz"
+
+# Define locale for wx
+loc = __builtin__.__dict__.get('loc', None)
+if loc is None:
+ loc = wx.Locale(langid)
+ __builtin__.__dict__['loc'] = loc
+# Define location for searching translation files
+loc.AddCatalogLookupPathPrefix(localedir)
+# Define locale domain
+loc.AddCatalog(domain)
+
+def unicode_translation(message):
+ return wx.GetTranslation(message).encode("utf-8")
+
+if __name__ == '__main__':
+ __builtin__.__dict__['_'] = wx.GetTranslation#unicode_translation
+
import wx.lib.buttons, wx.lib.statbmp
import TextCtrlAutoComplete, cPickle
import types, time, re, platform, time, traceback, commands
@@ -255,19 +283,19 @@
def _init_coll_FileMenu_Items(self, parent):
parent.Append(help='', id=wx.ID_NEW,
- kind=wx.ITEM_NORMAL, text=u'New\tCTRL+N')
+ kind=wx.ITEM_NORMAL, text=_(u'New\tCTRL+N'))
parent.Append(help='', id=wx.ID_OPEN,
- kind=wx.ITEM_NORMAL, text=u'Open\tCTRL+O')
+ kind=wx.ITEM_NORMAL, text=_(u'Open\tCTRL+O'))
parent.Append(help='', id=wx.ID_SAVE,
- kind=wx.ITEM_NORMAL, text=u'Save\tCTRL+S')
+ kind=wx.ITEM_NORMAL, text=_(u'Save\tCTRL+S'))
parent.Append(help='', id=wx.ID_CLOSE_ALL,
- kind=wx.ITEM_NORMAL, text=u'Close Project')
+ kind=wx.ITEM_NORMAL, text=_(u'Close Project'))
parent.AppendSeparator()
parent.Append(help='', id=wx.ID_PROPERTIES,
- kind=wx.ITEM_NORMAL, text=u'Properties')
+ kind=wx.ITEM_NORMAL, text=_(u'Properties'))
parent.AppendSeparator()
parent.Append(help='', id=wx.ID_EXIT,
- kind=wx.ITEM_NORMAL, text=u'Quit\tCTRL+Q')
+ kind=wx.ITEM_NORMAL, text=_(u'Quit\tCTRL+Q'))
self.Bind(wx.EVT_MENU, self.OnNewProjectMenu, id=wx.ID_NEW)
self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu, id=wx.ID_OPEN)
self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=wx.ID_SAVE)
@@ -277,27 +305,27 @@
def _init_coll_EditMenu_Items(self, parent):
parent.Append(help='', id=wx.ID_EDIT,
- kind=wx.ITEM_NORMAL, text=u'Edit PLC\tCTRL+R')
+ kind=wx.ITEM_NORMAL, text=_(u'Edit PLC\tCTRL+R'))
parent.AppendSeparator()
parent.Append(help='', id=wx.ID_ADD,
- kind=wx.ITEM_NORMAL, text=u'Add Plugin')
+ kind=wx.ITEM_NORMAL, text=_(u'Add Plugin'))
parent.Append(help='', id=wx.ID_DELETE,
- kind=wx.ITEM_NORMAL, text=u'Delete Plugin')
+ kind=wx.ITEM_NORMAL, text=_(u'Delete Plugin'))
self.Bind(wx.EVT_MENU, self.OnEditPLCMenu, id=wx.ID_EDIT)
self.Bind(wx.EVT_MENU, self.OnAddMenu, id=wx.ID_ADD)
self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE)
def _init_coll_RunMenu_Items(self, parent):
parent.Append(help='', id=ID_BEREMIZRUNMENUBUILD,
- kind=wx.ITEM_NORMAL, text=u'Build\tCTRL+R')
+ kind=wx.ITEM_NORMAL, text=_(u'Build\tCTRL+R'))
parent.AppendSeparator()
parent.Append(help='', id=ID_BEREMIZRUNMENUSIMULATE,
- kind=wx.ITEM_NORMAL, text=u'Simulate')
+ kind=wx.ITEM_NORMAL, text=_(u'Simulate'))
parent.Append(help='', id=ID_BEREMIZRUNMENURUN,
- kind=wx.ITEM_NORMAL, text=u'Run')
+ kind=wx.ITEM_NORMAL, text=_(u'Run'))
parent.AppendSeparator()
parent.Append(help='', id=ID_BEREMIZRUNMENUSAVELOG,
- kind=wx.ITEM_NORMAL, text=u'Save Log')
+ kind=wx.ITEM_NORMAL, text=_(u'Save Log'))
self.Bind(wx.EVT_MENU, self.OnBuildMenu,
id=ID_BEREMIZRUNMENUBUILD)
self.Bind(wx.EVT_MENU, self.OnSimulateMenu,
@@ -309,17 +337,17 @@
def _init_coll_HelpMenu_Items(self, parent):
parent.Append(help='', id=wx.ID_HELP,
- kind=wx.ITEM_NORMAL, text=u'Beremiz\tF1')
+ kind=wx.ITEM_NORMAL, text=_(u'Beremiz\tF1'))
parent.Append(help='', id=wx.ID_ABOUT,
- kind=wx.ITEM_NORMAL, text=u'About')
+ kind=wx.ITEM_NORMAL, text=_(u'About'))
self.Bind(wx.EVT_MENU, self.OnBeremizMenu, id=wx.ID_HELP)
self.Bind(wx.EVT_MENU, self.OnAboutMenu, id=wx.ID_ABOUT)
def _init_coll_MenuBar_Menus(self, parent):
- parent.Append(menu=self.FileMenu, title=u'File')
+ parent.Append(menu=self.FileMenu, title=_(u'File'))
#parent.Append(menu=self.EditMenu, title=u'Edit')
#parent.Append(menu=self.RunMenu, title=u'Run')
- parent.Append(menu=self.HelpMenu, title=u'Help')
+ parent.Append(menu=self.HelpMenu, title=_(u'Help'))
def _init_utils(self):
self.MenuBar = wx.MenuBar()
@@ -361,7 +389,7 @@
def _init_ctrls(self, prnt):
wx.Frame.__init__(self, id=ID_BEREMIZ, name=u'Beremiz',
parent=prnt, pos=wx.Point(0, 0), size=wx.Size(1000, 600),
- style=wx.DEFAULT_FRAME_STYLE|wx.CLIP_CHILDREN, title=u'Beremiz')
+ style=wx.DEFAULT_FRAME_STYLE|wx.CLIP_CHILDREN, title=_(u'Beremiz'))
self._init_utils()
self.SetClientSize(wx.Size(1000, 600))
self.SetMenuBar(self.MenuBar)
@@ -404,7 +432,7 @@
self.AUIManager.AddPane(self.PLCConfig, wx.aui.AuiPaneInfo().CenterPane())
self.AUIManager.AddPane(self.LogConsole, wx.aui.AuiPaneInfo().
- Caption("Log Console").Bottom().Layer(1).
+ Caption(_("Log Console")).Bottom().Layer(1).
BestSize(wx.Size(800, 200)).CloseButton(False))
self.AUIManager.Update()
@@ -492,8 +520,8 @@
if self.PluginRoot is not None:
if self.PluginRoot.ProjectTestModified():
dialog = wx.MessageDialog(self,
- "Save changes ?",
- "Close Application",
+ _("Save changes ?"),
+ _("Close Application"),
wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION)
answer = dialog.ShowModal()
dialog.Destroy()
@@ -581,7 +609,7 @@
addbutton = wx.lib.buttons.GenBitmapButton(id=addbutton_id, bitmap=wx.Bitmap(Bpath( 'images', 'Add.png')),
name='AddPluginButton', parent=plcwindow, pos=wx.Point(0, 0),
size=wx.Size(16, 16), style=wx.NO_BORDER)
- addbutton.SetToolTipString("Add a sub plugin")
+ addbutton.SetToolTipString(_("Add a sub plugin"))
addbutton.Bind(wx.EVT_BUTTON, self.Gen_AddPluginMenu(self.PluginRoot), id=addbutton_id)
plcwindowsizer.AddWindow(addbutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER)
@@ -677,7 +705,7 @@
for plugin_method in plugin.PluginMethods:
if "method" in plugin_method and plugin_method.get("shown",True):
id = wx.NewId()
- label=plugin_method["name"]
+ label = plugin_method["name"]
button = GenBitmapTextButton(id=id, parent=parent,
bitmap=wx.Bitmap(Bpath( "%s.png"%plugin_method.get("bitmap", os.path.join("images", "Unknown")))), label=label,
name=label, pos=wx.DefaultPosition, style=wx.NO_BORDER)
@@ -784,7 +812,7 @@
enablebutton_id = wx.NewId()
enablebutton = wx.lib.buttons.GenBitmapToggleButton(id=enablebutton_id, bitmap=wx.Bitmap(Bpath( 'images', 'Disabled.png')),
name='EnableButton', parent=leftwindow, size=wx.Size(16, 16), pos=wx.Point(0, 0), style=0)#wx.NO_BORDER)
- enablebutton.SetToolTipString("Enable/Disable this plugin")
+ enablebutton.SetToolTipString(_("Enable/Disable this plugin"))
make_genbitmaptogglebutton_flat(enablebutton)
enablebutton.SetBitmapSelected(wx.Bitmap(Bpath( 'images', 'Enabled.png')))
enablebutton.SetToggle(plugin.MandatoryParams[1].getEnabled())
@@ -834,7 +862,7 @@
deletebutton = wx.lib.buttons.GenBitmapButton(id=deletebutton_id, bitmap=wx.Bitmap(Bpath( 'images', 'Delete.png')),
name='DeletePluginButton', parent=leftwindow, pos=wx.Point(0, 0),
size=wx.Size(16, 16), style=wx.NO_BORDER)
- deletebutton.SetToolTipString("Delete this plugin")
+ deletebutton.SetToolTipString(_("Delete this plugin"))
deletebutton.Bind(wx.EVT_BUTTON, self.GetDeleteButtonFunction(plugin), id=deletebutton_id)
adddeletesizer.AddWindow(deletebutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER)
@@ -843,7 +871,7 @@
addbutton = wx.lib.buttons.GenBitmapButton(id=addbutton_id, bitmap=wx.Bitmap(Bpath( 'images', 'Add.png')),
name='AddPluginButton', parent=leftwindow, pos=wx.Point(0, 0),
size=wx.Size(16, 16), style=wx.NO_BORDER)
- addbutton.SetToolTipString("Add a sub plugin")
+ addbutton.SetToolTipString(_("Add a sub plugin"))
addbutton.Bind(wx.EVT_BUTTON, self.Gen_AddPluginMenu(plugin), id=addbutton_id)
adddeletesizer.AddWindow(addbutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER)
@@ -1025,7 +1053,7 @@
if len(plugin.PlugChildsTypes) > 0:
for name, XSDClass, help in plugin.PlugChildsTypes:
new_id = wx.NewId()
- main_menu.Append(help=help, id=new_id, kind=wx.ITEM_NORMAL, text="Append "+help)
+ main_menu.Append(help=help, id=new_id, kind=wx.ITEM_NORMAL, text=_("Append ")+help)
self.Bind(wx.EVT_MENU, self._GetAddPluginFunction(name, plugin), id=new_id)
self.PopupMenuXY(main_menu)
event.Skip()
@@ -1110,7 +1138,8 @@
else:
element_path = element_infos["name"]
if element_infos["type"] == "element":
- staticbox = wx.StaticBox(id=-1, label=element_infos["name"],
+ label = element_infos["name"]
+ staticbox = wx.StaticBox(id=-1, label=_(label),
name='%s_staticbox'%element_infos["name"], parent=parent,
pos=wx.Point(0, 0), size=wx.Size(10, 0), style=0)
staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL)
@@ -1130,10 +1159,11 @@
name="%s_bitmap"%element_infos["name"], parent=parent,
pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT)
- statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"],
+ label = element_infos["name"]
+ statictext = wx.StaticText(id=-1, label="%s:"%_(label),
name="%s_label"%element_infos["name"], parent=parent,
- pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0)
- boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP)
+ pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
+ boxsizer.AddWindow(statictext, 0, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.RIGHT)
id = wx.NewId()
if isinstance(element_infos["type"], types.ListType):
combobox = wx.ComboBox(id=id, name=element_infos["name"], parent=parent,
@@ -1144,7 +1174,9 @@
if len(element_infos["type"]) > 0 and isinstance(element_infos["type"][0], types.TupleType):
for choice, xsdclass in element_infos["type"]:
combobox.Append(choice)
- staticbox = wx.StaticBox(id=-1, label="%(name)s - %(value)s"%element_infos,
+ name = element_infos["name"]
+ value = element_infos["value"]
+ staticbox = wx.StaticBox(id=-1, label="%s - %s"%(_(name), _(value)),
name='%s_staticbox'%element_infos["name"], parent=parent,
pos=wx.Point(0, 0), size=wx.Size(10, 0), style=0)
staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL)
@@ -1214,7 +1246,7 @@
else:
defaultpath = config.Read("lastopenedfolder")
- dialog = wx.DirDialog(self , "Choose a project", defaultpath, wx.DD_NEW_DIR_BUTTON)
+ dialog = wx.DirDialog(self , _("Choose a project"), defaultpath, wx.DD_NEW_DIR_BUTTON)
if dialog.ShowModal() == wx.ID_OK:
projectpath = dialog.GetPath()
dialog.Destroy()
@@ -1226,7 +1258,7 @@
self.RefreshAll()
self.RefreshMainMenu()
else:
- message = wx.MessageDialog(self, res, "ERROR", wx.OK|wx.ICON_ERROR)
+ message = wx.MessageDialog(self, res, _("ERROR"), wx.OK|wx.ICON_ERROR)
message.ShowModal()
message.Destroy()
event.Skip()
@@ -1237,7 +1269,7 @@
else:
defaultpath = config.Read("lastopenedfolder")
- dialog = wx.DirDialog(self , "Choose a project", defaultpath, wx.DD_NEW_DIR_BUTTON)
+ dialog = wx.DirDialog(self , _("Choose a project"), defaultpath, wx.DD_NEW_DIR_BUTTON)
if dialog.ShowModal() == wx.ID_OK:
projectpath = dialog.GetPath()
if os.path.isdir(projectpath):
@@ -1249,11 +1281,11 @@
self.RefreshAll()
self.RefreshMainMenu()
else:
- message = wx.MessageDialog(self, result, "Error", wx.OK|wx.ICON_ERROR)
+ message = wx.MessageDialog(self, result, _("Error"), wx.OK|wx.ICON_ERROR)
message.ShowModal()
message.Destroy()
else:
- message = wx.MessageDialog(self, "\"%s\" folder is not a valid Beremiz project\n"%projectpath, "Error", wx.OK|wx.ICON_ERROR)
+ message = wx.MessageDialog(self, _("\"%s\" folder is not a valid Beremiz project\n")%projectpath, _("Error"), wx.OK|wx.ICON_ERROR)
message.ShowModal()
message.Destroy()
dialog.Destroy()
@@ -1263,8 +1295,8 @@
if self.PluginRoot is not None:
if self.PluginRoot.ProjectTestModified():
dialog = wx.MessageDialog(self,
- "Save changes ?",
- "Close Application",
+ _("Save changes ?"),
+ _("Close Application"),
wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION)
answer = dialog.ShowModal()
dialog.Destroy()
@@ -1322,7 +1354,7 @@
event.Skip()
def OnAboutMenu(self, event):
- OpenHtmlFrame(self,"About Beremiz", Bpath("doc","about.html"), wx.Size(550, 500))
+ OpenHtmlFrame(self,_("About Beremiz"), Bpath("doc","about.html"), wx.Size(550, 500))
event.Skip()
def OnAddButton(self, event):
@@ -1355,7 +1387,7 @@
return DeleteButtonFunction
def AddPlugin(self, PluginType, plugin):
- dialog = wx.TextEntryDialog(self, "Please enter a name for plugin:", "Add Plugin", "", wx.OK|wx.CANCEL)
+ dialog = wx.TextEntryDialog(self, _("Please enter a name for plugin:"), _("Add Plugin"), "", wx.OK|wx.CANCEL)
if dialog.ShowModal() == wx.ID_OK:
PluginName = dialog.GetValue()
plugin.PlugAddChild(PluginName, PluginType)
@@ -1363,7 +1395,7 @@
dialog.Destroy()
def DeletePlugin(self, plugin):
- dialog = wx.MessageDialog(self, "Really delete plugin ?", "Remove plugin", wx.YES_NO|wx.NO_DEFAULT)
+ dialog = wx.MessageDialog(self, _("Really delete plugin ?"), _("Remove plugin"), wx.YES_NO|wx.NO_DEFAULT)
if dialog.ShowModal() == wx.ID_YES:
self.PluginInfos.pop(plugin)
plugin.PlugRemove()
@@ -1380,12 +1412,12 @@
def Display_Exception_Dialog(e_type, e_value, e_tb, bug_report_path):
trcbck_lst = []
for i,line in enumerate(traceback.extract_tb(e_tb)):
- trcbck = " " + str(i+1) + ". "
+ trcbck = " " + str(i+1) + _(". ")
if line[0].find(os.getcwd()) == -1:
- trcbck += "file : " + str(line[0]) + ", "
+ trcbck += _("file : ") + str(line[0]) + _(", ")
else:
- trcbck += "file : " + str(line[0][len(os.getcwd()):]) + ", "
- trcbck += "line : " + str(line[1]) + ", " + "function : " + str(line[2])
+ trcbck += _("file : ") + str(line[0][len(os.getcwd()):]) + _(", ")
+ trcbck += _("line : ") + str(line[1]) + _(", ") + _("function : ") + str(line[2])
trcbck_lst.append(trcbck)
# Allow clicking....
@@ -1394,7 +1426,7 @@
cap.ReleaseMouse()
dlg = wx.SingleChoiceDialog(None,
- """
+ _("""
An unhandled exception (bug) occured. Bug report saved at :
(%s)
@@ -1406,9 +1438,9 @@
You should now restart Beremiz.
Traceback:
-""" % bug_report_path +
+""") % bug_report_path +
str(e_type) + " : " + str(e_value),
- "Error",
+ _("Error"),
trcbck_lst)
try:
res = (dlg.ShowModal() == wx.ID_OK)
@@ -1418,7 +1450,7 @@
return res
def Display_Error_Dialog(e_value):
- message = wxMessageDialog(None, str(e_value), "Error", wxOK|wxICON_ERROR)
+ message = wxMessageDialog(None, str(e_value), _("Error"), wxOK|wxICON_ERROR)
message.ShowModal()
message.Destroy()