Как заставить Glade загружать переводы из / opt

Я создал приложение, которое я хотел бы отправить с помощью процесса разработки приложений Ubuntu . Одним из требований к процессу является то, что при установке все файлы попадают в каталог /opt/extras.ubuntu.com/<appname>.

Благодаря изменениям в упаковке и помощи других я достиг этого, но теперь я столкнулся с новой проблемой: при запуске из /opt переводы из моего приложения не загружаются.

Что происходит следующим образом: если не указано иное, двоичные файлы (файлы MO), содержащие переводы для приложения, загружаются из /usr/share/locale (или в случае Ubuntu из /usr/share/locale-langpack), но в моем приложении, из-за требования /opt они установлены в /opt/extras.ubuntu.com/qreator/locale.

Теоретически это нормально, так как gettext позволяет указать альтернативное местоположение для загрузки переводов, поэтому я добавляю вызов bindtextdomain для достижения этого:

import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')
[ 1121] Это хорошо работает до определенного момента: все сообщения, которые выводятся в командной строке, затем отображаются переведенными, как и ожидалось. Но это не решает основную проблему : для загрузки переводов с поляны пользовательского интерфейса необходимо еще раз указать домен перевода (эквивалент вызова gettext.textdomain('qreator') выше), но не позволяет указать, куда загрузить переводы из (т.е. Glade, эквивалентный bindtextdomain, который, к сожалению, не существует). Вот фрагмент кода, который я использую:

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)

По сути это означает, что переводы из пользовательского интерфейса не могут быть загружены, если ваше приложение установлено в /opt.

1123 Я застрял на этом этапе. Любые идеи о том, как заставить Glade загружать переводы из /opt/extras.ubuntu.com/qreator/share/locale/ вместо /usr/share/locale?

9
задан 22 May 2012 в 10:47

1 ответ

Я нашел решение: используйте Python-модуль locale вместо gettext

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

. Спасибо Юхе Саакангасу на канале # gtk + IRC для предоставив объяснение:

Для этого конкретного случая необходимо использовать модуль locale вместо gettext . Модуль Python gettext - это чистый python, он на самом деле не устанавливает текстовую область так, как может читать библиотека C, но locale делает (вызывая libc). Пока это сделано, GtkBuilder уже работает так, как вы просите.

0
ответ дан 22 May 2012 в 10:47

Другие вопросы по тегам:

Похожие вопросы: