4

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

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

有没有办法创建一个将所有资源文件映射在一起的 .exe。这样我就不需要在运行 .exe 之前将文件夹与 .exe 一起放置。

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

请在这方面提供帮助。

提前致谢。

4

3 回答 3

0

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

介绍到卫星组件

根据定义,附属程序集不包含代码,除了自动生成的代码。因此,它们无法执行,因为它们不在主程序集中。但是,请注意,附属程序集与通常包含默认中性资源(例如,en-US)的主程序集相关联。一个很大的好处是您可以添加对新区域性的支持或替换/更新附属程序集,而无需重新编译或替换应用程序的主程序集。

于 2014-02-24T14:35:59.073 回答
0

解决方案在这里:

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

于 2014-02-24T14:30:17.170 回答
0

我对你正在做什么来解决当前选择的文化问题感到有点困惑。

您是否知道您需要首先设置文化以确保当前使用您想要的文化?所以你需要做这样的事情:

     System.Threading.Thread.CurrentThread.CurrentUICulture = new   System.Globalization.CultureInfo("en-US");
     System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
于 2014-02-24T14:58:31.957 回答