2012-11-15 14 views
6

मेरे सिस्टम (लिनक्स) में डिफ़ॉल्ट लोकेल - 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) 

उत्तर

1

आप intltool उपयोग करने के लिए अपने Glade फ़ाइलों का अनुवाद करने की जरूरत है।

+1

कल मैं अपनी .mo फाइलें सृजन आदेश को "अद्यतन:" –

+0

में जोड़ दूंगा जैसा कि आप देख सकते हैं कि मैं intltool का उपयोग करता हूं लेकिन यह मदद नहीं करता है। –

+0

मुझे विश्वास है कि अनुवादों को वापस ग्लैड फ़ाइल में 'intltool-merge' करना होगा, मुझे विश्वास है। – ptomato

संबंधित मुद्दे