Multi Language Manager

Tags:  

using System;
using System.Xml;
using System.Collections;
/// <summary>
/// 多國語言處理類別
/// 因應多國語言的需求, 特別設計一個以 XML 為主的類別
/// Usage:
///  
///            MessageManager L_Manager = new MessageManager("Language.xml");
///            L_Manager.CreateNewMessageTable();
///            L_Manager.Load_MultiLanguage();
///           String strTitles=L_Manager.getMessage("ProgramTitle", "S_Chinese");
///
/// Abstract Storage Structure
///   [ ]
///   [ ] ----> ArrayList ->[A lang][...]
//                        ->[B lang][...]
/// </summary>
namespace Player {
    public class MessageManager {
        String strFilename;


        System.Collections.Hashtable LanguageTable = new System.Collections.Hashtable();

        public MessageManager(String strFilename) {
            this.strFilename = strFilename;

        }

        // 建立多國語言屬性訊息表
        public void CreateNewMessageTable() {
            string[] Default ={          "<!-- MultiLanguage Setup File (多國語言設定檔)",
                                     " ",
                                     "    You can add your native language to the EZLearn Helper.",
                                     "    你可以加入自己國家慣用的語言到 EZLearn 語言學習機.",
                                     "    Ex:",
                                     "<LanguageItem Title=\"Version_Text\"",
                                     "T_Chinese=\"版本\"",
                                     "S_Chinese=\"版本\"",
                                     "English=\"Ver.\"",
                                     "/>",
                                     " ",
                                     "    Manual Edit: NotePad.exe (*the saving format, please choose UTF-8).",
                                     "-->",

                                     "<EZLearn_Multi_Language FileName=\"Default_Mutilanguage_Data\" >",
                                     " ",

                                     "<Title value=\"ProgramTitle\" >",
                                     "    <Language Name=\"T_Chinese\" ",
                                     "         value=\"EZLearn 語言學習機\"",
                                     "    />",
                                     "    <Language Name=\"S_Chinese\" ",
                                     "         value=\"EZLearn 语言学习机\"",
                                     "    />",
                                     "    <Language Name=\"English\" ",
                                     "         value=\"EZLearn Helper\"",
                                     "    />",
                                     "</Title>",
                                     " ",

                                     "<Title value=\"menuItem9.Text\" >",
                                     "    <Language Name=\"T_Chinese\" ",
                                     "         value=\"功能\"",
                                     "    />",
                                     "    <Language Name=\"S_Chinese\" ",
                                     "         value=\"功能\"",
                                     "    />",
                                     "    <Language Name=\"English\" ",
                                     "         value=\"Function\"",
                                     "    />",
                                     "</Title>",
                                     " ",

                                     "<Title value=\"menuItem34.Text\" >",
                                     "    <Language Name=\"T_Chinese\" ",
                                     "         value=\"網際網路上的電子字典\"",
                                     "    />",
                                     "    <Language Name=\"S_Chinese\" ",
                                     "         value=\"网际网路上的电子字典\"",
                                     "    />",
                                     "    <Language Name=\"English\" ",
                                     "         value=\"On-Line Dictionaries\"",
                                     "    />",
                                     "</Title>",
                                     " ",
                                     "</EZLearn_Multi_Language>"};

            // Create a initial mult-language setup file
            Create_A_New_XML_File(strFilename, Default);
        }

        public string getMessage(string strTitle, string strLanguage) {
            ArrayList LanguagePairList = (ArrayList)LanguageTable[strTitle];

            for (int i = 0; i < LanguagePairList.Count; i++) {
                string[] strLanguageNameValuePair = (string[])LanguagePairList[i];
                if (strLanguageNameValuePair[0].Equals(strLanguage)) {
                    return strLanguageNameValuePair[1];
                }
            }
            return getMessage(strTitle, "English");
        }

        public bool Load_MultiLanguage() {
            XmlValidatingReader reader = null;


            try {
                XmlTextReader txtreader = new XmlTextReader(strFilename);
                txtreader.WhitespaceHandling = WhitespaceHandling.None;

                //Implement the validating reader over the text reader.
                reader = new XmlValidatingReader(txtreader);
                reader.ValidationType = ValidationType.None;


                //Parse the XML fragment.  If they exist, display the   
                //prefix and namespace URI of each element.
                string[] Item_Title_Address = null;
                bool brule = false;

                // 讀取一行 XML 指令
                ArrayList Language_Name_ValuePairArray = null;
                while (reader.Read()) {

                    switch (reader.NodeType) {
                        // 讀取 value = "字串"

                        case XmlNodeType.Element:
                            //Console.WriteLine("<{0}>", reader.LocalName); // Debug Information


                            string ElementName = reader.LocalName;
                            String strTitle, strLanguageName, strLanguageValue;
                            int Step = 0;

                            switch (ElementName) {
                                case "LanguageItem":
                                    // 讀取各種語言的文字說明
                                    String[] strLanguageItemArray = new String[reader.AttributeCount];
                                    for (int i = 0; i < reader.AttributeCount; i++) {
                                        strLanguageItemArray[i] = (string)reader.GetAttribute(i);

                                    }

                                    // 讀完後, 放到 Hash 中
                                    string Title = strLanguageItemArray[0]; // 利用 變數名稱當作 key, 把多國語言陣列放到 Hash 中
                                    LanguageTable.Add(Title, strLanguageItemArray);
                                    break;

                                case "Title":
                                    strTitle = (string)reader.GetAttribute(0);
                                    // 遇到新的 變數Title, 建立語言對應表
                                    // [ ]
                                    // [ ] ----> ArrayList ->[A lang][...]
                                    //                     ->[B lang][...]
                                    Language_Name_ValuePairArray = new ArrayList();
                                    LanguageTable.Add(strTitle, Language_Name_ValuePairArray);
                                    break;
                                case "Language":
                                    strLanguageName = (string)reader.GetAttribute(0);
                                    strLanguageValue = (string)reader.GetAttribute(1);
                                    String[] Language_Name_ValuePair = new String[2];
                                    Language_Name_ValuePair[0] = strLanguageName;
                                    Language_Name_ValuePair[1] = strLanguageValue;
                                    if (Language_Name_ValuePairArray != null)
                                        Language_Name_ValuePairArray.Add(Language_Name_ValuePair);
                                    else
                                        return false;
                                    //Language_Name_ValuePairArray.Add(Language_Name_ValuePair); // 把收集到的目前語言收起來
                                    break;
                            }

                            break;
                    }
                }
                txtreader.Close();

            }
            catch (System.Xml.XmlException ee) {
                System.Windows.Forms.MessageBox.Show("XML 語法檢查錯誤\n\n請修正 Dictionary.xml內容.\n\n如果想要回復預設值,\n請刪除 Dictionary.xml 檔即可");
                Console.WriteLine("Exception " + ee);
                return false;
            }
            return true;
        }



        // XML Utilities
        // Create a new XML file
        public void Create_A_New_XML_File(String strFilename, String[] InitialContent) {
            using (System.IO.StreamWriter writer = System.IO.File.CreateText(strFilename)) {
                for (int i = 0; i < InitialContent.Length; i++) {
                    writer.WriteLine(InitialContent[i]);
                }

            }// end of using
        }

        // Read whole langauge setting
        public void ReadWholeItemsInfo(XmlValidatingReader reader) {


        }
    }

}// end of Player namespace

0 Comments  Show recent to old
Post a comment


 RSS of this page