ASP.NET中多国语言的实现

时间:2023-01-06 03:01:51
现在的程序越来越要考虑国际化了,对于网站的开发也经常要考虑国际化的问题。
常见的国际化的需求主要就是两个方面:
1、不同的国家页面布局不同
2、不同的国家要显示当国的文字
在ASP.NET2.0中实现这两种需求的方法很多,我今天就总结其中一种方法的具体实现。

对应需求1我们可以使用母版页来实现,对于需求2可以使用资源文件的方式来实现。
在母版页中定义好页面布局和各种语言的转换链接,每种语言定义一个母版页,比如中文就叫Chinese.master,英文就叫English.master
ASP.NET中多国语言的实现ASP.NET中多国语言的实现Chinese.master 示例
其他语言的母版页也是类似

然后可以在每个aspx的Page_PreInit事件中调用共通的方法来进行语言的动态转换
ASP.NET中多国语言的实现     protected   void  Page_PreInit( object  sender, EventArgs e)
ASP.NET中多国语言的实现ASP.NET中多国语言的实现    
{
ASP.NET中多国语言的实现        Util.ChangeLanguage(Request, 
this);
ASP.NET中多国语言的实现    }

ASP.NET中多国语言的实现         public   static   void  ChangeLanguage(HttpRequest Request, Page page)
ASP.NET中多国语言的实现ASP.NET中多国语言的实现        
{
ASP.NET中多国语言的实现            
string strLanguage = Request.QueryString.Get("language");
ASP.NET中多国语言的实现            
if (strLanguage != null)
ASP.NET中多国语言的实现ASP.NET中多国语言的实现            
{
ASP.NET中多国语言的实现                page.Session[Util.SESSION_LANGUAGE] 
= strLanguage;
ASP.NET中多国语言的实现            }

ASP.NET中多国语言的实现            strLanguage 
= page.Session[Util.SESSION_LANGUAGE] as string;
ASP.NET中多国语言的实现            
string strMasterPage = "~/Front/MasterPage/" + strLanguage + ".master";
ASP.NET中多国语言的实现            page.MasterPageFile = strMasterPage;

ASP.NET中多国语言的实现
ASP.NET中多国语言的实现            
string strUICulture = "";
ASP.NET中多国语言的实现            
switch (strLanguage)
ASP.NET中多国语言的实现ASP.NET中多国语言的实现            
{
ASP.NET中多国语言的实现                
case "English":
ASP.NET中多国语言的实现                    strUICulture 
= "en-us";
ASP.NET中多国语言的实现                    
break;
ASP.NET中多国语言的实现                
case "Japanese":
ASP.NET中多国语言的实现                    strUICulture 
= "ja";
ASP.NET中多国语言的实现                    
break;
ASP.NET中多国语言的实现            }

ASP.NET中多国语言的实现            page.UICulture = strUICulture;

ASP.NET中多国语言的实现        }
主要就是在ChangeLanguage方法中首先改变页面的母版页,然后再改变页面的区域

然后可以在Global.asax全局的Session_Start事件中设置初始语言:
ASP.NET中多国语言的实现     void  Session_Start( object  sender, EventArgs e) 
ASP.NET中多国语言的实现ASP.NET中多国语言的实现    
{
ASP.NET中多国语言的实现        Session[Util.SESSION_LANGUAGE] 
= "Chinese";
ASP.NET中多国语言的实现    }
我这个例子中是直接设置初始为中文语言,当然也可以根据客户端的环境来动态设置的:
ASP.NET中多国语言的实现     void  Session_Start( object  sender, EventArgs e) 
ASP.NET中多国语言的实现ASP.NET中多国语言的实现    
{
ASP.NET中多国语言的实现        
switch (Session.LCID)
ASP.NET中多国语言的实现ASP.NET中多国语言的实现        
{
ASP.NET中多国语言的实现            
case 0x0009:
ASP.NET中多国语言的实现                Session[Util.SESSION_LANGUAGE] 
= "English";
ASP.NET中多国语言的实现                
break;
ASP.NET中多国语言的实现            
case 0x0011:
ASP.NET中多国语言的实现                Session[Util.SESSION_LANGUAGE] 
= "Japanese";
ASP.NET中多国语言的实现                
break;
ASP.NET中多国语言的实现            
default:
ASP.NET中多国语言的实现                Session[Util.SESSION_LANGUAGE] 
= "Chinese";
ASP.NET中多国语言的实现                
break;
ASP.NET中多国语言的实现        }

ASP.NET中多国语言的实现        
//Session[Util.SESSION_LANGUAGE] = "Chinese";
ASP.NET中多国语言的实现
    }

通过以上步骤我们已经可以动态改变页面布局(母版页)和页面的区域了。

下面新建三个全局的资源文件:Resource.resx,Resource.en-us.resx,Resource.ja.resx
在三个资源文件中都加入 TestString这个键值,value值写上不同的语言
然后我们就可以在自己的Page页面中使用这个资源文件了:
ASP.NET中多国语言的实现ASP.NET中多国语言的实现<% @ Page Language="C#" MasterPageFile="~/Front/MasterPage/Chinese.master" AutoEventWireup="true"
CodeFile
="index.aspx.cs" Inherits="index" 
%>
ASP.NET中多国语言的实现
< asp:Content  ID ="Content1"  ContentPlaceHolderID ="Top"  Runat ="Server" >
ASP.NET中多国语言的实现    
< asp:Label  ID ="Label1"  runat ="server"  Text ="<%$ Resources:Resource,TestString %>"  Width ="76px" >
</
asp:Label >< br  />
ASP.NET中多国语言的实现    
< br  />
ASP.NET中多国语言的实现
</ asp:Content >
ASP.NET中多国语言的实现
ASP.NET中多国语言的实现
也就是说以后出现文字或和区域有关的图片的时候都要在不同的资源文件中定义好,然后在页面中使用 <%$ Resources:Resource,TestString %>的方式取值

虽然麻烦了一点,但还是比较方便的,有此需求的可以参考一下,如果有更好的实现方案也欢迎讨论。