實現多語言的方法是通過配置文件實現
下面是在C#的Windows編程中實現多語言的步驟
第一步
我們定義了一個XML文件來存放默認語言
LanguageDefine
<?xml version=
<Language>
<DefaultLanguage>ZH</DefaultLanguage>
</Language>
該文件只有一個DefaultLanguage屬性
下面是用於讀取默認語言和修改默認語言的函數
//讀取默認語言
public static string ReadDefaultLanguage(){
XmlReader reader = new XmlTextReader(
XmlDocument doc = new XmlDocument();
doc
XmlNode root = doc
//選取DefaultLangugae節點
XmlNode node = root
string result =
if (node != null)
//取出節點中的內容
result = node
reader
return result;
}
//修改默認語言
public static void WriteDefaultLanguage(string lang){
DataSet ds = new DataSet();
ds
DataTable dt = ds
dt
ds
ds
}
我們又用一個XML文件來存儲要顯示的語言的種類
我們是通過一個ComboBox下拉菜單來實現多語言的選擇的
ppConfig
<?xml version=
<AppConfig>
<Area>
<Language>ZH</Language>
<List>
<Item>中文[ZH]</Item>
<Item>英文[EN]</Item>
</List>
</Area>
<Area>
<Language>EN</Language>
<List>
<Item>Chinese[ZH]</Item>
<Item>English[EN]</Item>
</List>
</Area>
<Area>
</AppConfig>
相應的讀取該配置文件的函數是
public static IList GetLanguageList(string lang){
IList result = new ArrayList();
XmlReader reader = new XmlTextReader(
XmlDocument doc = new XmlDocument();
doc
XmlNode root = doc
XmlNodeList nodelist = root
foreach (XmlNode node in nodelist){
result
}
reader
return result;
}
第三步
通過上面的幾步
該資源文件的格式如下(現只顯示英文的資源文件
AppResource_EN
<?xml version=
<Resource>
<Form>
<Name>FrmLogon</Name>
<Controls>
<Control name=
<Control name=
<Control name=
<Control name=
<Control name=
<Control name=
<Control name=
</Controls>
</Form>
<Form>
<Name>FrmPasswordChange</Name>
<Controls>
<Control name=
<Control name=
<Control name=
<Control name=
<Control name=
<Control name=
<Control name=
</Controls>
</Form>
</Resource>
我們把一個窗體中要實現多語言顯示的控件的名稱全都放在<Controls></Controls>中
讀取的函數如下
/// <summary>
/// 讀取多語言的資源文件
/// </summary>
/// <param name=
/// <param name=
/// <returns></returns>
public static Hashtable ReadResource(string frmName
Hashtable result = new Hashtable();
XmlReader reader = null;
FileInfo fi = new FileInfo(
if (!fi
reader = new XmlTextReader(
else
reader = new XmlTextReader(
XmlDocument doc = new XmlDocument();
doc
XmlNode root = doc
XmlNodeList nodelist = root
foreach (XmlNode node in nodelist){
try{
XmlNode node
XmlNode node
if (node
result
}
}catch(FormatException fe){
Console
}
}
reader
return result;
}
第四步
我們可以在每個窗體的Load()事件中
/// <summary>
/// 獲取控件的名稱
/// </summary>
/// <param name=
public static void getNames(Form form)
{
//根據用戶選擇的語言獲得表的顯示文字
Hashtable table = AppConfig
Control
//可以在這裡設置窗體的一些統一的屬性
// form
// form
// form
// form
// form
// form
// form
// form
try
{
foreach(Control control in controlNames)
{
if(control
GetSubControls(control
if(control
GetSubControls(control
// if(control
// control
if(table
control
}
if(table
form
}
catch(Exception ex)
Console
}
因為有些控件其內部還有子控件
/// <summary>
/// 獲得子控件的顯示名
/// </summary>
/// <param name=
/// <param name=
private static void GetSubControls(Control
{
foreach(Control control in controls)
{
if(control
GetSubControls(control
if(control
GetSubControls(control
if(table
control
}
}
From:http://tw.wingwit.com/Article/program/net/201311/12039.html