ASP.NET中多语言的实现

一个网站可能具备多个语言,要实现这个功能在ASP.NET中是非常简单的。我们需要为项目添加资源文件文件夹,并且添加针对网站的特定的资源文件等即可。在ASP.NET中资源文件分成两类:全局和页面级(即“本地”级)。

一、全局资源文件:

  顾名思义,全局资源文件是供整个网站内部全部页面调用的。因此必须放在App_GlobalResources中(可以通过右键创建该文件夹,然后继续右键创建资源文件)。

  命名规则:任意。

  使用规则:使用“<$Resources:全局资源文件名称,资源名称>”进行对特定属性的绑定。

  当然,也可以通过后台代码形式绑定(因为生成了强类型:可以通过Resource.全局资源文件名.资源名称)形式绑定读取。

  注意:如果是多语言的话,应该按照以下命名规则进行:任意全局文件名称.语言(区域)名称.resx。

  绑定的时候则按照上面蓝色(使用规则)进行绑定,注意此时“全局资源文件名称”不能指定语言区域!

二、页面级资源文件:

  也叫本地资源文件,一般只用于单个页面。命名规则:控件的ID.属性名。

  绑定的时候只要手动在某个控件之后增加meta:resourceKey="本地资源文件中控件的ID",注意ID和控件的ID必须对应!

  如果针对某个页面特定控件创建多语言版本,命名规则:页面名称.aspx.语言(区域).resx。

三、示例代码:

  本实例演示多语言版本:

<%@ 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

posted @ 2013-06-29 15:42  Serviceboy  阅读(1280)  评论(1编辑  收藏  举报