未正确设置/检测.NET应用程序语言

时间:2016-09-20 21:09:29

标签: c# .net cultureinfo

我有一个用C#编写的应用程序,我用几种不同的语言翻译过。到目前为止,它已经正确地从操作系统的UI文化中检测语言并以该语言显示所有菜单(等)。

然而,最近我重新编译了应用程序(在语言/文化领域没有显着变化之后),尽管CurrentUICulture明显是其他东西(例如,fr),但它似乎总是默认为英语。我无法确定导致问题的原因。如果我明确地设置了这样的文化(在主窗体的构造函数中),一切都有效:

// Explicitly set UICulture, even though it's already fr-FR
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");

有谁知道发生了什么事?我认为它可能是Visual Studio的一个问题,但我试图重新编译VS2013和& 2015年也有同样的问题。

感谢。

编辑:附加信息:这是一个WinForms桌面应用程序,目前面向.NET v3.5框架。在Windows 10下已经观察到这种行为(可能最近有一次Win10更新导致了这种情况吗?)

2 个答案:

答案 0 :(得分:1)

我终于找到了问题并解决了问题。我正在从MSBUILD创建一个版本,看起来这个问题是由于未明确定位特定的框架版本(在我的情况下为v3.5)。这意味着应用程序是在v3.5中构建的,卫星程序集是在v4.0中生成的(不确定为什么会有差异)。这导致它们无法正确加载。 (顺便提一下,当应用程序使用相同的解决方案文件在VS IDE中构建时,应用程序运行正常。)

解决方案是明确地定位框架(在我的情况下使用msbuild /tv:3.5开关)并确保所有生成的语言程序集都在相同的框架版本中。如果不这样做,则意味着不会加载语言,而是使用默认语言。

答案 1 :(得分:0)

我会在黑暗中拍摄这张照片。

您最近是否为应用程序添加了异步编程?如果是这样,请检查您所使用的框架的版本,因为在生成的线程上可能没有保留文化。我相信最新版本可以支持这一点,但我还没有亲自验证过。