如何本地化Python的argparse模块,而无需打补丁?

7
一种本地化的命令行应用程序,当消息的某些部分是用户语言而其他部分是英语时,看起来很奇怪。 我不知道是否安装Python 3从源代码时搞砸了什么,似乎没有*.mo文件,因此argparse(在整个过程中)并不支持本地化。 API似乎也没有提供本地化的方法。或者我错过了吗? 我可以打补丁argparse.py,但我不会这样做,因为我希望它是可移植的,我不同意建议用户修补他们的Python安装。 简洁问题:如何本地化argpase而不打补丁Python标准库? 相关问题:这可能吗?
1个回答

5

默认情况下,argparse 使用 gettext 模块来翻译消息,因此如果你想轻松地进行翻译,则可以使用该模块。

要生成 *.pot 文件(翻译后可以转换为 *.mo 文件),可以使用内置的 python gettext 模块中提供的 pygettext 程序。

用法:

python pygettext.py argparse.py

这将生成一个messages.pot文件,您可以对其进行翻译,然后只需生成.mo文件(有许多方法可以做到这一点,只需Google即可)。
有关pygettext的更多信息,请参见Python手册中与此主题相关的部分:国际化您的程序和模块

我在argparse.py中错过了_(,谢谢您的提醒。实际上,我可以生成一个POT文件,然后使用msgcat将其连接到软件包的POT文件中,例如:msgcat --to-code=UTF-8 --output=all-messages.pot package-messages.pot argparse.pot。我之前不知道pygettext;我测试了一下,但是由于它输出所有ASCII字符以外的字符的转义序列,比如“”(在Virtaal中无法阅读),所以我会继续使用xgettext - Hibou57
嗨,我无法按照你描述的那样完成这个任务。我正在编写一个小程序,需要(不是必须,但最好)将“usage:”字符串在帮助信息中翻译成西班牙语。你提到的方法需要将“.po”附加到某些内容中,这样如何实现可移植性呢?我不希望用户做任何事情就可以获取这个小字符串的翻译。谢谢! - JorgeeFG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接