I have problem with translating formatted strings in Django using django.utils.translations
. Only strings without format (%s
or {}
) are working.
My locale/en/LC_MESSAGES/django.po
file:
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}"
First string is working:
>>> from django.utils import translation
>>> translation.activate('en')
>>> translation.ugettext('foo')
'bar'
But rest is not:
>>> 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'
No mater if I use ugettext_lazy
, gettext
or gettext_lazy
- same story, not translated output.
Any idea why formatted strings are not working?
- Django 1.11.3
- Python 3.5.3