Django Model Translation: 模型数据的多语言翻译

2023-04-07 00:00:00 模型 翻译 多语言

Django Model Translation 是一个用于实现模型数据多语言翻译的 Django 扩展。

通常情况下,我们会在代码中直接定义模型的字段,例如:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

这样定义的模型只支持一种语言,如果需要支持多语言,就需要在数据库中为每种语言新建一个字段,这样就会导致多个表字段名称不一致,增加了开发难度和维护成本。

Django Model Translation 可以通过在代码中定义一个简单的翻译器来解决这个问题:

from django.db import models
from modeltranslation import translator, TranslationOptions

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

class PostTranslationOptions(TranslationOptions):
    fields = ('title', 'content')

translator.register(Post, PostTranslationOptions)

以上代码中,我们使用了 modeltranslation 模块中的 translator 和 TranslationOptions 类来定义 Post 模型的翻译器,并且将包含 title 和 content 字段的 PostTranslationOptions 对象注册到了 Post 模型中。

这样做以后,我们可以在 Django 的管理后台中输入各种语言的翻译内容,比如:

id title content
1 Hello World
2 Bonjour Monde
3 こんにちは 世界
4 Hallo Welt

然后,我们就可以在代码中直接使用翻译后的字段了:

>>> post = Post.objects.get(pk=1)
>>> post.title
'Hello'
>>> post.title_fr  # 访问法语翻译
'Bonjour'
>>> post.title_ja  # 访问日语翻译
'こんにちは'

需要注意的是,模型翻译器只能翻译模型的字段,而不能翻译模型的方法和属性。如果需要翻译模型的方法和属性,可以使用 gettext 方法或 django.utils.translation 模块提供的翻译函数进行翻译。

相关文章