我使用的其中一个应用程序是一个用于美国,中南美洲和欧洲的大型ASP.NET 3.5 Web窗体应用程序。我们也开始使用AJAX做更多工作,因此我们需要在JavaScript控件中实现本地化字符串的策略。
例如,我们将控件编写为jQuery插件,将数据格式化为可排序表。按钮和表格列需要可本地化。
我们目前正在使用两种不同的方法来处理这种情况,但我对这两种情况都不满意。
以jQuery插件样式编写大部分代码,然后在script
页面上放置.aspx
块,我们将从.resx
文件中提取值并将它们提供给插件代码。这是伪代码中的一个例子:
<script>
var view;
$(function() {
view = {
columnHeaders: {
productNumber = <%$ Resources:WidgetProductNumber_HeaderText %>,
productDescription = <%$ Resources:WidgetProductDescription_HeaderText %>
}
};
});
</script>
将JavaScript放在普通.js
文件中,并使用自定义标记代替字符串。我们有一个手动HttpModule
,它将解析JavaScript文件并使用任何现有.resx
文件中的值替换标记,该文件的文件名与正在处理的JavaScript文件的名称相匹配。
这两种方法都有问题。我希望将我们的JavaScript代码与我们的.aspx
页面分开,以使其更加不引人注目且可重复使用。
HttpModule
方法很聪明,但对开发人员来说有点不透明。我还希望实现一个名为Rejuicer的JavaScript捆绑器,它也被编写为HttpModule
,并且让它们一起工作似乎需要自定义开源代码。我更喜欢使用代码编写,以便我们可以随着项目的进展升级它。
在ASP.NET中是否还有其他可靠的策略来解决这个问题?
答案 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://www.tikalk.com/use-aspnet-resource-strings-within-javascript-files/