【问题标题】:What is the recommended way to enable multiple language support for Javascript displayed text为 Javascript 显示文本启用多语言支持的推荐方法是什么
【发布时间】:2011-01-21 06:35:18
【问题描述】:

在构建网站时,我多次需要支持多种语言,但还没有想出一种将语言字符串从服务器传递到客户端的好方法,以便它们可以在 Javascript 中用于对话,消息等。

您对此有何建议或经验?

编辑:我倾向于即时生成 javascript 语言文件,如果有人知道任何可以执行此操作的第三方库,我将不胜感激。

【问题讨论】:

    标签: javascript .net web-applications


    【解决方案1】:

    我通常将所有字符串规范移动到单独的文件中,然后在页面上包含适当的文件,如下所示:

    在 st/js/messages-ru.js 中:

    hello = "Привет"
    bye = "Пока"
    

    在 st/js/messages-en.js 中:

    hello = "Hello!"
    bye = "Good bye!"
    

    页面生成时,可以确定语言,在页面上插入合适的js文件。

    【讨论】:

    • 我在想这样的事情。但目前 C# 中服务器端使用的语言文件是自动生成的,并且还需要生成任何 javascript 文件。您是自动生成文件还是手动更新文件?
    • @ealgestorm 我在安装时从一个文件自动生成它们,其中包含所有语言的值。我使用 m4 来处理源代码,但我知道喜欢它的人不多,因此您可以为此创建自己的解决方案 :)
    【解决方案2】:

    动态生成 javascript 的语言相关部分来处理语言环境。一旦为给定的语言环境生成了特定于语言的 javascript,就可以进行性能缓存。这样可以避免维护太多特定于语言的 javascripts

    【讨论】:

      【解决方案3】:

      我们将一个对象传递给需要翻译的 JavaScript 方法,并从服务器端代码填充该对象:

      <script type="text/javascript">
          var dialogl10n = {
              caption: '<%= Resources.GetString(x => x.DialogCaption) %>',
              okButton: '<%= SharedResources.GetTerm(x => x.Ok) %>'
              cancelButton: '<%= SharedResources.GetTerm(x => x.Cancel) %>'
          };
      </script>
      

      在javascript函数中:

      Foo.Bar.doSomething = function(l10n) {
          alert(l1n0.caption);
      }
      

      我们正在考虑增强它以自动创建 JSON 对象:

      onClick='Foo.Bar.doSomething(<%= Resources.GetPackageAsJson(); %>);'
      

      这将创建上面手动创建的等效对象。

      【讨论】:

      • 目前我正在使用命名空间数组来存储使用数字键的字符串,主要是因为服务器端已经使用该格式,但它对开发人员不太友好,导致很多 cmets 说明键指的是什么到。我正在尝试设计更通用的东西
      【解决方案4】:

      没有很好的方法来解决这个问题。但是我或我们的团队有一个繁重的方法,在 js 中为不同的语言编写不同的字符串,例如,在 uk 我们编写一个名为 uk.js 的 js,在 fr 我们编写一个 fr .js 用于对话框或消息中的静态表达式。

      【讨论】:

        【解决方案5】:

        如果您使用的是 ASP.NET AJAX 框架,则 ScriptManager 控件包含各种机制,用于从本地化的 .resx 文件自动生成 javascript,并根据其余部分的标准 CultureInfo 设置向用户发送正确的语言网站正在使用。教程见this MSDN article

        【讨论】:

        • 不,绝对不使用 ScriptManager
        • 我理解这种观点 ;-) 我认为您必须自己编写或找到第三方工具。
        猜你喜欢
        • 1970-01-01
        • 2017-02-06
        • 2015-07-23
        • 1970-01-01
        • 1970-01-01
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多