ASP.NET網站實現中英文轉換(本地化資源)


主要內容:

1. 簡單例子

2. 進一步認識Localization

3. 語言轉換

4. 解決方案

一. 簡單例子

  1、下面通過一個簡單的例子來實現本地化是那么的簡單,首先我們打開Visual Studio 2010,新建一個名叫【中英文轉換】的工程(名字就無關緊要了,隨你喜歡~~),如下所示:

image

2、然后我們在Index.aspx這張頁面上放一些控件,添加完之后的頁面就好像下面的一樣:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="中英文轉換.Index" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:RadioButtonList ID="RadioBtnList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="RadioBtnList_SelectedIndexChanged">
            <asp:ListItem Value="zh-cn" Text="簡體中文" Selected="True"></asp:ListItem>
            <asp:ListItem Value="en-us" Text="英語"></asp:ListItem>
        </asp:RadioButtonList>
        <br />
        <asp:Label ID="labCon" runat="server" Text="我是小小鳥。"></asp:Label>
        <br /><br />
        <asp:Button ID="btnCov" runat="server" Text="轉換" />
        <br /><br />
        <asp:Label ID="labByCon" runat="server" Text="顯示轉換結果"></asp:Label>
    </div>
    </form>
</body>
</html>
效果圖:

image

 

3、接下來的一步主要是負責生成本地資源,我們點擊“工具->生成本地資源(R)”。

image

4、於是我們的項目中多了一個文件夾App_LocalResources,里面包含一個文件Index.aspx.resx,而這個文件就是用來編輯保存我們想要顯示的一些文字資源。

image

例如我們為我們添加的控件輸入以下信息:

image

5、頁面的代碼效果和瀏覽器的效果:

image

在以上的步驟中,我們沒有手工編寫任何代碼,而由.NET4.0自動實現綁定過程。而頁面跟以往的不同就是HTML代碼發生了變化:

image

除了Page里面增加了 Culture="auto" meta:resourcekey="PageResource1" UICulture="auto"等屬性設置外,我 們添加的控件也相應的多了meta:resourcekey這個屬性,而.NET4.0就是根據這些屬性來進行語言綁定。

6、在上述的簡單項目中,我們只提供了一種語言,還沒達到本地化的要求,於是我們向 App_localresources這個目錄手工增加一個資源文件Index.aspx.en-us.resx文件(其中英文[美國]的語言代碼 是"en-us")(直接復制resx文件),我們向里面添加一些key/value對,如下所示:

image

然后我們去修改IE的Internet選項的語言,添加“英文(美國)[en-us]”,並且把它移動到最上面:

image

再運行一次我們的項目,你會發現簡單的本地化已經實現。

image

至此,通過一個簡單的例子,我們已經初步認識了.NET4.0是如何實現利用Localization來實現本地化的。但是如果我們要構建一個優秀的國際化網站或軟件,我們需要對Localization做進一步的認識。

2. 進一步認識Localization

1、到了這里,你會發現上述的頁面中是每一個頁面對應一些屬於自己的資源文件,如果我們要求多張 頁面或者全部頁面都要用同一個資源文件的時候,該怎么做呢?很簡單,我們可以在項目中添加一個文件夾,名叫App_GlobalResources,這是 系統默認的存放全局資源的目錄。例如我們在全局目錄中添加兩個文件,分別是global.resx和global.en-us.resx。

image

image

然后我們分別在里面輸入一些對應的key/value值,至於怎么應用我們的全局資源綁定到頁面中,我們有兩種方法:

第一種:是在HTML代碼里面進行綁定,表達式是 <%$ resources: [applicationkey], resourcekey, [default] %>,例如我們在Index.aspx多放一個按鈕,其HTML代碼為:

ASP.NET中英文轉換,轉 - 鵬鵬 - 鵬鵬的博客  <asp:Button ID="Button2" runat="server" Text="<%$ resources: global, StrContent%>

於是我們會得到以下的效果,可以看出資源已綁定到控件上。

image

第二種:則是在程序代碼進行綁定,由於.NET4.0框架會將全局資源文件編譯成一個類,也就是說我們剛才創建的global.resx文件將被編譯成一個類global,而資源文件里面的所有key將成為類的屬性,以供在程序里進行訪問。例如我們可以在程序里這樣寫:

ASP.NET中英文轉換,轉 - 鵬鵬 - 鵬鵬的博客this.Button2.Text = Resources.global.StrContent;

image

另外,資源文件除了可以存放一些字符串之外,還可以存放圖片,聲頻,文件等等,

三. 語言設置

大家是否覺得如果每次都要去Internet選項來進行語言的選擇會很麻煩,那么如何在自己 的項目中設置要顯示某一種語言呢?很簡單,通常我們有三種途徑。首先需要講兩個屬性,

一個是Culture,這個決定各種數據類型是如何組織,如數字與日 期;

另一個是UICulture,這個就決定了采用哪一種本地化資源,也就是使用哪種語言。詳細請看MSDN~~~

1. 在具體頁面進行設置

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="中英文轉換.Index" culture="auto" meta:resourcekey="PageResource1" uiculture="auto" %>

如上,由於將UICulture和Culture屬性都設置成auto,.NET4.0會根據你的Internet語言選項來確定加載哪些資源文件,當然你也可以將UICulture和Culture都設置成"en-us",那么這張頁面所加載 的就是英文的資源文件了。不過這樣寫很麻煩,每一張頁面都要寫,太繁瑣了,於是我們可以在web.config里面設置我們所要的語言。
    

2. 在web.config里面進行設置

<?xml version="1.0" encoding="utf-8"?>

<!--
  有關如何配置 ASP.NET 應用程序的詳細消息,請訪問
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
      <globalization culture="en-us" uiCulture="en-us"/>
    </system.web>

</configuration>
通過這樣設置,項目中的全部頁面就會自動加載英文資源文件了,但要注意的一點是,如果在頁面 中也設置了UICulture和Culture屬性,那么它將覆蓋web.config里面的設置。例如某張頁面的這兩個屬性設為"zh-cn",那么這 張頁面將顯示中文而不是英文。但還是覺得不好,因為頁面要加載的語言文件都寫死了,不靈活。

 

3. 在代碼里面進行設置

using System.Globalization;
using System.Threading;

// Set the culture to the browser's accept language
Thread.CurrentThread.CurrentCulture =  CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);
// Set the user interface culture to the browser's accept language
Thread.CurrentThread.CurrentUICulture =     new CultureInfo(Request.UserLanguages[0]);

在程序代碼里面進行設置,重載頁面的InitializeCulture事件,注意在代碼里的語言設置,會覆蓋頁面的HTML屬性或者web.config的設置。上述的Request.UserLanguages[0]是獲取Internet語言選項的第一種語言代碼。

四. 解決方案

經過上述的初步和進一步的認識,相信大家已經理解了Localization的原理以及實現方法,但真要在我們的系統中實現多語言,實現本地化,我們應該怎樣來架構呢?

通常我們為了減少重復代碼,我們一般是建立一個基頁面PageBase類,讓所有的頁面都繼 承基頁面,在基頁面重寫InitializeCulture事件,而用戶所選擇的語言我們可以儲存在 Session,Cookie,QueryString或者.NET4.0提供的profile里面。 下面我們以存儲在Session為例,構建我們的基頁面,為簡單起見,我只是通過一個按鈕來選擇語言:

主頁面:

image

 

BasePage.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Threading;
using System.Globalization;

namespace 中英文轉換
{
    public class BasePage : System.Web.UI.Page
    {

        /// <summary>
        /// 重寫InitializeCulture()方法實現 本地化資源
        /// </summary>
        protected override void InitializeCulture()
        {
            base.InitializeCulture();
            // 用Session來存儲語言信息
            if (Session["PreferredCulture"] == null)
                Session["PreferredCulture"] = Request.UserLanguages[0];
            string UserCulture = Session["PreferredCulture"].ToString();
            if (UserCulture != "")
            {
                //根據Session的值重新綁定語言代碼
                Thread.CurrentThread.CurrentUICulture = new CultureInfo(UserCulture);
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(UserCulture);
            }
        }

    }
}

Index.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;
using System.Globalization;

namespace 中英文轉換
{
    public partial class Index : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Button2.Text = Resources.global.StrContent;
        }
        
        protected void RadioBtnList_SelectedIndexChanged(object sender, EventArgs e)
        {

            btnCov.Text = "轉換成—"+RadioBtnList.SelectedItem.Text;
            
        }

        protected void btnCov_Click(object sender, EventArgs e)
        {
            Session["PreferredCulture"] = RadioBtnList.SelectedValue.ToUpper();
            if (Session["PreferredCulture"].ToString().ToUpper() == "EN-US")
                Session["PreferredCulture"] = "en-us";
            else if (Session["PreferredCulture"].ToString().ToUpper() == "ZH-CN")
                Session["PreferredCulture"] = "zh-cn";
            //重定向頁面
            Response.Redirect(Request.Url.PathAndQuery);
    }
    }
}

 

 

中英文轉換——附件

作者:827969653


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM