पीईजीटीके में आप जीटीके.बिल्डर का भी उपयोग कर सकते हैं। तदनुसार PyGTK Gtk.Builder प्रलेखन के लिए:
http://developer.gnome.org/pygtk/stable/class-gtkbuilder.html#properties-gtkbuilder
अनुवाद जब वे गुण मान इंटरफ़ेस विवरण में अनुवाद के रूप में चिह्नित किया गया है अनुवाद करने के लिए इस्तेमाल किया डोमेन। यदि अनुवाद डोमेन कोई नहीं है, तो GtkBuilder gettext() का उपयोग करता है, अन्यथा dgettext()। डिफ़ॉल्ट मान: कोई नहीं
यही है, Gtk.Builder "सी लाइब्रेरी" से dgettext() का उपयोग करता है। समस्या यह है कि पायथन का गेटटेक्स्ट मॉड्यूल, bindtextdomain(), किसी कारण से मुझे अज्ञात, "सी लाइब्रेरी" सेट न करें। विकल्प लोकेल मॉड्यूल का उपयोग करना है जो उस इंटरफेस को भी उजागर करता है।
http://docs.python.org/library/locale#access-to-message-catalogs
स्थान मॉड्यूल सिस्टम कि इस इंटरफेस प्रदान पर सी पुस्तकालय के gettext इंटरफेस को उजागर करता है: अजगर स्थान मॉड्यूल प्रलेखन से। इसमें फ़ंक्शन gettext(), dgettext(), dcgettext(), textdomain(), bindtextdomain(), और bind_textdomain_codeset() शामिल हैं। ये गेटटेक्स्ट मॉड्यूल में समान कार्यों के समान हैं, लेकिन संदेश कैटलॉग के लिए सी लाइब्रेरी के बाइनरी प्रारूप का उपयोग करें, और संदेश कैटलॉग को ढूंढने के लिए सी लाइब्रेरी के खोज एल्गोरिदम का उपयोग करें।
पायथन अनुप्रयोगों को आम तौर पर इन कार्यों को आमंत्रित करने की आवश्यकता नहीं होती है, और इसके बजाय गेटटेक्स्ट का उपयोग करना चाहिए। इस नियम के लिए एक ज्ञात अपवाद वे अनुप्रयोग हैं जो अतिरिक्त सी पुस्तकालयों से लिंक करते हैं जो आंतरिक रूप से gettext() या dcgettext() को आमंत्रित करते हैं। इन अनुप्रयोगों के लिए, टेक्स्ट डोमेन को बाध्य करने के लिए आवश्यक हो सकता है, ताकि पुस्तकालय ठीक से उनके संदेश कैटलॉग का पता लगा सकें।
जो वर्तमान मामला है। क्या एक हैक: एस
यह बात करेंगे, test.py दायर:
from gi.repository import Gtk
from os.path import abspath, dirname, join
import gettext
import locale
APP = 'myapp'
WHERE_AM_I = abspath(dirname(__file__))
LOCALE_DIR = join(WHERE_AM_I, 'mo')
locale.setlocale(locale.LC_ALL, '')
locale.bindtextdomain(APP, LOCALE_DIR)
gettext.bindtextdomain(APP, LOCALE_DIR)
gettext.textdomain(APP)
_ = gettext.gettext
print('Using locale directory: {}'.format(LOCALE_DIR))
class MyApp(object):
def __init__(self):
# Build GUI
self.builder = Gtk.Builder()
self.glade_file = join(WHERE_AM_I, 'test.glade')
self.builder.set_translation_domain(APP)
self.builder.add_from_file(self.glade_file)
print(_('File'))
print(_('Edit'))
print(_('Find'))
print(_('View'))
print(_('Document'))
# Get objects
go = self.builder.get_object
self.window = go('window')
# Connect signals
self.builder.connect_signals(self)
# Everything is ready
self.window.show()
def main_quit(self, widget):
Gtk.main_quit()
if __name__ == '__main__':
gui = MyApp()
Gtk.main()
मेरे Glade फ़ाइल test.glade:
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<object class="GtkWindow" id="window">
<property name="can_focus">False</property>
<property name="window_position">center-always</property>
<property name="default_width">400</property>
<signal name="destroy" handler="main_quit" swapped="no"/>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">File</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Edit</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Find</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">View</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Document</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
में मो बनाने के लिए याद रखें mo/LANG/LC_MESSAGES/myapp.mo के साथ निकाले गए .po पर आधारित:
xgettext --keyword=translatable --sort-output -o en.po test.glade
यह क्या लगता है जैसे:
तरह
क्या आपने सामान्य 'gettext.bindtextdomain() 'की कोशिश की है? – ptomato