using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml; namespace Mesnac.Action.Base { public class LanguageService { private Dictionary _languageDic { get; set; } #region 单例模式 private static LanguageService _this; public static LanguageService Instance { get { if (null == _this) _this = new LanguageService(); return _this; } } private LanguageService() { this._languageDic = new Dictionary(); } #endregion #region 基本信息 private string _projectWizardName = string.Empty; public string ProjectWizardName { get { return _projectWizardName; } set { if (_projectWizardName != value) { this._languageDic.Clear(); _projectWizardName = value; } } } private readonly string ActionConfigPath = "Data\\EventConfig\\"; private string GetConfigFilePath(string path) { string appPath = System.Windows.Forms.Application.StartupPath; return Path.Combine(appPath, ActionConfigPath, path); } #endregion #region IniLanguageDic private void IniLanguageDic(FileInfo fi) { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(fi.FullName); foreach (XmlNode serviceNode in xmlDocument) { if (!serviceNode.Name.Equals("Language", StringComparison.CurrentCultureIgnoreCase)) { continue; } foreach (XmlNode runtimeNode in serviceNode.ChildNodes) { if (runtimeNode.Attributes != null && runtimeNode.Attributes.Count > 1 && runtimeNode.Attributes["key"] != null && runtimeNode.Attributes["key"].Value != null && runtimeNode.Attributes["value"] != null && runtimeNode.Attributes["value"].Value != null) { int key = 0; if (int.TryParse(runtimeNode.Attributes["key"].Value.ToString(), out key)) { if (!this._languageDic.ContainsKey(key)) { this._languageDic.Add(key, runtimeNode.Attributes["value"].Value.ToString()); } } } } } } private void IniLanguageDic() { if (this._languageDic.Count > 0) { return; } this._languageDic.Clear(); DirectoryInfo dir = new DirectoryInfo(GetConfigFilePath(this._projectWizardName)); if (dir.Exists) { foreach (FileInfo fi in dir.GetFiles()) { IniLanguageDic(fi); } } } #endregion public string Read(int key) { if (this._languageDic.Count == 0) { IniLanguageDic(); } string Result = string.Empty; if (this._languageDic.TryGetValue(key, out Result)) { return Result; } return Result; } public string Read(string projectWizardName, int key) { this.ProjectWizardName = projectWizardName; return Read(key); } } }