Winforms 如何在WinForm app中尊重/继承用户的语言设置?

Winforms 如何在WinForm app中尊重/继承用户的语言设置?,winforms,globalization,nlp,currentculture,Winforms,Globalization,Nlp,Currentculture,我以前使用过全球化设置,但没有在.NET环境中使用过,这正是本问题的主题。我所看到的肯定是由于我还没有学习到的知识,所以我将感谢以下方面的启发 设置: 我的默认语言设置是English en us。我在我的开发系统WinXP上添加了第二种语言丹麦语,然后打开语言栏,这样我可以随意选择其中一种 我在语言栏上选择了丹麦语,然后打开记事本,发现语言栏上的语言恢复为英语。我知道语言设置是针对每个应用程序的,所以记事本似乎将默认设置恢复为英语。我发现这很奇怪,因为世界各地都在使用Windows和记事本。关

我以前使用过全球化设置,但没有在.NET环境中使用过,这正是本问题的主题。我所看到的肯定是由于我还没有学习到的知识,所以我将感谢以下方面的启发

设置: 我的默认语言设置是English en us。我在我的开发系统WinXP上添加了第二种语言丹麦语,然后打开语言栏,这样我可以随意选择其中一种

我在语言栏上选择了丹麦语,然后打开记事本,发现语言栏上的语言恢复为英语。我知道语言设置是针对每个应用程序的,所以记事本似乎将默认设置恢复为英语。我发现这很奇怪,因为世界各地都在使用Windows和记事本。关闭记事本将语言栏上的设置返回为丹麦语。然后,我启动了我的开放式自定义WinForm应用程序,我知道它没有设置语言,并且在打开时它也从英语恢复为丹麦语,然后在终止时返回丹麦语

问题1A:如何让WinForm应用程序在启动时继承语言栏的当前设置?我的实验似乎表明,每个应用程序都以系统默认值启动,并要求用户在应用程序运行后手动更改。这似乎给想要使用多种语言的人带来了极大的不便

问题1B:事实上,如果必须在多语言场景中手动设置语言,我如何将默认系统语言更改为丹麦语,以便用另一种语言测试我的应用程序的启动

为了下一个实验,我在应用程序中添加了当前语言的显示。具体地说,我在标签上设置了一个MouseEnter处理程序,该处理程序将其工具提示设置为CultureInfo.CurrentCulture.Name,因此每次鼠标悬停时,我都认为应该看到当前的语言设置。由于在我启动应用程序之前设置语言不起作用,我启动了应用程序,然后将语言设置为丹麦语。我发现有些东西,比如在文本框中输入,确实符合丹麦的设置。但鼠标移到装有仪器的标签上仍然能看到我们

问题2A:为什么CultureInfo.CurrentCulture.Name不反映我的语言栏中的更改,而我的应用程序的其他部分似乎可以识别更改?尝试CultureInfo.CurrentUICulture.Name会产生相同的结果

问题2B:是否有一个事件在语言栏上发生更改时触发,以便我可以在语言设置更改时在我的应用程序中识别

2010.05.13更新 微软的Eric在下面给出的简短而甜蜜的信息see他的回答只直接回答了我四个问题中的一个,但它正好为我提供了进一步深入研究和解决其余问题所需的动力。为了其他可能也被这一点迷惑的人的利益,以下是我发现的:

答1A:应用程序继承默认输入语言的设置,而不是您在语言栏上指定的语言。应用程序运行后,应用程序会立即注意到语言栏上的更改

答案1B:通过区域和语言选项控制面板>>语言选项卡>>详细信息>>设置选项卡>>默认输入语言来设置默认输入语言

答案2A:Eric回答,当前文化与反映在语言栏上的当前输入语言不同;在文本框中键入仅受当前输入语言的影响


回答2B:输入语言或当前区域性更改通知都没有预定义的事件。这里需要注意的一个重要事实是,输入语言的更改会立即被自动识别,而当前的区域性更改不会被识别。要使当前区域性更改生效,您必须重新启动应用程序,除非您能够注意到更改并自行采取行动。为此,我找到了一篇MSDN文章,它提供了这样一个钩子来注意变化。

有三种不同的语言设置在起作用。语言栏控制输入语言,该语言不同于显示UI CurrentUICulture的语言,该语言不同于排序/格式化/解析CurrentCulture的语言


这确实令人困惑。

Aha!我读了你的回答后宣布。虽然从技术上讲,你只直接回答了问题2A,但我认为你的解决方案是正式答案,因为它使我能够得出我申请所需的其余答案,请参见我在上述问题中的修订意见。