i18n for JavaScript - 最佳实践?

时间:2013-04-11 23:42:40

标签: javascript internationalization

目前在JavaScript中处理i18n的最佳做法是什么?

我听说过一些涉及使用PHP / Rails /等输出所有i18n字符串的建议。到数千个vars的格式化JavaScript文件,但这听起来太粗糙了解决方案;此外,还需要一种方法来检测哪些i18n字符串实际上需要加载到给定页面的JS文件,但我现在不知道如何实现它。

我听说过其他一些建议涉及在后端和前端之间设置某种API,使用格式良好的JSON作为i18n字符串的载体,但仍然无法解决冗余字符串的问题,我可能不需要

目前关于i18n在JavaScript中的一些最佳实践,如果可能的话,还有一个解决方案,用于检测和发送给定页面上实际需要的那些字符串?

2 个答案:

答案 0 :(得分:1)

“最佳实践”实际上取决于您构建应用程序的方式。两个例子:

  • 单页应用。当然,您只想一次性为所有应用程序加载所有需要的字符串,因为不断获取新字符串会浪费时间和资源。
  • 包含一些基于JS的内容的页面。如果你继续重新加载JS,你可能希望尽可能减少字符串的数量,甚至可能在HTML中整合整个i18n dict避免AJAX通话。

无论哪种方式,您都希望将发送到客户端的字符串数量减少到最低限度。虽然有很多方法,但我最喜欢的是使用预编译的模板(我喜欢使用Twitter的Hogan.js的Mustache)和i18n扩展,它们不仅返回生成HTML的函数,还包含所有可翻译的列表字符串。

你肯定想要做的是建立一个功能,检查你是否已经有翻译,如果你没有,那么问服务器。这将使一切都很慢,你不希望这样。要么预先加载所有翻译,要么不翻译这些部分。

答案 1 :(得分:0)

这取决于你所说的“i18n”。从你的问题看来,你似乎只是意味着可翻译的字符串提取。 在这种情况下,我倾向于从后端生成的单个JS脚本。这可能包含数组中的所有可翻译字符串和一些查找方法。我不知道你是否称它为“千变量方法”,但这就是我所倾向的。我知道您可能不喜欢在代码中使用alert(tr.getString("some.key"))这样的内容,但是因为您询问了最佳做法...

我见过许多解决方案,但其中大多数只是重新发明轮子。问题是,在大多数情况下,车轮相当平方......

话虽如此,i18n比简单的字符串提取更广泛。您必须注意区域格式支持,正确的排序规则,对可本地化的支持(提取字符串只是其中一部分)等等。 我不能真正谈论“最佳实践”,因为问题太广泛了。但是,我可以说,它实际上取决于平台(即编程语言)。