程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 如何開發一個多種語言版本的C#程序

如何開發一個多種語言版本的C#程序

編輯:關於C語言
在C#中有多種使用資源文件的方法,能夠很方便地開發全球通用的應用程序。本文通過一個簡單的小例子,來講解在C#中如何利用資源文件,快速開發一個多種語言版本的程序。本例中只有一個窗體,三個控件,能夠根據用戶的設置以中文或英文界面運行。開發環境是Windows 2000 Professional、Microsoft Visual Studio.Net 2002。具體開發步驟如下:

  一、新建項目

  啟動Microsoft Visual Studio .Net,新建一個C#項目MyApp,本例工程存放於F:\Csharp\MyApp。

  二、添加控件

  在Form1 窗體上添加三個控件(見圖1):主菜單MainMenu、標簽Label1和按鈕Button1。Label1和Button1控件的屬性均采用缺省設置。MainMenu控件中添加三個菜單項menuItem1、menuItem2、menuItem3。Text屬性分別設為“語言”、“中文”和“English”。menuItem2、
menuItem3 的RadioCheck屬性設為True。


圖 1

  三、創建配置文件 

  在項目中添加一個文本文件MyAppConfig.ini,保存當前程序的語言版本設置。該文件中只有一行內容。如果是“English”,則表示程序為英文版;如果是“Chinese”則為中文版。這裡暫且保存為“English”。

  四、創建資源文件

  .NET中的資源文件有三種: 文本(.txt )文件、XML 格式的.Resx 文件和.Resources 文件。文本文件只能包含形如“ 名稱= 值”格式的字符串資源。.Resx文件和.Resources 文件中不僅能保存字符串資源,還能保存圖像等可序列化的持久對象資源。但是只有.resources 文件格式的資源文件才能被嵌入到運行庫可執行文件中,或被編譯為附屬程序集。利用Visual Studio .Net 中自帶的資源文件生成器
(Resgen.exe),可以將.txt文件和.Resx文件轉換為.resources 文件格式。本例中只用到了字符串資源,所以在項目中添加兩個文本文件Resource_zh.txt 和Reource_en.txt。

  Reource_en.txt 文件中的內容:

menuItem1_Name=Language
button1_Name=Exit
label1_Text=This is English version!

  Resource_zh.txt 文件中的內容:

menuItem1_Name=語言
button1_Name=退出
label1_Text=這是中文版!


  需要注意的是Resource_zh.txt文件中含有漢字,必須以UTF-8編碼保存。在Visual Studio .Net集成開發環境中,可以先點擊“文件”菜單中的“高級保存選項”,選中UTF-8編碼格式,再保存文件。

  然後,點擊“程序”菜單中的“Visual Studio .Net命令提示”菜單,進入DOS方式,輸入以下兩行命令,生成程序中能夠訪問的資源文件MyApp.resources和MyApp.zh-CN.resources。英文資源文件MyApp.resources 作為默認的後備資源文件。MyApp.zh-CN.resources
是中文資源文件,文件名中的“MyApp”是資源文件的根名稱,必須與後備資源文件的根名稱相同,“zh-CN”指定資源文件的區域性。

F:\Csharp\MyApp>resgen Resource_en.txt,MyApp.resources
F:\Csharp\MyApp>resgen Resource_zh.txt,MyApp.zh-CN.
resources

  五、修改代碼

  1、在代碼的開頭添加需引用的命名空間。

using System.Globalization;
using System.Resources;
using System.Threading;
using System.IO;

  2、在Form1 中定義兩個字段ci和rm。CultureInfo對象ci用來指定讀取資源文件時的區域性。ResourceManager對象rm用來在指定的資源文件中讀取資源。

CultureInfo ci = new CultureInfo("");
Res ource Manag er rm = Res ource Manag er.CreateFileBasedResourceManager("MyAPP", ".", null);

  3、在Form1中添加一個方法ReadResources,用來讀取相應資源文件中的字符串資源,來修改界面菜單、標簽和按鈕上文字顯示。

private void ReadResources(){
 this.menuItem1.Text = rm.GetString("menuItem1_Text",ci) ;
 this.button1.Text = rm.GetString("button1_Text",ci);
 this.label1.Text = rm.GetString("label1_Text",ci);
 this.Refresh();
}

  4、在Form1 的Load事件處理過程中,根據配置文件的內容,調用ReadResources方法,讀取資源,顯示程序界面。

private void Form1_Load(...) {
 StreamReader sr=File.OpenText("MyAppConfig.ini");
 if (sr.ReadLine()=="Chinese"){
  ci = new CultureInfo("zh-CN");
  menuItem2.Checked=true; }
 else {
  ci = new CultureInfo("en");
  menuItem3.Checked=true;
 }
 sr.Close();
 this.ReadResources();
}

  5、在Form1 中添加一個方法SaveConfig,用來修改配置文件。在menuItem2 和menuItem3 的Click事件過程中調用S a v e C o n f i g 方法,分別將字符串“Chinese”、“English ”寫入配置文件,並調用ReadResources方法,來更新界面。

private void SaveConfig(string p_Language){
 StreamWriter sw=File.CreateText("MyAppConfig.ini");
 sw.WriteLine(p_Language);
 sw.Close();
}
private void menuItem2_Click(...){
 this.SaveConfig("Chinese");ci = new CultureInfo("zh-CN");
 menuItem2.Checked=true; menuItem3.Checked=false;
 this.ReadResources();
}
private void menuItem3_Click(...){
 this.SaveConfig("English");
 ci = new CultureInfo("en");
 menuItem2.Checked=false;
 menuItem3.Checked=true;
 this.ReadResources();
}

  6、在按鈕button1的Click事件過程中,關閉窗體,結束運行程序。

private void button1_Click(...)
{
 this.Close();
}

  六、編譯並運行程序

  如果手工編譯源程序,只需點擊“Visual Studio.Net 命令提示”菜單,進入DOS方式,輸入下面命令,即可生成二進制的可執行文件MyApp.exe,然後輸入MyApp,就能運行程序。

F:\Csharp\MyApp>csc /out:MyApp.exe form1.cs

  如果是在Microsoft Visual Studio .Net 集成開發環境中運行程序,將自動進行編譯,並將編譯的二進制可執行文件放到bin\Debug子目錄下。此時,需要注意的是要將MyAppConfig.ini、MyApp.resources 和MyApp.zh-CN.resources 這三個文件也復制到bin\Debug\子目錄下,程序才能正常運行。

  程序第一次運行時,是英文界面(見圖2),點擊菜單“中文”,將變成中文界面(見圖3)。單擊按鈕“Exit”,退出程序後,再次運行程序時,直接顯示中文界面。


圖2

圖3

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved