Django高级编程之自定义场实现多语言

  

  

扩展默认的models.CharField和模型。TextField使之成为支持多语言的字段。
  可以轻松实现复用,无需配置多余选项

        django。配置导入设置   django。数据库导入模型   从django.utils。翻译进口get_language         类MultilingualField (models.Field):   SUPPORTED_FIELD_TYPES=[模型。CharField models.TextField]      def __init__(自我,verbose_name=None, * * kwargs):   自我。localized_field_model=没有   为在MultilingualField.SUPPORTED_FIELD_TYPES模型:   如果issubclass(自我。__class__进行模型):   自我。localized_field_model=模型   自我。平等自愿=kwargs。(“空白”,假)   自我。_editable=kwargs。(“可编辑”,真正的)   超级()。__init__ (verbose_name * * kwargs)      @staticmethod   lang_code def localized_field_name(名称):   lang_code_safe=lang_code。替换(“-”、“_”)   返回f“{name} _ {lang_code_safe}”      def get_localized_field(自我、lang_code lang_name):   平等自愿=(self._blank   如果lang_code==settings.LANGUAGE_CODE   其他真的)   localized_field=self.localized_field_model (   f”{自我。verbose_name} ({lang_name})”,   name=self.name,   primary_key=self.primary_key,   max_length=self.max_length,=self.unique独特,   空白=平等自愿,   null=False, #我们忽略null参数!   db_index=self.db_index,   默认=self.default或“”,   可编辑=self._editable,=self.serialize序列化,   选择=self.choices,   help_text=self.help_text,   db_column=没有   db_tablespace=self.db_tablespace)   返回localized_field      def contribute_to_class(自我,cls,名字,   private_only=False):   def translated_value(自我):   语言=get_language ()   val=self.__dict__.get (   MultilingualField.localized_field_name (   名称、语言))   如果不是val:   val=self.__dict__.get (   MultilingualField.localized_field_name (   名字,settings.LANGUAGE_CODE))   返回瓦尔      #动态生成特定于语言的领域   如果不是cls._meta.abstract:   如果self.localized_field_model:   lang_code, lang_name settings.LANGUAGES:   localized_field=self.get_localized_field (   lang_code lang_name)   localized_field.contribute_to_class (   cls,   MultilingualField.localized_field_name (   名字,lang_code))      setattr (cls、名称、属性(translated_value))   其他:   超级().contribute_to_class (   cls、名称、private_only)         类MultilingualCharField(模型。CharField MultilingualField):   通过         类MultilingualTextField(模型。文本框,MultilingualField):   通过      

这里定义了MultilingualCharField和MultilingualTextField字段

  

  

<代码> settings.py>         LANGUAGE_CODE=' zh-hans '   TIME_ZONE='亚洲/上海'      语言=(   (“en - US”、“美国英语”),   (“zh-hans”、“亚洲/上海”)   )      

默认语言设置为中文,多语言为英语

  

<代码> models.py>         django。数据库导入模型   从django.utils。翻译进口ugettext_lazy _      从跑龙套。领域导入(   MultilingualCharField,   MultilingualTextField   )      类项目(models.Model):   title=MultilingualCharField(_(“标题”),max_length=200)   描述=MultilingualTextField(_(描述),空白=True)   内容=MultilingualTextField(_(“内容”))      def __str__(自我):   返回self.title      

效果图   

 Django高级编程之自定义场实现多语言

  

可以看的到,数据库字段自动生成了相应语言的字段

  

当用户语言切换到其他,可以自动适配实现多语言

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Django高级编程之自定义场实现多语言