Django: проблема локализации в формах ChoiceField - PullRequest
0 голосов
/ 09 мая 2011

У меня проблемы с использованием переводной функциональности Django при использовании ChoicesField в форме.

Я использую такую ​​форму:

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 & 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"
...

Как будто HTML-код для акцента не интерпретировался при включении в тег {{form.country}}.

Есть идеи, что я делаю не так? Заранее спасибо.

1 Ответ

1 голос
/ 08 июня 2011

Я наконец решил проблему. Я не правильно использовал файл перевода django.po.

Вместо того, чтобы использовать HTML-код для каждого акцентированного символа, их нужно было оставить нормальными (то есть: é, è, à ...), и 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"

Надеюсь, это поможет некоторым из вас. С уважением,

...