আমি একটি অ্যাপ্লিকেশন তৈরি করেছি যা আমি উবুন্টু অ্যাপ্লিকেশন বিকাশকারী প্রক্রিয়াটির মাধ্যমে জমা দিতে চাই । প্রক্রিয়াটির অন্যতম প্রয়োজনীয়তা হ'ল ইনস্টল করা অবস্থায় সমস্ত ফাইল /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
?