Форум сайта python.su
Не могу понять различия между gettext и gettext_lazy. В документации написано мол gettext_lazy переводит только тогда когда обращаются к значению объекта и настоятельно это рекомендуют при переводе слов в моделях. Я вот только не могу понять, а почему не использовать обычный gettext? Ну переведёт оно сразу это слово, разница то в чём? А есть ещё gettext_noop различия которого относительно gettext_lazy даже в теории не описано в документации.
Офлайн
gettext_noop возвращает принятую строку без преобразования.
gettext_lazy может немного повысить скорость. Как я понимаю, пример такой
msg_1 = gettext_lazy('msg_1')
msg_2 = gettext_lazy('msg_2')
def f(…):
…
if condition:
ret = msg_1
else:
ret = msg_2
Т.е. заводишь переменные с трансляциями на все, а потом реально используешь только некоторые. Для неизпользуемых трансляции не дергаются.
Поскольку результат вызова не кешируется - толку не очень много.
Офлайн
Андрей Светлов насчёт ugettext_noop() имелось в виду что их значения например при сравнении останутся на оригинальном языке?
msg_1 = ugettext_noop(var1)
msg_2 = ugettext_noop(var2)
if len(msg_1) > len(msg_2):
pass
тут сравнивать оригинальные значения будут, а если юзать gettext_lazy() или gettext() то их перевод?
Офлайн
django.utils.translation.trans_real:gettext_noop
def gettext_noop(message):
"""
Marks strings for translation but doesn't translate them now. This can be
used to store strings in global variables that should stay in the base
language (because they might be used externally) and will be translated
later.
"""
return message
Офлайн