一个面向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第三方库


热门话题
缺少java MIMessage附件   java试图从JSON数组向数据库插入数据   铸造java。util。ArrayList无法转换为java。util。矢量   在到达末尾后从头开始读取csv文件(Java、OpenCSV)   Java swing如何在另一个线程中打开框架   java如何为集合正确编写此比较器。排序(arrayList、comparator)?   JavaOOD将配置传递给外部类的最佳方式   java不确定如何使用switch语句从main()调用要运行的方法   java循环菜单以在选择后显示   java将位置对象转换为地址(谷歌地图)   java Hazel cast客户端端口问题   使用JarJar重新打包工具的java   使用Java Netscape目录LDAP API和二进制筛选器值   java如何从Google App Engine下载应用程序源文件   java如何居中javafx场景图“摄影机”   java调用servlet而不提交并停留在同一个JSP页面中   将文本文件加载到HashMap<Integer,List<String>>java中   JavaFX平台。重新加载站点后运行更高版本()