我的應用程序只有英文版,我想將它切換到多語言版本。但是,不是用戶在區域設置中更改默認語言,而是爲我的應用程序提供了一個名爲langauge的「ToolStripMenuItem」,並添加了阿拉伯語,韓語和英語版的子菜單。用C語言創建一個多語言應用程序#
據我所知,需要三樣東西 - :
- 寫在Langauage的click事件的代碼subemenu說「阿拉伯語」
- 創建相應的resx文件
- 此外,我已成立表單本地化屬性設置爲「真」
這是我加入到我的計劃在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文件,一個用於韓語,另一個用於阿拉伯語,並嘗試更改形式語言,並且在編碼視圖中它工作得很好。但是仍然有些東西缺失。首先,我仍然無法根據需要單擊工具條語言選項來更改語言。其次,我甚至試圖將我的系統的語言環境更改爲韓語,但應用程序沒有改變。它總是以英文顯示
接近:謝謝您的建議。這裏就是我所做的。我創建了兩個額外的resx文件,一個用於韓語,另一個用於阿拉伯語,並嘗試改變形式的語言,就像你建議的那樣,它運行得很好。但是仍然有些東西缺失。首先,我仍然無法根據需要單擊工具條語言選項來更改語言。其次,我甚至試圖將我的系統的語言環境更改爲韓語,但應用程序沒有改變。 –
耶,你不能這樣做,如你所願,但對其他的事情我認爲有是告訴你,哪些本地化用戶都有自己的系統上,如果你沒有找到給我留下了味精本地化類,我檢查了今晚,這是1點在這裏,我會在6回...氰 – deadManN
Sry基因頭痛昨晚做了,我不知道,但我認爲這是你應該做開始的代碼:的System.Threading。 thread.CurrentThread.CurrentCalture = system.globalization.CaltureInfo(「en-CA」);我沒有在整本書中找到其他代碼,還有另外一件事情要做,你可以將所有資源存儲在單獨的空項目中,一旦你需要特定的資源,然後加載特定的程序集,但我的自我永遠不會這樣做並沒有簡短的解釋 – deadManN