C#控制台应用程序的本地化支持

时间:2014-02-24 14:23:41

标签: c# .net satellite-assembly

我创建了一个简单的控制台应用程序来显示“Hello World”字符串。后来我引入了资源文件来支持不同的语言,并将翻译版本的“Hello World”。我尝试在中文操作系统中运行console.exe,并希望看到“Hello World”以中文显示。不幸的是它显示英语。

经过分析,发现添加.resx文件会在项目中为每种语言(sattellite程序集)创建一个单独的文件夹,其中包含.resource dll。因此,如果我将.exe与其他文件夹一起运行,那么“Hello World”将以中文显示。如果我删除文件夹(.resource)然后只运行.exe,那么它再次以英文显示“Hello World”。

有没有办法创建一个包含所有资源文件的.exe。因此,在运行.exe。

之前,我不需要将文件夹与.exe一起放置

顺便说一句,我正在尝试使用Strings.STRING_NAME访问字符串,其中“Strings”是默认资源文件的名称。其他语言的字符串文件的类型为Strings.fr.resx,Strings.de.resx。

请在这方面提供帮助。

提前致谢。

3 个答案:

答案 0 :(得分:0)

解决方案在这里:

https://stackoverflow.com/a/1955060/1028323(单组装多语言Windows Forms部署(ILMerge和附属程序集/本地化) - 可能吗?)

答案 1 :(得分:0)

这些额外的程序集称为Satellte assemblies。它们是分开的,因此如果您只需要一些语言,则不必部署所有语言。

来自Introduction to Satellite Assemblies;

  

根据定义,附属程序集不包含代码,除了   那是自动生成的。因此,它们不能被执行   他们不在主会场。但请注意卫星   程序集与通常包含的主程序集相关联   默认中性资源(例如,en-US)。一个很大的好处就是   您可以添加对新文化的支持或替换/更新卫星   程序集无需重新编译或替换应用程序的主要部分   组装

答案 2 :(得分:0)

我对你正在做的事情有点困惑,以解决当前所选文化的问题。

你是否意识到你需要首先确定文化,确保你想拥有的文化目前正在使用? 所以你需要做这样的事情:

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