. net应用程序语言没有正确设置/检测

本文关键字:设置 检测 应用 程序语言 net | 更新日期: 2023-09-27 18:08:11

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

最近,然而,我重新编译了这个应用程序(在语言/文化领域没有明显的变化之后),它似乎总是默认为英语,尽管currentuicculture显然是别的东西(例如,fr)。我想不出是什么引起了这个问题。如果我像这样显式地设置区域性(在主表单的构造函数中),则一切正常:

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

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

谢谢。

编辑:附加信息:这是一个WinForms桌面应用程序,目前针对。net v3.5框架。该行为在Windows 10中已经被观察到(可能是最近的Win10更新导致的,也许?)

. net应用程序语言没有正确设置/检测

我终于找到了问题并修复了。我正在从MSBUILD创建一个构建,似乎这个问题是没有明确针对特定框架版本(在我的情况下是v3.5)的结果。这意味着应用程序是在v3.5中构建的,而附属组件是在v4.0中生成的(不确定为什么会有差异)。这导致它们不能正确加载。(顺便说一下,当应用程序在VS IDE中使用相同的解决方案文件构建时,它工作得很好。)

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

我要在黑暗中尝试一下。

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