跳转到主要内容

为django集成自动ORM的内容翻译框架。消除了在django项目中考虑翻译的痛苦。

项目描述

使模型翻译变得简单。

本项目为Django增加了模型翻译功能。它旨在简洁、高效、可靠。在技术方面,它使用自动创建的《翻译模型》来存储任意语言的翻译字段,并通过外键与主模型关联,从而实现快速查询。

自2011年开始,hvad项目已日趋成熟,现在被广泛应用于大型应用程序中。

快速链接

功能

  • 简单 - 仅增加3个新的查询集方法。

  • 自然 - 仍使用Django ORM进行操作,只是增加了语言感知能力。

  • 快速 - 读取时无需额外的查询,只需进行索引键的内连接。

  • 完整 - 包含关系、自定义管理器、查询集、代理模型和抽象模型。

  • 内置功能 - 提供了翻译功能的表单和管理界面。

  • 可靠 - 超过300个测试用例,并仍在增加。覆盖率 构建

  • 兼容性 - 与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相同的发布模式。以下版本因此可用

  • 稳定分支1.7,可通过PyPI和git分支releases/1.7.x获取。

  • 稳定分支1.8,可通过PyPI和git分支releases/1.8.x获取。

  • 开发分支1.9,可通过git分支master获取。

稳定分支在需要时会有小版本号的错误修复发布,并保证兼容性。有关详细信息,请参阅安装指南,或查看发行说明

感谢

Jonas Obrist (https://github.com/ojii) 为创建 django-nani 并帮助我进行此项目。

Kristian Øllegaard (https://github.com/KristianOellegaard/) 为 django-hvad 以及信任我继续开发。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

django-hvad-1.8.0.zip (137.6 kB 查看散列值)

上传时间

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面