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
#region
 
using System.Data;
using CSFrameworkV5.Business;
using CSFrameworkV5.Core;
 
#endregion
 
namespace CSFrameworkV5.Language
{
    /// <summary>
    ///     数据库语言包
    /// </summary>
    public class LanDatabase : ILanguage
    {
        private DataTable _languageData;
 
        public LanDatabase()
        {
            Load();
        }
 
        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.Message);
        }
 
        public string Get(LanguageType type, string objectID,
            string defaultValue, LanguageDataType dataType)
        {
            //将一个单引号变成两个(跟SQL语法是一样的).
            //所以在使用Select方法或DataView的时候,一定要注意把字符条件值的一个单引号改成两个单引号,执行
            if (objectID.IndexOf("'") >= 0)
                objectID = objectID.Replace("'", "''");
 
            var rs = _languageData.Select("ObjectID='" + objectID + "'");
 
            //有语言定义的记录
            if (rs != null && rs.Length > 0)
            {
                var data = rs[0][type.ToStringEx().ToUpper()].ToStringEx();
 
                if (string.IsNullOrEmpty(data)) //没有定义语言内容
                {
                    //保存默认的语言资料
                    if (LanLib.Current == LanLib.DefautLanguage &&
                        !string.IsNullOrEmpty(defaultValue))
                        PostLanguage(LanLib.Current, objectID, defaultValue,
                            dataType.ToStringEx());
 
                    return defaultValue;
                }
 
                return data;
            }
 
            //没有语言定义
            if (LanLib.Current == LanLib.DefautLanguage)
            {
                //保存默认的语言资料
                if (!string.IsNullOrEmpty(defaultValue))
                    PostLanguage(LanLib.Current, objectID, defaultValue,
                        dataType.ToStringEx());
                else
                    PostLanguage(LanLib.Current, objectID, objectID,
                        dataType.ToStringEx()); //objID作为语言标识
            }
 
            return defaultValue;
        }
 
        public string GetByMatch(string objectID, string defaultValue,
            LanguageDataType dataType)
        {
            var rs = _languageData.Select("ObjectID LIKE '%" + objectID + "%'",
                " ObjectID ASC");
            if (rs != null && rs.Length > 0)
            {
                var data = rs[0][LanLib.Current.ToStringEx().ToUpper()]
                    .ToStringEx();
 
                if (string.IsNullOrEmpty(data))
                {
                    if (LanLib.Current == LanLib.DefautLanguage &&
                        !string.IsNullOrEmpty(defaultValue))
                        PostLanguage(LanLib.Current, objectID, defaultValue,
                            dataType.ToStringEx());
 
                    return defaultValue;
                }
 
                return data;
            }
 
            if (LanLib.Current == LanLib.DefautLanguage &&
                !string.IsNullOrEmpty(defaultValue))
                PostLanguage(LanLib.Current, objectID, defaultValue,
                    dataType.ToStringEx());
 
            return defaultValue;
        }
 
        public void Load()
        {
            _languageData = new bllLanguage().GetLanguageData();
        }
 
        private void PostLanguage(LanguageType current, string objectID,
            string defaultValue, string itemType)
        {
            //提交到语言数据库
            var post = new bllLanguage().PostLanguage(current.ToStringEx(),
                objectID, defaultValue, itemType);
 
            if (post)
            {
                //更新缓存
                var newRow = _languageData.NewRow();
                newRow["ObjectID"] = objectID;
                newRow["ItemType"] = itemType;
                newRow[current.ToStringEx().ToUpper()] = defaultValue;
                _languageData.AcceptChanges();
            }
        }
    }
}