আমি একটি অ্যাপ্লিকেশন তৈরি করেছি যা আমি উবুন্টু অ্যাপ্লিকেশন বিকাশকারী প্রক্রিয়াটির মাধ্যমে জমা দিতে চাই । প্রক্রিয়াটির অন্যতম প্রয়োজনীয়তা হ'ল ইনস্টল করা অবস্থায় সমস্ত ফাইল /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)
এর মূল অর্থ হ'ল আপনার অ্যাপ্লিকেশনটি ইনস্টল করা থাকলে ইউআই থেকে অনুবাদগুলি লোড করা যায় না /opt।
আমি এই মুহুর্তে বেশ আটকে আছি। এর /opt/extras.ubuntu.com/qreator/share/locale/পরিবর্তে গ্ল্যাড লোড অনুবাদ কীভাবে করা যায় সে সম্পর্কে কোনও ধারণা /usr/share/locale?