2014-02-24 84 views
4

我創建了一個簡單的控制檯應用程序來顯示「Hello World」字符串。後來我帶來了資源文件來支持不同的語言,並把翻譯版本的「Hello World」。我嘗試在中文操作系統中運行console.exe,並希望看到「Hello World」以中文顯示。不幸的是它顯示英文。本地化支持C#控制檯應用程序

經過分析,發現添加.resx文件在項目中創建了一個單獨的文件夾,每種語言都有.resource dll(sattellite assembly)。因此,如果我將.exe與其他文件夾一起放置並運行,那麼中文顯示「Hello World」。如果我刪除文件夾(.resource),然後只運行.exe,那麼它會再次以英文顯示「Hello World」。

有沒有一種方法可以將所有資源文件映射在一起創建.exe。因此,在運行.exe之前,我不需要將這些文件夾與.exe一起放置。

順便說一下,我試圖訪問字符串使用Strings.STRING_NAME其中「字符串」是默認資源文件的名稱。其他語言的字符串文件的類型爲Strings.fr.resx,Strings.de.resx。

請在這方面的幫助。

在此先感謝。

+0

這似乎已經解決方案:http://stackoverflow.com/questions/1453755/how-to-embed-a-satellite-assembly-into-the- exe文件 – Knerd

+0

我很好奇。這意味着什麼問題要解決?將所有的程序集編譯到一個文件中會帶來什麼好處? – Gusdor

+0

嗨Gusdor,主要問題是在遠程機器上部署一個單獨的.exe文件,該文件可以顯示本地化的消息。 – user3220129

回答

0

解決辦法是在這裏:

https://stackoverflow.com/a/1955060/1028323(單組裝的多語言的Windows Forms部署(ILMerge和衛星組件/本地化) - 可能嗎?)

+0

謝謝盧卡斯。是的,它已根據您的建議進行配置。 – user3220129

+0

我改變了我的回答 –

0

這些額外的組件被稱爲Satellte assemblies。它們保持獨立,因此如果只需要一些語言,則不必部署所有語言。

Introduction to Satellite Assemblies;

根據定義,衛星組件不包含代碼,但自動生成的 除外。因此,它們不能作爲 執行,它們不在主組件中。但是請注意,衛星 組件與通常包含 默認中性資源(例如en-US)的主組件相關聯。一個很大的好處是,您可以添加對新文化的支持,或者替換/更新衛星 組件,而無需重新編譯或替換應用程序的主要組件 。

0

我對你在做什麼來解決當前選擇的文化問題有點困惑。

您是否知道您需要首先設定文化,以確保您想要的文化正在使用? 所以,你需要做這樣的事情:

 System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US"); 
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 
+0

嗨,感謝您的建議。我會盡力讓你在這方面的結果。 – user3220129