2

我过去曾使用过全球化设置,但不在 .NET 环境中,这是本问题的主题。我所看到的肯定是由于我尚未学习的知识,因此我希望能了解以下内容。


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


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

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

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


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

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

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


2010.05.13 更新

来自 Microsoft 的 Eric 提供的简短但甜蜜的信息(请参阅下面的答案)直接解决了我的四个问题(#2A)中的一个,但它提供了我需要进一步研究并找出其余问题的动力。为了其他可能对此感到困惑的人的利益,这是我发现的:

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

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

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

答案 #2B:输入语言或当前文化更改通知没有预定义事件。这里要注意的一个重要事实是,输入语言更改会立即自动识别,而当前文化更改则不会。您必须重新启动应用程序才能使当前的文化更改生效 - 除非您可以注意到更改并自己采取行动。为此,我找到了一篇 MSDN 文章(CultureInfo 类的许多面孔),它提供了这样一个钩子来注意到变化。

4

1 回答 1

1

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

确实,这令人困惑。

于 2010-05-12T18:19:11.740 回答