翻译数据库中的文本

时间:2014-04-16 09:49:38

标签: django django-i18n

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

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

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

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

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

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标记为翻译的方法?我该怎么办?

1 个答案:

答案 0 :(得分:1)

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

使用此软件包,您可以标记模型进行翻译,您应该按照教程非常简单

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

  1. 使用以下代码安装软件包:pip install django-modeltranslation
  2. modeltranslation添加到INSTALLED_APPS
  3. 中的settings.py
  4. 在settings.py。
  5. 中设置USE_I18N = True
  6. 在settings.py中配置您的语言。
  7. 在您的应用目录中创建translation.py,并为要翻译的每个模型注册TranslationOptions
  8. 使用python manage.py syncdb
  9. 同步数据库

    实施例

    您在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_endescription_de你可以在哪里添加翻译。