使用Python和gettext进行字符串替换的最佳实践
我在寻找关于使用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
的替代版本是主要的选择)。