Python und Gettext
Gettext erlaubt es ein Python Programm ohne viel Aufwand so zu gestalten, dass es ohne den Quellcode zu ändern in andere Sprachen übersetzt werden kann.
Packete die dazu benötigt werden:
- python
- gettext
- (poedit)
Programm anpassen:
Innerhalb des Programmes müssen alle Ausgaben die lokalisiert werden sollen markiert werden. Das sieht dann in etwa so aus:
1 2 3 4 5 6 | print _('Hello world') bla = [_('one'), _('two'), _('three')] for i in bla: print i |
Gettext muss initialisiert werden:
1 2 3 4 5 6 7 8 | import gettext APP = 'myapp' DIR = 'locale' gettext.bindtextdomain(APP, DIR) gettext.textdomain(APP) _ = gettext.gettext |
Falls Glade verwendet wird, muss gettext dafür auch aktiviert werden.
1 2 | gtk.glade.bindtextdomain(APP, DIR) gtk.glade.textdomain(APP) |
Somit wäre unser Programm fertig, fehlen nur noch die Übersetzungsdateien.
Übersetzungsdateien .pot, .po und .mo
Mit dem Befehl
1 | pygettext.py myapp.py |
wird die Dateimessages.pot generiert. Die Übersetzungen aus .glade Dateien können mit folgendem Befehl extrahiert werden:
1 | intltointltool-extract --type=gettext/glade datei.glade |
Dadurch wird eine datei.glade.h erstellt. Die darin enthaltenen Texte sind mit N_ markiert, weshalb bei pygettext.py ein zusätzliches Keyword angegeben werden muss.
1 | pygettext.py -k N_ myapp.py datei.glade.h |
In der daraus resultierenden messages.pot stehen alle zur Übersetzung markierten Texte. Nun müssen diese Texte noch übersetzt werden. Das Tool poedit schafft da abhilfe.
Poedit starten, neuen Katalog erstellen (from POT file), Einstellungen tätigen, Wörter/Sätze übersetzen und unter locale/de/LC_MESSAGES/myapp.po speichern.
Final Step: Programm ausführen
1 | LANG=de_DE python myapp.py |
Weitere Informationen findet man unter anderem in der pygtk.org FAQ.