c# 程序多語言切換嘗試

劃重點:在網上查了很多資料,一個很重要的點基本上沒有人提出來,要使用.net4.0及以上啊。。。否則都是扯淡。

代碼還是那個代碼,.net4.0以下根本就不起作用。

1. 學習過程:修改窗口的localizable=true; Language=你要添加的語言。VS會幫我們自動添加一個對應的語言資源文件。

這時候修改窗體的text爲繁體,打開Fom1.zh_TW.resx, 會發現裏面有一條 名稱和值的對應信息:$this.Text: 測試窗口。
 

查看構造函數:           

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
resources.ApplyResources(this, "$this");  

原先的this.Text='測試窗口',變成了resources.ApplyResources(this, "$this");  

這個是一個很合理的邏輯,我在開始查資料,知道會形成多個資源文件的時候,就想應該是存在一種快速切換資源的做法。

網上的很多代碼是這樣的:

        public Form_實驗管理()
        {
            InitializeComponent();
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");

            ApplyResource();  //修改控件的語言顯示
        }

        private void ApplyResource()
        {
            System.ComponentModel.ComponentResourceManager res = new ComponentResourceManager(typeof(Form_實驗管理));
            foreach (Control ctl in Controls)
            {

                res.ApplyResources(ctl, ctl.Name);
            }
            this.ResumeLayout(false);
            this.PerformLayout();
            res.ApplyResources(this, "$this");
        }

這個我隱隱覺得不對勁,還需要自己每個窗口去寫循環?但是因爲一開始我用的.net2.0, 上面的方法不起作用,我以爲是我沒弄對,後來使用下面代碼的時候也不起作用,我就覺得應該要使用更高版本的框架,改爲.net4.0後,生效了。

兩種方法都生效,但是上面這個代碼明顯比較繁瑣。

反覆強調:在網上看到使用高版本特性的方法說明時不帶版本,或者不帶引用,這點很討厭,自己也要注意這點。

2.  實際使用:這個方法很簡單,直接讓.net自己去加載對應的語言資源文件就好了。

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-TW");

這句話放在哪裏呢,我需要整個程序都切換語言,通過配置文件一開始就設定好語言,不需要隨時切換語言,所以我放在了登錄窗口的load事件裏面。   

        private void Login_Load(object sender, EventArgs e)
        {
            string lan = "";
            if (MConfig.Language == "臺灣繁體")
            {
                lan = "zh-TW";

            }
            if (MConfig.Language == "UsEnglish")
            {
                lan = "en-US";
            }
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lan);

        }

3. 翻譯工作:一個程序有幾十個窗口,幾百幾千個控件,如何快速的完成其他語言錄入工作?

3.1 每一個窗口名稱,控件名稱都要有對應語言的翻譯,然後要加入到資源文件。如果我們在可視化界面上一個個控件進行修改,要有個翻譯坐在旁邊,不斷的翻譯,然後我們錄入,工作量龐大,效率低。

打開資源文件看了下。原始的resx是這樣的

可以清楚的看到,排除帶>>符號的,剩下的就是窗口和的控件Text,或者自定義的字段。

在界面上將英文的窗口text改爲Test,查看en-Us.resx的內容,發現裏面的內容是這樣的。

從原始resx裏面複製button1.Text到en-Us並修改值爲按鈕1button,運行結果顯示成功。

 

3.2 於是將form1.resx的文件內容複製到excel,去除帶>>的,發給翻譯,讓翻譯對照軟件窗口,將對應的值全部改成對應的語言,完成後我們從excel直接複製到對應的資源文件中,工作就完成了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章