#region using System; using System.Data; using System.IO; using System.Reflection; using System.Windows.Forms; using CSFrameworkV5.Common; using CSFrameworkV5.Core; #endregion namespace CSFrameworkV5.Language { /// /// XML语言包 /// public class LanXML : ILanguage { private static Assembly _LanguageAssembly; private static DataTable _LanCHT; private static DataTable _LanCHS; private static DataTable _LanENG; public LanXML() { Load(); } public static DataTable LanCHS => _LanCHS; public static DataTable LanCHT => _LanCHT; public static DataTable LanENG => _LanENG; /// /// 获取语言内容 /// /// /// /// public string Get(string objectID, string defaultValue, LanguageDataType dataType) { return Get(LanLib.Current, objectID, defaultValue, dataType); } public string Get(string userMsg) { return Get(LanLib.Current, userMsg, userMsg, LanguageDataType.Control); } /// /// 获取语言 /// /// /// /// /// public string Get(LanguageType type, string objectID, string defaultValue, LanguageDataType dataType) { if (objectID == null || objectID == string.Empty) return defaultValue; var lan = _LanCHS; if (LanguageType.CHT == type) lan = _LanCHT; else if (LanguageType.ENG == type) lan = _LanENG; var rs = lan.Select("ObjectID='" + objectID + "'"); if (rs != null && rs.Length > 0) return rs[0]["Content"].ToStringEx(); return defaultValue; } /// /// 模糊匹配语言标识 /// /// 语言标识 /// 默认值 /// public string GetByMatch(string objectID, string defaultValue, LanguageDataType dataType) { if (objectID == null || objectID == string.Empty) return defaultValue; var lan = _LanCHS; if (LanguageType.CHT == LanLib.Current) lan = _LanCHT; else if (LanguageType.ENG == LanLib.Current) lan = _LanENG; var rs = lan.Select("ObjectID LIKE '%" + objectID + "%'", " ObjectID ASC"); if (rs != null && rs.Length > 0) return rs[0]["Content"].ToStringEx(); return defaultValue; } /// /// 加载语言库 /// /// public void Load() { //XML文件目录 var appPath = Path.GetDirectoryName(Application.ExecutablePath); try { //加载一次 if (_LanguageAssembly != null) return; var asmFileName = Path.GetFileName(Assembly.GetExecutingAssembly().Location); var asmPath = Path.Combine(appPath, asmFileName); if (!File.Exists(asmPath)) return; _LanguageAssembly = Assembly.LoadFrom(asmPath); var asm = _LanguageAssembly; var xsd = CodeSafeHelper.GetSafePath( Path.Combine(Application.StartupPath, "lan.xsd")); //加载简体语言 _LanCHS = SafeXMLReader.LoadFromAssembly(asm, "CSFrameworkV5.Language.LanCHS.xml", xsd); //加载繁体语言 _LanCHT = SafeXMLReader.LoadFromAssembly(asm, "CSFrameworkV5.Language.LanCHT.xml", xsd); //加载英语语言 _LanENG = SafeXMLReader.LoadFromAssembly(asm, "CSFrameworkV5.Language.LanENG.xml", xsd); } catch (Exception ex) { throw new Exception("加载语言失败!\r\n" + ex.Message); } } } }