LocalizedPage

出自ProgWiki

跳轉到: 導航, 搜尋

目錄

用途

相關檔案(第1版)

LocalizedPage.cs

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Threading;
using System.Globalization;
 
/// <summary>
/// 所有需要地區化资源切换的頁面基礎類別
/// </summary>
public class LocalizedPage : System.Web.UI.Page
{
	//設定語系時,每個頁面一定要 Override 的 Method
	protected override void InitializeCulture()
	{
		//從 Session 中取出 user 所做的語系選項
		string strSelectLang = Session["SelectLang"] as string;
 
		//如果 Session["SelectLang"] 不存在, 改抓 url 的 lang 參數
		if (strSelectLang == null)
			strSelectLang = Page.Request.QueryString["lang"];
 
		//若為第一次執行(為null) 或 MasterPage 下拉選單選第一個選項後的 PostBack(為空值""),
		//則先套用 user 自己 IE 中第一個設定的語言
		if (String.IsNullOrEmpty(strSelectLang) == true)
			return;
 
		Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(strSelectLang);
		Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
 
		base.InitializeCulture();
	}
 
	public string GetLocalString(string strResourceKey)
	{
		string strRet = GetLocalResourceObject(strResourceKey) as string;
		return strRet;
	}
 
	//public string GetGlobalString(string strResourceKey, string strClassName)
	//{
	//    string strRet = GetGlobalResourceObject(strClassName, strResourceKey) as string;
	//    return strRet;
	//}
}

MultiLangSelect.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MultiLangSelect.ascx.cs" Inherits="MultiLangSelect" %>
<asp:DropDownList ID="DropDownList_MultiLangSelect" runat="server" Font-Size="X-Small" Width="96px" AutoPostBack="True" OnSelectedIndexChanged="DropDownList_MultiLangSelect_SelectedIndexChanged" meta:resourcekey="DropDownList_MultiLangSelectResource1" ToolTip="選擇你要顯示的語言" >
    <asp:ListItem meta:resourcekey="ML_WaitSelect" Text="--language--"></asp:ListItem>
    <asp:ListItem meta:resourcekey="ML_ZhTw" Text="繁體中文"></asp:ListItem>
    <asp:ListItem meta:resourcekey="ML_EnUs" Text="English"></asp:ListItem>
</asp:DropDownList>

MultiLangSelect.ascx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
 
public partial class MultiLangSelect : System.Web.UI.UserControl
{
	protected void Page_Load(object sender, EventArgs e)
	{
		//切換語系後, 重設DropDownList已選擇的項目
 
		if (!this.IsPostBack)
		{
			string strSelectLang = Session["SelectLang"] as string;
 
			//如果 Session["SelectLang"] 不存在, 改抓 url 的 lang 參數
			if (strSelectLang == null)
				strSelectLang = Page.Request.QueryString["lang"];
 
			if (strSelectLang != null)
			{
				if (this.DropDownList_MultiLangSelect.SelectedValue != strSelectLang)
				{
					this.DropDownList_MultiLangSelect.SelectedValue = strSelectLang;
				}
			}
		}
	}
 
	protected void DropDownList_MultiLangSelect_SelectedIndexChanged(object sender, EventArgs e)
	{
		//取得目前網頁的檔名
		string strOriginalPage = Page.Request.Url.Segments[Request.Url.Segments.Length - 1];
 
		//Page.ClientQueryString 為 QueryString 中 ? 號後面的參數集。
		string strNewQueryString = Page.ClientQueryString;
 
		string strSelectLang;
 
		System.Text.StringBuilder objSB = new System.Text.StringBuilder();
 
        	if (this.DropDownList_MultiLangSelect.SelectedValue == "NoSel")
	        {
			//套用 user 自己 IE 中第一個設定的語言
        		strSelectLang = ""; 
 
			//下拉選單的語言選項存在Session中
			Session["SelectLang"] = strSelectLang;
 
			//若使用者多次更換語系,QueryString 的 lang 參數只顯示最新的一次
			if (strNewQueryString.IndexOf("lang") != -1)
			{
				if (strNewQueryString.Length >= 11)
					strNewQueryString = strNewQueryString.Substring(11);
				else
					strNewQueryString = String.Empty;
			}
 
			objSB.Append(strOriginalPage).Append("?lang=").Append("NoSel");
 
			if (strNewQueryString != String.Empty)
				objSB.Append("&").Append(strNewQueryString);
 
			Response.Redirect(objSB.ToString());
        	}
        	else
        	{
			//以轉址方式套用語系
			strSelectLang = this.DropDownList_MultiLangSelect.SelectedValue;
 
			//下拉選單的語言選項存在Session中
			Session["SelectLang"] = strSelectLang;
 
			//Page.ClientQueryString 為 QueryString 中 ? 號後面的參數集。
			strNewQueryString = Page.ClientQueryString;
 
			//若使用者多次更換語系,QueryString 的 lang 參數只顯示最新的一次
			if (strNewQueryString.IndexOf("lang") != -1)
			{
				if (strNewQueryString.Length >= 11)
					strNewQueryString = strNewQueryString.Substring(11);
				else
					strNewQueryString = String.Empty;
			}
 
			objSB.Append(strOriginalPage).Append("?lang=").Append(strSelectLang);
 
			if (strNewQueryString != String.Empty)
				objSB.Append("&").Append(strNewQueryString);
 
			Response.Redirect(objSB.ToString());
        }
    }
}

使用範例(第1版)

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %>
<%@ Register Src="MultiLangSelect.ascx" TagName="MultiLangSelect" TagPrefix="uc1" %>
 
<!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">
    <div>
        <uc1:MultiLangSelect id="MultiLangSelect1" runat="server">
        </uc1:MultiLangSelect>
        <br />
        <br />
        <asp:Label ID="Label1" runat="server" Text="中文(台灣)" meta:resourcekey="Label1Resource1"></asp:Label>
<br />
        <br />
        <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></div>
    </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
 
public partial class _Default : LocalizedPage //System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{
		this.Label2.Text = this.GetLocalString("String1");
	}
}

相關檔案(第2版)

LocalizedPage.cs

using System;
using System.Data;
using System.Text;
using System.Web.UI;
using System.Web.Security;
using System.Threading;
using System.Globalization;
 
/// <summary>
/// 所有需要地區化资源切换的頁面基礎類別
/// </summary>
public class LocalizedPage : System.Web.UI.Page
{
	//設定語系時,每個頁面一定要 Override 的 Method
	protected override void InitializeCulture()
	{
        	string strSelectLang = Page.Request.QueryString["lang"];
        	if (String.IsNullOrEmpty(strSelectLang) == true)
            		strSelectLang = Session["SelectLang"] as string;
 
        	//若為第一次執行(為null) 或 MasterPage 下拉選單選第一個選項後的 PostBack(為空值""),
        	//則先套用 user 自己 IE 中第一個設定的語言
	        if (String.IsNullOrEmpty(strSelectLang) == true)
        		return;
 
        	Session["SelectLang"] = strSelectLang;
 
        	Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(strSelectLang);
	        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
 
	        base.InitializeCulture();
	}
 
	public string GetLocalString(string strResourceKey)
	{
		string strRet = GetLocalResourceObject(strResourceKey) as string;
		return strRet;
	}
}


相關

個人工具
名字空間
變換
動作
導航
分類
其他
技術類News或部落格
工具箱