C# 在ASP.NET Web窗体应用程序中本地化JavaScript字符串
我工作的应用程序之一是一个大型ASP.NET 3.5 Web表单应用程序,在美国、中美洲、南美洲和欧洲使用。我们也开始使用AJAX做更多的工作,因此我们需要确定一种在JavaScript控件中本地化字符串的策略 例如,我们有一个作为jQuery插件编写的控件,它将数据格式化为可排序表。按钮和表列需要可本地化 我们目前正在使用两种不同的方法来处理这个场景,但我对这两种方法都不完全满意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文件中提取值并将它们
.aspx
页面上放置一个脚本
块,我们将从.resx
文件中提取值并将它们输入插件代码。下面是一个伪代码示例:
<script>
var view;
$(function() {
view = {
columnHeaders: {
productNumber = <%$ Resources:WidgetProductNumber_HeaderText %>,
productDescription = <%$ Resources:WidgetProductDescription_HeaderText %>
}
};
});
</script>
var观点;
$(函数(){
视图={
列标题:{
productNumber=,
productDescription=
}
};
});
.js
文件中,用自定义标记代替字符串。我们有一个手动的HttpModule
,它将解析JavaScript文件,并用任何文件名与正在处理的JavaScript文件名匹配的现有.resx
文件中的值替换标记.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提供?我想这是一种方法,但它似乎比我上面概述的任何一种解决方案都要复杂。你能澄清一下吗?