Django Model Translation: 模型数据的多语言翻译
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 模块提供的翻译函数进行翻译。
相关文章