ResourceManager.cs
上传用户:lanchensha
上传日期:2022-02-27
资源大小:7530k
文件大小:8k
源码类别:

编辑器/阅读器

开发平台:

C#

  1. //------------------------------------------------------------------------------
  2. //                                  版权声明
  3. //DotNetTextBox免费版源码版权由小宝.NET及Aspxcn中华网工作室所有!
  4. //非盈利性个人网站可免费使用本控件,商业及盈利性网站请购买功能更强大的商业版本授
  5. //权或开发版,如发现任何个人或机构违反本声明,本站将对其追究法律责任!
  6. //商业授权及开发版购买地址:http://www.aspxcn.com.cn/dotnettextbox/default.htm
  7. //联系email:webmaster@aspxcn.com.cn
  8. //------------------------------------------------------------------------------
  9. using System.Collections;
  10. using System.Configuration;
  11. using System.Web;
  12. using System.Web.Caching;
  13. using System.Xml;
  14. namespace DotNetTextBox
  15. {
  16.     #region 自定义控件的自适应国际化功能(多语言)
  17.     /// <summary>
  18.     /// 资源管理类
  19.     /// 用于读取相应语言的资源文本
  20.     /// </summary>
  21.     public class ResourceManager
  22.     {
  23.        
  24.         /// <summary>
  25.         /// 站点默认语言
  26.         /// </summary>
  27.         private static string defaultLanguage;
  28.         /// <summary>
  29.         /// 获取或设置站点当前语言的键值
  30.         /// </summary>
  31.         public static string SiteLanguageKey
  32.         {
  33.             get
  34.             {
  35.                 return defaultLanguage;
  36.             }
  37.             set
  38.             {
  39.                 ResourceManager.defaultLanguage = value;
  40.             }
  41.         }
  42.         /// <summary>
  43.         /// 静态构造,用于实例化上下文引用对象
  44.         /// </summary>
  45.         static ResourceManager()
  46.         {      
  47.             defaultLanguage = ConfigurationManager.AppSettings["defaultLanguage"];
  48.         }
  49.         /// <summary>
  50.         /// 根据资源名称从资源文件中获取相应资源文本
  51.         /// </summary>
  52.         /// <param name="name">资源名称</param>
  53.         /// <returns>资源文本</returns>
  54.         public static string GetString(string name) 
  55.         {
  56.             return GetString(name,"Resources.xml",false);
  57.         }
  58.         /// <summary>
  59.         /// 根据资源名称从资源文件中获取相应资源文本
  60.         /// </summary>
  61.         /// <param name="name">资源名称</param>
  62.         /// <param name="defaultOnly">只选择默认语言</param>
  63.         /// <returns>资源文本</returns>
  64.         public static string GetString(string name, bool defaultOnly)
  65.         {
  66.             return GetString(name,"Resources.xml",defaultOnly);
  67.         }
  68.         /// <summary>
  69.         /// 根据资源名称从资源文件中获取相应资源文本
  70.         /// </summary>
  71.         /// <param name="name">资源名称</param>
  72.         /// <param name="fileName">资源文件名</param>
  73.         /// <returns></returns>
  74.         public static string GetString(string name, string fileName)
  75.         {
  76.             return GetString(name,fileName,false);
  77.         }
  78.         /// <summary>
  79.         /// 根据资源名称从资源文件中获取相应资源文本
  80.         /// </summary>
  81.         /// <param name="name">资源名称</param>
  82.         /// <param name="fileName">资源文件名</param>
  83.         /// <param name="defaultOnly">使用默认语言</param>
  84.         /// <returns>资源文本</returns>
  85.         public static string GetString(string name, string fileName, bool defaultOnly) 
  86.         {
  87.          Hashtable resources = null;
  88.             //用户语言
  89.             string userLanguage = null;
  90.                        
  91.             if (fileName != null && fileName != "")
  92.                 resources = GetResource("dntbfree_", userLanguage, fileName, defaultOnly);
  93.             else
  94.                 resources = GetResource("dntbfree_", userLanguage, "Resources.xml", defaultOnly);
  95.             string text = resources[name] as string;
  96. //try the standard file if we passed a file that didnt have the key we were looking for
  97. if (text == null && fileName != null && fileName != "") 
  98. {
  99.                 resources = GetResource("dntbfree_", userLanguage, "Resources.xml", false);
  100. text = resources[name] as string;
  101. }
  102.             return text;
  103.         }    
  104.         /// <summary>
  105.         /// 获取资源
  106.         /// </summary>
  107.         /// <param name="resourceType">资源类型</param>
  108.         /// <param name="userLanguage">用户语言</param>
  109.         /// <param name="fileName">资源文件名</param>
  110.         /// <param name="defaultOnly">只使用默认语言</param>
  111.         /// <returns></returns>
  112.         private static Hashtable GetResource (string resourceType, string userLanguage, string fileName, bool defaultOnly) {
  113.             string defaultLanguage = ResourceManager.defaultLanguage; 
  114.             string cacheKey = resourceType + defaultLanguage + userLanguage + fileName;
  115.             if (defaultLanguage == null || defaultLanguage == "")
  116.             {
  117.                 if (HttpContext.Current.Request.Cookies["languages"] != null)
  118.                 {
  119.                     defaultLanguage = HttpContext.Current.Request.Cookies["languages"].Value;
  120.                 }
  121.                 else
  122.                 {
  123.                     defaultLanguage = HttpContext.Current.Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"].ToLower().Split(',')[0];
  124.                 }
  125.             }
  126.             Hashtable resources = LanguageCache.Get(cacheKey) as Hashtable;
  127.             if (resources == null) 
  128.             {
  129.                 resources = new Hashtable();
  130.                 resources = LoadResource(resourceType, resources, defaultLanguage, cacheKey, fileName);                
  131.             }
  132.             return resources;
  133.         }
  134.         /// <summary>
  135.         /// 加载资源
  136.         /// </summary>
  137.         /// <param name="resourceType"></param>
  138.         /// <param name="target"></param>
  139.         /// <param name="language"></param>
  140.         /// <param name="cacheKey"></param>
  141.         /// <param name="fileName"></param>
  142.         /// <returns></returns>
  143. private static Hashtable LoadResource (string resourceType, Hashtable target, string language, string cacheKey, string fileName) 
  144.         {
  145.             string filePath;
  146.             try
  147.             {
  148.                 if (HttpContext.Current.Request.Cookies["configpath"] != null)
  149.                 {
  150.                     filePath = HttpContext.Current.Server.UrlDecode(HttpContext.Current.Request.Cookies["configpath"].Value) + language + "/" + fileName;
  151.                 }
  152.                 else
  153.                 {
  154.                     filePath = HttpContext.Current.Request.PhysicalApplicationPath+"/"+ConfigurationManager.AppSettings["systemfolder"].ToString() + language + "/" + fileName;
  155.                 }
  156.                    
  157.             }
  158.             catch
  159.             {
  160.                 EnvDTE.DTE devenv = null;
  161.                 try
  162.                 {
  163.                     devenv = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.8.0");
  164.                 }
  165.                 catch
  166.                 {
  167.                     devenv = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.9.0");
  168.                 }
  169.                 string projectFile = devenv.ActiveDocument.ProjectItem.ContainingProject.FileName;
  170.                 System.IO.FileInfo info = new System.IO.FileInfo(projectFile);
  171.                 filePath = info.Directory.FullName + "/system_dntb/" + language + "/" + fileName;
  172.             }
  173.             CacheDependency dp = new CacheDependency(filePath);
  174. XmlDocument d = new XmlDocument();
  175. try {
  176. d.Load( filePath );
  177. } catch {
  178. return target;
  179. }
  180. foreach (XmlNode n in d.SelectSingleNode("root").ChildNodes) 
  181.             {
  182. if (n.NodeType != XmlNodeType.Comment)
  183.                 {
  184. if (target[n.Attributes["name"].Value] == null)
  185. target.Add(n.Attributes["name"].Value, n.InnerText);
  186. else
  187. target[n.Attributes["name"].Value] = n.InnerText;
  188. }
  189. }
  190.             if (language == ResourceManager.defaultLanguage)
  191.             {
  192.                 LanguageCache.Max(cacheKey, target, dp);
  193.             }
  194.             else
  195.             {
  196.                 LanguageCache.Insert(cacheKey, target, dp, LanguageCache.MinuteFactor * 5);
  197.             }
  198.             return target;
  199.         }
  200.     }
  201.     #endregion
  202. }