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

2 投票
2 回答
2483 浏览
提问于 2025-04-15 23:06

我在寻找关于使用gettext()时,字符串替换的最佳实践建议。或者说,所有的替换方法都是一样的吗?

我能想到至少三种字符串替换的方法:

1) 经典的“%”格式化:

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

2) 基于 .format() 的格式化:

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

3) 使用 string.Template.safe_substitute():

import string
template = string.Template("我的名字是 ${name}")
template.safe_substitute(locals())

使用 string.Template 方法的好处是,即使翻译后的字符串中变量名拼写错误,它仍然能返回一个可用的字符串。而其他方法在这种情况下会直接报错。string.Template 方法的缺点是,无法自定义变量的格式,比如对齐、宽度等。

2 个回答

2

不要使用拼写错误的变量名——这就是测试的目的所在。

表面上看,显示某些内容似乎比抛出异常要好,但迟早会有一个翻译错误让某个用户感到不快。

现在推荐使用.format()来处理字符串。

考虑一下,不要直接把locals()传给翻译函数。这样可以避免有人利用self在翻译中做一些小动作,让你担心。

3

其实我更喜欢在测试的时候出现错误,这样我可以尽快修复它们——“错误不应该悄悄溜走”。所以我认为方法(2)在现代Python中是最好的选择(因为它支持可读性强且灵活的format),而方法(1)则是在你不得不支持旧版Python时的一个无奈选择(在旧版Python中,%是进行灵活格式化的“唯一”方式——找到或者编写format的替代版本是主要的选择)。

撰写回答