Python Tk app - 允许多种语言

时间:2014-01-10 12:27:41

标签: python internationalization tkinter

我正在用Python编写我的第一个Tk应用程序。我找不到如何创建支持屏幕文本/对话框的多种语言的UI的示例。最初我支持英语,但希望能够添加其他语言(来自文件,可能是XML),并让用户从应用程序首选项菜单中选择他们想要的语言。

有没有人对最佳方法有建议?

3 个答案:

答案 0 :(得分:2)

GUI应该使用默认语言的字符串构造其文本。因此,例如,您的代码看起来像这样:

import Tkinter as Tk
root = Tk.Tk()
root.title('Program')
menuButton = Tk.Button(root, text='Menu')
menuButton.grid(row=0, column=0)
root.mainloop()

更改语言就像根据所选语言修改每个Tk小部件一样简单。例如,

def change_language(lang):
    if lang == 'English':
        root.title('Program')
        menuButton.config(text='Menu')
    elif lang == 'Spanish':
        root.title('Programa')
        menuButton.config(text='Menú')

为了更容易编写代码,您可以将语言数据存储在一个文件(例如csv)中,将其解析为列表或词典,并具有以下内容:

english = ['Program', 'Menu']
spanish = ['Programa', 'Menú']

def change_language_2(lang):
    root.title(lang[0])
    menuButton.config(text=lang[1])

答案 1 :(得分:2)

这有很多部分。

Tk框架使用Tcl msgcat包作为其内部消息,因此您可能必须将其中的一部分用于系统提供的区域设置。可用消息存储在$::tk_library/msgs文件夹中,该文件夹通常位于Tcl / Tk安装中。

Python通常使用GNU gettext系统进行本地化,请参阅gettext python模块的描述以获取介绍。

因此,要使用户界面进行本地化,您可以在标签或文本中使用之前,通过gettext.gettext()或其别名_()运行所有用户可见文本。完成后,您可以提供PO / POT / MO格式的消息目录(请参阅polib以获取一些不错的python库来处理这些内容)。

如果你在Tcl msgcat::mc命令周围提供一个小的Python包装器,你也可以使用Tcl msgcat系统。或者您喜欢的任何其他msg目录系统,pybabel也可能值得一看。

答案 2 :(得分:0)

我建议将Babel用于python,这是一个很棒的用于文本提取,国际化和本地化的软件包。我在项目中通常所做的工作是将所有硬编码的字符串放入1个文件/文件夹(即string.py)中,并使用babel将该文件中的所有硬编码的字符串提取到目标语言的PO文件中,然后从中翻译这些文件并使用Babel进行编译。

请查看以下将Babel与Python结合使用的教程: Babel Tutorial With Python

对于那些想知道如何在Babel中使用编译文件的人来说,这是一段代码。

from babel.support import Translations
LOCALE_PATH = 'locale' # the path of the locale folder
LANGUAGE = 'en_US' # what language you wanna use
translations = Translations.load(LOCALE_PATH, [LANGUAGE])
_ = translations.gettext

print(_('Hi')) # it would be translated to the target value from the PO file

我希望会对您有所帮助