使用Python使用gettext进行字符串替换的最佳实践

时间:2010-05-24 23:38:54

标签: python string gettext string-formatting

在使用gettext()时查找要使用的字符串替换技术的最佳实践建议。或者所有技术同样适用?

我能想到至少3种字符串技巧:

1)基于经典“%”的格式:

“我的名字是%(名字)s”%locals()

2).format()格式:

“我的名字是{name}”。format(locals())

3)string.Template.safe_substitute()

导入字符串 template = string.Template(“我的名字是$ {name}”) template.safe_substitute(locals())

string.Template技术的优点是,带有错误拼写的变量引用的已翻译字符串仍然可以产生可用的字符串值,而其他技术无条件地引发异常。 string.Template技术的缺点似乎是无法自定义变量的格式(填充,对齐,宽度等)。

2 个答案:

答案 0 :(得分:3)

实际上我会更喜欢在我的测试中获得异常,以尽快修复错误 - “错误不应该无声地传递”。因此,我认为方法(2)是现代Python中最好的方法(它支持可读且灵活的format),而方法(1)如果你不支持旧的Python版本,则可能不可避免地倒退(其中%是“灵活格式化的方式 - 查找或编码format的某些后端将是主要的选择。”

答案 1 :(得分:1)

不要拼写错误的变量名称 - 这就是测试的目的。

从表面上看,显示某些东西似乎比抛出一个异常更好,但迟早会有一些错译会对某些用户造成攻击。

.format()是现在的发展方式。

重新考虑将locals()直接传递给翻译。如果有人在其中一个翻译中找到了与self偷偷摸摸的做法,那么这会让你担心会发生什么。