2012-01-09 25 views
6

我發現了一些類似的主題,但我沒有得到我正在尋找的答案。啓動時加載所有本地化資源

我只是在開始「更嚴肅」(WinForms)項目之前嘗試國際化。因此,目前在我的小測試應用程序中,我使用附屬程序集(語言dll文件)解決了本地化問題,並使用ResourceManager填充了控件的文本字段,並通過Thread.CurrentThread.CurrentCulture &解決了Thread.CurrentThread。 CurrentUICulture方法。

CultureInfo ci = new CultureInfo(lang); 
Thread.CurrentThread.CurrentCulture = ci; 
Thread.CurrentThread.CurrentUICulture = ci; 

this.button1.Text = Resources.LocTest.String1; 

我想加載從資源的所有文字上的程序初始啓動,不僅是主要形式,但所有的人(也對這些形式,不是實例還)! 我怎麼能實現這個?這個程序是否可行?

我得到了一些建議,我應該簡化整個本地化過程,將「localizable」屬性設置爲true並完成翻譯。 而大多數教程都遵循這種方式。

有沒有人有任何想法,我應該使用哪種方法?

在此先感謝!

我很困惑與本地化...

+1

基本上,你應該始終遵循最佳做法,不要試圖重新發明輪子(有多無聊)。因此,使用標準方法是一個好主意,即將Localizable切換爲true,並讓Visual Studio關注創建資源管理器和其他內容。你也**不應**分配線程文化,應該自動分配,否則內置的回退機制將無法工作。 – 2012-01-09 08:51:24

+1

至於加載資源,一切皆有可能。唯一的問題是爲什麼你想在世界上這樣做? – 2012-01-09 08:52:22

+0

感謝您的回答!我知道你寫了(「不要試圖重新發明輪子」)!我嘗試遵循最佳做法。實際上,我想要使用此資源DLL版本的唯一原因,該用戶必須重新啓動應用程序時更改語言... – 2012-01-10 11:30:28

回答

2

請使用你提到的第二種方法。

我得到了一些建議,我應該簡化整個本地化過程,將「localizable」屬性設置爲true並完成翻譯。大多數教程都遵循這種方式。

因爲這是微軟如何認爲本地化應該在winforms應用程序中完成的預期方式。 http://msdn.microsoft.com/en-us/library/y99d1cd3%28v=vs.90%29.aspx

您的第一個解決方案的一個問題:您如何確保其他語言的文本能夠正確顯示?
這是Microsoft發現的其中一個問題。在SDK中找到一個名爲WINRES.exe的小工具,您可以看到設計好的表格併爲它們編寫翻譯。 http://msdn.microsoft.com/en-us/library/8bxdx003%28v=vs.90%29.aspx

如果你想改變運行時的語言和更新各種形式的這篇文章也許對你一個提示:http://msdn.microsoft.com/en-us/magazine/cc163609.aspx#S9
下面的幾行給出了一個解釋如何更新你的UI:

Dim crm As ComponentResourceManager 
crm = New ComponentResourceManager(GetType(Main)) 
crm.ApplyResources(cmdAddCustomer, cmdAddCustomer.Name) 
crm.ApplyResources(mnuFile, mnuFile.Name) 
crm.ApplyResources(mnuFileAddCustomer, mnuFileAddCustomer.Name) 

最後這個代碼的3行可以在設計器文件中的每個表單中找到(localizable = true)。
因此,您可以指定一個更新方法的接口,每個表單都應該實現該接口,實現該接口並在語言更改後遍歷所有表單並調用這些方法。

希望這可以幫助你......