?? resourcebundle.cs
字號:
using System;
using System.Globalization;
using System.Resources;
namespace ZeroWire.Shared.Localization
{
/// <summary>
/// 多語言支持 Create:Jason.Wang 05/03/27 Update:05/04/27
/// v1.001 SP1
/// 1. 修正對 SQL 資源讀取支持
/// 2. 對語言資源讀取只允許進行一次,不允許重復進行,且錯誤拋出
/// 3. 對 SQL 資源讀取只允許進行一次,不允許重復進行,但暫不做錯誤拋出
/// </summary>
/// <remarks>
/// 調用范例:
/// 1.程式載入時的初始化設置
/// ZeroWire.Shared.Localization.ResourceBundle.DefaultConfigCulture = new CultureInfo("en-US")
/// ZeroWire.Shared.Localization.ResourceBundle.DefaultResourceManager = ?
/// (CultureInfo)CultureInfo.CurrentUICulture.Clone() // 與系統區域語言一致
/// WebApplication 資源調用方式
/// new System.Resources.ResourceManager("your.Resources.strings",System.Reflection.Assembly.GetExecutingAssembly())
/// 2.方法調用
/// ResourceBundle.CultureStringRes("APPLICATION_TITLE",null,null));
/// </remarks>
public class ResourceBundle
{
// internal fields setting language culture
// 區域標識
static CultureInfo DefaultCulture = (CultureInfo)CultureInfo.CurrentUICulture.Clone();
// 語言資源集
static System.Resources.ResourceManager resManager = null;
// SQL 資源集
static System.Resources.ResourceManager resSQLMgr = null;
/// <summary>
/// Culture displays.
/// </summary>
public enum CultureType
{
English = 0,
Chinese = 1
}
/// <summary>
/// 多語言支持
/// </summary>
public ResourceBundle()
{
//
// TODO: Add constructor logic here
//
}
/// <summary>
/// 程式載入時調用,設定語言,默認為系統語言 (CultureInfo)CultureInfo.CurrentUICulture.Clone()
/// </summary>
/// <param name="CurrentCulture">
/// 語言標識 范例:new System.Globalization.CultureInfo("en-US")
/// 唯一區域定義格式: 主語言標識(小寫) en - 大寫字母為亞文化代碼(大寫) US
/// </param>
static public void SetConfigCulture(CultureInfo CurrentCulture)
{
DefaultCulture = CurrentCulture;
}
/// <summary>
/// 程式載入時調用, 設置多語言的引用資源
/// </summary>
/// <param name="defaultResManager">范例:new System.Resources.ResourceManager("your.resources",this.GetType().Assembly)</param>
static public void SetResourceManager(ResourceManager defaultResManager)
{
if (resManager != null) return; // throw new Exception("Resource Already Existent!");
resManager = defaultResManager;
}
/// <summary>
/// 程式載入時調用, 設置多語言的 SQL 引用資源
/// </summary>
/// <param name="defaultResManager">范例:new System.Resources.ResourceManager("your.resources.OrclLiteSql",this.GetType().Assembly)</param>
static public void SetSQLResourceManager(ResourceManager defaultResManager)
{
if (resSQLMgr != null) return;
resSQLMgr = defaultResManager;
}
/// <summary>
/// 返回當前區域語言標識
/// </summary>
/// <returns>當前區域語言標識</returns>
static public CultureInfo GetCurrentCulture()
{
return DefaultCulture;
}
#region SQL 資源調用
/// <summary>
/// 取得 SQL 資源
/// </summary>
/// <param name="ResKey">資源標識 Ex. COMMON_OK</param>
/// <returns>結果資源</returns>
public static string GetSQL(string ResKey)
{
return GetSQLRes(ResKey,null);
}
public static string GetSQL(string ResKey,object ParaObj)
{
return GetSQLRes(ResKey,ParaObj);
}
private static string GetSQLRes(string ResKey,object ParaObj)
{
string retval = string.Empty;
if (resSQLMgr == null) throw new NullReferenceException("Resources Not Exist");
try
{
if ((object)(retval = resSQLMgr.GetString(ResKey)) == null)
retval = "";
}
catch(Exception)
{
throw new Exception("Localization.TranslateRes");
}
if (ParaObj != null)
{
try
{
retval = string.Format(retval,(string[])ParaObj);
}
catch(Exception)
{
throw new ArgumentException("Paramter Absent");
}
}
return retval;
}
#endregion
#region 語言翻譯重載調用
/// <summary>
/// 區域化字符串資源
/// </summary>
/// <param name="ResKey">資源標識 Ex. COMMON_OK</param>
/// <returns>結果資源</returns>
public static string CultureStringRes(string ResKey)
{
return CultureStringRes(ResKey,null,null);
}
/// <summary>
/// 區域化字符串資源
/// </summary>
/// <param name="ResKey">資源標識 Ex. COMMON_OK</param>
/// <param name="CurrentCulture">強制區域資源定義</param>
/// <returns>結果資源</returns>
public static string CultureStringRes(string ResKey,CultureInfo CurrentCulture)
{
return CultureStringRes(ResKey,null,CurrentCulture);
}
/// <summary>
/// 區域化字符串資源
/// </summary>
/// <param name="ResKey">資源標識 Ex. "COMMON_OK"</param>
/// <param name="ParaObj">參數 string[] = {?,?,...}</param>
/// <returns>結果資源</returns>
public static string CultureStringRes(string ResKey,object ParaObj)
{
return CultureStringRes(ResKey,ParaObj,null);
}
#endregion
/// <summary>
/// 區域化字符串資源
/// </summary>
/// <param name="ResKey">資源標識 Ex. COMMON_OK</param>
/// <param name="ParaObj">參數 string[] = {?,?,...}</param>
/// <param name="CurrentCulture">強制區域資源定義</param>
/// <returns>結果資源</returns>
public static string CultureStringRes(string ResKey,object ParaObj,CultureInfo CurrentCulture)
{
return TranslateRes(ResKey,ParaObj,CurrentCulture);
}
// 本單元需充分考慮多語言支持的靈活性
// 1.支持使用系統的區域性設置
// 2.支持強定義使用某區域語言
private static string TranslateRes(string ResKey,object ParaObj, CultureInfo CurrentCulture)
{
string retval = string.Empty;
CurrentCulture = CurrentCulture == null ? DefaultCulture : CurrentCulture;
if (CurrentCulture == null) throw new NullReferenceException("CultureInfo Parameter Not Define");
if (resManager == null) throw new NullReferenceException("Resources Not Exist");
try
{
if ((object)(retval = resManager.GetString(ResKey, CurrentCulture)) == null)
retval = "";
}
catch(Exception)
{
throw new Exception("Localization.TranslateRes");
}
if (ParaObj != null)
{
try
{
retval = string.Format(retval,(string[])ParaObj);
}
catch(Exception)
{
throw new ArgumentException("Paramter Absent");
}
}
return retval;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -