62,268
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;
using FSSoft.Common;
using FSSoft.Common.IO;
using FSSoft.Common.TextUtil;
namespace FSSoft.Web.UI
{
/// <summary>
/// 多語言操作類。
/// </summary>
public sealed class Language
{
private static readonly string SessionKey=typeof(Language).FullName;
/// <summary>
/// 存储或取得預載入語言信息的相關配置文件的絕對路徑集合。
/// </summary>
public static ArrayList config_Load_Paths=new ArrayList();
private static short sysOnlySingleLanguageKBN_Value=-1;
/// <summary>
/// 配置系統只採用單一語言(默認採用多語言)。
/// </summary>
/// <remarks>若系統採用多語言則值為-1。</remarks>
public static short SysOnlySingleLanguageKBN_Value
{
set
{
if(value!=-1)
{
short[] LanguageKBNValues=(short[])Enum.GetValues(typeof(LanguageKBN));
bool legality=false;
foreach(short LanguageKBNValue in LanguageKBNValues)
{
if(LanguageKBNValue==value)
{
legality=true;
break;
}
}
if(!legality)
{
throw new Exception(consts_Web.UI_LANGUAGE_EX_INFO4);
}
}
sysOnlySingleLanguageKBN_Value=value;
}
get
{
return sysOnlySingleLanguageKBN_Value;
}
}
private static DataSet[] ds=null;
private static DataSet DS(string configName)
{
if(ds==null&&config_Load_Paths.Count>0)
{
ds=new DataSet[config_Load_Paths.Count];
try
{
for(int i=0;i<config_Load_Paths.Count;i++)
{
ds[i]=XMLUtil.InitXml((string)config_Load_Paths[i]);
}
}
catch(Exception e)
{
ds=null;
throw e;
}
}
foreach(DataSet getds in ds)
{
if(getds.DataSetName==configName)
{
return getds;
}
}
throw new Exception(string.Format(consts_Web.UI_LANGUAGE_EX_INFO3,configName));
}
/// <summary>
/// 设置或取得用户当前语言设置。
/// </summary>
public static LanguageKBN Current
{
set
{
HttpContext.Current.Session.Add(SessionKey,value);
}
get
{
if(sysOnlySingleLanguageKBN_Value!=-1)
return (LanguageKBN)Enum.Parse(typeof(LanguageKBN),sysOnlySingleLanguageKBN_Value.ToString());
if(HttpContext.Current.Session[SessionKey]==null)
{
string CurrentLanguage=HttpContext.Current.Request.UserLanguages[0];
switch(CurrentLanguage.Substring(0,2))
{
case "zh":
if(CurrentLanguage=="zh-cn")
return LanguageKBN.CHS;
else
return LanguageKBN.CHT;
case "ja":
return LanguageKBN.JP;
case "ko":
return LanguageKBN.KR;
default:
return LanguageKBN.EN;
}
}
else
{
return (LanguageKBN)HttpContext.Current.Session[SessionKey];
}
}
}
/// <summary>
/// 根據Msg.config内已有的key進行文本的取得。
/// </summary>
/// <param name="key">文本對應的key。</param>
/// <returns>返回文本值。</returns>
public static string Msg(string key)
{
return TAG_Value(key,consts_Web.UI_LANGUAGE_CONFIG_MSG_NAME);
}
/// <summary>
/// 根據Msg.config内已有的key以及指定的語言區分進行文本的取得。
/// </summary>
/// <param name="key">Msg.config内已有的key。</param>
/// <param name="languagekbn">指定的語言區分對象。</param>
/// <returns>返回文本值。</returns>
public static string Msg(string key,LanguageKBN languagekbn)
{
return TAG_Value(key,consts_Web.UI_LANGUAGE_CONFIG_MSG_NAME,true,languagekbn);
}
/// <summary>
/// 根據*.config内已有的key進行文本的取得。
/// </summary>
/// <param name="key">文本對應的key。</param>
/// <param name="configName">*对应名称</param>
/// <returns>返回文本值。</returns>
public static string TAG_Value(string key,string configName)
{
return TAG_Value(key,configName,false,LanguageKBN.EN);
}
/// <summary>
/// 根據*.config内已有的key進行文本的取得。
/// </summary>
/// <param name="key">文本對應的key。</param>
/// <param name="configName">*对应名称</param>
/// <param name="IsSetLanguageKBN">是否通過最後一個參數(languagekbn)來進行文本的取得。</param>
/// <param name="languagekbn">指定文本取得依據的語言區分對象。</param>
/// <returns>返回文本值。</returns>
private static string TAG_Value(string key,string configName,bool IsSetLanguageKBN,LanguageKBN languagekbn)
{
DataRow[] DDR=DS(configName).Tables[0].Select(string.Format(consts_Web.UI_LANGUAGE_KEY_EXPRESSION,key));
switch(DDR.Length)
{
case 0:
Console.WriteLine(consts_Web.UI_LANGUAGE_EX_INFO1,configName+consts_Web.UI_LANGUAGE_CONFIG_SUFFIXNAME,key);
return consts_Web.UI_LANGUAGE_CONFIG_NOKEY_TEXT;
case 1:
break;
default:
throw new Exception(
string.Format(consts_Web.UI_LANGUAGE_EX_INFO2,
configName+consts_Web.UI_LANGUAGE_CONFIG_SUFFIXNAME,DDR.Length,key));
}
string CurrentLanguageKBN=null;