i18n for JavaScript -最佳实践

i18n for JavaScript - The Best Practice?

本文关键字:最佳 for JavaScript i18n      更新时间:2023-09-26

当前在JavaScript中处理i18n的最佳实践是什么?

我听到了一些建议,包括使用PHP/Rails/等输出所有的i18n字符串。转换成包含数千个变量的格式化JavaScript文件,但这听起来太粗糙了;此外,需要有一种方法来检测哪些i18n字符串是实际需要的JS文件,将被加载到一个给定的页面上,但我不知道如何实现这个现在。

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

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

"最佳实践"实际上取决于您如何构建应用程序。两个例子:

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

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

绝对不想要做的是构建一个函数来检查您是否已经有翻译,如果没有,则询问服务器。这会让一切变得非常缓慢,这是你不想要的。要么预加载所有翻译,要么不翻译这些部分。

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

我见过许多解决方案,但大多数只是重新发明轮子。问题是,在大多数情况下,轮子是方形的……

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