Come fare in modo che Glade carichi le traduzioni da / opt


9

Ho creato un'applicazione che vorrei presentare tramite il processo di sviluppo dell'app Ubuntu . Uno dei requisiti per il processo è che una volta installati, tutti i file vanno nella /opt/extras.ubuntu.com/<appname>directory.

Attraverso i cambiamenti nel packaging e con l'aiuto di altri l'ho realizzato, ma ora sto affrontando un nuovo problema: quando eseguo /optle traduzioni dalla mia app non vengono caricate.

Quello che succede è il seguente: se non diversamente specificato, i file binari (file MO) contenenti traduzioni per un'applicazione vengono caricati da /usr/share/locale(o nel caso di Ubuntu, da /usr/share/locale-langpack), ma nella mia app, a causa del /optrequisito, sono installati in /opt/extras.ubuntu.com/qreator/locale.

In teoria va bene, poiché gettext consente di specificare una posizione alternativa per caricare le traduzioni, quindi aggiungo la bindtextdomainchiamata per raggiungere questo obiettivo:

import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')

Funziona bene fino a un certo punto: tutti i messaggi che vengono emessi sulla riga di comando vengono quindi tradotti come previsto. Ma non risolve il problema principale : per caricare le traduzioni dall'interfaccia utente Glade è necessario specificare ancora una volta il dominio di traduzione (l'equivalente alla gettext.textdomain('qreator')chiamata sopra), ma non consente di specificare da dove caricare le traduzioni (ovvero l'equivalente di Glade bindtextdomain, che purtroppo non esiste). Ecco un estratto del codice che sto 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)

Ciò significa essenzialmente che le traduzioni dall'interfaccia utente non possono essere caricate se l'app è installata /opt.

Sono praticamente bloccato a questo punto. Qualche idea su come fare in modo che Glade carichi le traduzioni /opt/extras.ubuntu.com/qreator/share/locale/anziché /usr/share/locale?


Dopo aver parlato con qualcuno più esperto su Gtk.Builder, ho presentato un bug: bugzilla.gnome.org/show_bug.cgi?id=676543
David Planella,

Sono stato anche segnalato una soluzione alternativa, ma non sembra funzionare per me - eccolo qui: bugs.debian.org/cgi-bin/bugreport.cgi?bug=114461#12
David Planella,

Potresti includere un esempio eseguibile minimo completo nel tuo codice Python? Sono felice di approfondire questo, ma non sono sicuro di quali importazioni mi mancano per ottenere un Gtk.Builder ().
slangasek,

n / m, apparentemente è solo 'import gtk';)
slangasek

1
giusto - mi arrendo, sembra che non ci sia un modo sano per ottenere gettext.bindtextdomain () per prendere possesso di glade: /
slangasek

Risposte:


10

Ho trovato una soluzione: usa il modulo Python locale invece di gettext

import locale
from locale import gettext as _
locale.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
locale.textdomain('qreator')

Grazie a Juha Sahakangas sul canale # gtk + IRC per aver fornito la spiegazione:

Per questo caso particolare, è necessario utilizzare il modulo locale anziché gettext . Il modulo gettext di Python è puro Python, in realtà non imposta il dominio di testo in un modo che la libreria C può leggere, ma lo fa la locale (chiamando libc). Finché è fatto, GtkBuilder funziona già nel modo in cui lo stai chiedendo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.