Хотя Django Django еще не поддерживает Python 3, со временем он будет, поэтому я хочу, чтобы мой код был как можно более «защищенным от будущего».
Начиная с Python 2.7 оператор интерполяции строк ( %
) устарел. И я понял, что каждая строка, которую нужно перевести, использует синтаксис интерполяции %
. И в документах Django нет упоминания о новом методе str.format
("новый" официальный способ форматирования строк)...
Возможно, есть ограничение gettext
, но я так не думаю, так как строка в файлах .PO выглядит идентично.
Вопрос в том, могу ли я использовать новый метод строки format
для перевода.
Старый способ:
class Post(models.Model):
title = models.CharField(max_length=50)
date = models.DateField()
# ...
def __unicode__(self):
return _('%(title)s (%(date)s)') % {
'title': self.title,
'date': self.date,
}
«Новый» способ:
class Post(models.Model):
title = models.CharField(max_length=50)
date = models.DateField()
# ...
def __unicode__(self):
return _('{title} ({date})').format(
title=self.title,
date=self.date,
)
Кроме того, ugettext_lazy
на самом деле не возвращает строки, а обещания
, объекты, которые вычисляются только при необходимости. .