常见的国际化的需求主要就是两个方面:
1、不同的国家页面布局不同
2、不同的国家要显示当国的文字
在ASP.NET2.0中实现这两种需求的方法很多,我今天就总结其中一种方法的具体实现。
对应需求1我们可以使用母版页来实现,对于需求2可以使用资源文件的方式来实现。
在母版页中定义好页面布局和各种语言的转换链接,每种语言定义一个母版页,比如中文就叫Chinese.master,英文就叫English.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">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事件中调用共通的方法来进行语言的动态转换
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;
}然后可以在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>

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