一个面向django的内容翻译框架,它自动集成在普通orm中。消除了在django项目中考虑翻译的痛苦。
django-hvad的Python项目详细描述
模型翻译变得简单。
这个项目增加了对django中模型翻译的支持。它被设计成 低调、高效、可靠。在技术方面,它使用 创建翻译模型以将可翻译字段存储在任意位置 带有外键的语言到主模型,支持快速查询。
从2011年开始,hvad已经发展成熟,目前已用于大规模应用。
快速链接:
功能
- simple-只有3个新的queryset方法。
- natural-像往常一样使用django orm,它只是变得有语言意识。
- fast-没有额外的读取查询,只是索引键的内部连接。
- complete-关系、自定义管理器和查询集、代理模型和抽象模型。
- 包括电池-提供支持翻译的表单和管理员。
- reliable-超过300个测试用例和计数。
- 与django 1.8到1.11兼容,运行python 2.7、3.4、3.5或3.6。
django hvad还支持Django REST framework3.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()
通常的QuerySet方法的工作原理和它们的工作原理一样:让我们把所有的书作为翻译实例, 过滤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')
quickstart guide中的更多示例。
释放量
django hvad使用与django相同的发布模式。以下版本 因此可用:
- 稳定分支1.7,可通过PyPI和git分支releases/1.7.x获得。
- 稳定分支1.8,可通过PyPI和git分支releases/1.8.x获得。
- 开发分支1.9,可通过git分支master获得。
稳定的分支根据需要有小的错误修复版本,并保证兼容性。 有关详细信息,请参见installation guide,或者查看release notes。
感谢
乔纳斯·奥布里斯特(https://github.com/ojii)制作了django nani并帮助我完成了这个项目。
克里斯蒂安·莱尔加德(https://github.com/KristianOellegaard/)为django hvad和信任我 继续发展。