Criei um aplicativo que gostaria de enviar através do processo de desenvolvedor de aplicativos Ubuntu . Um dos requisitos para o processo é que, quando instalados, todos os arquivos entram no /opt/extras.ubuntu.com/<appname>
diretório.
Através de alterações na embalagem e com a ajuda de outras pessoas, consegui isso, mas agora estou enfrentando um novo problema: ao executar /opt
as traduções do meu aplicativo, não está sendo carregado.
O que acontece é o seguinte: a menos que especificado de outra forma, os arquivos binários (arquivos MO) que contêm traduções para um aplicativo são carregados /usr/share/locale
(ou no caso do Ubuntu, a partir de /usr/share/locale-langpack
), mas no meu aplicativo, devido ao /opt
requisito, eles são instalados em /opt/extras.ubuntu.com/qreator/locale
.
Em teoria, isso é bom, pois o gettext permite especificar um local alternativo para carregar traduções, então adiciono a bindtextdomain
chamada 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 exibidas na linha de comando aparecem traduzidas conforme o esperado. Mas isso não resolve o problema principal : carregar as traduções da UI Glade requer a especificação do domínio da tradução mais uma vez (o equivalente à gettext.textdomain('qreator')
chamada acima), mas não permite especificar de onde carregar as traduções (ou seja, a Glade equivalente a bindtextdomain
, que infelizmente não existe). Aqui está um extrato 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 /opt
.
Estou praticamente preso neste momento. Alguma idéia de como fazer o Glade carregar traduções em /opt/extras.ubuntu.com/qreator/share/locale/
vez de /usr/share/locale
?
fonte
Respostas:
Encontrei uma solução: use o módulo Python da localidade em vez de gettext
Agradecemos a Juha Sahakangas no canal # gtk + IRC por fornecer a explicação:
fonte