Django:ChoiceField表单中的本地化问题

时间:2011-05-08 23:08:31

标签: django localization django-forms diacritics

在表单中使用ChoicesField时,我在使用Django的翻译功能时遇到了麻烦。

我使用的形式如下:

from django.utils.translation import ugettext as _

class MyForm(forms.Form):
COUNTRIES = (
    ('france', _('France')),
    ('italy', _('Italy')),
    ('sweden', _('Sweden')),
)

country = forms.ChoiceField(choices=COUNTRIES)

通过模板中的视图渲染这样的内容     ...          {%trans“Country”%}:{{form.country}}          ...

我的问题与口音有关,例如在法国翻译时的这个例子:

<label>Contrée </label>
<select name="country" id="id_country">
<option value="france">France</option>
<option value="italy">Italie</option>
<option value="sweden">Su&egrave;de</option>
</select>

瑞典(“Suè”)的重音错误显示(没有HTML代码的解释),而国家(“Contrée”)中的重音在浏览器中按预期显示。

要完成此操作,我的法语django.po文件就是这样

...
#: templates/1.html:106
msgid "Country"
msgstr "Contr&eacute;e"

#: templates/1.html:106 myApps/forms.py:19
msgid "Sweden"
msgstr "Su&egrave;de"
...

当{{form.country}}标记中包含重音的HTML代码时,就好像没有解释它一样。

关于我做错了什么的任何想法? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我终于解决了这个问题。我没有正确使用我的django.po翻译文件。

不是为每个重音字符使用HTML代码,而是必须将它们保留为normale(即:é,è,à...),而django将取决于目的地,相应地翻译这些重音。

这是法语翻译的标题:

msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-06 17:17+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: ****** <****@*****.com>\n"
"Language-Team: FR <***@*********.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: Français\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"

希望这可以帮助你们中的一些人。 的问候,