跳转到主要内容

这是一个为django集成的内容翻译框架,自动集成到常规ORM中。消除了在django项目中考虑翻译的痛苦。

项目描述

模型翻译变得简单。

该项目为Django添加了模型翻译支持。它设计得无侵入、高效且可靠。在技术方面,它使用自动创建的翻译模型来存储任意语言的可翻译字段,并通过外键与主模型相关联,从而实现快速查询。

始于2011年,hvad已经成熟,现在被用于大型应用程序。

快速链接

特性

  • 简单 - 只需3个新的查询集方法。

  • 自然 - 按照常规使用Django ORM,它只是变得具有语言感知能力。

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

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

  • 内含电池 - 提供了支持翻译的表单和管理员。

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

  • 兼容性 - 遵循Django兼容性矩阵。

Django-hvad还支持3.1或更高版本的Django REST framework,包括具有翻译感知序列化器的支持。

示例用法

声明一个可翻译的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()

通常的查询集方法与它们通常的方式一样:让我们获取所有书籍作为翻译实例,根据标题属性进行过滤,返回那些法语标题中包含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.8,可通过PyPI和git分支releases/1.8.x获取。

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

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

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

感谢

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

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

项目详情


下载文件

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

源分布

lotrek-django-hvad-2.0.7.tar.gz (108.9 kB 查看哈希)

上传时间

构建分布

lotrek_django_hvad-2.0.7-py2.py3-none-any.whl (106.8 kB 查看哈希值)

上传于 Python 2 Python 3

由以下支持