J'ai créé une application que j'aimerais soumettre via le processus de développement d'applications Ubuntu . L'une des exigences du processus est que, une fois installés, tous les fichiers vont dans le /opt/extras.ubuntu.com/<appname>
répertoire.
Grâce à des changements dans l'emballage et avec l'aide des autres, j'y suis parvenu, mais maintenant je suis confronté à un nouveau problème: lors de l'exécution à partir /opt
des traductions de mon application ne sont pas chargées.
Ce qui se passe est le suivant: sauf indication contraire, les fichiers binaires (fichiers MO) contenant les traductions d'une application sont chargés depuis /usr/share/locale
(ou dans le cas d'Ubuntu, depuis /usr/share/locale-langpack
), mais dans mon application, en raison de l' /opt
exigence, ils sont installés dans /opt/extras.ubuntu.com/qreator/locale
.
C'est très bien en théorie, car gettext permet de spécifier un autre emplacement pour charger les traductions, donc j'ajoute l' bindtextdomain
appel pour y parvenir:
import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')
Cela fonctionne bien jusqu'à un certain point: tous les messages qui sont sortis sur la ligne de commande apparaissent alors traduits comme prévu. Mais cela ne résout pas le problème principal : pour charger les traductions à partir de l'interface utilisateur, Glade nécessite de spécifier à nouveau le domaine de traduction (l'équivalent de l' gettext.textdomain('qreator')
appel ci-dessus), mais il ne permet pas de spécifier d'où charger les traductions (c'est-à-dire l'équivalent de Glade à bindtextdomain
, qui n'existe malheureusement pas). Voici un extrait du code que j'utilise:
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)
Cela signifie essentiellement que les traductions de l'interface utilisateur ne peuvent pas être chargées si votre application est installée dans /opt
.
Je suis à peu près coincé à ce stade. Des idées sur la façon de faire des traductions de chargement de Glade /opt/extras.ubuntu.com/qreator/share/locale/
au lieu de /usr/share/locale
?
la source
Réponses:
J'ai trouvé une solution: utilisez le module Python local au lieu de gettext
Merci à Juha Sahakangas sur la chaîne # gtk + IRC pour avoir fourni l'explication:
la source