【问题标题】:Django Multilanguage on Models and Templates模型和模板上的 Django 多语言
【发布时间】:2020-06-18 13:19:10
【问题描述】:

我看过许多处理多语言模型的解决方案。但是它们都不是很容易申请,包括不适用于南方。 我观看的应用程序来自:

好吧,我在考虑 KISS(保持简单愚蠢)的情况下尝试自己的解决方案,这是我的分析和解决方案,基于我的特定需求(只有两种语言,西班牙语为默认语言):

  1. 我可以使用特定语言创建字段,因为我只会使用英语和西班牙语,而且非常简单

    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
    
  2. 我可以创建一个自定义模板标签,为我提供所需的字段:

    @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
    
  3. 我可以将所需的数据从视图传递到模板

    response['country'] = Country.objects.get(pk=1)
    
  4. 我可以这样称呼它,假设我的请求上下文中有 LANGUAGE_CODE:

    {% get_model_translate country name %}
    

所以,我的问题是: ¿ 这是一个好方法吗?我认为我看到的唯一问题是性能问题,但我对此不太确定,正在寻找其他人已经完成的解决方案。

感谢您的建议

【问题讨论】:

  • 为什么不使用 django translation
  • @lalo Django Translation 不适用于模型,据我所知

标签: python django multilingual django-templates


【解决方案1】:

我参与过许多多语言项目,其中包括: https://github.com/deschler/django-modeltranslation 非常适合模型翻译,无需破解您的模型即可使其正常工作并最终与 South 一起工作。

【讨论】:

  • 看起来不错,我会尝试并给你我的反馈!
  • 这个库没有使用最佳实践,需要在添加新语言或删除现有语言后更改架构。
【解决方案2】:

Django-hvad 是一个很好的库。

你也可以看看here使用的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多