/ অপ্ট থেকে গ্ল্যাড লোড অনুবাদ কীভাবে করবেন


9

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


Gtk.Builder এ আরও জ্ঞানী কারও সাথে কথা বলার পরে, আমি একটি বাগ ফাইল করেছি: bugzilla.gnome.org/show_bug.cgi?id=676543
ডেভিড প্লানেলা


আপনি কি আপনার অজগর কোডটিতে একটি সম্পূর্ণ ন্যূনতম চলমান উদাহরণ অন্তর্ভুক্ত করতে পারেন? আমি এটি সম্পর্কে জানার জন্য খুশি, তবে আমি নিশ্চিত না যে কোনও জিটিকে.বিল্ডার () পেতে আমি কী আমদানিগুলি মিস করছি।
স্ল্যাংসেক

এন / এম, স্পষ্টতই এটি কেবল 'আমদানি জিটিকে';)
স্ল্যাংকেসেক

1
ডান - আমি ছেড়ে দিচ্ছি, গ্লেডের জন্য ধরার জন্য gettext.bindtextdomain () পাওয়ার কোনও বুদ্ধিমান উপায় নেই বলে মনে হচ্ছে: /
স্ল্যাঙ্গাসেক

উত্তর:


10

আমি একটি সমাধান পেয়েছি: গেটেক্সটেক্সের পরিবর্তে লোকেল পাইথন মডিউলটি ব্যবহার করুন

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

ব্যাখ্যাটি প্রদানের জন্য # জিটিকে + আইআরসি চ্যানেলে জুহা সহগঙ্গাসকে ধন্যবাদ:

এই নির্দিষ্ট ক্ষেত্রে লোকেল মডিউলটি গেটেক্সটেক্সের পরিবর্তে ব্যবহার করা দরকার । পাইথনের গেটেক্সটাক্স মডিউলটি খাঁটি পাইথন, এটি আসলে পাঠ্য ডোমেনটিকে এমনভাবে সেট করে না যেভাবে সি লাইব্রেরিটি পড়তে পারে, তবে লোকেল (libc কল করে) করে। যতক্ষণ না এটি হয়ে যায়, GtkBuilder ইতিমধ্যে আপনি যেভাবে এটি জিজ্ঞাসা করছেন সেভাবে কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.