【永春】ASP.NET中多國語言的實現

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

對應需求1我們可以使用母版頁來實現,對於需求2可以使用資原始檔的方式來實現。
在母版頁中定義好頁面佈局和各種語言的轉換連結,每種語言定義一個母版頁,比如中文就叫Chinese.master,英文就叫English.master
Chinese.master 示例
其他語言的母版頁也是類似

然後可以在每個aspx的Page_PreInit事件中呼叫共通的方法來進行語言的動態轉換
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt    protected void Page_PreInit(object sender, EventArgs e)
    
{
        Util.ChangeLanguage(Request, 
this);
    }

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt        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事件中設定初始語言:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt    void Session_Start(object sender, EventArgs e) 
    
{
        Session[Util.SESSION_LANGUAGE] 
= "Chinese";
    }
我這個例子中是直接設定初始為中文語言,當然也可以根據客戶端的環境來動態設定的:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt    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/

--&gt@ 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章