多國語言網頁實現

  現在的程序越來越要考慮國際化了,對於網站的開發也經常要考慮國際化的問題。
常見的國際化的需求主要就是兩個方面:
1、不同的國家頁面佈局不同
2、不同的國家要顯示當國的文字
在ASP.NET2.0中實現這兩種需求的方法很多,我今天就總結其中一種方法的具體實現。

對應需求1我們可以使用母版頁來實現,對於需求2可以使用資源文件的方式來實現。
在母版頁中定義好頁面佈局和各種語言的轉換鏈接,每種語言定義一個母版頁,比如中文就叫Chinese.master,英文就叫English.master
Chinese.master 示例
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Chinese.master.cs" Inherits="Front_ChineseMasterPage" %>

<!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">

<a href="index.aspx?language=Chinese">中文</a>

<a href="index.aspx?language=English">English</a>

<a href="index.aspx?language=Japanese">日本語</a>

<div> <table> <tr> <td> <asp:contentplaceholder id="Top" runat="server">

</asp:contentplaceholder>

</td>

</tr>

<tr>
<td>bbbbb </td> </tr> <tr> <td>ccccc

</td> </tr> </table> </div> </form>

</body>

</html>

其他語言的母版頁也是類似

然後可以在每個aspx的Page_PreInit事件中調用共通的方法來進行語言的動態轉換
protected void Page_PreInit(object sender, EventArgs e)
{
Util.ChangeLanguage(Request, this);
}
public static void ChangeLanguage(HttpRequest Request, Page page)
{
string strLanguage = Request.QueryString.Get("language");
if (strLanguage != null)
{
page.Session[Util.SESSION_LANGUAGE] = strLanguage;
}
strLanguage = page.Session[Util.SESSION_LANGUAGE] as string;
string strMasterPage = "~/Front/MasterPage/" + strLanguage + ".master";
page.MasterPageFile = strMasterPage;

string strUICulture = "";
switch (strLanguage)
{
case "English":
strUICulture = "en-us";
break;
case "Japanese":
strUICulture = "ja";
break;
}
page.UICulture = strUICulture;
}主要就是在ChangeLanguage方法中首先改變頁面的母版頁,然後再改變頁面的區域

然後可以在Global.asax全局的Session_Start事件中設置初始語言:
void Session_Start(object sender, EventArgs e)
{
Session[Util.SESSION_LANGUAGE] = "Chinese";
}我這個例子中是直接設置初始爲中文語言,當然也可以根據客戶端的環境來動態設置的:
void Session_Start(object sender, EventArgs e)
{
switch (Session.LCID)
{
case 0x0009:
Session[Util.SESSION_LANGUAGE] = "English";
break;
case 0x0011:
Session[Util.SESSION_LANGUAGE] = "Japanese";
break;
default:
Session[Util.SESSION_LANGUAGE] = "Chinese";
break;
}
//Session[Util.SESSION_LANGUAGE] = "Chinese";
}
通過以上步驟我們已經可以動態改變頁面佈局(母版頁)和頁面的區域了。

下面新建三個全局的資源文件:Resource.resx,Resource.en-us.resx,Resource.ja.resx
在三個資源文件中都加入TestString這個鍵值,value值寫上不同的語言
然後我們就可以在自己的Page頁面中使用這個資源文件了:
<%@ Page Language="C#" MasterPageFile="~/Front/MasterPage/Chinese.master" AutoEventWireup="true"

CodeFile="index.aspx.cs" Inherits="index" %>

<asp:Content ID="Content1" ContentPlaceHolderID="Top" Runat="Server">

<asp:Label ID="Label1" runat="server" Text="<%$ Resources:Resource,TestString %>" Width="76px">

</asp:Label><br />

<br />

</asp:Content>

也就是說以後出現文字或和區域有關的圖片的時候都要在不同的資源文件中定義好,然後在頁面中使用<%$ Resources:Resource,TestString %>的方式取值
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章