国际化自行车指数

通过杰克罗默

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

主题:科技


喂,vrienden !

荷兰的朋友们,好消息来了——自行车索引现已推出荷兰语版

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

再加上我们最近与荷兰赃物登记处的整合stopheling.nlverlorenofgevonden.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美元到1万美元。

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

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

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

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

字符串外化

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

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

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

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

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

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

非常好的实践

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

这篇文章的扩展版本——以及杰克的其他文章——可以在上面找到他的博客

Baidu
map