2011-10-16 28 views
3

到目前为止,我为我的JavaScript应用程序(使用jQuery UI构建)的i18n和l10n使用Globalize。这有效,但它将我的代码绑定到另一个特定的库。现在我正在寻找一种方法来解决这个问题,因为我重新使用了一些不支持i18n的源,我宁愿不改变它。我不是在为可以插入任何实现的i18n使用全局接口。总结:如何在不改变源代码的情况下将i18n和l10n支持添加到现有应用程序中?我不是在问这是否是一个好主意,我问是否可行以及如何。现有JavaScript应用程序的国际化和本地化

到目前为止,我想出了这些方法,但两者各有缺点:

  1. 如果我依靠的是使用jQuery的(我能在我的情况),我可以取代text/val/append等方法,即所有操作DOM的方法。但其中有相当多的,其中每个人都有一些不同。我还可以更进一步并取代DOM方法。

  2. 步行DOM并替换文本节点和表单值。这可行,但价格昂贵,动态变化难以检测,因为没有标准化的方法来做到这一点。

那些提供了国际化问题的部分解决方案,但对于l10n而言,这两者都不起作用。

您将如何解决向现有应用程序添加i18n和l10n支持的问题?

回答

2

简短的回答:
有没有办法来支持i18n添加到应用程序没有改变其来源。

让我详细说明一下。你需要用i18n做什么:

  1. 外部化字符串。
  2. 根据有效区域设置格式化日期,时间,数字等。
  3. 接受根据特定地区的用户输入(即日期,时间,号码)。
  4. 正确处理文化偏见(即修改颜色,图像,声音...)。

这些东西可以做没有修改源代码。抱歉。

Ad1。外部化字符串看起来很简单,对吧?只需浏览DOM并用翻译文本替换任何实例即可。
不,不是这样的。首先,您可能还拥有不可访问的文本,如JavaScript驱动的错误或信息消息(即通过alert()函数)。这不是DOM可访问的。其次,总是存在复合消息,即你输入一些数字(“12条记录与你的查询匹配”)。翻译时,通常需要重新排列句子(即数字最后)。你需要分析每个句子的数字或日期,并专门对待它。而如果你把一个可变的字符串?你将如何克服这种情况(特别是如果这个字符串可能随时间而改变)?

Ad2。& Ad3。格式化和解析很简单,对吧?那么,是的如果你知道区域。不幸的是,检测语言环境的唯一明智的方法是在服务器端(从Accept-Language头文件)执行此操作。客户端对它的支持几乎不存在(在许多浏览器的情况下)或严重损坏(在其他情况下)。所以你甚至不知道使用哪个区域。而当你无法修改底层JavaScript时,你将如何接受本地日期?

Ad4。支持不同的颜色是可以实现的,但唯一的方法是为每个DOM元素手动设置。祝你好运。 理论上添加额外的图像或声音需要将它们放在正确的目录中并修改DOM,以便使用适当的。再次祝你好运。

基本上,你想减少工作量,对不对?原来,通过实施非标准解决方案(这实际上不是什么行业标准建议),你最终会做更多工作,或者你的i18n支持会(让我用这个委婉说法)穷人。

+0

很好的例子。感谢您整理我的思想。 –