国际化的自行车指数

通过杰克罗默

2019 - 11 - 03 - t23:00:00 - 0600

主题:科技


喂,vrienden !

好消息,我们的朋友在荷兰-自行车索引现在有荷兰语

作为其在全球范围内消除自行车盗窃的持续使命的一部分,自行车指数与BikeFair这家荷兰自行车市场致力于为二手自行车销售带来安全和透明度。让荷兰用户访问“自行车索引”是这种合作关系的一个重要组成部分。

加上我们最近与荷兰赃物登记系统的整合stopheling.nl而且verlorenofgevonden.nl在荷兰,这个国际化项目将使荷兰骑车人能够使用“自行车索引”注册和搜索他们的自行车,并使用“自行车索引”的新功能促进了警报该服务使用有针对性的Facebook广告,更有效地找回丢失和被盗的自行车。bwin娱乐平台注册

荷兰自行车索引

技术注释

作为其他开源项目的资源指南,可能需要承担类似的项目(或自行车索引的贡献者-我们是开源!),下面简要概述了国际化Rails应用程序所涉及的注意事项、我们的特殊约束和需求,以及我们在实现中所做的决定。

除非你的Rails应用程序从一开始就已经国际化了,否则最小化国际化需要三方面的努力:

  1. 为给定的web请求添加检测和设置语言环境的功能。
  2. 如果使用默认的Rails i18n框架,则将面向用户的字符串外部化,将它们从视图(主要但不专门)移动到YAML。
  3. 将现在外部化的字符串翻译为其他语言。

对于Bike Index,我们对其他国际化的开源Rails项目所采用的方法做了一些研究——特别是,话语而且GitLab。这项工作有助于为要做的工作建立一种思维模式,尽管在不同的需求或约束要求时,我们自然会偏离这些模式。

现场检测

有很多方法可以检测用户的语言环境:

  1. 显式地从语言环境查询参数(可通过UI元素设置),
  2. 显式地从绑定到用户帐户的数据库值(可通过用户首选项UI设置),
  3. 显式的ACCEPT_LANGUAGE在请求上设置的头(可通过用户的浏览器首选项进行设置),以及
  4. 从用户的地理编码位置推断区域设置。

为了减少复杂性,我们实现只有(1)到(3)。

翻译管理

翻译管理是一个“购买还是构建”的决策点。这里要讨论的中心问题是

  1. 我们是否希望开发人员成为更新翻译的把关人?(对我们来说,没有。)
  2. 我们是否希望通过网站UI接受来自用户的翻译贡献?(在我们的例子中,有一个不错的,但不可行的v1。)
  3. 我们是否能够投入资源建立我们自己的翻译管理解决方案?(对我们来说,可能不是。)

这让我们对在其他地方见过的各种翻译管理服务进行定价,并研究它们的功能集,包括TransifexLingoHub,短语

所有这些都需要每月缴纳19到180美元不等的订阅费,此外还有翻译费用,我们估计最初的荷兰语翻译费用为8000到10000美元。

更多的挖掘浮出水面Translation.io,它是轻量级的,专注于Rails(和Laravel)项目,并为我们按下了所有正确的按钮:

  1. 这是开源项目免费
  2. 它通过谷歌Translate自动集成翻译(虽然不完美,但具有成本效益的80-90%解决方案),进一步降低了相关成本

作为一个非营利组织,我们对价格相对敏感,不想低效地使用资金,所以潜在的节省给了翻译。这对我们的讨论大有帮助。

它最重要的功能差距相对于它的替代方案-自动GitHub PRs同步翻译-可以实现一些Shell脚本集成到我们的构建管道中所以我们有了一个明显的赢家。

字符串外化

这个阶段的关键决定是翻译文件使用什么格式,可以选择YAML (TheRails默认),GetText(在Rails生态系统之外广泛流行)。

GetText已经与Rails默认值相比的几个优点特别是对于大型项目——最引人注目的是字符串不需要从模板外部化到翻译文件中。相反,源字符串存在于模板中,但只是包装在一个特殊的方法中。

但是,就像在Rails上下文中经常发生的情况一样,对于像Bike Index这样的中等规模项目的需求,默认值总体上比备选方案优化得更好,即使这些备选方案在某种意义上更好。

现有的工具既可以减轻Rails默认的i18n框架的缺点,又可以放大它的优点,所以我们选择不太偏离Rails的约定,以便尽可能多地利用开源现有技术。此外,YAML方法允许非开发人员(营销人员?)在不深入源代码的情况下编辑源代码副本。

字符串外部化是目前为止最耗时的劳动密集型的翻译项目的一部分。

我们尽可能地使用各种代码生成和文本整理工具实现自动化:

很好的实践

在从大约15,000行模板、控制器和React代码中扫描和提取字符串的过程中,我们收获了一些经验。看看我们国际化文档如果你想了解更多的话!

这篇文章的扩展版本——以及Jake的其他文章——可以在这里找到他的博客

Baidu
map