Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 17, 2007 17:29:52

offline
От:
Зарегистрирован: 2007-04-24
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

gettext_lazy

Не могу понять различия между gettext и gettext_lazy. В документации написано мол gettext_lazy переводит только тогда когда обращаются к значению объекта и настоятельно это рекомендуют при переводе слов в моделях. Я вот только не могу понять, а почему не использовать обычный gettext? Ну переведёт оно сразу это слово, разница то в чём? А есть ещё gettext_noop различия которого относительно gettext_lazy даже в теории не описано в документации.



Офлайн

#2 Сен. 17, 2007 17:56:02

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

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

Т.е. заводишь переменные с трансляциями на все, а потом реально используешь только некоторые. Для неизпользуемых трансляции не дергаются.
Поскольку результат вызова не кешируется - толку не очень много.



Офлайн

#3 Сен. 17, 2007 18:20:24

offline
От:
Зарегистрирован: 2007-04-24
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

gettext_lazy

Андрей Светлов насчёт ugettext_noop() имелось в виду что их значения например при сравнении останутся на оригинальном языке?

msg_1 = ugettext_noop(var1)
msg_2 = ugettext_noop(var2)

if len(msg_1) > len(msg_2):
pass


тут сравнивать оригинальные значения будут, а если юзать gettext_lazy() или gettext() то их перевод?



Офлайн

#4 Сен. 17, 2007 18:53:06

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

gettext_lazy

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
gettext - обертка вокруг стандартного модуля gettext, т.е. ищет перевод
gettext_lazy - обертка вокруг django gettext, делающая отложенный вызов

gettext_lazy = lazy(gettext, str)

lazy - в django.utils.functional

P.S. Да читайте же наконец исходники!..



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version