中文资源不适用于 .Net 3.5

Chinese resources don't work with .Net 3.5

使用 .Net 3.5 时,我们的中文本地化资源存在一个奇怪的错误。此问题会影响控制台应用程序和 Windows 表单应用程序,并且很容易重现。

基本上没有使用中文资源,而是使用其他资源(例如法语和英语)。此外,如果我们使用 .Net 4.x.

它工作正常

在 Windows 7 和 Windows 10 上出错(我没试过 Windows 8.x,但我预计那也会出错)。

使用控制台应用程序很容易重现:

  1. 创建默认的 .Net 3.5 控制台应用程序。
  2. 添加默认资源文件,"Resources.resx"并向其添加一对name/value:测试,我是英语
  3. 添加一个"Resources.fr.resx"文件并向其中添加一个name/value对:测试,我是法国人
  4. 添加一个"Resources.zh.resx"文件并向其中添加一个name/value对:测试,我是中国人
  5. 将下面的代码添加到 Main() 方法

代码:

System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture;
Console.WriteLine(System.Threading.Thread.CurrentThread.CurrentUICulture);
Console.WriteLine(ConsoleApplication1.Properties.Resources.Test);

(第一行只是为了方便我们可以在非中文系统上测试这段代码。我们可以在 运行ning 在实际的中文系统上删除该行,因为 CurrentUICulture 语言环境正在不用修改就已经是中文了-错误仍然存​​在。)

在控制面板中 |区域,将格式更改为英语(美国)和运行程序。输出将是:

en-US
I'm English

现在将区域格式更改为 French(法国) 和 运行 程序。输出将是:

fr-FR
I'm French

现在将区域格式更改为中文(简体,中国)和运行程序。输出将是:

zh-CN
I'm English

请注意,它不起作用。

现在更改项目属性以构建 .Net 4 或更高版本,不更改任何其他内容,然后重新 运行 它。现在输出是:

zh-CN
I'm Chinese

所以它适用于 .Net 4!

我的问题是:

感谢 Hans 的评论(这是正确的答案)我现在有了完整的答案。

似乎在 .Net 3.5 中,"zh" 未被识别为中性的中国文化。

在 .Net 4.x 中,"zh" 被认为是中性的中国文化。

我们通过比较the .Net 3.5 documentation for CultureInfo.IsNeutralCulture with the .Net 4.0 documentation就可以看出区别了。

.Net 3.5 文档列出了以下中性和特定资源名称:

zh-CHS Chinese (Simplified)                    : neutral
zh-TW  Chinese (Taiwan)                        : specific
zh-CN  Chinese (People's Republic of China)    : specific
zh-HK  Chinese (Hong Kong S.A.R.)              : specific
zh-SG  Chinese (Singapore)                     : specific
zh-MO  Chinese (Macao S.A.R.)                  : specific
zh-CHT Chinese (Traditional)                   : neutral

.Net 4.0 文档更改为:

zh-Hans Chinese (Simplified)                    : neutral
zh-TW   Chinese (Traditional, Taiwan)           : specific
zh-CN   Chinese (Simplified, PRC)               : specific
zh-HK   Chinese (Traditional, Hong Kong S.A.R.) : specific
zh-SG   Chinese (Simplified, Singapore)         : specific
zh-MO   Chinese (Traditional, Macao S.A.R.)     : specific
zh      Chinese                                 : neutral
zh-Hant Chinese (Traditional)                   : neutral
zh-CHS  Chinese (Simplified) Legacy             : neutral
zh-CHT  Chinese (Traditional) Legacy            : neutral

我们可以看到.Net 4.0已经获得了"zh"中性的中国文化。

所以这不是 .Net 3.5 中的错误,而是记录在案的功能。

如果你需要同时兼容.Net 3.5和.Net 4.x 看来你需要使用"zh-CHS"(简体中文),虽然不清楚这是否会无限期地继续工作。