Saya telah membuat aplikasi yang ingin saya kirim melalui proses pengembang aplikasi Ubuntu . Salah satu persyaratan untuk proses ini adalah bahwa ketika diinstal, semua file masuk ke /opt/extras.ubuntu.com/<appname>
direktori.
Melalui perubahan dalam pengemasan dan dengan bantuan dari orang lain saya telah mencapainya, tetapi sekarang saya menghadapi masalah baru: ketika menjalankan dari /opt
terjemahan dari aplikasi saya tidak dimuat.
Apa yang terjadi adalah sebagai berikut: kecuali ditentukan sebaliknya, file biner (file MO) yang berisi terjemahan untuk aplikasi diambil dari /usr/share/locale
(atau dalam kasus Ubuntu, dari /usr/share/locale-langpack
), tetapi dalam aplikasi saya, karena /opt
persyaratan, mereka diinstal di /opt/extras.ubuntu.com/qreator/locale
.
Secara teori itu bagus, karena gettext memungkinkan menentukan lokasi alternatif untuk memuat terjemahan, jadi saya menambahkan bindtextdomain
panggilan untuk mencapai itu:
import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')
Itu berfungsi dengan baik hingga titik: semua pesan yang dihasilkan pada baris perintah kemudian muncul diterjemahkan seperti yang diharapkan. Tapi itu tidak menyelesaikan masalah utama : untuk memuat terjemahan dari UI Glade memerlukan menentukan domain terjemahan sekali lagi (setara dengan gettext.textdomain('qreator')
panggilan di atas), tetapi tidak membiarkan menentukan dari mana memuat terjemahan dari (yaitu setara dengan Glade untuk bindtextdomain
, yang sayangnya tidak ada). Berikut ekstrak kode yang saya gunakan:
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)
Ini pada dasarnya berarti bahwa terjemahan dari UI tidak dapat dimuat jika aplikasi Anda diinstal /opt
.
Saya cukup macet saat ini. Adakah ide tentang bagaimana membuat Glade memuat terjemahan /opt/extras.ubuntu.com/qreator/share/locale/
alih-alih /usr/share/locale
?