Python / wxPython - Mehrsprachigkeit

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
2bock
User
Beiträge: 94
Registriert: Freitag 12. September 2003, 07:58
Wohnort: 50.9333300 / 6.3666700

Hallo zusammen.

ich suche ein kleines einfaches Beispiel, das sich mit der Mehrsprachigkeit unter Python beschäftigt. Ich möchte nämlich mit den mo Dateien arbeiten. Ich habe das Sourceforge-Beispiel "i18ntest.py", aber über ein zweites Beispiel würde ich mich sehr freuen.

Danke für Eure Hilfe.

Greetz from 2bock :wink:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Na gut, hier mal ein stück meines wxPython Programms. Es unterstützt aber nur l10n.

Code: Alles auswählen

import gettext
# hier ist die sprache hardcoded, du könntest sie aber aus locale und wx.Locale rauslesen
lang_de = gettext.translation('mathengine', 'locale', languages=['de']) 
_ = lang_de.gettext 

controltext = _('Click here')
dann brauchst du in dem programmordner ein Verzeichniss 'locale' wo ein Ordner 'de' ist, dort wiederrum der ordner 'LC_MESSAGES' und da drin die mathengine.mo. Du kannst dan pygettext.py verwenden um eine .po datei zu machen, sie mit poEdit übersetzen und dann mit msgfmt.py in eine .mo datei umwandeln.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
2bock_unlogged

Danke für den Tip, aber eine Frage noch l10n? Ich kenne halt nur aus dem Beispiel die Zeichenfolge i18n. Hast Du Dich vertippt oder gibt es da einen Unterschied. Ist das vielleicht ein Standard?

Ich habe mir jetzt mal ein Beispiel gebastelt mit siehe Code. Ich benötige hier nur einen Unterordner (frei wählbar) und in diesem befindet sich danndie po Datei. Und das klappt.

Code: Alles auswählen

wx.Locale_AddCatalogLookupPathPrefix(os.path.join(".\\Desktop","locale"))
        self.locale = wx.Locale()
        self.locale.AddCatalog("de_DE")

.....

l2 = wx.StaticText(self, -1, wx.GetTranslation("MiniApp") ,wx.Point(230,80))
    
Aber mir ist jetzt dabei etwas aufgefallen. Wenn ich die Skripte in ein anderes Verzeichnis lege und entsprechend die Pfade im Skript hier anpasse, dann funktioniert meine Anwendugn in Bezug auf die Übersetzung nicht mehr. Die Pfade sind aber korrekt.

Greetz from 2bock :wink:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Machs doch einfach mit gettext, so wie ich geschrieben habe.

I18n ist Internationalisation, die auch auf so dinge wie Dezimaltrennzeichen, und Wäahrungssymbol vor und nach dem Betrag eingeht. L10n ist Localisation, die nur über übersetzungen geht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten