Джанго i18n дает неполные переводы - PullRequest
0 голосов
/ 13 марта 2019

У меня проблема с переводом django. Некоторые строки из моих .po файлов не отображаются при запуске сервера. Я имею в виду, что некоторые переводы отображаются, а некоторые нет. Независимо от того, появляются они или нет, они оба перечислены в файле django.po. это не вопрос "нечетких" тегов, так как я их удалил. Кажется, это не вопрос пустых кавычек после очень длинных msgid или msgstr. Единственной причиной плохого отображения перевода является функция format_html (), которая позволяет набирать более длинный текст справки. У вас есть идеи о том, как я могу решить это дело?

приложения / обзор / forms.py

from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.html import format_html
from django.forms.widgets import NumberInput
from survey.models import Survey2019

class Survey2019Form(forms.ModelForm):
    class Meta:
        model = Survey2019
    ...
    lines = forms.IntegerField(
        label=_('Lines'),
        help_text= _("What is the average number of lines contained in your reports ?"),
        widget=NumberInput(attrs={'type':'range', 'step': '1', 'min':'0', 'max':'500', 'step':'5'}),
        initial=0
        )

    categories = forms.IntegerField(
        label=_('Categories'),
        help_text= format_html("{}<br>{}<br>{}<br>{}",
            _("What is the average number of categories or dimensions in your reports ?"),
            _("Categories are mostly not numeric data."),
            _("They can't be computed but provide qualitative informations."),
            _(" For exemple : geographic areas, colors or groups of products...")),
        widget=NumberInput(attrs={'type':'range', 'min':'0', 'max':'100', 'step':'1'}),
        initial=0
        )
    ...

локаль / FR / LC_MESSAGES / django.po

    ...
    : apps/survey/forms.py:80
msgid "Lines"
msgstr "lignes"

#: apps/survey/forms.py:81
msgid "What is the average number of lines contained in your reports ?"
msgstr "Quel est le nombre moyen de lignes que comptent vos tableaux de bord ?"


#: apps/survey/forms.py:87
msgid "Categories"
msgstr "Catégories"

#: apps/survey/forms.py:89
msgid "What is the average number of categories or dimensions in your reports ?"
msgstr "Quel est le nombre moyen de catégories que comptent vos tableaux de bord ?"

#: apps/survey/forms.py:90
msgid "Categories are mostly not numeric data."
msgstr "les catégories, ou dimensions, sont souvent des données non numériques"

#: apps/survey/forms.py:91
msgid "They can't be computed but provide qualitative informations."
msgstr "Elles ne peuvent-être calculée mais fournissent des informations qualitatives"

#: apps/survey/forms.py:92
msgid " For exemple : geographic areas, colors or groups of products..."
msgstr ""
"par exemple des zones géographiques, des couleurs, des groupes de produits "
"ou de personnes"
....

survey2019.html

...
{% for field in fillform.visible_fields  %}
<div class="{% if forloop.first %}card{% else %}d-none {% endif %} fl-w-600 fl-h-700 justify-content-between align-items-center" id="id_question_{{forloop.counter}}" refer="id_{{field.name}}">
  <div class="w-100 fl-h-50 fl-bg-prune">
    <h2 class="flowka fl-txt-white text-truncate text-center pt-1">{{field.label}}</h2>
  </div>
  <div class="fl-h-500 p-2 w-100">
    <div class="text-justify p-2 fl-txt-prune fl-txt-md mb-1" style="margin-top:-30px;">
      {{ field.help_text }}
    </div>
    ...  
  </div>
  ...
</div>
{% endfor %} 

1 Ответ

1 голос
/ 13 марта 2019

Как я и предполагал, проблема в функции format_html() и необходимости перевода lazy . Функция ugettext_lazy() не работает с format_html(). Требуется format_html_lazy()

ядро ​​/ utils.py

from django.utils.functional import lazy
from django.utils.html import format_html

format_html_lazy = lazy(format_html, str)

и я изменил вызов format_html() в forms.py и models.py

forms.py

from core.utils import format_html_lazy as format_html

et voilà!

...