列出PyGTK用户界面字符串的可用语言

2024-05-18 07:55:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在清理PyGTK应用程序中的一些本地化和翻译设置。该应用程序只打算在GNU/Linux系统下使用。我们想要的功能之一是让用户选择应用程序所使用的语言(有些人更喜欢自己的母语,有些人喜欢英语以保持一致性,有些人喜欢法语,因为它听起来很浪漫,等等)。在

为了实现这一点,我需要实际显示一个包含各种可用语言的组合框。我怎样才能得到这份名单?事实上,我需要一个语言代码对(“en”、“ru”等)和母语中的语言名称(“English(US)”,“Руские”)的列表。在

如果我必须实现一个强力方法,我会做一些类似的事情:在系统语言环境目录(例如“/usr/share/locale”)中查找包含相对路径“LC”“MESSAGES”的所有语言代码dir(例如“en/”)/我们的AppName.mo". 在

有没有更程式化的方法?在


Tags: 方法代码用户gnu功能语言应用程序linux
2条回答

以下是一个受获取文本。查找,但需要查看存在哪些文件,而不需要从Babel获得语言列表。它返回区域代码,您仍然需要使用babel来获取每个区域的显示名称。在

def available_langs(self, domain=None, localedir=None):
    if domain is None:
        domain = gettext._current_domain
    if localedir is None:
        localedir = gettext._default_localedir
    files = glob(os.path.join(localedir, '*', 'LC_MESSAGES', '%s.mo' % domain))
    langs = [file.split(os.path.sep)[-3] for file in files]
    return langs

您可以使用gettext来查找翻译是否可用并已安装,但是您需要babel(在我的Ubuntu系统上,它是作为包python-pybabel)来获取名称的。以下是返回所需列表的代码段:

import gettext
import babel

messagefiles = gettext.find('OurAppName', 
    languages=babel.Locale('en').languages.keys(),
    all=True)
messagefiles.sort()

languages = [path.split('/')[-3] for path in messagefiles]
langlist = zip(languages, 
    [babel.Locale.parse(lang).display_name for lang in languages])

print langlist

要在程序中间更改语言,请参阅relevant section of the Python docs。这可能需要重新构建所有的GTK小部件,尽管我不确定。在

有关gettext.find的更多信息,这里也是link。在

相关问题 更多 >