【永春】ASP.NET中多國語言的實現
現在的程式越來越要考慮國際化了,對於網站的開發也經常要考慮國際化的問題。
常見的國際化的需求主要就是兩個方面:
1、不同的國家頁面佈局不同
2、不同的國家要顯示當國的文字
在ASP.NET2.0中實現這兩種需求的方法很多,我今天就總結其中一種方法的具體實現。
對應需求1我們可以使用母版頁來實現,對於需求2可以使用資原始檔的方式來實現。
在母版頁中定義好頁面佈局和各種語言的轉換連結,每種語言定義一個母版頁,比如中文就叫Chinese.master,英文就叫English.master
然後可以在每個aspx的Page_PreInit事件中呼叫共通的方法來進行語言的動態轉換
然後可以在Global.asax全域性的Session_Start事件中設定初始語言:
通過以上步驟我們已經可以動態改變頁面佈局(母版頁)和頁面的區域了。
下面新建三個全域性的資原始檔:Resource.resx,Resource.en-us.resx,Resource.ja.resx
在三個資原始檔中都加入TestString這個鍵值,value值寫上不同的語言
然後我們就可以在自己的Page頁面中使用這個資原始檔了:
雖然麻煩了一點,但還是比較方便的,有此需求的可以參考一下,如果有更好的實現方案也歡迎討論。
常見的國際化的需求主要就是兩個方面:
1、不同的國家頁面佈局不同
2、不同的國家要顯示當國的文字
在ASP.NET2.0中實現這兩種需求的方法很多,我今天就總結其中一種方法的具體實現。
對應需求1我們可以使用母版頁來實現,對於需求2可以使用資原始檔的方式來實現。
在母版頁中定義好頁面佈局和各種語言的轉換連結,每種語言定義一個母版頁,比如中文就叫Chinese.master,英文就叫English.master
Chinese.master 示例
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->@ 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">Englisha>
<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>
其他語言的母版頁也是類似<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->@ 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">Englisha>
<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事件中呼叫共通的方法來進行語言的動態轉換
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> protected void Page_PreInit(object sender, EventArgs e)
{
Util.ChangeLanguage(Request, this);
}
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> protected void Page_PreInit(object sender, EventArgs e)
{
Util.ChangeLanguage(Request, this);
}
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 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方法中首先改變頁面的母版頁,然後再改變頁面的區域Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 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;
}
然後可以在Global.asax全域性的Session_Start事件中設定初始語言:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> void Session_Start(object sender, EventArgs e)
{
Session[Util.SESSION_LANGUAGE] = "Chinese";
}
我這個例子中是直接設定初始為中文語言,當然也可以根據客戶端的環境來動態設定的:Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> void Session_Start(object sender, EventArgs e)
{
Session[Util.SESSION_LANGUAGE] = "Chinese";
}
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 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";
}
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 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頁面中使用這個資原始檔了:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->@ 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="" Width="76px">
asp:Label><br />
<br />
asp:Content>
也就是說以後出現文字或和區域有關的圖片的時候都要在不同的資原始檔中定義好,然後在頁面中使用的方式取值Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->@ 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="" Width="76px">
asp:Label><br />
<br />
asp:Content>
雖然麻煩了一點,但還是比較方便的,有此需求的可以參考一下,如果有更好的實現方案也歡迎討論。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-374384/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Asp.net 多語言介面的實現方法...ASP.NET
- OAF多語言的實現
- Android國際化(多語言)實現,支援8.0Android
- 《程式碼統計分析工具 4.0》多國語言實現方案
- .NET CORE 多語言實現方案
- so easy 前端實現多語言前端
- ASP實現多語言支援 (轉)
- Laravel中的多語言Laravel
- 【永春】Asp.Net中虛擬檔案系統的使用ASP.NET
- .net Framework Web Api 實現多國語FrameworkWebAPI
- 線上客服系統前端多國語言實現方案和程式碼前端
- 使用jquery.i18n實現國際化多語言顯示jQuery
- C語言實現繼承多型C語言繼承多型
- Android實現多語言so easyAndroid
- 前端另一種多語言的實現思路前端
- 國際化方案(1)- 多語言
- 如何實現 OpenAPI 多語言 SDK 開發?API
- Golang | Go語言多型的實現與interface使用Golang多型
- 雲音樂前端國際化多語言探索實踐前端
- iOS國際化(多語言)漫談iOS
- 如何學習多個國家語言?
- C#實現多語言介面程式的方法介紹C#
- Flutter多語言實踐Flutter
- C語言實現多級濾波—乾貨C語言
- Android 實現APP可切換多語言AndroidAPP
- Django通過session實現多語言切換DjangoSession
- 透過ini實現多語言選單 (轉)
- ASP.NET 多語言的實現(後臺訊息+前臺訊息+頁面自動繫結)ASP.NET
- 請問如何實現動態維護struts中多國語系應用中的.properties文件?
- WPF多語言支援:簡單靈活的動態切換,讓你的程式支援多國語言
- react-intl 國際化多語言方案React
- Zend Framework 入門(2)—多國語言支援Framework
- 平臺化專案多語言架構實現架構
- 讓WPS Office也能實現多語言支援
- VC開發多語言介面支援----INI實現(轉)
- iOS 多國語言本地化與App內語言切換(Swift)iOSAPPSwift
- 【永春】Asp.Net頁面執行流程分析ASP.NET
- 以DevExpress開發的WinFrom程式的多語言功能的實現devExpress