/ Opt'dan Glade yük çevirileri nasıl yapılır


9

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ı?


Gtk.Builder hakkında daha bilgili biriyle konuştuktan sonra, bir hata bildirdim: bugzilla.gnome.org/show_bug.cgi?id=676543
David Planella

Ben de bir çözüm buldum, ama benim için işe yaramadı gibi görünüyor - işte burada: bugs.debian.org/cgi-bin/bugreport.cgi?bug=114461#12
David Planella

Python kodunuza minimum düzeyde çalıştırılabilir bir örnek ekleyebilir misiniz? Bunu incelemek için mutluyum, ancak bir Gtk.Builder () almak için hangi ithalatları kaçırdığımdan emin değilim.
slangasek

n / m, görünüşe göre bu sadece 'import gtk';)
slangasek

1
sağ - pes ediyorum, glade için tutunmak için gettext.bindtextdomain () almak için aklı başında bir yolu yok gibi görünüyor: /
slangasek

Yanıtlar:


10

Bir çözüm buldum: gettext yerine yerel Python modülünü kullan

import locale
from locale import gettext as _
locale.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
locale.textdomain('qreator')

# Gtk + IRC kanalındaki açıklama için Juha Sahakangas'a teşekkürler:

Bu özel durum için gettext yerine yerel ayar modülünün kullanılması gerekir . Python'un gettext modülü saf python'dur, aslında metin alanını C kütüphanesinin okuyabileceği şekilde ayarlamaz, ancak yerel ayar yapar (libc çağırarak). Bu olduğu sürece, GtkBuilder zaten istediğiniz şekilde çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.