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