简体   繁体   中英

Django Translation Internationalization and localization: forms, models, tables

I have two questions. How can I translate in forms: a) labels b) Form ValidationErrors?

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')

How can I translate content of a table in a database? All records eg. product names in a table must be translated.

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)

Thank you

Translations are normally done with Django's translation framework . For eager translations, one uses gettext , for lazy translations (translations that should be calculated when rendered), one uses gettext_lazy . You can for example translate your application with:

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 

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

    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()

For choice values in models, as is specified in the documentation :

 from django.utils.translation  class Student(models.Model): class YearInSchool(models.TextChoices): FRESHMAN = 'FR',  SOPHOMORE = 'SO',  JUNIOR = 'JR',  SENIOR = 'SR',  GRADUATE = 'GR',  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, }

Then you can run the makemessages command [Django-doc] to make translation files:

django-admin  --locale=de_DE

Django will then make *.po files where you can define the translations for the strings you defined.

Then you can use the compilemessages command [Django-doc] to compile these translation files to *.mo files:

django-admin  --locale=de_DE

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM