这组方法提供了基于.resx和.resources资源文件,支持多语言网站构架的功能。Global.asax和GlobalizationDemo.aspx页面演示了这组方法的使用。
注:ASP.NET 2.0本身就提供了很不错的多语言支持方案,本组件中提供的可以作为另一个选择,但是一般还是推荐使用ASP.NET 2.0默认提供的方案。
在Global.asax中的Application_Start事件中,初始化资源为一个默认语言:
void Application_Start(object sender, EventArgs e) { // Code that runs on application startup if (NBear.Web.UI.WebHelper.DefaultCulture.ToString().ToLower() != "en-us") { NBear.Web.UI.WebHelper.DefaultCulture = new System.Globalization.CultureInfo("zh-CN"); } NBear.Web.UI.WebHelper.LoadResources("Strings"); }
在GlobalizationDemo.aspx页面中,包含了一个DropDownList用于更换指定语言的资源,同时使用GetString()输出一个定义在资源文件中的Hello键值的文本资源。改变DropDownList中的语言选择,将可以看到,页面会显示取自不同的资源文件的文本资源。
下面是页面的code hehind,页面载入时,设置当前的默认语言,并且在DropDownList的DropDownList1_SelectedIndexChanged事件处理中,在选择的语言变化时,修改载入的资源:
public partial class GlobalizationDemo : NBear.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { for (int i = 0; i < DropDownList1.Items.Count; i++) { ListItem item = DropDownList1.Items[i]; if (item.Value.ToLower() == NBear.Web.UI.WebHelper.DefaultCulture.ToString().ToLower()) { DropDownList1.SelectedIndex = i; } } } } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { NBear.Web.UI.WebHelper.DefaultCulture = new CultureInfo(DropDownList1.SelectedValue); NBear.Web.UI.WebHelper.LoadResources("Strings"); } }
那么这些资源在哪里定义的呢?
在ASP.NET 2.0下,资源文件一般需要定义在App_GlobalResources特别目录中,当然实际上定义在别处也没关系。我们的示例中,在这个目录下定义了两个resx文件Strings.en-US.resx和Strings.zh-CN.resx。分别对应中英文两个语言。这两个文件中都只包含了一个Hello键值及对应的文本内容。
另外,App_GlobalResources目录中还包含了一个ResGen.cmd文件,这是一个批处理脚本,它用于简化将resx编译为.resources文件到bin目录。必须将resx文件编译为bin目录下的.resources文件,才能被框架访问到。ResGen.cmd文件的内容如下:
@echo off "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\resgen.exe" Strings.en-US.resx ..\bin\Strings.en-US.resources "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\resgen.exe" Strings.zh-CN.resx ..\bin\Strings.zh-CN.resources
注意,如果要修改或添加资源项目,只需要修改resx文件,并重新点击ResGen.cmd编译资源文件即可,不需重新编译整个网站程序。