Ich habe eine Anwendung erstellt, die ich über den Ubuntu-App-Entwicklerprozess einreichen möchte . Eine der Anforderungen für den Prozess ist, dass bei der Installation alle Dateien in das /opt/extras.ubuntu.com/<appname>
Verzeichnis verschoben werden.
Durch Änderungen in der Verpackung und mit Hilfe anderer habe ich das erreicht, aber jetzt stehe ich vor einem neuen Problem: Beim Ausführen werden /opt
die Übersetzungen aus meiner App nicht geladen.
Folgendes passiert: Sofern nicht anders angegeben, werden die Binärdateien (MO-Dateien), die Übersetzungen für eine Anwendung enthalten, von /usr/share/locale
(oder im Fall von Ubuntu von /usr/share/locale-langpack
) geladen , aber in meiner App werden sie aufgrund der /opt
Anforderungen in installiert /opt/extras.ubuntu.com/qreator/locale
.
Das ist theoretisch in Ordnung, da gettext die Angabe eines alternativen Speicherorts zum Laden von Übersetzungen ermöglicht. Deshalb füge ich den bindtextdomain
Aufruf hinzu, um dies zu erreichen:
import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')
Das funktioniert bis zu einem gewissen Punkt: Alle Nachrichten, die in der Befehlszeile ausgegeben werden, werden dann wie erwartet übersetzt. Aber es ist nicht das Hauptproblem lösen : die Übersetzungen aus dem UI Glade laden erfordert , sobald die Übersetzung Domain Angabe mehr (das entspricht den gettext.textdomain('qreator')
Aufruf oben), aber es funktioniert nicht zulassen , wo die Angabe laden Übersetzungen aus (dh der Glade entspricht bindtextdomain
, was leider nicht existiert). Hier ist ein Auszug des Codes, den ich verwende:
builder = Gtk.Builder()
builder.set_translation_domain('qreator')
# There isn't a way to tell glade to load translations from
# somewhere else than /usr/share/locale here
builder.add_from_file(ui_filename)
Dies bedeutet im Wesentlichen, dass Übersetzungen von der Benutzeroberfläche nicht geladen werden können, wenn Ihre App installiert ist /opt
.
Ich stecke an diesem Punkt ziemlich fest. Irgendwelche Ideen, wie man Glade-Übersetzungen /opt/extras.ubuntu.com/qreator/share/locale/
anstelle von erstellt /usr/share/locale
?
quelle
Antworten:
Ich habe eine Lösung gefunden: Verwenden Sie das Gebietsschema Python-Modul anstelle von gettext
Vielen Dank an Juha Sahakangas vom # gtk + IRC-Kanal für die Erklärung:
quelle