我创建了一个简单的控制台应用程序来显示“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。
请在这方面提供帮助。
提前致谢。
答案 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");