虽然Django Django还不支持Python 3,但它最终会支持Python,所以我想让我的代码更加"面向未来".
从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,
}
Run Code Online (Sandbox Code Playgroud)
"新"方式:
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,
)
Run Code Online (Sandbox Code Playgroud)
此外,ugettext_lazy并不真正返回字符串,而是Promises仅在需要时评估的对象.
string django internationalization deprecated string-interpolation