相关疑难解决方法(0)

Django翻译和gettext:%(字符串插值)运算符的弃用

虽然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

5
推荐指数
1
解决办法
4853
查看次数