मेरे सिस्टम (लिनक्स) में डिफ़ॉल्ट लोकेल - en_US। जब मैं लोकेल को रूसी (LANG = ru_RU ./show_form.py) में बदलता हूं, तो पाइथन स्ट्रिंग "मेरे लिए हैलो" सही ढंग से (कंसोल में), अन्य (ग्लैड फॉर्म) - अंग्रेजी में दिखाती है। (LANG = ru_RU.utf-8 ./show_form.py - एक ही परिणाम)।pygtk + glade + स्थानीयकरण
मैं क्या गलत कर रहा हूं? कुछ भाषाओं के लिए
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pygtk, gtk, gtk.glade
import locale, gettext
APP="show_form"
DIR="locale"
locale.setlocale(locale.LC_ALL, '')
gettext.bindtextdomain(APP, DIR)
gettext.textdomain(APP)
lang = gettext.translation(APP, DIR)
_ = lang.gettext
gettext.install(APP, unicode=False, codeset='utf-8', localedir=DIR)
print _("hello to me")
wTree = gtk.glade.XML("localize.glade")
gtk.glade.bindtextdomain(APP, DIR)
window = wTree.get_widget("window1")
window.connect("delete_event", lambda wid, we: gtk.main_quit())
window.show_all()
gtk.main()
और मो फाइलें:
मैं उदाहरण (show_form.py) के लिए सरल अजगर कोड है। नीचे दी गई .po फ़ाइलें:
# Russian translations for PACKAGE package.
# Copyright (C) 2012 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# <[email protected]>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-11-14 13:54+0300\n"
"PO-Revision-Date: 2012-11-14 13:58+0300\n"
"Last-Translator: <[email protected]>\n"
"Language-Team: Russian\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 16bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: show_form.py:14
msgid "hello to me"
msgstr "привет мне"
#: localize.glade.h:1
msgid "label text"
msgstr "метка"
#: localize.glade.h:2
msgid "button text"
msgstr "кнопка"
#: localize.glade.h:3
msgid "checkbutton text"
msgstr "галочка"
और en_US फ़ाइल (इस तरह के विभिन्न संदेश के साथ)। और लेबल, बटन, चेकबॉक्स के साथ छोटे ग्लेड फॉर्म।
Upd:
मेरे मो फाइलें निर्माण तार:
intltool-extract --type=gettext/glade localize.glade
xgettext --language=Python --keyword=_ --keyword=N_ --output=show_form.pot show_form.py localize.glade.h
msginit --locale=ru --input=show_form.pot
msginit --locale=en_US --input=show_form.pot
msginit --locale=de_DE --input=show_form.pot
मैं इस के बाद फ़ाइलों पुलिस को ठीक करें।
और अंत में:
msgfmt ru.po -o locale/ru/LC_MESSAGES/show_form.mo
msgfmt en_US.po -o locale/en_US/LC_MESSAGES/show_form.mo
msgfmt de.po -o locale/de/LC_MESSAGES/show_form.mo
Upd2: समाधान
-wTree = gtk.glade.XML("localize.glade")
gtk.glade.bindtextdomain(APP, DIR)
+wTree = gtk.glade.XML("localize.glade", "window1", APP)
कल मैं अपनी .mo फाइलें सृजन आदेश को "अद्यतन:" –
में जोड़ दूंगा जैसा कि आप देख सकते हैं कि मैं intltool का उपयोग करता हूं लेकिन यह मदद नहीं करता है। –
मुझे विश्वास है कि अनुवादों को वापस ग्लैड फ़ाइल में 'intltool-merge' करना होगा, मुझे विश्वास है। – ptomato