ugettext:如何处理句子中的变量?

Hou*_*man 5 django

from django.utils.translation import ugettext_lazy as _

_(u"I am off to school at '%s' o'clock" % time)
Run Code Online (Sandbox Code Playgroud)

这有点奇怪,因为我会像这样翻译整行

"I am off to school at \'%s\' o'clock"
Run Code Online (Sandbox Code Playgroud)

现在如果翻译者错误地删除了''%s \',它会破坏代码.

我应该把句子分成两部分吗?但这可能会让翻译人员无法理解句子的背景.

_(u"I am off to school at ") + '%s' + _(u"o'clock") % time
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

Nie*_*art 9

如果使用命名字符串插值而不是位置字符串插值,如果翻译器从其翻译的字符串中忘记其中一个参数,则应该保护您免受异常的影响.

来自django文档的一个例子:

def my_view(request, m, d):
    output = _('Today is %(month)s %(day)s.') % {'month': m, 'day': d}
    return HttpResponse(output)
Run Code Online (Sandbox Code Playgroud)

注意字符串替换中使用的{'name':'value'}字典.

因此,只要有多个参数,就应该使用命名字符串插值(例如,%(天)s)而不是位置插值(例如,%s或%d).如果使用位置插值,则翻译将无法重新排序占位符文本.

(django docs)