为什么有人会通过空函数传递字符串而不是直接在 Python 中使用该字符串?

Dac*_*nus 1 python tkinter internationalization

我正在处理 tKinter GUI 的一些旧代码,他们在代码顶部创建了以下定义:

def _(text):
    return text
Run Code Online (Sandbox Code Playgroud)

然后,代码继续使用_几乎所有传递给 tKinter 小部件的字符串的函数。例如:

editmenu.add_command(label=_("Paste"), command=parent.onPaste)
Run Code Online (Sandbox Code Playgroud)

与仅传递字符串相比,是否有在这里使用该函数的原因?

我已经_从一些字符串中删除了该函数,并且没有遇到任何问题。只是好奇这是否有真正的目的。

Cha*_*ffy 6

这是通常用于国际化的模式的存根。该模式明确记录在https://docs.python.org/3/library/gettext.html#deferred-translations

_("Foo")旨在以当前用户配置的语言_查找字符串。Foo

现在将存根放入(在实际构建任何翻译表之前)可以轻松搜索需要翻译的字符串,并避免人们需要通过软件来确定哪些字符串是用于系统内部的字符串,哪些是用于系统内部的字符串。稍后用户可见的用途。(它还有助于指导程序员避免犯常见错误,例如对用户可见的显示和保存文件格式或有线通信使用相同的字符串常量)。


理解这一点很重要,因为它指导如何使用它。不要使用_("Save %s".format(name));相反,使用_("Save %s").format(filename)这样最终编写翻译表的人可以调整格式字符串,因此这些字符串不需要在其中包含用户提供的内容(这显然无法提前知道)。