“fluent”的django绑定,当今世界的本地化系统。

django-ftl的Python项目详细描述


https://badge.fury.io/py/django-ftl.svghttps://readthedocs.org/projects/django-ftl/badge/?version=latest&style=flathttps://travis-ci.org/django-ftl/django-ftl.svg?branch=masterhttps://codecov.io/gh/django-ftl/django-ftl/branch/master/graph/badge.svg

django ftl是一个django包,用于Fluent,a 面向当今世界的本地化系统

此包基于Python implementation of Fluent并提供:

  • 用于设置和管理.ftl文件的结构。
  • 切换/设置当前语言的方法。
  • 集成到django模板中。

我为什么要用这个?

Django世界的事实标准是GNU-Gettext有关 比较。简而言之,这里有一些优点:

  • 流利的语言使翻译的工作像复数规则一样复杂。
  • 流利的语言赋予译者遵守特定语言规则的能力 (性别、案件、复数)开发商可能不知道, 而且不必在软件中构建。
  • fluent集成了数字和日期格式,为开发人员和 翻译人员可以控制这些内容,而不必处理这些内容 单独进行,且仅由开发人员控制

举个例子,在gnu gettext中支持复数规则。然而, 这是gettext所支持的唯一特定于语言的特性,而且 后来就穿上了。开发人员还必须对英语进行部分硬编码 规则(即英语中有两个变体的事实),根据 Django docs

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

最后,这仍然不是很好的工作,因为你经常想特别 不管怎样,都是0号大小写-“没有对象”(或“您的收件箱是空的”等) 而不是“有0个对象”

在Fluent中,复数规则是 选择变体,译者就可以控制。等同于 fluent/django ftl,包括对zero案例的特殊处理,看起来像 这是一个英文.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,开发人员必须为其创建单独的消息字符串 每种情况,因为消息格式不够强大,无法允许 添加变体选择的转换器。另外,这些不同的消息字符串将 在没有这个特性的语言中是相同的,换句话说 所有语言的语法特征对 源代码和其他翻译器

文件

有关如何使用django ftl的文档位于docs/文件夹中,并在线访问 https://django-ftl.readthedocs.io

学分

用于呈现此包的工具:

历史记录

0.10(2019-05-23)

  • 升级到更新版本的fluent.runtime(0.12及修改)
  • 修复了use_isolating行为(现在为HTML消息插入了BDI字符)
  • 加载捆绑包的线程安全修复。
  • 更正了通过INSTALLED_APPS找到的“locales”目录的使用顺序 与正常的Django惯例一致。

0.9.1(2019-03-02)

  • 改变开发自动下载机制,不干扰django的 开发服务器自动下载。
  • 模板标记中指定无效模式时的错误修复。
  • 对Middleware的各种修复和改进(附加测试)
  • 线程安全包
  • 通过上下文处理器配置ftlmsg的方法。

0.9(2018-09-10)

  • 工作版本
  • 取决于我们的python fluent版本

0.0.1分(2018年5月19日)

  • PyPI上的第一个版本-空占位符包

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

推荐PyPI第三方库


热门话题
迭代器或foreach中的java延迟   java序列化枚举单例   在Java中,当一个客户端(多个客户端中的一个)关闭时,如何使socket保持活动状态?   java在这种情况下使用什么更合适的集合?   java如何使用restclient API向现有JIRA问题添加附件   java操作JPEG元数据的最佳库是什么?   java SWT MessageBox关闭按钮已禁用   swing如何删除java消息的一部分。lang.IllegalArgumentException处理异常   java在Hibernate中删除日期集合   拆分如何在Java中每行输出10个整数?   java为什么我不能与iframe中的元素交互?   java Ant构建错误。在Eclipse上成功,但未使用ant。“找不到符号”和“类…无法应用于给定类型”错误   java在表单组内部发布多部分(文件)   用于返回节点名称及其文本内容数组的java XPath表达式   java Vaadin:Layout中的中心组件不能仅使用静态值与setSizeFull一起使用吗?   java如何使用Spring 4在我的webSocket服务器中捕获订阅事件