Winform 多國語言表單的設計以及.NET中資源檔的使用

來源:互聯網
上載者:User
Winform中多國語言表單的設計以及.NET中資源檔的使用

    最近在做一些多國語言的軟體,就學習了一下.NET中的多國語言相應知識,受益不少,下面我就簡單介紹一下winform中關於多國語言的實現方法。分為七個部分來講: 資源檔概述資源檔的分類資源檔的建立、利用 IDE 來製作多國語言版本、利用資源檔來做多國語言版本、常用 .NET 資源檔產生器的使用總結這七個部分。前兩個部分都是一些理論性的東西,如果大家不感興趣可以跳過,直接看三、四、五這三個部分。 第一部分: 資源檔概述    資源檔顧名思義就是存放資源的檔案。資源檔在程式設計中有著自身獨特的優勢,他獨立於來源程式,這樣資源檔就可以被多個程式使用。同時在程式設計的時候,有時出於安全或者其它方面因素的考慮,把重要東西存放在資源檔中,也可以達到保密、安全的效果。    資源檔中一般存三種類型的資料:byte流(byte[])、對象(object)和字串(string)。對於一些純檔案的資訊可以用string類型來儲存,對於圖片(Image)、表徵圖(Icon)等用object來儲存,其它的可以用byte流來儲存。System.Resources命名空間中有大量的類和方法來處理資源檔,我將在下面的篇章中進行介紹。  第二部分: 資源檔的分類    資源檔可以分為兩類,一類是以.resx為尾碼名的檔案,一類是以.resources為尾碼名的檔案。二者的區別在於:1.    resx雖然是以resx結尾的檔案,但是它卻是XML格式的檔案,你可以用記事本等工具直接開啟它修改裡面的東西;而resources是二進位的檔案,相對來說安全性更好一些。2.    resources作為內嵌資源,在指定路徑正確的前提下,可以在程式中直接引用;而resx雖然也是內嵌資源,但它卻是要依附於.CS檔案存在的。也就是說它是作為winform表單的一個描述性資源存在的,要想在程式中直接使用它,在解決方案中必須有與它同名(只是名字相同,尾碼名不同)的.CS檔案存在(見圖一)。這一點我會在下面的樣本中作詳細說明。3.    我們可以利用CSC命令把resx檔案轉換成resources檔案。   RESGEN.EXE LitwareStrings.resx LitwareStrings.resources   注意變數環境為framework1.1。 第三部分: 資源檔的建立     這裡我介紹兩種資源檔的建立方法,一個是利用System.Resources下的ResourceWriter類,另一個是利用資源檔產生器。本節重點講利用ResourceWriter類來建立資源檔的方法,第二個方法請詳見第六部分。    首先要執行個體化一個ResourceWriter類型的變數:ResourceWriter rw = new ResourceWriter ( "My.resources" ) ;其中My.resources就是你要產生的檔案名稱。其次要在磁碟上產生這個檔案:調用rw.Generate ( ) ;就可以了。接下來就要為這個資源檔來增加內容了。在ResourceWriter類中提供了一個AddResource ( )方法,這個方法的作用就是往資源檔中添加資源的。在C#中對不同的資源有著不同的加入方式。1.加入位元組數組,文法格式為:
public void AddResource ( string , byte [ ] ) ;
注釋:其中string是在使用資源檔的時候,此位元組數組在程式中的的唯一識別碼 2. 加入對象,文法格式為:
public void AddResource ( string , object );
注釋:其中string是在使用資源檔的時候,此對象在程式中的唯一識別碼在本文程式中,我們利用這種調用方式來加入表徵圖和圖象,具體如下:
Icon ico = new Icon ( "main.ico" ) ;
Image Turnoff = Image.FromFile ("Turn-off.png") ;
Image Turnon = Image.FromFile ( " Turn -on.png" ) ;
rw.AddResource ( " main.ico" , ico ) ;//在資源檔中加入表徵圖
//以下是在資源檔中加入圖象
rw.AddResource ( " Turn -off.png" , Turnoff ) ;
rw.AddResource ( " Turn -on.png" , Turnlon ) ;
 3. 加入字串,具體文法如下:
public void AddResource ( string1 , string2) ;注釋:其中string1是在使用資源檔的時候,此字串在程式中的唯一識別碼在本文的程式中,是如此使用的:
rw.AddResource ( "MyStr" , "從資源檔中讀取字串" );
 至此我們已經建立了一個資源檔,並且在資源檔中加入了若干個資源,當然在這之後,還應該注意,儲存此資源檔,並關閉資源檔,具體如下:
rw.Close ( ) ;
     以上我介紹了用ResourceWrite類來建立resources檔案的方法,對於resx檔案,我們可以在vs2003的IDE中在解決方案管理中點右鍵->添加新項目中->控制項資源檔來添加。 第四部分: 利用 IDE 來製作多國語言版本     終於進入主題了,但是這一節的內容和前幾節關係不大,因為我主要講如何使用VS的IDE來製作多國語言版本。每一個Form1.cs檔案都有一或多個相應的resx檔案作為附屬資源。他們的命名規則為Form1.cs的資源檔為Form1.resx,Form1.zh-CHS.resx,Form1.zh-CHT.resx等,其中Form1.resx是預設的表單資來源文件,其它是在不同語言環境要使用的資來源文件,其中Form1.zh-CHS.resx是中文簡體系統,Form1.zh-CHT.resx是中文繁體系統(如一)。關於命名可不是隨便起的,可以參見msdn中關於不同地區的命名規則。(圖一)每一個表單都有Localizable和Language這兩個屬性,其預設值如:(圖二)Localizable表示是否使用本地化資源,當其為true時,可以在Language中選擇一種語種,例如選繁體中文,如:(圖三)這時,表單的布局會發現變化,你要重新布局表單上的控制項位置、大小、內容等等。布局好以後,你可以繼續選擇其它的語種來布局。不用擔心,它們之間不會有衝突,因為所有不同語種之間的布局差別都被儲存到相應的resx檔案中了,一。最後儲存、編譯。    為了測試結果,我們可以改變機器的語言環境,方法有二:一是在控制項面板中的更改語言選項。另一個是用程式來改。下面我介紹一下第二種方法,用程式來改變當前進程的語言環境。    在程式運行時,會自動檢測當前的系統語言環境,我們可以通過修改System.Threading.Thread.CurrentThread.CurrentUICulture這個屬性來改變當前UI啟動並執行語言環境,代碼如下:static void Main(){        System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo( "zh-CHS" );        Application.Run(new Form1());}如下:(圖四)更改System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo( "zh-CHT" );後,效果如下:(圖五) 第五部分: 利用資源檔來做多國語言版本     在第三節我們已經說過如何利用ResourceWriter類來建立資源檔,本節就講講怎麼來使用這些資源檔。利用第三節介紹的方法分別建立三個檔案MyResource.resources、MyResourceZH_TW.resources和MyResourceEn.resources分別對應預設、繁體和英文三個系統。每個檔案中有兩個string和一個object對象,分別對應button,textbox和Icon。圖四、圖五中的language的功能表列對應代碼如下:private void English_Click(object sender, System.EventArgs e){        ResourceManager rm = new ResourceManager( "EmbedResource.MyResourceEn" , Assembly.GetExecutingAssembly() );        textBox1.Text = rm.GetString( "TextBoxValue" );        button1.Text = rm.GetString( "ButtonValue" );        this.Icon = (Icon)rm.GetObject( "Demo.ico" );} private void ChineseTraditional_Click(object sender, System.EventArgs e){        ResourceManager rm = new ResourceManager( "EmbedResource.MyResourceZH_TW" , Assembly.GetExecutingAssembly() );        textBox1.Text = rm.GetString( "TextBoxValue" );        button1.Text = rm.GetString( "ButtonValue" );        this.Icon = (Icon)rm.GetObject( "Demo.ico" );}如下:     在第二部分中,我說過resx和resources調用的方法不同,下面我再說說resx檔案如何來調用。由於resx是cs檔案的附屬文檔案,所以項目中一定要有同名的cs檔案存在。一。調用resx使用如下代碼:ResourceManager rm = new ResourceManager( "EmbedResource.Form1" ,     Assembly.GetAssembly(typeof(EmbedResource.Form1)));textBox1.Text = rm.GetObject( "textBox1.Visible" ).ToString();其中EmbedResource是namespace,Form1為資源檔名(不包含尾碼名),第二個參數Assembly.GetAssembly(typeof(EmbedResource.Form1))中EmbedResource是namespace,而Form1是resx附屬的cs檔案的名稱。注意區分。 第六部分: 常用 .NET 資源檔產生器的使用     在網上相關的軟體已經很多了,我給大家介紹一個Resourcer.exe,它是開源的,可以在http://www.aisto.com/roeder/dotnet/ 中下載。其運行介面如下:    該軟體可以自動儲存成text、resx和resources三種格式的檔案。前面的資源可以很方便的使用此軟體來建立。大家可以自己下載下來試試。我在這裡就不多說了。 第七部分: 總結    通過上面的介紹我們已經具備了製作多國語言的基礎,當然這隻是對多國語言製作的初步介紹。有什麼不妥的地方,請在評論中指正,我會儘快改過來的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.