Glade I18N

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Ich möchte mein Glade-GUI internationalisieren und stehe nach dem Lesen von x Artikeln total auf dem Schlauch. Das habe ich bisher gemacht:

'gettext' und 'poedit' installieren.

* intltool-extract --type=gettext/glade popper_config.glade
* xgettext -k_ -kN_ -o messages.pot popper_config.glade.h
* die messages.pot mit poedit übersetzt und die *.mo hierhin gespeichert:
* popper/locale/LC_MESSAGES/de/popper_config.mo

In meinem Programm habe ich das hier drin:

Code: Alles auswählen

import gtk
import locale
import gettext
import gtk.glade

def main():
	APP = 'popper_config'
	DIR = 'locale'
	locale.setlocale(locale.LC_ALL, '')

	for module in (gettext, gtk.glade):
		module.bindtextdomain(APP, DIR)
		module.textdomain(APP)

	lang = gettext.translation(APP, languages=['de'])
	lang.install()

	#~ gettext.bindtextdomain(APP, DIR)
	#~ gettext.textdomain(APP)
	#~ gtk.glade.bindtextdomain(APP, DIR)
	#~ gtk.glade.textdomain(APP)
	#~ _ = gettext.gettext

class Settings:
	def __init__(self):
		builder = gtk.Builder()
		builder.add_from_file("popper_config.glade")
Irgendwie sieht das wie ein Mischmasch aus verschiedenen Möglichkeiten aus. Gtk.Builder kennt selbst .get_translation_domain() ich weiss aber nicht ob und wie das verwendet wird.

Kann mir jemand bitte weiterhelfen bzw. ein Beispiel zeigen.
Zuletzt geändert von rhersel am Mittwoch 6. Oktober 2010, 21:25, insgesamt 1-mal geändert.
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Wie so oft habe ich es nun selbst geschafft. Und so geht es:

Aus dem Glade File die Texte extrahieren:
* intltool-extract --type=gettext/glade dateiname.glade

Aus den extrahierten Texten einen Übersetzungskatalog erzeugen:
* xgettext -k_ -kN_ -o messages.pot dateiname.glade.h

* die messages.pot mit poedit übersetzt und die *.mo hierhin speichern:
* programmverzeichnis/locale/de/LC_MESSAGES/dateiname.mo

Code: Alles auswählen

import locale
import gettext

def main():
	APP = 'programmname'
	DIR = 'locale'
	try: locale.setlocale(locale.LC_ALL, '')					# locale language, e.g.: de_CH.utf8
	except locale.Error: locale.setlocale(locale.LC_ALL, 'en_US.utf8')
        # english for all untranslated languages
	locale.bindtextdomain(APP, DIR)
	gettext.bindtextdomain(APP, DIR)
	gettext.textdomain(APP)
	_ = gettext.gettext

class DasFenster:
	def __init__(self, APP):
		builder = gtk.Builder()
		builder.set_translation_domain(APP)
		builder.add_from_file("dateiname.glade")
Der Code ist natürlich unvollständig und zeigt nur die für die Internationalisierung relevanten Teile.
Antworten