簡體   English   中英

Django 翻譯國際化和本地化:forms,模型,表格

[英]Django Translation Internationalization and localization: forms, models, tables

我有兩個問題。 如何在 forms 中翻譯:a) 標簽 b) 表單驗證錯誤?

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)

謝謝

翻譯通常使用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 import gettext_lazy as _

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

對於模型中的選擇值,如文檔中所述:

 from django.utils.translation import gettext_lazy as _ class Student(models.Model): class YearInSchool(models.TextChoices): FRESHMAN = 'FR', _('Freshman') SOPHOMORE = 'SO', _('Sophomore') JUNIOR = 'JR', _('Junior') SENIOR = 'SR', _('Senior') GRADUATE = 'GR', _('Graduate') 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 makemessages --locale=

Django 然后將生成*.po文件,您可以在其中定義您定義的字符串的翻譯。

然后您可以使用compilemessages命令 [Django-doc]將這些翻譯文件編譯為*.mo文件:

django-admin compilemessages --locale=

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM