gpt4 book ai didi

Django翻译和gettext : The deprecation of the % (string interpolation) operator

转载 作者:行者123 更新时间:2023-12-04 13:24:05 24 4
gpt4 key购买 nike

尽管Django Django尚不支持Python 3,但最终仍会支持。因此,我想让我的代码尽可能“面向 future ”。

从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,
}

"new"方式:
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,仅在需要时才对其进行评估。

最佳答案

您可以安全地使用它。例如

ugettext_lazy('{foo}').format(foo='bar')

Django使用的翻译程序 xgettext不在乎要翻译的内容。它只是在 .py文件中搜索诸如 ugettext_lazy_之类的关键字以收集可翻译的字符串(引用 the manual of xgettextDjango code)

此外,上面的 .format()方法是代理对象提供的包装器,例如:
>>> ugettext_lazy(u'{foo}').format
<bound method __proxy__.__wrapper__ of <django.utils.functional.__proxy__ object at 0x102f19050>>

上面的 .format()的调用将使 u'{foo}'转换为某些unicode value,然后使用实际参数调用 value.format。您会看到翻译和 value.format发生在不同的阶段。

关于Django翻译和gettext : The deprecation of the % (string interpolation) operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10999954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com