Eu criei um aplicativo que gostaria de enviar por meio do processo de desenvolvedor de aplicativos do Ubuntu . Um dos requisitos para o processo é que, quando instalados, todos os arquivos entrem no diretório /opt/extras.ubuntu.com/<appname>
.
Por meio de mudanças no empacotamento e com a ajuda de outras pessoas, eu consegui isso, mas agora estou enfrentando um novo problema: ao executar a partir de /opt
, as traduções do meu aplicativo não estão sendo carregadas.
O que acontece é o seguinte: a menos que especificado de outra forma, os arquivos binários (arquivos MO) contendo traduções para um aplicativo são carregados de /usr/share/locale
(ou no caso do Ubuntu, de /usr/share/locale-langpack
), mas no meu aplicativo, devido ao requisito /opt
, eles são instalados em /opt/extras.ubuntu.com/qreator/locale
.
Isso é bom teoricamente, já que gettext permite especificar um local alternativo para carregar traduções, então eu adiciono o < a href="http://docs.python.org/library/gettext.html#gettext.bindtextdomain"> bindtextdomain
ligue para conseguir isso:
import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')
Isso funciona bem até certo ponto: todas as mensagens que são exibidas na linha de comando aparecem traduzidas como esperado. Mas não resolve o problema principal : para carregar as traduções da interface do usuário o Glade requer a especificação do domínio de tradução mais uma vez (o equivalente à chamada gettext.textdomain('qreator')
acima), mas não permite especificar onde para carregar traduções (isto é, o Glade equivalente a bindtextdomain
, que infelizmente não existe). Aqui está uma extração do código que estou 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)
Isso significa essencialmente que as traduções da interface do usuário não podem ser carregadas se o aplicativo estiver instalado em /opt
.
Estou bastante preso neste momento. Alguma idéia de como fazer o Glade carregar traduções de /opt/extras.ubuntu.com/qreator/share/locale/
em vez de /usr/share/locale
?