一个面向django的内容翻译框架,它自动集成在普通orm中。消除了在django项目中考虑翻译的痛苦。

django-hvad的Python项目详细描述


模型翻译变得简单。

这个项目增加了对django中模型翻译的支持。它被设计成 低调、高效、可靠。在技术方面,它使用 创建翻译模型以将可翻译字段存储在任意位置 带有外键的语言到主模型,支持快速查询。

从2011年开始,hvad已经发展成熟,目前已用于大规模应用。

快速链接:

功能

  • simple-只有3个新的queryset方法。
  • natural-像往常一样使用django orm,它只是变得有语言意识。
  • fast-没有额外的读取查询,只是索引键的内部连接。
  • complete-关系、自定义管理器和查询集、代理模型和抽象模型。
  • 包括电池-提供支持翻译的表单和管理员。
  • reliable-超过300个测试用例和计数。coveragebuild
  • 与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和信任我 继续发展。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
maven字段#getGenericType()抛出java。lang.TypeNotPresentException   用java绘制三角形的几何图形   java无法下载主题和发件人地址(rediff)   java如何使代码线程安全   java在尝试转换FileInputStream中的文件时,我遇到了一个FileNotFound异常   java Moxy和Jackson如何将Json映射到Pojo   在foreach循环中使用BufferedWriter生成新行的java问题   java为什么我的测试在单次执行中运行时间小于1秒,而在maven构建中运行时间大于20秒?   java如何显示下载附件的进度条   了解java rmi的良好实践   .net可以将Java portlet嵌入ASP。网页?   循环如何多次执行Java方法?   java如何确保用户输入在给定的有效范围内?   java单元测试定理   java如何在IntelliJ上运行外部构建项目?   JAVA:试图编写一个检查字符串是否为数字的方法。总是返回错误   javahadoop将特定键的所有map方法生成的所有值都发送到一个reduce方法,对吗?   在java中读取和使用文件