Я создал приложение, которое я хотел бы отправить через процесс разработки приложений 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')
Это хорошо работает до определенного момента: все сообщения, которые выводятся в командной строке, затем отображаются переведенными, как и ожидалось. Но это не решает основной проблемы : чтобы загрузить переводы из пользовательского интерфейса Glade, необходимо еще раз указать домен перевода (эквивалент 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
.
Я в значительной степени застрял в этой точке. Любые идеи о том, как заставить Glade загружать переводы /opt/extras.ubuntu.com/qreator/share/locale/
вместо /usr/share/locale
?
источник
Ответы:
Я нашел решение: используйте языковой модуль Python вместо gettext
Спасибо Юхе Саакангасу на канале # gtk + IRC за предоставленное объяснение:
источник