Ubuntu uygulama geliştirici süreci aracılığıyla göndermek istediğim bir uygulama oluşturdum . İşlem için gereksinimlerden biri, yüklendiğinde tüm dosyaların /opt/extras.ubuntu.com/<appname>dizine girmesidir .
Paketlemedeki değişiklikler ve diğerlerinin yardımıyla bunu başardım, ancak şimdi yeni bir sorunla karşılaşıyorum: /optUygulamamın çevirilerinden çalışırken yüklenmiyor.
Ne olur: aksi belirtilmedikçe, bir uygulama için çeviriler içeren ikili dosyalar (MO dosyaları) yüklenir /usr/share/locale(veya Ubuntu durumunda, itibaren /usr/share/locale-langpack), ancak benim uygulamada, /optgereksinim nedeniyle , /opt/extras.ubuntu.com/qreator/locale.
Gettext , çevirileri yüklemek için alternatif bir konum belirtmeye izin verdiği için bu teoride iyidir, bu yüzden bunu bindtextdomainbaşarmak için çağrıyı ekliyorum :
import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')
Bu bir noktaya kadar iyi çalışır: komut satırında çıkan tüm iletiler beklendiği gibi çevrilmiş olarak görünür. Ancak ana sorunu çözmez : UI Glade'den çevirileri yüklemek için çeviri alanının bir kez daha belirtilmesi gerekir ( gettext.textdomain('qreator')yukarıdaki çağrıya eşdeğerdir ), ancak çevirilerin nereden yükleneceğini belirtmeye izin vermez (yani, Glade, bindtextdomainne yazık ki mevcut değil). İşte kullandığım kodun bir özeti:
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)
Bu, esasen, uygulamanız yüklüyse kullanıcı arayüzünden çevirilerin yüklenemeyeceği anlamına gelir /opt.
Bu noktada oldukça sıkışıp kaldım. /opt/extras.ubuntu.com/qreator/share/locale/Bunun yerine Glade yük çevirilerini nasıl yapacağınız hakkında bir fikriniz var /usr/share/localemı?