尽管 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
并不真正返回字符串,而是Promises
仅在需要时才评估的对象。