一个网站可能具有多个语言,要实现这个功能在ASP.NET中是很是简单的。咱们须要为项目添加资源文件文件夹,而且添加针对网站的特定的资源文件等便可。在ASP.NET中资源文件分红两类:全局和页面级(即“本地”级)。html
1、全局资源文件:web
顾名思义,全局资源文件是供整个网站内部所有页面调用的。所以必须放在App_GlobalResources中(能够经过右键建立该文件夹,而后继续右键建立资源文件)。ide
命名规则:任意。测试
使用规则:使用“<$Resources:全局资源文件名称,资源名称>”进行对特定属性的绑定。网站
固然,也能够经过后台代码形式绑定(由于生成了强类型:能够经过Resource.全局资源文件名.资源名称)形式绑定读取。ui
注意:若是是多语言的话,应该按照如下命名规则进行:任意全局文件名称.语言(区域)名称.resx。spa
绑定的时候则按照上面蓝色(使用规则)进行绑定,注意此时“全局资源文件名称”不能指定语言区域!线程
2、页面级资源文件:code
也叫本地资源文件,通常只用于单个页面。命名规则:控件的ID.属性名。orm
绑定的时候只要手动在某个控件以后增长:meta:resourceKey="本地资源文件中控件的ID",注意ID和控件的ID必须对应!
若是针对某个页面特定控件建立多语言版本,命名规则:页面名称.aspx.语言(区域).resx。
3、示例代码:
本实例演示多语言版本:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CSharp.WebForm1" UICulture="zh-CN" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>语言测试</title> </head> <body> <form id="form1" runat="server"> <div> 请选择对应语言: <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"> <asp:ListItem Value="zh-CN">中文</asp:ListItem> <asp:ListItem Value="en-US">英语</asp:ListItem> </asp:DropDownList> <asp:Panel ID="Panel1" runat="server" BackColor="<%$Resources:GlobalResource,PanelBackColor %>"> <asp:Label ID="Label1" runat="server" Text="Label" meta:resourceKey="Label1"></asp:Label> </asp:Panel> </div> </form> </body> </html>
注意上面代码中划线的部分——UlCulture,能够直接指定当前页面的语言(假设是zh-CN)。另外注意绑定的方式。
项目结构:
两个全局文件中定义了一个叫作PanelBackColor的Key,而值则是(zh-CN:Red,默认是LightBlue)。同理,两个本地资源文件中定义了Label1做为Key,zh-CN中是中文“欢迎来到ASP.NET的世界”,另一个是英语版本。你们能够测试一下。
如下给出后台代码:
public partial class WebForm1 : System.Web.UI.Page { /// <summary> /// 动态设置当前语言,改变当前线程的语言 /// </summary> protected override void InitializeCulture() { string language = Request.Form["DropDownList1"]; if (language != null) { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language); } } }
另外想补充一点:
1)动态改变当前语言,必须按照后台代码(重写InitializeCulture)实现。
2)或者能够修改配置文件(全局其做用, system.web节点下追加):
<globalization uiCulture="zh-CN"/>
3)又或者在aspx中加入UICulture属性(参考我给出的aspx示例代码)。
其中若是同时设置,优先级大小以下:2<3<1