Зачем кому-то передавать строку через пустую функцию вместо того, чтобы использовать строку непосредственно в Python?

Я работаю над старым кодом для графического интерфейса tKinter, и в верхней части своего кода они создают следующее определение:

def _(text):
    return text

Затем код продолжает использовать функцию _ почти для всех строк, передаваемых виджетам tKinter. Например:

editmenu.add_command(label=_("Paste"), command=parent.onPaste)

Есть ли причина использовать здесь функцию, а не просто передавать строку?

Я удалил функцию _ примерно из нескольких строк и не столкнулся с какими-либо проблемами. Просто интересно, есть ли у этого реальная цель.

🤔 А знаете ли вы, что...
Python используется в разработке игр с помощью библиотеки Pygame.


1
54
1

Ответ:

Решено

Это заглушка шаблона, обычно используемого для интернационализации. Шаблон явно задокументирован на https://docs.python.org/3/library/gettext.html#deferred-translations

_("Foo") предназначен для _ поиска строки Foo на настроенном языке текущего пользователя.

Добавление заглушки сейчас — до того, как будут фактически построены какие-либо таблицы перевода — упрощает поиск строк, которые необходимо перевести, и избавляет людей от необходимости проверять программное обеспечение, выясняя, какие строки предназначены для внутреннего использования, а какие — для внутреннего. видимое пользователем использование позже. (Это также помогает программистам избежать распространенных ошибок, таких как использование одних и тех же строковых констант как для визуального отображения, так и для сохранения форматов файлов или проводной связи).


Понимание этого важно, потому что оно определяет, как это следует использовать. Не используйте _("Save %s".format(name)); вместо этого используйте _("Save %s").format(filename), чтобы люди, которые в конечном итоге пишут таблицы перевода, могли корректировать строки формата, и чтобы эти строки не обязательно содержали пользовательский контент (который, очевидно, не может быть известен заранее) внутри них.