为django集成自动ORM的内容翻译框架。消除了在django项目中考虑翻译的痛苦。
项目描述
使模型翻译变得简单。
本项目为Django增加了模型翻译功能。它旨在简洁、高效、可靠。在技术方面,它使用自动创建的《翻译模型》来存储任意语言的翻译字段,并通过外键与主模型关联,从而实现快速查询。
自2011年开始,hvad项目已日趋成熟,现在被广泛应用于大型应用程序中。
快速链接
功能
简单 - 仅增加3个新的查询集方法。
自然 - 仍使用Django ORM进行操作,只是增加了语言感知能力。
快速 - 读取时无需额外的查询,只需进行索引键的内连接。
完整 - 包含关系、自定义管理器、查询集、代理模型和抽象模型。
内置功能 - 提供了翻译功能的表单和管理界面。
兼容性 - 与Django 1.8到1.11兼容,支持Python 2.7、3.4、3.5或3.6。
Django-hvad还支持Django REST framework 3.1或更高版本,包括语言感知序列化器。
示例用法
声明可翻译的Book模型
class Book(TranslatableModel): author = models.ForeignKey(Author) release = models.Date() translations = TranslatedFields( title = models.CharField(max_length=250) )
因此,标题将根据语言而变化。发行日期和作者在所有语言中共享。现在,让我们创建一个Book实例
# The recommended way: book = Book.objects.language('en').create( author = Author.objects.get(name='Antoine de Saint Exupéry'), release = datetime.date(1943, 4, 6), title = "The Little Prince", ) # Also works book = Book(language_code='en') book.author = Author.objects.get(name='Antoine de Saint Exupéry') book.release = datetime.date(1943, 4, 6) book.title = "The Little Prince" book.save()
提供一些翻译
book.translate('fr') book.title = "Le Petit Prince" book.save() book.translate('de') book.title = "Der kleine Prinz" book.save()
每次调用translate()都会从头创建一个新的翻译并切换到该翻译;save()只保存最新的翻译。现在让我们进行一些语言感知的查询
Book.objects.all()
默认兼容:返回所有对象,不附带任何翻译字段。从v1.0版本开始,默认行为可以覆盖以像以下查询一样工作
Book.objects.language().all()
返回所有对象作为翻译实例,但只有翻译成当前语言的对象。您也可以指定要获取的语言,例如
Book.objects.language("en").all()
常规查询集方法与以往一样工作:让我们获取所有图书作为翻译实例,按title属性进行过滤,返回那些法语标题中含有Petit Prince的图书,并按出版日期(法语版)排序
Book.objects.language("fr").filter(title__contains='Petit Prince').order_by('release')
其他随机示例
# last German book published in year 1948 Book.objects.language("de").filter(release__year=1948).latest() # other books from the same author as mybook. Cache author as well. Book.objects.language().select_related('author').filter(author__books=mybook) # books that have "Django" in their title, regardless of the language Book.objects.language('all').filter(title__icontains='Django')
更多示例请参阅快速入门指南。
版本
Django-hvad使用与Django相同的发布模式。以下版本因此可用
感谢
Jonas Obrist (https://github.com/ojii) 为创建 django-nani 并帮助我进行此项目。
Kristian Øllegaard (https://github.com/KristianOellegaard/) 为 django-hvad 以及信任我继续开发。