Я створив додаток, який я хотів би подати через процес розробника додатків 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')
Це добре працює до певного моменту: всі повідомлення, які виводяться в командному рядку, потім видаються перекладеними, як очікувалося. Але це не вирішує основну проблему : для завантаження перекладів з UI 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
?