ฉันได้สร้างโปรแกรมประยุกต์ที่ฉันต้องการที่จะส่งผ่าน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)
นี้เป็นหลักหมายความว่าการแปลจาก UI /opt
ไม่สามารถโหลดแอปของคุณถ้ามีการติดตั้งใน
ฉันติดอยู่ที่จุดนี้มาก แนวคิดใด ๆ เกี่ยวกับวิธีการแปล Glade ที่โหลดจาก/opt/extras.ubuntu.com/qreator/share/locale/
แทนที่จะเป็น/usr/share/locale
อย่างไร