目前在JavaScript中处理i18n的最佳做法是什么?
我听说过一些涉及使用PHP / Rails /等输出所有i18n字符串的建议。到数千个vars的格式化JavaScript文件,但这听起来太粗糙了解决方案;此外,还需要一种方法来检测哪些i18n字符串实际上需要加载到给定页面的JS文件,但我现在不知道如何实现它。
我听说过其他一些建议涉及在后端和前端之间设置某种API,使用格式良好的JSON作为i18n字符串的载体,但仍然无法解决冗余字符串的问题,我可能不需要
目前关于i18n在JavaScript中的一些最佳实践,如果可能的话,还有一个解决方案,用于检测和发送给定页面上实际需要的那些字符串?
答案 0 :(得分:1)
“最佳实践”实际上取决于您构建应用程序的方式。两个例子:
无论哪种方式,您都希望将发送到客户端的字符串数量减少到最低限度。虽然有很多方法,但我最喜欢的是使用预编译的模板(我喜欢使用Twitter的Hogan.js的Mustache)和i18n扩展,它们不仅返回生成HTML的函数,还包含所有可翻译的列表字符串。
你肯定不想要做的是建立一个功能,检查你是否已经有翻译,如果你没有,那么问服务器。这将使一切都很慢,你不希望这样。要么预先加载所有翻译,要么不翻译这些部分。
答案 1 :(得分:0)
这取决于你所说的“i18n”。从你的问题看来,你似乎只是意味着可翻译的字符串提取。
在这种情况下,我倾向于从后端生成的单个JS脚本。这可能包含数组中的所有可翻译字符串和一些查找方法。我不知道你是否称它为“千变量方法”,但这就是我所倾向的。我知道您可能不喜欢在代码中使用alert(tr.getString("some.key"))
这样的内容,但是因为您询问了最佳做法...
我见过许多解决方案,但其中大多数只是重新发明轮子。问题是,在大多数情况下,车轮相当平方......
话虽如此,i18n比简单的字符串提取更广泛。您必须注意区域格式支持,正确的排序规则,对可本地化的支持(提取字符串只是其中一部分)等等。 我不能真正谈论“最佳实践”,因为问题太广泛了。但是,我可以说,它实际上取决于平台(即编程语言)。