1
yhj
2024-07-24 5e5d945e91568b973faa27d8ab0bcef99fc4a6c5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#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
{
    /// <summary>
    ///     XML语言包
    /// </summary>
    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;
 
        /// <summary>
        ///     获取语言内容
        /// </summary>
        /// <param name="objectID"></param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        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);
        }
 
        /// <summary>
        ///     获取语言
        /// </summary>
        /// <param name="type"></param>
        /// <param name="objectID"></param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        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;
        }
 
        /// <summary>
        ///     模糊匹配语言标识
        /// </summary>
        /// <param name="objectID">语言标识</param>
        /// <param name="defaultValue">默认值</param>
        /// <returns></returns>
        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;
        }
 
        /// <summary>
        ///     加载语言库
        /// </summary>
        /// <param name="appPath"></param>
        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);
            }
        }
    }
}