在ASP.NET Web窗体应用程序中本地化JavaScript字符串

时间:2011-12-10 13:42:00

标签: c# javascript asp.net localization

我使用的其中一个应用程序是一个用于美国,中南美洲和欧洲的大型ASP.NET 3.5 Web窗体应用程序。我们也开始使用AJAX做更多工作,因此我们需要在JavaScript控件中实现本地化字符串的策略。

例如,我们将控件编写为jQuery插件,将数据格式化为可排序表。按钮和表格列需要可本地化。

我们目前正在使用两种不同的方法来处理这种情况,但我对这两种情况都不满意。

  1. 以jQuery插件样式编写大部分代码,然后在script页面上放置.aspx块,我们将从.resx文件中提取值并将它们提供给插件代码。这是伪代码中的一个例子:

     <script>
        var view;
        $(function() {
            view = {
                columnHeaders: { 
                    productNumber = <%$ Resources:WidgetProductNumber_HeaderText %>, 
                    productDescription = <%$ Resources:WidgetProductDescription_HeaderText %> 
                }
            };
    
        });
    </script>
    
  2. 将JavaScript放在普通.js文件中,并使用自定义标记代替字符串。我们有一个手动HttpModule,它将解析JavaScript文件并使用任何现有.resx文件中的值替换标记,该文件的文件名与正在处理的JavaScript文件的名称相匹配。

  3. 这两种方法都有问题。我希望将我们的JavaScript代码与我们的.aspx页面分开,以使其更加不引人注目且可重复使用。

    HttpModule方法很聪明,但对开发人员来说有点不透明。我还希望实现一个名为Rejuicer的JavaScript捆绑器,它也被编写为HttpModule,并且让它们一起工作似乎需要自定义开源代码。我更喜欢使用代码编写,以便我们可以随着项目的进展升级它。

    在ASP.NET中是否还有其他可靠的策略来解决这个问题?

2 个答案:

答案 0 :(得分:1)

似乎两种方法都比必要的更复杂/麻烦。把事情简单化。

1)使用.ashx,自定义http处理程序或Web服务,创建与客户端JSON对象匹配的.net对象(匿名,自定义 - 无关紧要)。

2)使用本地化值

填充服务器端对象的属性

3)将响应内容类型设置为text / json或text / javascript。

4)使用JavaScriptSerializer类,将对象序列化为响应流。

从客户端,您有两种选择:

1)使用对.ashx / handler / service的AJAX调用将客户端“view”对象设置为响应JSON。

2)使用src =“/ path / to / the / serviceOrHandler”创建脚本标记。在这种情况下,您需要在响应输出中包含js变量声明。

如果您需要代码示例,请与我们联系。

答案 1 :(得分:0)

我只是偶然发现了这个问题,我还有另外一个答案要扔进戒指。这不是我的工作或任何事情,但它看起来像一个相当优雅的解决方案。它涉及编写本地化处理程序以向Javascript提供ASP.NET资源。以下是几个链接:

http://weblog.west-wind.com/posts/2009/Apr/02/A-Localization-Handler-to-serve-ASPNET-Resources-to-JavaScript

http://www.tikalk.com/use-aspnet-resource-strings-within-javascript-files/