在 Django 中翻译格式化字符串不起作用
Translating formatted strings in Django not working
我在使用 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_lazy
、gettext
还是 gettext_lazy
- 同样的故事,没有翻译输出。
知道为什么格式化字符串不起作用吗?
- Django 1.11.3
- Python 3.5.3
您应该格式化 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。
我在使用 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_lazy
、gettext
还是 gettext_lazy
- 同样的故事,没有翻译输出。
知道为什么格式化字符串不起作用吗?
- Django 1.11.3
- Python 3.5.3
您应该格式化 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。