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

时间:2012-07-22 17:43:12

标签: python django translation

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

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

from django.utils.translation import ugettext as _

website_name = "Stackoverflow"
title = _(u"{sitename} is a good website".format(sitename=website_name))

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

#: path/to/file.py:4
msgid "{sitename} is a good website"
msgstr "{sitename} ist eine gute Website"

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

3 个答案:

答案 0 :(得分:9)

compilemessages将字符串视为“{sitename}是一个很好的网站”,但是当应用程序运行时,字符串实际上是例如“MySite是一个很好的网站”,当然没有翻译。您必须首先翻译裸字符串,然后然后可以对其执行模板操作。

答案 1 :(得分:0)

我有同样的问题,所以我先翻译文本,然后添加动态内容,如

title = _(u"is a good website")
title = " ".join([website_name, title])

必须有更好的方法来做到这一点

答案 2 :(得分:-1)

以下方法应该起作用:

_('Foo %(x)s') % {'x': "bar"}

s是字符串,d是Intiger。