2011-05-08 52 views
0

在使用表单中的ChoicesField时,我遇到了使用Django的翻译功能强大的问题。Django:ChoiceField表单中的本地化问题

我用这样的形式,因为这一个:

from django.utils.translation import ugettext as _ 

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

country = forms.ChoiceField(choices=COUNTRIES) 

通过视图模板这样的本 ... {%反式 “国家” %}渲染:{{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&egrave;”)不正确地显示(没有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代码。

任何想法,我在做什么错? 在此先感谢。

+0

您是否试过ugettext_lazy作为_ – DTing 2011-05-09 01:05:47

+0

是的我尝试用“ugettext_lazy as _”替换“ugettext as _”。结果仍然是一样的。谢谢。 – Nielluin 2011-05-09 22:55:24

回答

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" 

希望这可以帮助一些你。 Regards,