2012-11-15 11 views
6

Locale predefinito nel mio sistema (Linux) - en_US. Quando cambio la locale in russo (LANG = ru_RU ./show_form.py), la stringa python "ciao a me" mostra correttamente (in console), altra (forma glade) - in inglese. (LANG = ru_RU.utf-8 ./show_form.py - stesso risultato).pygtk + glade + localization

Cosa sto sbagliando?

devo semplice codice Python per esempio (show_form.py):

#!/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() 

e .mo file per alcuni laguages. File .po in basso:

# 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 "галочка" 

e file en_US (come questo con differente msgstr). E forma piccola radura con etichetta, pulsante, casella di controllo.

Upd:

I miei file .mo stringhe di creazione:

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 

correggo .po file dopo questo.

E alla fine:

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: Soluzione

-wTree = gtk.glade.XML("localize.glade") 
gtk.glade.bindtextdomain(APP, DIR) 
+wTree = gtk.glade.XML("localize.glade", "window1", APP) 

risposta

1

È necessario utilizzare intltool di tradurre i file Glade.

+1

Domani aggiungerò i miei comandi di creazione di file .mo alla sezione "Aggiornamenti:" –

+0

Come potete vedere, io uso intltool ma questo non è d'aiuto. –

+0

Devi anche "intltool-unire" le traduzioni nel file glade, credo. – ptomato

Problemi correlati