台灣最大程式設計社群網站
線上人數
787
 
會員總數:245216
討論主題:189089
歡迎您免費加入會員
討論區列表 >> 專欄文章 >> 實作多國語言物件的一個簡單範例
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
實作多國語言物件的一個簡單範例
價值 : 0 QP  點閱數:880 回應數:0

樓主

Jing
門外漢
0 3
132 3
發送站內信

捐贈 VP 給 Jing
當你的軟體需要國際化時, 會遭遇到顯示多國語言文字的問題.
這是一個簡單而且可用的範例,用來實作顯示多國語言文字軟體元件.

注意: 這是一個教學類別,所以不考慮效率以展示為主.
你可以自由更改這個類別用在你的程式裡面.

使用範例
MessageManager L_Manager = new MessageManager("Language.xml");
L_Manager.CreateNewMessageTable(); // 建立多國語言文字對應資料, 並且存檔為 Language.xml
L_Manager.Load_MultiLanguage(); // 載入 Language.xml 多國語言資料檔

// 傳回對應的簡體中文 文字範例
String strTitles=L_Manager.getMessage("ProgramTitle", "S_Chinese");

// 傳回對應的正體中文 文字範例
String strTitles=L_Manager.getMessage("ProgramTitle", "T_Chinese");

// 傳回對應的英文字體 文字範例
String strTitles=L_Manager.getMessage("ProgramTitle", "English");

程式碼範例

public class MessageManager {
String strFilename;


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

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

}

// 建立多國語言屬性訊息表
public void CreateNewMessageTable() {
// 這是一個多國語言文字對應 XML 檔的範例
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) {


}
}


詳細程式設計資訊: Advanced Windows Programming
搜尋相關Tags的文章: [ 多國語言文字 XML ] ,
本篇文章發表於2007-01-17 03:19
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
   

回覆
如要回應,請先登入.