简体   繁体   English

pygtk+glade+定位

[英]pygtk+glade+localization

Default locale in my system (Linux) - en_US.我的系统 (Linux) 中的默认语言环境 - en_US。 When I change locale to russian (LANG=ru_RU ./show_form.py), python string "hello to me" shows correctly (in console), other (glade form) - in english.当我将语言环境更改为俄语 (LANG=ru_RU ./show_form.py) 时,python 字符串“hello to me”正确显示(在控制台中),其他(空地形式) - 英语。 (LANG=ru_RU.utf-8 ./show_form.py - same result). (LANG=ru_RU.utf-8 ./show_form.py - 结果相同)。

What am I doing wrong?我究竟做错了什么?

I have simple python code for example (show_form.py):例如,我有简单的 python 代码(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()

and .mo files for some laguages.和一些语言的 .mo 文件。 .po files below: .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.       
#  <asc@grodno>, 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:  <aaa@bbb>\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 "галочка"

and en_US file (like this with different msgstr).和 en_US 文件(像这样使用不同的 msgstr)。 And small glade form with label, button, checkbox.和带有标签、按钮、复选框的小空地形式。

Upd:更新:

My .mo files creation strings:我的 .mo 文件创建字符串:

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

I correct .po files after this.在这之后我更正了 .po 文件。

And at the end:最后:

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: Solution Upd2:解决方案

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

您需要使用intltool来翻译您的 Glade 文件。

That works nice on gtk2, however if you are using GTK3, things get messy...这在 gtk2 上效果很好,但是如果您使用 GTK3,事情会变得混乱......

Take a look at:看一眼:

Using locale to bind glade i18n 使用语言环境绑定 Glade i18n

The actual title is different but it does the trick.实际标题不同,但它确实有效。 I still have problems with stock-buttons, but the rest of my app began to be i18ned我的股票按钮仍然有问题,但我的应用程序的其余部分开始被 i18ned

From this .这个 It seems that your python code get wrong order.看来您的python 代码顺序错误。

lang = gettext.translation(APP, DIR)
lang.install(APP, unicode=False, codeset='utf-8', localedir=DIR)
_ = lang.gettext

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM