Utworzyłem aplikację, którą chciałbym przesłać w procesie tworzenia aplikacji Ubuntu . Jednym z wymagań tego procesu jest to, że po zainstalowaniu wszystkie pliki trafiają do /opt/extras.ubuntu.com/<appname>
katalogu.
Osiągnąłem to dzięki zmianom w opakowaniu i przy pomocy innych, ale teraz mam nowy problem: po uruchomieniu /opt
tłumaczenia z mojej aplikacji nie są ładowane.
To, co się dzieje, jest następujące: jeśli nie określono inaczej, pliki binarne (pliki MO) zawierające tłumaczenia aplikacji są ładowane z /usr/share/locale
(lub w przypadku Ubuntu z /usr/share/locale-langpack
), ale w mojej aplikacji, ze względu na /opt
wymaganie, są instalowane w /opt/extras.ubuntu.com/qreator/locale
.
Teoretycznie jest w porządku, ponieważ gettext pozwala określić alternatywną lokalizację do ładowania tłumaczeń, więc dodaję bindtextdomain
wywołanie, aby to osiągnąć:
import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')
Działa to dobrze do pewnego momentu: wszystkie komunikaty, które są wyświetlane w wierszu poleceń, wydają się być przetłumaczone zgodnie z oczekiwaniami. Ale to nie rozwiązuje głównego problemu : aby załadować tłumaczenia z interfejsu użytkownika, należy ponownie określić domenę tłumaczenia (odpowiednik gettext.textdomain('qreator')
powyższego wywołania), ale nie pozwala określić, skąd należy ładować tłumaczenia (tj. bindtextdomain
, który niestety nie istnieje). Oto fragment kodu, którego używam:
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)
Zasadniczo oznacza to, że nie można załadować tłumaczeń z interfejsu użytkownika, jeśli aplikacja jest zainstalowana /opt
.
Utknąłem w tym momencie. Jakieś pomysły na to, jak zrobić Glade ładować tłumaczenia /opt/extras.ubuntu.com/qreator/share/locale/
zamiast /usr/share/locale
?
źródło
Odpowiedzi:
Znalazłem rozwiązanie: użyj lokalnego języka Python zamiast gettext
Dziękujemy Juha Sahakangas na kanale IRC # gtk + za wyjaśnienie:
źródło