#region using System.Data; using CSFrameworkV5.Business; using CSFrameworkV5.Core; #endregion namespace CSFrameworkV5.Language { /// /// 数据库语言包 /// 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(); } } } }