मैंने एक एप्लिकेशन बनाया है जिसे मैं उबंटू ऐप डेवलपर प्रक्रिया के माध्यम से सबमिट करना चाहता हूं । प्रक्रिया के लिए आवश्यकताओं में से एक यह है कि स्थापित होने पर, सभी फाइलें /opt/extras.ubuntu.com/<appname>निर्देशिका में जाती हैं।
पैकेजिंग में बदलाव और दूसरों की मदद से जो मैंने हासिल किया है, लेकिन अब मुझे एक नई समस्या का सामना करना पड़ रहा है: जब /optमेरे ऐप से अनुवाद से लोड नहीं हो रहा है।
निम्नलिखित क्या होता है: जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, एक आवेदन के लिए अनुवाद /usr/share/locale(या उबंटू के मामले में /usr/share/locale-langpack) से भरी हुई बाइनरी फाइलें (एमओ फाइलें ), लेकिन मेरे ऐप में, /optआवश्यकता के कारण , वे स्थापित हैं /opt/extras.ubuntu.com/qreator/locale।
सिद्धांत रूप में यह ठीक है, क्योंकि गेटटेक्स्ट अनुवादों को लोड करने के लिए एक वैकल्पिक स्थान निर्दिष्ट करने की अनुमति देता है, इसलिए मैं bindtextdomainइसे प्राप्त करने के लिए कॉल जोड़ता हूं :
import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')
यह एक बिंदु तक अच्छी तरह से काम करता है: सभी संदेश जो कमांड लाइन पर आउटपुट होते हैं, फिर अपेक्षित रूप से अनुवादित होते हैं। लेकिन यह मुख्य समस्या को हल नहीं करता है : यूआई ग्लेड से अनुवादों को लोड करने के लिए अनुवाद डोमेन को एक बार फिर निर्दिष्ट करने की आवश्यकता है ( gettext.textdomain('qreator')ऊपर दी गई कॉल के बराबर ), लेकिन यह निर्दिष्ट नहीं होने देता है कि अनुवाद कहां से लोड करना है (यानी ग्लेड के बराबर) 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।
मैं इस बिंदु पर बहुत फंस गया हूं। के /opt/extras.ubuntu.com/qreator/share/locale/बजाय से ग्लेड लोड अनुवाद बनाने के लिए कैसे पर कोई विचार /usr/share/locale?