#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);
}
}
}
}