ASP.NET中多语言的实现

一个网站可能具有多个语言,要实现这个功能在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

相关文章
相关标签/搜索