我有一個WinForms應用程序,我想將其翻譯成多種語言。但是,我沒有任何本地化WinForms應用程序的經驗,並且我發現關於此主題的信息非常矛盾。WinForms應用程序的正確本地化
基本上,我想要的是:
- 在源代碼中,我想每個語言
- 此文件被上編譯編譯到主應用程序只有一個文件 - 沒有衛星組件或外部數據文件構建應用程序
- 用戶可以選擇語言後,我並不需要/想自動檢測基於該操作系統
- 這應該主要包含字符串和整數,但也有CultureInfo的
我見過的大多數解決方案的每個表單和/或外部附屬程序集都有一個.resx文件。
我必須推出自己的?或者框架中是否有某些東西?
.net Framework 3.5 SP1如果有問題。
編輯:大多數情況下,Visual Studio已經提供了我想要的支持,但有兩個問題。當我將Form.Localizable設置爲true時,我有這個不錯的設計器支持,但是這會爲每個表單生成一個resx。在InitializeComponent中手動覆蓋它的想法失敗了,因爲它是由設計師編寫的代碼,它們會被定期覆蓋。理論上,我只想a)重寫ComponentResourceManager的創建,將其指向我的全局resx; b)將調用ApplyResources更改爲以CultureInfo作爲第三個參數的重載。
看起來好像我不得不向我的構造函數添加一個函數調用,它在InitializeComponent()之後調用並覆蓋它的行爲。這似乎非常低效,但Visual Studio正確地警告觸摸InitializeComponent。目前,我的確在推出我自己的WinForms本地化框架...
不是很確定,如果你要求的 '適當的'爲一種「非常習慣」的本地化方式。 – 2009-08-09 11:59:19
「每個表格一個.resx,每個語言和組件的一個衛星組件」有什麼問題?這就是.NET的工作原理 - 如果你不喜歡這樣,恐怕你必須自己推出很多代碼。 – 2009-08-09 12:00:06
錯誤的意思是,「一個.resx per form」(對於所有不是表格的組成部分,至少有一個)成倍增長,而不是線性增長,如果新的/更正的本地化是每個語言一個彙編只是更多的混亂只允許應用程序的新版本。另請參閱http://redsolo.blogspot.com/2006/11/localisation-gone-wrong-in-c.html – 2009-08-09 12:06:58