2017-07-06 61 views
4

我在使用django.utils.translations翻譯Django中的格式化字符串時遇到問題。只有沒有格式的字符串(%s{})正在工作。在Django中翻譯格式化的字符串不起作用

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_lazygettextgettext_lazy母校 - 同樣的故事,沒有翻譯輸出。

任何想法爲什麼格式化的字符串不工作?

  • 的Django 1.11.3
  • 的Python 3.5.3

回答

4

你應該格式化該呼叫是通過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你的翻譯文件。

+0

謝謝你。我看不到樹林裏的樹林。 – Moritz