He creado una aplicación que me gustaría enviar a través del proceso de desarrollo de aplicaciones de Ubuntu . Uno de los requisitos para el proceso es que, cuando se instalan, todos los archivos van al /opt/extras.ubuntu.com/<appname>
directorio.
A través de cambios en el empaque y con la ayuda de otros, lo he logrado, pero ahora me enfrento a un nuevo problema: cuando se ejecuta desde /opt
las traducciones de mi aplicación no se están cargando.
Lo que sucede es lo siguiente: a menos que se especifique lo contrario, los archivos binarios (archivos MO) que contienen traducciones para una aplicación se cargan desde /usr/share/locale
(o en el caso de Ubuntu, desde /usr/share/locale-langpack
), pero en mi aplicación, debido al /opt
requisito, se instalan en /opt/extras.ubuntu.com/qreator/locale
.
En teoría, eso está bien, ya que gettext permite especificar una ubicación alternativa para cargar traducciones, así que agrego la bindtextdomain
llamada para lograr eso:
import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')
Eso funciona bien hasta cierto punto: todos los mensajes que salen en la línea de comando aparecen traducidos como se esperaba. Pero no resuelve el problema principal : cargar las traducciones de la IU Glade requiere especificar el dominio de traducción una vez más (el equivalente a la gettext.textdomain('qreator')
llamada anterior), pero no permite especificar desde dónde cargar las traducciones (es decir, el equivalente de Glade a bindtextdomain
, que lamentablemente no existe). Aquí hay un extracto del código que estoy usando:
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)
Esto significa esencialmente que las traducciones de la interfaz de usuario no se pueden cargar si su aplicación está instalada /opt
.
Estoy bastante atrapado en este punto. ¿Alguna idea sobre cómo hacer que Glade cargue traducciones en /opt/extras.ubuntu.com/qreator/share/locale/
lugar de /usr/share/locale
?
fuente
Respuestas:
He encontrado una solución: use el módulo de configuración regional de Python en lugar de gettext
Gracias a Juha Sahakangas en el canal # gtk + IRC por proporcionar la explicación:
fuente