6

就国际化和本地化的两种方法寻求一些建议。我有一个使用 Spring MVC 和 Dojo 的 Web 应用程序,我想支持多种语言。所以,我可以:

  1. 用于使用<spring:message>属性文件在服务器端生成适当的文本。
  2. 用于使用dojo/i18njs 文件在客户端选择适当的文本。

当然,两者的任意组合也是一种选择。

那么,每种方法的优缺点是什么?您什么时候使用一个与另一个?

4

1 回答 1

1

这两种方法的结合是唯一合理的答案。基本上,您应该尝试坚持服务器端,并且仅在确实需要时才进行客户端(没有其他方法,例如您有一些动态创建的控件)。

优点和缺点?客户端字符串外部化的主要缺点是,您将无法正确翻译所有内容。那是因为上下文。相同的英语术语可能会以不同的方式翻译,具体取决于上下文。
同时,您通常需要格式化消息(将参数添加到您的消息标签),在常规 Java 中,您可以通过调用MessageFormat.format(). 从理论上讲,您可以在客户端执行此操作,但这至少可以说是有风险的。您将无法访问原始消息部分(如日期、某些数据源等),并且可能会损害翻译的正确性。
格式化日期、数字等在客户端更痛苦。使用 Dojo 或 jQuery Globalize 是可能的,但结果可能不如预期的那么好。但是无论如何,Spring 在格式化日期方面存在问题(缺少默认的本地日期/时间指定,您只能从短、中、长、完整中进行选择,这对我来说完全没用)。
另一个问题可能是处理复数形式(非英语)。信不信由你,但语言可能有不止一种复数形式(取决于数量),因此翻译可能会有所不同。我认为 Dojo 根本没有处理它(但是,我可能弄错了,自从我评估它以来已经过去了一段时间)。Spring 也不会处理它,但您可以基于ICU 的 PluralRules构建自定义解决方案(或者 PluralFormat,如果你很难学习格式化并且想同时杀死翻译者)。

长话短说,正确执行 I18n 绝非易事,您将在服务器端获得更好的支持。

顺便提一句。我记得 Dojo 相当“重”,库本身超过 1MB...加载它可能需要一段时间,而且与其他应用程序相比,您的应用程序可能看起来很慢...这是原因之一,我推荐Globalize而不是 Dojo对于我们的项目。它可能没有那么多功能,但至少看起来很轻巧。

于 2012-07-26T20:00:03.733 回答