У меня вопрос по использованию ugettext и ugettext_lazy
для переводов. Я узнал, что в моделях я должен использовать ugettext_lazy
, а в представлениях - ugettext. Но есть ли другие места, где мне ugettext_lazy
тоже стоит воспользоваться ? А как насчет определений форм? Есть ли различия в производительности между ними?
Изменить:
И еще кое-что. Иногда вместо ugettext_lazy
, ugettext_noop
используется. Как говорится в документации, ugettext_noop
строки помечаются только для перевода и переводятся в самое позднее время, прежде чем отобразить их пользователю, но я здесь немного запутался, разве это не похоже на то, что ugettext_lazy
делают? Мне все еще сложно решить, что использовать в своих моделях и формах.
источник
msg = "An error has occurred"; logging.error(msg);return HttpResponse(_(msg))? why need
_noop,?
если без него_noop
django не найдет строку, нуждающуюся в переводе?_noop
?Отличное использование _noop - это когда вы хотите записать сообщение на английском языке для разработчиков, но представить переведенную строку зрителю. Пример этого находится на http://blog.bessas.me/posts/using-gettext-in-django/
источник
Ленивая версия возвращает прокси-объект вместо строки, и в некоторых ситуациях он не будет работать должным образом. Например:
def get(self, request, format=None): search_str = request.GET.get('search', '') data = self.search(search_str) lst = [] lst.append({'name': ugettext_lazy('Client'), 'result': data}) return HttpResponse(json.dumps(lst), content_type='application/json')
потерпит неудачу, потому что самая последняя строка попытается сериализовать объект lst в JSON, и вместо строки для «клиента» у него будет прокси-объект. Прокси-объект не сериализуем в json.
источник