1

我正在建模一个服务目录,我在其中将服务分组为不同的类别。每个类别都是一个模型,其中包含与此处不相关的其他字段的描述。

class Category(models.Model):
    description = models.TextField()
    ...

这个想法是随着平台的发展增加额外的服务类别(甚至子类别)。我需要有几种语言的描述。

我已经考虑过不同的方法来做到这一点,我需要决定哪一种更清洁。

第一种方法。模型描述为带有描述和语言的数据库模型,因此我使用语言代码进行过滤并在管理员上编辑它们

class CategoryDescription(models.Model):        
    description = models.TextField()
    lang = models.CharField(max_length=2)
    describes = models.ForeingKey(Category)

class Category(models.Model):        
    ...

第二种方法。删除描述字段并将类别的标题用作上下文标记。就像是

class Category(models.Model):        
    one_word_name = models.CharField(max_length=20)
    ...

然后在模板中。

{% trans "category_description" context category.one_word_name %}

但是,我在这里担心的是,是否有一种自动方法来生成要标记为翻译的 id?我该怎么做?

4

1 回答 1

1

要翻译您的模型,我建议您检查一个非常有用的包:

有了这个包,你可以标记你的模型进行翻译,你应该按照教程很容易

无论如何,最重要的步骤是:

  1. 安装包:pip install django-modeltranslation
  2. 添加modeltranslation到您INSTALLED_APPSsettings.py
  3. 在 settings.py 中设置USE_I18N = True
  4. 在 settings.py 中配置你的语言。
  5. 在您的应用程序目录中创建一个 translation.py 并注册TranslationOptions您要翻译的每个模型。
  6. 使用同步数据库python manage.py syncdb

例子

您的 settings.py 中的语言:

LANGUAGES = (
        ('de', gettext('German')),
        ('en', gettext('English')),
    )

translation.py例子:

# -*- coding: utf-8 -*-
# Model Translation
from modeltranslation.translator import translator, TranslationOptions
from models import *


class MyModelTranslationOptions(TranslationOptions):
    fields = ('name', 'description')   # Select here the fields you want to translate  
translator.register(MyModel, MyModelTranslationOptions)

# You can add as many models as you want to translate here

在您定义所有内容并同步数据库后,您选择翻译的模型将翻译其字段。

如果您有一个名为的字段description并将其标记为翻译,如果您使用英语和德语,django 模型翻译将创建字段description_en以及description_de您可以添加翻译的位置。

于 2014-12-11T09:37:26.827 回答