gpt4 book ai didi

python - 翻译 argparse 的内部字符串

转载 作者:行者123 更新时间:2023-12-01 04:13:27 25 4
gpt4 key购买 nike

如何翻译 Python 的 argparse 模块字符串?

例如,当您显示帮助时,它会显示“usage:”,这是可翻译的字符串,但我不知道如何在我的程序中执行此操作。

这是argparse.py的源代码部分:

def _format_usage(self, usage, actions, groups, prefix):
if prefix is None:
prefix = _('usage: ')

我无法追踪设置此前缀的方法,我认为这是内部的。

我不想将 .mo 文件附加到系统中的某个位置。理想情况下,翻译应该位于我的程序目录中,或者更好地位于源代码中。

任何帮助将不胜感激。

最佳答案

运行以下命令:

import argparse

class MyHelpFormatter(argparse.HelpFormatter):
def __init__(self, *args, **kwargs):
super(MyHelpFormatter, self).__init__(*args, **kwargs)

def _format_usage(self, usage, actions, groups, prefix):
return super(MyHelpFormatter, self)._format_usage(
usage, actions, groups, prefix if prefix else "bla: ")

class MyArgumentParser(argparse.ArgumentParser):
def __init__(self, *args, **kwargs):
kwargs['formatter_class']=MyHelpFormatter
super(MyArgumentParser, self).__init__(*args, **kwargs)


p = MyArgumentParser(description='Foo')
p.add_argument('foo', type=str)
print p.parse_args()

打印

python myargparse.py  --help
bla: myargparse.py [-h] foo

Foo

positional arguments:
foo

optional arguments:
-h, --help show this help message and exit

_('用法:') 引用文献 gettext 。在 argparse.py 的顶部,您有:

from gettext import gettext as _

您可以稍微使用一下gettext

给定一个 .po 文件:

msgid "usage: "
msgstr "foobar: "

您可以将其转换为 .mo 文件(例如 here )。

之后(其中./foo/LC_MESSAGES/messages.mo是编译.po的结果):

~/Desktop> find . -name *mo
./foo/LC_MESSAGES/messages.mo
~/Desktop> cat myargparse2.py
import argparse
import gettext
gettext.bindtextdomain(gettext.textdomain(), '.')
p = argparse.ArgumentParser(description='Foo')
p.add_argument('foo', type=str)
print p.parse_args()
~/Desktop> LANGUAGE=foo python myargparse2.py
foobar: myargparse2.py [-h] foo
myargparse2.py: error: too few arguments

使用您想要的语言而不是 foo

关于python - 翻译 argparse 的内部字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34614550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com