wxPython官方文档中文翻译 - 国际化概述

109 阅读3分钟

官方文档:docs.wxpython.org/internation…

“国际化”(常简称为i18n)是对应用程序进行改造的过程,使得所有用户可见的文本都能被翻译成用户所选的语言,并且诸如日期、金额以及一般数字等内容都能以用户熟悉或习惯的格式显示。

展示所需内容的最简单方法是使用一个小的代码示例。

文本翻译

源码准备

在Python中,文本翻译是通过使用gettext[1]来完成的。为了确保所有的wxPython标签都能被翻译,我们将使用wx.Localewx.GetTranslation

如何准备你的源代码以便实现文本的翻译:

aString = _(u"This is a string which will be translated")

如你所见,这非常简单,你只需用翻译函数“_()”将文本括起来即可。显然,其中还有更多的细节,如下所示。

要为整个应用程序启用国际化(I18N),你需要在应用程序文件中按照以下步骤进行一些设置:

import builtins
builtins.__dict__['_'] = wx.GetTranslation

在这里,我们设置了“_”翻译函数,并通过将其添加到内置函数中,使其在整个应用程序中都能使用。

切换到不同语言所需的代码如下:

  def updateLanguage(self, lang):
        """
        将语言更新为指定语言。

        务必确保在创建新区域设置之前删除所有现有的区域设置。
        在创建新的C++对象之前,需要先删除旧的C++对象。
        而且,如果我们只是将一个新实例赋值给旧的Python变量,
        旧的C++区域设置不会被及时销毁,
        这很可能会导致程序崩溃。 

        :param string `lang`: 所支持的语言代码之一

        """
        # if an unsupported language is requested default to English
        if lang in appC.supLang:
            selLang = appC.supLang[lang]
        else:
            selLang = wx.LANGUAGE_ENGLISH

        if self.locale:
            assert sys.getrefcount(self.locale) <= 2
            del self.locale

        # create a locale object for this language
        self.locale = wx.Locale(selLang)
        if self.locale.IsOk():
            self.locale.AddCatalog(appC.langDomain)
        else:
            self.locale = None

进行实际的翻译工作

你需要提取所有由“_”函数标记的文本字符串。在可下载的压缩文件中有一个名为geni18n.py的小脚本,它会提取所有字符串并生成一个.pot文件,该文件会被放置到locale文件夹中。geni18n.py脚本还会为已定义的语言生成.mo文件。

然后将.pot文件提供给翻译人员,他们用它来为自己所翻译的语言生成一个.po文件,或者他们也可以使用.pot文件将新的或已更改的文本字符串合并到现有的.po文件中。

要进行实际的翻译工作,我们推荐使用poEdit[2] ,它允许你根据.pot文件创建或更新翻译目录(.po文件)。

示例应用程序

可下载的压缩文件中中,我们包含了一个小型示例应用程序,用于展示上述功能的实际运行情况。

  • app_base.py包含初始化代码
  • sampleapp.py是主框架/应用程序,运行这个文件就能看到实际效果
  • geni18n.py是用于生成.pot文件的脚本,它还会生成.mo文件

注意:该应用程序有一个按钮,点击后会弹出文件对话框。由于wxPython为此使用了原生控件,对话框中的文本会显示为操作系统的语言,而非app_base.py中所选的语言。

本地化概述

“本地化”,常简称为“L10n”,是使日期和数字的显示符合当地习惯的过程。

例如,“4/5/2012” 对于美国人来说意味着2012年4月5日,但对于大多数欧洲人来说,它表示2012年5月4日。

日期本地化

待办:等待编写内容

数字本地化

待办:等待编写内容

更多资源

脚注

[1]gettext - docs.python.org/library/get…

[2]poEdit - www.poedit.net/