.po文件和gettext VS JSON和自定义i18n库?

我需要在JavaScript中为浏览器端的翻译开发或者find一些类似轻量级gettext的库。 最好如果我想翻译服务器端,相同的库可以被node.js使用。

1)但是,使用.po文件和JavaScript gettext库的优点和缺点是什么?
(而不是JSON和jQuery全球化或类似?)

2)是否有任何工作stream程/服务,将允许翻译的众包,可以导出到一个格式(.po / json),可以由JavaScript国际图书馆(gettext实现,Globalize.js等)使用?

1)但是,使用.po文件和JavaScript gettext库的优点和缺点是什么? gettext格式是相当常见的: – 所以如果你的服务器端已经使用gettext格式,你可能会与客户端共享 – 翻译者可能会觉得gettext格式(或yaml)比使用json格式更舒服 – 有很多工具可以使用

我个人不喜欢围绕gettext编译的翻译函数 – 感觉对我来说很笨拙,轻量级JavaScript库(如http://i18next.com )感觉更好。

你可以使用的Libs:

  • jed带有纯粹的gettext实现
  • i18next支持gettext文件,但是对于翻译function使用json方法

2)是否有任何工作stream程/服务,将允许翻译的众包,可以导出到一个格式(.po / json),可以由JavaScript国际图书馆(gettext实现,Globalize.js等)使用?

我会build议使用l10ns 。 对于任何与i18n相关的项目,您需要以下内容:

  1. 存储本地化string的良好存储系统。
  2. 一个好的本地化格式,可以处理复杂的格式,而不仅仅是简单的string。 而通过复杂的格式,我的意思是可以处理复数格式,基于属/上下文的格式,数字格式,date格式等格式。

有很less的工具可以处理这两点。最常见的解决scheme是将gettext与xgettext一起使用。 Xgettext是一个遍历源代码的工具,可以在源代码和本地化存储之间同步本地化密钥。 虽然gettext不擅长处理第2点。例如,您不能用两个复数单词格式化string。 所以像I like 2 cats and 1 dogstring很难格式化。 复数格式化是一个非常复杂的问题,需要解决很多边界情况。 假设我们喜欢2000而不是喜欢两只猫,正确的格式化的string将是I like 2,000 cats and 1 dog 。 你有没有注意到,2,000 ? 所以为了正确使用gettext的复数解决scheme,我们还需要使用外部库来处理数字格式。

所以对于第二点,有一个很好的本地化格式。 我发现ICU的MessageFormat处理这是最好的。 这是一种处理l10n格式的标记语言,它被许多大牌公司(如Google,Apple和Yahoo)所使用。 它处理上面提到的复数格式的边缘情况。 它也处理很多其他types的复杂格式。 如属性上下文,序号格式,数字格式和date格式等

一个支持ICU的MessageFormat并内置存储系统的工具是L10ns 。 它也支持Xgettext的工作stream程。 您编写源代码,然后同步您的本地化密钥。

使用gettext的优点是有很多可用的工具,翻译者习惯于使用它,你可以很容易地在你的javascript和前端的其余部分之间共享string。

您可以使用xgettext从javascript生成.po文件,但默认不支持javascript。 如果你使用相同的函数名称,并告诉它你正在使用Perl(我认为),它的工作更可靠。 有几个工具可以将.po转换为json,或者只是使用其中一个gettext js实现。