跳转到主要内容

Django对Mozilla今天推出的本地化系统Fluent的绑定。

项目描述

https://badge.fury.io/py/django-ftl.svg https://readthedocs.org/projects/django-ftl/badge/?version=latest&style=flat https://github.com/django-ftl/django-ftl/workflows/Python%20package/badge.svg

django-ftl是一个用于Fluent的Django包,Fluent是一个适用于当今世界的本地化系统。(本应称为django-fluent,但已被占用)。

此包基于fluent-compiler构建,并提供

  • 用于设置和管理您的.ftl文件的结构。

  • 切换/设置当前语言的函数。

  • Django模板的集成。

为什么我会使用这个?

Django世界中的事实标准是GNU Gettext。请参阅Fluent vs gettext页面进行比较。简而言之,以下是一些优点

  • Fluent使诸如复数规则等问题成为翻译者的工作。

  • Fluent赋予翻译者遵守语言特定规则(性别、_case_、复数)的能力,开发者可能不了解,也不应该将其构建到软件中。

  • Fluent集成数字和日期格式化,并给予开发者和翻译者对这些内容的控制,而无需分别处理,并且仅由开发者控制。

以下是一个例子,在GNU Gettext中支持复数规则。然而,这是Gettext支持的唯一一种语言特定功能,并且它是在之后附加的。开发者还必须部分硬编码英语规则(即英语有两种变体),如Django文档中所述。

msg = ngettext(
     'there is %(count)d object.',
     'there are %(count)d objects.',
 count) % {
     'count': count,
 }

最后,这仍然工作得不太好,因为通常你仍然想特别处理零的情况——“没有对象”(或“您的收件箱为空”等),而不是“有0个对象”。

在Fluent中,复数规则是选择变体的更通用机制的一个例子,翻译者掌握控制权。包括对零情况的特殊处理,在英文.ftl文件中的对应内容如下:

there-are-some-objects = { $count ->
    [0]     There are no objects.
    [1]     There is one object.
    [other] There are { $count } objects.
 }

引用此内容的Python代码只需要使用ID(there-are-some-objects)并传递$count参数。

另一个问题是性别——例如,在法语中,形容词必须与所描述的人的性别一致。在Fluent中,可以通过传递人的性别作为参数来解决这个问题,并允许翻译者使用变体机制来编写正确的语言。这与GNU Gettext形成对比,在GNU Gettext中,开发者必须为每种情况创建不同的消息字符串,因为消息格式不够强大,无法允许翻译者添加变体选择。此外,这些不同的消息字符串在那些没有该功能的语言中将是相同的——换句话说,所有语言的语法特征最终要么对源代码和其他翻译者产生不成比例的影响,要么完全被忽视。

文档

关于如何使用django-ftl的文档在docs文件夹中,并在https://django-ftl.readthedocs.io上在线提供。

状态

该库现在相当稳定,拥有完整的测试套件,没有重大缺失功能,也没有计划进行重大破坏性更改。

它已在以下实际项目中使用:

致谢

渲染此包时使用的工具

项目详情


下载文件

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

源分布

django-ftl-0.14.tar.gz (46.1 kB 查看散列)

上传时间

构建分布

django_ftl-0.14-py3-none-any.whl (12.3 kB 查看散列)

上传时间 Python 3

支持者