wx Übersetzung klappt in py2exe-verpacktem Projekt nicht!
Verfasst: Dienstag 16. November 2010, 14:48
Folgendes Problem:
Wenn ich per wx.Locale die wx-Sprache ändere und dann einen Button z.B. mit ID_CLOSE verwende, wird er je nach der in wx gesetzten Sprache richtig übersetzt.
Sobald ich das Projekt nun mit py2exe verpacke ist der Button immer englisch!
Hier sind 2 Dateien, um mein Problem nachvollziehen zu können. Ich habe einfach mal den relevanten Code aus meinem Projekt extrahiert.
wx_sprache.pyw
py2exe_sprache.py
Führt man nun die wx_sprache.pyw aus, ist der Button in Betriebssystemsprache dargestellt (bei Bedarf das wx.LANGUAGE_DEFAULT auf wx.LANGUAGE_GERMAN ändern).
Führt man die py2exe_sprache.py aus, so wird eine exe-Datei erstellt. Startet man diese exe, sieht man im Titel des Programms, dass nach wie vor auf deutsch umgestellt wurde, der Button ist aber trotzdem englisch!
Ich muss wohl "einfach" die entsprechenden *.mo Dateien aus "pythonpfad\Lib\site-packages\wx-2.6-msw-unicode\wx\locale\de\LC_MESSAGES" mitliefern. Nur WO kommen diese hin, dass es wieder funktioniert?
Wenn ich per wx.Locale die wx-Sprache ändere und dann einen Button z.B. mit ID_CLOSE verwende, wird er je nach der in wx gesetzten Sprache richtig übersetzt.
Sobald ich das Projekt nun mit py2exe verpacke ist der Button immer englisch!
Hier sind 2 Dateien, um mein Problem nachvollziehen zu können. Ich habe einfach mal den relevanten Code aus meinem Projekt extrahiert.
wx_sprache.pyw
Code: Alles auswählen
# coding: CP1252
import wx
class MainFrame(wx.Frame):
def __init__(self):
# Sprache setzen und auslesen
wxLang = wx.Locale(wx.LANGUAGE_DEFAULT) # auf deutschem System wird korrekt auf deutsch geschaltet
lang_string = wxLang.GetCanonicalName()
# Frame und Panel anlegen
wx.Frame.__init__(self, None, -1, u"Programmtitel (%s)" % lang_string)
panel = wx.Panel(self, -1)
# Ein von wx übersetzten Close-Button auf dem Panel erzeugen
closeButton = wx.Button(panel, wx.ID_CLOSE)
self.Bind(wx.EVT_BUTTON, self.closeWindow, closeButton)
def closeWindow(self, event):
self.Destroy()
class MyApp(wx.App):
def OnInit(self):
f = MainFrame()
f.Show(True)
return True
def main():
app = MyApp(False)
app.MainLoop()
if __name__ == "__main__":
main()
Code: Alles auswählen
# coding: CP1252
from distutils.core import setup
import py2exe # py2exe
import sys # wird zum Ergänzen der Parameter benötigt
# Übergabeparameter künstlich ergänzen
sys.argv.append("py2exe") # dass py2exe ueberhaupt gestartet wird
sys.argv.append("--dll-excludes=w9xpopen.exe,MSVCR71.dll") # w9xpopen.exe und MSVCR71.dll ausschliessen
## alle nötigen Parameter in einem Dict speichern
params = {}
params["zipfile"] = None
params["options"] = {
"py2exe": {
"compressed": 1,
"optimize": 2,
"bundle_files": 1
}
}
params['windows'] = [{
"script": "wx_sprache.pyw",
"dest_base": "wx_sprache" # Dateiname
}
]
# distutils-setup mit dem passenden Parameter-Dictionary ausführen
setup(**params)
Führt man die py2exe_sprache.py aus, so wird eine exe-Datei erstellt. Startet man diese exe, sieht man im Titel des Programms, dass nach wie vor auf deutsch umgestellt wurde, der Button ist aber trotzdem englisch!
Ich muss wohl "einfach" die entsprechenden *.mo Dateien aus "pythonpfad\Lib\site-packages\wx-2.6-msw-unicode\wx\locale\de\LC_MESSAGES" mitliefern. Nur WO kommen diese hin, dass es wieder funktioniert?