Django Перевод Интернационализация и локализация: формы, модели, таблицы - PullRequest
1 голос
/ 03 апреля 2020

У меня два вопроса. Как я могу перевести в формах: а) метки б) Ошибки проверки формы?

forms.py

from django import forms
from django.db.models import Max, Min
from .models import Application, FlowRate, WaterFilterSubType, Fineness, Dirt
from .models import DirtProperties, Flange

class InputDataWaterForm(forms.Form):
    '''Application'''
    choices = list(Application.objects.values_list('id','application'))
    application = forms.ChoiceField(choices = choices, initial="1", label="Specify application:")
    ....

    def clean(self):
        cleaned_data = super(InputDataWaterForm, self).clean()
        application = cleaned_data.get('application')
    ...

        '''OTHER CONDITIONS if not flowrate ...'''
        if not (flowrate or pressure or dirt or dirtproperties or
            application or fineness or temperature or
            flange or atex or aufstellung or ventil):
            raise forms.ValidationError('PLEASE ENTER THE REQUIRED INFO')

Как я могу перевести содержимое таблицы в базу данных? Все записи, например. названия продуктов в таблице должны быть переведены.

models.py

from django.db import models

'''FILTER PROPERTIES LIKE COLOR'''
class FP_sealing(models.Model):
    value = models.CharField('Material Sealing', max_length=10)
    descr = models.CharField('Description', max_length=200, default="")
    def __str__(self):
        return("Seal: " + self.value)

Спасибо

1 Ответ

1 голос
/ 03 апреля 2020

Переводы обычно выполняются с помощью Django среды перевода . Для активных переводов используется gettext, для ленивых переводов (переводы, которые должны быть рассчитаны при визуализации) используется gettext_lazy. Например, вы можете перевести ваше приложение с помощью:

from django import forms
from django.db.models import Max, Min
from .models import Application, FlowRate, WaterFilterSubType, Fineness, Dirt
from .models import DirtProperties, Flange
from django.utils.translation <b>import gettext_lazy as _</b>

class InputDataWaterForm(forms.Form):
    '''Application'''
    choices = list(Application.objects.values_list('id','application'))
    application = forms.ChoiceField(choices = choices, initial="1", label=<b>_("Specify application:")</b>)
    # &hellip;

    def clean(self):
        cleaned_data = super(InputDataWaterForm, self).clean()
        application = cleaned_data.get('application')
        # &hellip;

        '''OTHER CONDITIONS if not flowrate &hellip;'''
        if not (flowrate or pressure or dirt or dirtproperties or
            application or fineness or temperature or
            flange or atex or aufstellung or ventil):
            raise forms.ValidationError(<b>_('PLEASE ENTER THE REQUIRED INFO')</b>)

Для значений выбора в моделях, как указано в документации :

from django.utils.translation <b>import gettext_lazy as _</b>

class Student(models.Model):

    class YearInSchool(models.TextChoices):
        FRESHMAN = 'FR', <b>_('Freshman')</b>
        SOPHOMORE = 'SO', <b>_('Sophomore')</b>
        JUNIOR = 'JR', <b>_('Junior')</b>
        SENIOR = 'SR', <b>_('Senior')</b>
        GRADUATE = 'GR', <b>_('Graduate')</b>

    year_in_school = models.CharField(
        max_length=2,
        choices=YearInSchool.choices,
        default=YearInSchool.FRESHMAN,
    )

    def is_upperclass(self):
        return self.year_in_school in {
            self.YearInSchool.JUNIOR,
            self.YearInSchool.SENIOR,
        }

Затем вы можете выполнить команду makemessages [Django -doc] для создания файлов перевода:

django-admin <b>makemessages</b> --locale=<i>de_DE</i>

Django сделает *.po файлы, в которых вы можете определить переводы для определенных вами строк.

Затем вы можете использовать команду compilemessages [Django -doc] чтобы скомпилировать эти файлы перевода в *.mo файлы:

django-admin <b>compilemessages</b> --locale=<i>de_DE</i>
...