I have a problem translating formatted strings in Django using django.utils.translations . Only strings without format ( %s or {} ) work.
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}"
The first line works:
>>> from django.utils import translation >>> translation.activate('en') >>> translation.ugettext('foo') 'bar'
But there is no rest:
>>> 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, if I use ugettext_lazy , gettext or gettext_lazy - the same story, not the translated output.
Any idea why formatted strings don't work?
- Django 1.11.3
- Python 3.5.3
source share