JavaScript的i18n - 最佳实践?

3
目前在JavaScript中处理i18n的最佳实践是什么?
我听说过一些建议,涉及将所有i18n字符串使用PHP/Rails等输出到格式化的JavaScript文件中,但这似乎是一个太粗糙的解决方案。此外,还需要一种方法来检测在给定页面上加载的JS文件中实际需要哪些i18n字符串,但我现在不知道如何实现这一点。
我听说过一些其他建议,包括在后端和前端之间设置某种API,使用格式良好的JSON作为i18n字符串的载体,但这仍然无法解决可能不需要的冗余字符串的问题。
目前,在JavaScript中处理i18n的最佳实践是什么?如果可能的话,也有解决方案可以检测并仅发送在给定页面上实际需要的字符串。
2个回答

2

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

  • 单页应用程序。当然,您希望一次性加载所需的所有字符串,因为不断获取新的字符串将浪费时间和资源。
  • 包含某些基于JS内容的页面如果您不断重新加载JS,则可能希望尽可能减少字符串数量,甚至在HTML中集成整个i18n字典以避免AJAX调用。

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

绝对不要构建一个函数来检查是否已经有翻译,如果没有,再向服务器请求。这会使所有内容非常慢,您不希望出现这种情况。要么预加载所有翻译,要么不翻译那些部分。


0

“i18n”是什么意思,这要看你的理解。从你的问题来看,似乎你只是想提取可翻译的字符串。 在这种情况下,我倾向于从后端生成单个JS脚本。这可能包含数组中的所有可翻译字符串和一些查找方法。我不知道你是否称之为“千变万化的方法”,但这就是我倾向的方法。我知道你可能不喜欢在代码中出现像alert(tr.getString("some.key"))这样的东西,但既然你问了最佳实践……

我见过很多解决方案,但大多数都是在重新发明轮子。问题是,在大多数情况下,这个轮子相当方形……

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接