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

相關文章
相關標籤/搜索