翻译:在Django中翻译格式化的字符串不起作用

12

我在使用django.utils.translations翻译Django格式化字符串时遇到了问题。只有没有格式的字符串(%s{})可以正常工作。

我的locale/en/LC_MESSAGES/django.po文件:

msgid "foo"
msgstr "bar"

#, python-format
msgid "foo %s"
msgstr "bar %s"

#, python-format
msgid "foo %(baz)s"
msgstr "bar %(baz)s "

#, python-brace-format
msgid "foo {}"
msgstr "bar {}"

#, python-brace-format
msgid "foo {baz}"
msgstr "bar {baz}"

第一个字符串可用:

>>> from django.utils import translation
>>> translation.activate('en')
>>> translation.ugettext('foo')
'bar'

但是休息不是:

>>> translation.ugettext('foo %s' % 'bax')
'foo bax'
>>> translation.ugettext('foo %(baz)s' % {'baz': 'bax'})
'foo bax'
>>> translation.ugettext('foo {}'.format('bax'))
'foo bax'
>>> translation.ugettext('foo {baz}'.format(baz='bax'))
'foo bax'

无论我使用 ugettext_lazygettext 还是 gettext_lazy - 都是同样的问题,输出没有翻译。
有任何想法为什么格式化字符串不起作用吗?
  • Django 1.11.3
  • Python 3.5.3
1个回答

21
您应该格式化ugettext返回的字符串,而不是调用中的字符串。请参见下面的说明。
而不是:
translation.ugettext('foo %s' % 'bax')
translation.ugettext('foo %(baz)s' % {'baz': 'bax'})
translation.ugettext('foo {}'.format('bax'))
translation.ugettext('foo {baz}'.format(baz='bax'))

您需要做:

translation.ugettext('foo %s') % 'bax'
translation.ugettext('foo %(baz)s') % {'baz': 'bax'}
translation.ugettext('foo {}').format('bax')
translation.ugettext('foo {baz}').format(baz='bax')

在你的代码中,你每次都试图获取'foo bax'的翻译,而你的翻译文件中并没有该msgid。


谢谢你。我看不到树林了。 - Moritz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接