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

C# 在ASP.NET Web窗体应用程序中本地化JavaScript字符串,c#,javascript,asp.net,localization,C#,Javascript,Asp.net,Localization,我工作的应用程序之一是一个大型ASP.NET 3.5 Web表单应用程序,在美国、中美洲、南美洲和欧洲使用。我们也开始使用AJAX做更多的工作,因此我们需要确定一种在JavaScript控件中本地化字符串的策略 例如,我们有一个作为jQuery插件编写的控件,它将数据格式化为可排序表。按钮和表列需要可本地化 我们目前正在使用两种不同的方法来处理这个场景,但我对这两种方法都不完全满意 以jQuery插件风格编写大部分代码,然后在.aspx页面上放置一个脚本块,我们将从.resx文件中提取值并将它们

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

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

我们目前正在使用两种不同的方法来处理这个场景,但我对这两种方法都不完全满意

  • 以jQuery插件风格编写大部分代码,然后在
    .aspx
    页面上放置一个
    脚本
    块,我们将从
    .resx
    文件中提取值并将它们输入插件代码。下面是一个伪代码示例:

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

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

    HttpModule
    方法很聪明,但对开发人员来说有点不透明。我还希望实现一个名为Rejuicer的JavaScript捆绑包,它也是作为
    HttpModule
    编写的,要使这些组件协同工作,似乎需要定制开放源代码。我更喜欢在编写代码时使用它,这样我们就可以随着项目的进展进行升级


    在ASP.NET中有没有其他行之有效的解决这个问题的策略?

    这两种方法似乎都比必要的要复杂一些。保持简单

    1) 使用.ashx、自定义http处理程序或web服务,创建一个与客户端JSON对象匹配的.net对象(匿名、自定义——无所谓)

    2) 使用本地化值填充服务器端对象的属性

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

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

    在客户端,您有两个选项:

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

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


    如果您需要代码示例,请告诉我。

    我刚刚偶然发现了这个问题,我还有另一个答案要提交给大家。这不是我的工作或任何事情,但它看起来是一个相当优雅的解决方案。它包括编写一个本地化处理程序,将ASP.NET资源提供给Javascript。以下是几个链接:


    谢谢你的回复,但我不确定这是否真的解决了我的问题。我试图简化在JavaScript UI组件中使用字符串的过程,而不是将数据本身国际化。您是否建议我设置另一个Web服务,将UI配置对象作为JSON提供?我想这是一种方法,但它似乎比我上面概述的任何一种解决方案都要复杂。你能澄清一下吗?