回答
- 添加資源文件到您的項目通過執行以下操作(可以稱之爲「strings.resx」):在項目
右鍵單擊屬性,選擇添加 - >新項...在上下文菜單中,然後在列表中的Visual C#項目選擇「資源文件」並將其命名爲strings.resx
。 - 添加一個字符串種源在RESX文件,並給它一個好聽的名字(例如:其命名爲「你好」用,並給它的價值「你好」)
- 保存資源文件(注:這將是在默認資源文件,因爲它不具備的兩個字母的語言代碼)
- 添加引用您的程序:
System.Threading
和System.Globalization
運行這段代碼:
Console.WriteLine(Properties.strings.Hello);
它應該打印「你好」。
現在,添加一個名爲「strings.fr.resx」的新資源文件(注意「fr」部分;這將包含法語資源)。添加一個字符串資源,其名稱與strings.resx中的名稱相同,但其值爲法文(Name =「Hello」,Value =「Salut」)。現在,如果你運行下面的代碼,它應該打印薩呂:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
Console.WriteLine(Properties.strings.Hello);
什麼情況是,該系統將查找的「FR-FR」的資源。它不會找到一個(因爲我們在你的文件中指定了「fr」),它將回退到檢查它找到(並使用)的「fr」。
以下代碼將打印「Hello 「:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
Console.WriteLine(Properties.strings.Hello);
那是因爲它沒有找到任何‘EN-US’資源,也沒有‘EN’的資源,所以它會回落到默認,這是我們從添加的一個開始
如果需要,您可以創建具有更多特定資源的文件(例如分別爲法國和加拿大的法語的strings.fr-FR.resx和strings.fr-CA.resx)。在每個這樣的文件中,您將需要至爲那些與它將回退的資源不同的字符串添加資源。因此,如果法國和加拿大的文本相同,則可以將其放入strings.fr.resx中,而加拿大法語中不同的字符串可以放入strings.fr-CA.resx中。
這其實很簡單。創建一個新的資源文件,例如Strings.resx
。將Access Modifier
設置爲Public
。使用apprioriate文件模板,Visual Studio將自動生成一個訪問器類(在這種情況下,名稱將爲Strings
)。這是您的默認語言。
現在,當您想要添加德語本地化時,請添加本地化的resx文件。在這種情況下,這通常是Strings.de.resx
。如果您想爲奧地利添加其他本地化功能,您還需要創建一個Strings.de-AT.resx
。
現在去創建一個字符串 - 讓我們說一個名字爲HelloWorld
的字符串。在您的Strings.resx
中,添加值爲「Hello,world!」的此字符串。在Strings.de.resx
中,添加「Hallo,Welt!」。並在Strings.de-AT.resx
中添加「Servus,Welt!」。這是迄今爲止。
現在您已生成Strings
類,並且它具有一個屬性,其中包含getter HelloWorld
。獲得這個屬性將加載「Servus,Welt!」當你的語言環境是de-AT時,「當你的語言環境是其他語言環境(包括de-DE和de-CH)時,Hallo,Welt!和當你的語言環境是其他任何東西時,」Hello,World!在本地化版本中缺失,資源管理器會自動從最專業的資源向不變的資源鏈走,
您可以使用ResourceManager
類來更多地控制您正在加載的東西的類型。生成的Strings
類
F.Mörk給出了很好的答案但是如果你想更新翻譯,或者在應用程序發佈後添加新的語言,那麼你就會陷入困境,因爲你總是需要重新編譯才能生成資源.dll。
以下是手動編譯資源DLL的解決方案。它使用resgen.exe和al.exe工具(與sdk一起安裝)。
假設你有一個Strings.fr.resx資源文件,您可以編輯資源DLL與以下批處理:
resgen.exe /compile Strings.fr.resx,WpfRibbonApplication1.Strings.fr.resources
Al.exe /t:lib /embed:WpfRibbonApplication1.Strings.fr.resources /culture:"fr" /out:"WpfRibbonApplication1.resources.dll"
del WpfRibbonApplication1.Strings.fr.resources
pause
一定要保持原有的命名空間中的文件名(這裏是「WpfRibbonApplication1」 )
此外@Fredrik莫克對字符串偉大的答案,以本地化添加到表單做到以下幾點:
- 套裝在形式的財產
"Localizable"
到true
- 形式的
Language
屬性更改爲所需的語言(從與他們都在一個不錯的下拉) - 翻譯的控件在形式和移動他們關於是否需要(將那些真正長的法語句子壓扁!)
這個MSDN article on Localizing Windows Forms給出了一些更多的信息。
除了@Eric博樂Feysot答案:
由於衛星組件,定位可以基於.DLL/.EXE文件被創建。通過這種方式:
- 源代碼(VS項目)可以從語言項目中分離出來,
- 添加新的語言並不需要重新編譯項目,
- 翻譯,可以由最終用戶甚至提出。
有一個叫LSACreator一個鮮爲人知的工具(免費的非商業用途或購買選項),它允許您根據的.dll/.exe文件創建本地化。實際上,在內部(在語言項目的目錄中),它創建/管理resx文件的本地化版本,並以與所描述的類似方式編譯程序集。
在我的情況
[assembly: System.Resources.NeutralResourcesLanguage("ru-RU")]
在AssemblyInfo.cs中
防止事情照常上班。
修復和闡述@FredrikMörk答案。
- 一個
Strings.resx
資源文件添加到您的項目(或一個不同的文件名) - 設置
Access Modifier
到Public
(在打開Strings.resx
文件選項卡) - 在RESX文件添加一個字符串種源(例如:命名
Hello
,價值Hello
) - 保存資源文件
的Visual Studio自動生成分別是Strings
班,其實際上放在Strings.Designer.cs
。類是,你會期望一個新創建的.cs
文件被放置在同一個命名空間
該代碼始終打印Hello
,因爲這是默認的資源並沒有具體語言資源可供選擇:
Console.WriteLine(Strings.Hello);
現在添加一個新的特定語言的資源:
- 添加
Strings.fr.resx
(法國) - 添加一個字符串名稱相同的預viously,但不同的價值:(名
Hello
,價值Salut
)
下面的代碼打印Salut
:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
Console.WriteLine(Strings.Hello);
使用何種資源依賴於Thread.CurrentThread.CurrentUICulture
。它根據Windows UI語言設置進行設置,或者可以像本例中那樣手動設置。詳細瞭解here。
您可以添加特定於國家/地區的資源,如Strings.fr-FR.resx
或Strings.fr-CA.resx
。
使用這個優先順序確定字串:
- 從具體國家的資源像
Strings.fr-CA.resx
- 從具體語言的資源像
Strings.fr.resx
- 從默認
Strings.resx
請注意,語言特定的資源會生成satellite assemblies。
另外瞭解CurrentCulture
與CurrentUICulture
here的區別。
- 1. 如何在RubyMotion中使用本地化?
- 2. 如何使用本地化
- 3. 如何使用WPF本地化擴展本地化資源?
- 4. 如何使用本地化器本地化asp動作
- 5. C#本地化
- 6. 如何使用%d來本地化stringWithFormat?
- 7. 如何使用的DateTimePicker ASP.NET本地化
- 8. 如何使用Appcelerator進行本地化?
- 9. C#本地化在線
- 10. C#:如何使用類型轉換器來本地化枚舉
- 11. C#/ .Net TryValidateObject - 如何本地化?
- 12. Smarty本地化標籤 - 如何在PHP中使用?使用Smarty的本地化,以獲得語言
- 13. 如何使Rails 3路由器使用本地化文件來本地化URL?
- 14. 在PCL中使用本地化
- 15. 在FormPanel中使用formLabel本地化
- 16. 使用FireFox在asp.net 4.0中本地化
- 17. 在庫中使用本地化文件
- 18. 在cakephp中使用本地化
- 19. C#文化:本地化DayOfWeek?
- 20. Borland C++本地化
- 21. UWP C#本地化
- 22. Windows8 - 在C#中使用本地化的字符串
- 23. 如何在Java中使用本地化時顯示全年?
- 24. 如何在ASP.NET MVC2中使用和/或本地化DisplayAttribute?
- 25. 如何使用Zend路由器在URL中添加本地化
- 26. 如何在共享項目中使用本地化? Xamarin.Forms
- 27. 如何在Middleman中使用Haml的本地化(i18n)
- 28. 在Spring中如何使用JSP進行本地化?
- 29. 如何在iOS中使用本地化語言更改xib
- 30. 如何在MVCSiteMap中使用隱式本地化?
答案可以引用Visual Studio在這裏完成的「幕後」管道:resx.designer.cs文件,使智能感知工作;用類庫編譯的衛星程序集,需要與編譯後的程序集以及任何後來使用它的項目一起進行部署......答案很好,很簡單,但它無法解釋事情可能出錯的地方,例如,如果你不使用Visual Studio。 – Tao 2010-01-05 13:48:51
+1發表!不要手動創建文件,請嘗試使用Zeta資源編輯器(http://www.zeta-resource-editor.com/index.html)。它是免費的,並且可以幫助你做這些翻譯比在VS中快得多。 – Killnine 2012-09-14 13:52:17