XML语言包

来源:互联网 发布:最好的监控软件 编辑:程序博客网 时间:2024/06/05 14:06

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;
/***
 * 读取XML语言包文件
 * @author qjf
 * */
namespace BRFID.Common
{
    public class Language
    {
        public static Hashtable LanguageTable = new Hashtable();

        public static Hashtable Languages = new Hashtable();
        /// <summary>
        /// 打开语言包文件
        /// </summary>
        /// <param name="languageName"></param>
        /// <returns></returns>
        private static XDocument OpenLanguageFile(string languageName)
        {
            string path = GetPath(languageName);
            return OpenFile(path);
        }
        /// <summary>
        /// 打开XML文件
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        private static XDocument OpenFile(string path)
        {
            if (File.Exists(path))
            {
                return XDocument.Load(path);
            }
            return null;
        }
        /// <summary>
        /// 创建语言包对照集合
        /// </summary>
        /// <param name="doc"></param>
        private static void CreateLanguageTable(XDocument doc)
        {
            if (doc != null)
            {
                AddLanguageHeadInfo(doc);
                foreach (var Node in doc.Descendants("Moudle"))
                {
                    Hashtable ht = new Hashtable();
                    foreach (var g in Node.Descendants("Item"))
                    {
                        ht.Add(g.Attribute("name").Value, g.Value);
                    }
                    LanguageTable.Add(Node.Attribute("name").Value, ht);
                }
            }
        }
        /// <summary>
        /// 添加语言的头部信息
        /// </summary>
        /// <param name="doc"></param>
        private static void AddLanguageHeadInfo(XDocument doc)
        {
            Hashtable ht = new Hashtable();
            ht.Add("language", doc.Root.Attribute("name").Value);
            ht.Add("version", doc.Root.Attribute("version").Value);
            ht.Add("displayName", doc.Root.Attribute("displayName").Value);
            LanguageTable.Add("LanguageInfo", ht);
        }
        /// <summary>
        /// 获取相应的语言包的路径
        /// </summary>
        /// <param name="languageName"></param>
        /// <returns></returns>
        private static string GetPath(string languageName)
        {
            string XmlPath = GetLanguageBasePath();
            Hashtable ht = GetLanguageConfig();
            XmlPath += (ht[languageName] as LanguageInfo).path + ".xml";
            return XmlPath;
        }
        /// <summary>
        /// 获取语言包基路径
        /// </summary>
        /// <returns></returns>
        private static string GetLanguageBasePath()
        {
            return System.Windows.Forms.Application.StartupPath + "//Languages//";
        }
        /// <summary>
        /// 获取语言的配置信息
        /// </summary>
        /// <returns></returns>
        private static Hashtable GetLanguageConfig()
        {
            string XmlPath = GetLanguageBasePath()+"Languages.xml";
            XDocument doc = OpenFile(XmlPath);
            if (doc != null)
            {
                LangugesHeadInfo(doc);
                foreach (var item in doc.Descendants("Item"))
                {
                    LanguageInfo languageInfo = new LanguageInfo();
                    languageInfo.name = item.Attribute("name").Value;
                    languageInfo.path = item.Attribute("path").Value;
                    languageInfo.value = item.Value;
                    Languages.Add(languageInfo.name, languageInfo);
                }
            }
            return Languages;
        }
        /// <summary>
        /// 获取语言的头部信息
        /// </summary>
        /// <param name="doc"></param>
        private static void LangugesHeadInfo(XDocument doc)
        {
            Languages.Add("company", doc.Root.Attribute("company").Value);
            Languages.Add("version", doc.Root.Attribute("version").Value);
        }
        /// <summary>
        /// 加载相应的语言包
        /// </summary>
        /// <param name="languageName">语言名称</param>
        /// <returns>语言对照文本的集合</returns>
        public static Hashtable LoadLanguage(string languageName)
        {
            XDocument doc = OpenLanguageFile(languageName);
            CreateLanguageTable(doc);
            return LanguageTable;
        }
        /// <summary>
        /// 获取模块中的语言文本集合
        /// </summary>
        /// <param name="moduleName"></param>
        /// <returns>语言翻译对照文本的集合</returns>
        public static Hashtable GetMessages(string moduleName)
        {
            return (Hashtable)LanguageTable[moduleName];
        }
        /// <summary>
        /// 获取翻译文本
        /// </summary>
        /// <param name="moduleName">模块名</param>
        /// <param name="messageName">文本名</param>
        /// <returns></returns>
        public static string GetMessage(string moduleName, string messageName)
        {
            return ((Hashtable)LanguageTable[moduleName])[messageName].ToString();
        }
        /// <summary>
        /// 获取当前语言的信息
        /// </summary>
        /// <returns>语言信息的集合(包括名字,版本,显示名字等)</returns>
        public static Hashtable GetCurrentLanguageInfo()
        {
            return (Hashtable)LanguageTable["LanguageInfo"];
        }
        /// <summary>
        /// 获取系统配置的所有语言种类
        /// </summary>
        /// <returns>返回语言配置实体类的哈希集合</returns>
        public static Hashtable GetLanguages()
        {
            return Languages;
        }
        /// <summary>
        /// 语言配置实体类
        /// 包括语言名称,配置路劲,以及显示名称
        /// </summary>
        public class LanguageInfo
        {
            public string name { get; set; }
            public string path { get; set; }
            public string value { get; set; }
        }
    }
}

 

XML文件如下:


 

Languages.xml:

 

zh-CN.xml

 

原创粉丝点击