【问题标题】:Web Application Internationalization, do it server-side or client-side?Web 应用程序国际化,是服务器端还是客户端?
【发布时间】:2012-07-05 13:54:09
【问题描述】:

我们正在寻求使 Web 应用程序国际化。最好是输出翻译服务器端(它是用.net 4 C#编写的)还是客户端(Javascript)?

我们已经通过创建一个 JS 文件开始在客户端执行此操作,该文件包含一个包含英语短语作为键的对象(以便开发人员了解每个消息在上下文中的含义),其值是显示的字符串向客户发送任何警报和提示。我们正在考虑将此扩展到整个前端的所有措辞。

这是一个好主意还是最好在服务器端执行这种工作?

更新:如果它有助于改变论点,我们不会在 Web 应用程序中大量使用服务器端控件,我们的大多数控件都是基于 jQuery/JS 的。

更新:此特定应用程序不公开可见(除了登录页面),因此不适用 SEO 问题。

【问题讨论】:

  • 我会在服务器端投票,但有投票的感觉。
  • 是的,很遗憾,我知道这可能会引起高度争议,但我希望听到过去可能不得不做出类似决定的人的意见。
  • 客户端 === 可访问性失败
  • 如果客户端关闭 JavaScript,您的客户端内容将无法工作。有些人会。我认为客户端没有优势。
  • 该网站本身要求 Javascript 作为进入的最低要求,因为绝大多数控件都是 jQuery/Ajax 控件。在 JS 中进行翻译意味着我们不必将现有的 Javascript 转换为动态生成的文件。

标签: javascript asp.net internationalization client-side server-side


【解决方案1】:

在 SEO 方面,我建议在服务器端进行,并在单独的 url 下提供应用程序。

例如:

www.application/en/

www.application/es/ ...

【讨论】:

  • 感谢 Daniel,此应用程序仅在订阅的基础上提供,因此其内容不可公开访问。但我很欣赏你的评论。
  • 好吧不知道。如果您选择在客户端执行此操作,我已经看到一些将语言键/值存储在 json 文件中的解决方案。这种方式很容易处理和编辑。祝你好运。
  • 谢谢丹尼尔,抱歉我之前没有指定。我也见过一些这样的 JS 翻译工具,它们引导我走上这条路。特别是对于所有基于 jQuery 的控件。
【解决方案2】:

I18n 的第一条规则:遵循标准方式。不要重新发明轮子。对于 Asp.Net,这意味着服务器端国际化。

嗯,有点。如果您碰巧拥有大量动态创建的控件,您仍然需要一些用于客户端脚本的本地化机制。您可以集中它,即创建一个翻译字符串的全局数组和模型+控制器,这样您就可以通过 AJAX 调用填充它(尽管对于 JSON,X 最好替换为 J...)。
无论如何,您的模型应该简单地从资源文件中检索适当的字符串,并且控制器应该将 JSON 提供给客户端(好主意是实际请求较小的块,即仅对给定视图/屏幕进行翻译,而不是对整个应用程序进行翻译)。

如您所见,最好的方法是采用混合方法。出于多种原因,最好为整个应用程序使用一种本地化模型,即仅使用 *.resx 文件。
此外,国际化还有much more,而不仅仅是简单的字符串外部化......

【讨论】:

  • 感谢您,我同意最好将所有翻译都以一种格式提供给翻译人员。我没有想过 AJAX 从 resx 文件中检索单个字符串。但是,我认为我确实会有一个脚本,该脚本将所有需要的翻译排入队列,并在完成加载所有控件后,将页面上所有控件的所有特别需要的翻译字符串作为单个请求发送。这将意味着只获取一次所需的翻译而不单独收集,因为请求开销会在控制繁重的表单上变得沉重。
【解决方案3】:

如果您只向用户显示静态内容,请使用客户端国际化。 如果您显示的内容/消息是动态的,则应使用服务器端。 但是您如何检测用户区域设置?

【讨论】:

  • 嗨,shreyas,用户区域设置是 Web 应用程序中的用户设置(这意味着如果他们从国外访问,他们仍然可以在他们的本地时区/语言等中看到它。)从服务器传递的错误消息-side(通过 Ajax),与 Javascript 中的 Key/Value 对象进行比较,并向用户显示相关值。
猜你喜欢
  • 2020-01-02
  • 1970-01-01
  • 2019-06-13
  • 2015-11-04
  • 2018-06-06
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 2014-05-31
相关资源
最近更新 更多