【发布时间】:2020-06-18 13:19:10
【问题描述】:
我看过许多处理多语言模型的解决方案。但是它们都不是很容易申请,包括不适用于南方。 我观看的应用程序来自:
- http://goodcode.io/blog/django-multilanguage/
- http://and-other-things.blogspot.com/2009/04/list-of-django-multilingual-model.html
好吧,我在考虑 KISS(保持简单愚蠢)的情况下尝试自己的解决方案,这是我的分析和解决方案,基于我的特定需求(只有两种语言,西班牙语为默认语言):
-
我可以使用特定语言创建字段,因为我只会使用英语和西班牙语,而且非常简单
class Country(models.Model): name = models.CharField('Pais', max_length=80) name_en = models.CharField('Country', max_length=80, blank=True, null=True) class Meta: verbose_name = 'Pais' verbose_name_plural = 'Paises' def __unicode__(self): return self.name -
我可以创建一个自定义模板标签,为我提供所需的字段:
@register.tag(name='get_model_translate') def do_translation(parser, token): try: tag_name, o_model, field = token.split_contents() except ValueError: raise template.TemplateSintaxError(u'Los parámetros no son válidos') return Translate(tag_name, o_model, field) class Translate(template.Node): def __init__(self, tag_name, o_model, field): self.tag_name = tag_name self.o_model = template.Variable(o_model) self.field = field def render(self, context): lang_code = context.get('request').LANGUAGE_CODE o_model = self.o_model.resolve(context) try: data = o_model.__getattribute__('%s_%s' % (self.field, lang_code)) except Exception, e: try: data = o_model.__getattribute__('%s' % self.field) except Exception, e: data = '' return data -
我可以将所需的数据从视图传递到模板
response['country'] = Country.objects.get(pk=1) -
我可以这样称呼它,假设我的请求上下文中有 LANGUAGE_CODE:
{% get_model_translate country name %}
所以,我的问题是: ¿ 这是一个好方法吗?我认为我看到的唯一问题是性能问题,但我对此不太确定,正在寻找其他人已经完成的解决方案。
感谢您的建议
【问题讨论】:
-
为什么不使用 django translation ?
-
@lalo Django Translation 不适用于模型,据我所知
标签: python django multilingual django-templates