2014-05-14 167 views
1

我的應用程序只有英文版,我想將它切換到多語言版本。但是,不是用戶在區域設置中更改默認語言,而是爲我的應用程序提供了一個名爲langauge的「ToolStripMenuItem」,並添加了阿拉伯語,韓語和英語版的子菜單。用C語言創建一個多語言應用程序#

據我所知,需要三樣東西 - :

  1. 寫在Langauage的click事件的代碼subemenu說「阿拉伯語」
  2. 創建相應的resx文件
  3. 此外,我已成立表單本地化屬性設置爲「真」

這是我加入到我的計劃在Form1的代碼()

//this variable indicates the current language in use 
    CultureInfo CurrentLocale; 

    public Form1() 
    { 
     InitializeComponent(); 
     valueInit(); 
     //MessageBox.Show(rfidCard.PORT + ""); 
    } 


    //Lets start adding the multilingual code here 




    //change the language in real time 
    private void ChangeLanguage(string lang) 
    { 
     CurrentLocale = new CultureInfo(lang); 
     foreach (Control c in this.Controls) 
     { 
      ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1)); 
      resources.ApplyResources(c, "$this"); 
      RefreshResources(this, resources); 
     } 
    } 

    //refresh all the controls e sub-controls of the form 
    private void RefreshResources(Control ctrl, ComponentResourceManager res) 
    { 
     ctrl.SuspendLayout(); 
     res.ApplyResources(ctrl, ctrl.Name, CurrentLocale); 
     foreach (Control control in ctrl.Controls) 
      RefreshResources(control, res); // recursion 
     ctrl.ResumeLayout(false); 
    } 

    private void englishToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     ChangeLanguage("en-US"); 
    } 

    private void arabicToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     ChangeLanguage("ar-SA"); 
    } 

    private void koreanToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     ChangeLanguage("ko-KR"); 
    } 

    // the code ends here 

其次,我增加了一個叫做Form1.ar-SA.resx和RESX文件中,只是用於測試增加了兩兩件事:

$ this.Text = ABC中號البرمجياتتطبيقويب

$ this.Name = Form1中

但是當我運行我的應用程序,並嘗試一下語言阿拉伯語它仍然不會改變anythi ng。

有人可以幫助我找到我錯了什麼或我錯過了什麼?

另外在default.resx我發現了另一列說

$ this.Type = System.Windows.Forms.Form中,System.Windows.Forms的,版本= 2.0.0.0,文化=中性公鑰= b77a5c561934e089

這是否有什麼區別?

編輯1:瀏覽時,我發現我也需要gengeerated一個designer.cs文件cprresponding它。搜索引擎談到安裝一些「RazorGenerator」。我試着從包管理器安裝它,但失敗了。任何燈光請

編輯2:這是我做的。我創建了兩個額外的.resx文件,一個用於韓語,另一個用於阿拉伯語,並嘗試更改形式語言,並且在編碼視圖中它工作得很好。但是仍然有些東西缺失。首先,我仍然無法根據需要單擊工具條語言選項來更改語言。其次,我甚至試圖將我的系統的語言環境更改爲韓語,但應用程序沒有改變。它總是以英文顯示

回答

0

你應該使用system.globalization對於這件事,你沒有創建資源文件,只是改變語言在你的形式,並且開始編輯C#爲你做,但爲什麼它穿上」不會影響?!

,因爲您重置您的應用程序後,C#這樣做,你應該做的是保存你的應用程序狀態數據,並重新啓動應用程序後,與所需的定位重新加載它。如果你不想做,不要用全球化,設置整個UI像一行, Sry基因,在我的國家(我在總線)無法給你確切的代碼,但它是你應該怎麼做,Application.Restart()我覺得還是有些東西通過

+0

接近:謝謝您的建議。這裏就是我所做的。我創建了兩個額外的resx文件,一個用於韓語,另一個用於阿拉伯語,並嘗試改變形式的語言,就像你建議的那樣,它運行得很好。但是仍然有些東西缺失。首先,我仍然無法根據需要單擊工具條語言選項來更改語言。其次,我甚至試圖將我的系統的語言環境更改爲韓語,但應用程序沒有改變。 –

+0

耶,你不能這樣做,如你所願,但對其他的事情我認爲有是告訴你,哪些本地化用戶都有自己的系統上,如果你沒有找到給我留下了味精本地化類,我檢查了今晚,這是1點在這裏,我會在6回...氰 – deadManN

+0

Sry基因頭痛昨晚做了,我不知道,但我認爲這是你應該做開始的代碼:的System.Threading。 thread.CurrentThread.CurrentCalture = system.globalization.CaltureInfo(「en-CA」);我沒有在整本書中找到其他代碼,還有另外一件事情要做,你可以將所有資源存儲在單獨的空項目中,一旦你需要特定的資源,然後加載特定的程序集,但我的自我永遠不會這樣做並沒有簡短的解釋 – deadManN