使用Python 2.7中提供的格式函数不会在Django中翻译字符串

Iod*_*nas 17 python django translation

在Python 2.7中使用格式化字符串的新方法和推荐方法是否会format导致Django中的非翻译字符串?

字符串在.po文件中,已翻译,但不会在网站上翻译.例如:

from django.utils.translation import ugettext as _

website_name = "Stackoverflow"
title = _(u"{sitename} is a good website".format(sitename=website_name))
Run Code Online (Sandbox Code Playgroud)

.po翻译字符串后的文件如下所示:

#: path/to/file.py:4
msgid "{sitename} is a good website"
msgstr "{sitename} ist eine gute Website"
Run Code Online (Sandbox Code Playgroud)

运行django-admin.py compilemessages并重新启动Web服务器后,在已处理的HTML页面上,它仍然是英语,而所有其他字符串都正在翻译.此外,虽然所有使用format的字符串都未翻译,但使用%运算符格式化的字符串将按预期进行翻译.它也不是gettext/ugettext问题,因为两个函数的问题都是一样的.

Ign*_*ams 9

compilemessages看到字符串为"{sitename}是一个很好的网站",但当应用程序运行时,字符串实际上是例如"MySite是一个很好的网站",当然没有翻译.您必须首先翻译裸字符串,然后才能对其执行模板操作.

  • 为了清楚起见,这将意味着`_(u"{sitename}是一个很好的网站").format(sitename = website_name)`(注意括号的不同位置).这也适用于`ugettext_lazy`,另见http://stackoverflow.com/questions/10999954/django-translations-and-gettext-the-deprecation-of-the-string-interpolation (10认同)