我过去曾使用全球化设置,但不是在.NET环境中,这是这个问题的主题。我所看到的最肯定是由于我还没有学到的知识,所以我很欣赏以下内容。
设定: 我的默认语言设置是英语(特别是en-us)。我在我的开发系统(WinXP)上添加了第二种语言(丹麦语),然后打开语言栏,以便我可以随意选择。
我在语言栏上选择丹麦语,然后打开记事本,发现该语言在语言栏上恢复为英语。据我所知,语言设置是每个应用程序,因此记事本似乎将默认设置恢复为英语。 (我发现这很奇怪,因为Windows和Notepad在世界各地使用。)关闭记事本将语言栏上的设置返回给丹麦语。然后我启动了我的开放式自定义WinForm应用程序 - 我知道它没有设置语言 - 并且也在打开时从英语恢复为丹麦语,然后在终止时返回丹麦语!
问题#1A:如何在启动时获取WinForm应用程序以继承语言栏的当前设置?我的实验似乎表明每个应用程序都以系统默认开始,并且要求用户在应用程序运行时手动更改它 - 对于想要使用多种语言的人来说,这似乎是一个很大的不便!
问题#1B:如果事实上必须在多语言场景中手动设置语言,如何更改我的默认系统语言(例如丹麦语),以便我可以测试我的语言应用程序以另一种语言推出?
我在下一个实验的应用程序中添加了当前语言的显示。具体来说,我在标签上设置MouseEnter
处理程序,将其工具提示设置为CultureInfo.CurrentCulture.Name
,因此每次鼠标移动时我都会看到当前的语言设置。由于在我启动应用程序之前设置语言不起作用,我启动它然后将语言设置为丹麦语。我发现有些东西(比如在TextBox中打字)确实尊重丹麦的这种设置。但是,对仪表标签的鼠标仍然显示了我们!
问题#2A:为什么CultureInfo.CurrentCulture.Name
无法反映语言栏中的更改,而我应用的其他部分似乎认识到了这一变化? (尝试CultureInfo.CurrentUICulture.Name
产生了相同的结果。)
问题#2B:语言栏上的更改是否会触发事件,以便在语言设置发生变化时我可以在应用内识别?
来自微软的埃里克提供的简短而有趣的信息(见下面的答案)直接解决了我的四个问题中的一个(#2A),但它提供了我需要深入研究并弄清楚其余部分的动力。为了其他可能也被这种困惑的人的利益,这是我发现的:
答案#1A:应用程序继承默认输入语言的设置,不是您在语言栏上指定的语言。应用程序运行后,应用程序会立即注意到语言栏的更改。
答案#1B:设置默认输入语言是通过“区域和语言选项”控制面板>>完成的。语言标签>>详细信息>>设置标签>>默认输入语言。
答案#2A:由Eric回答,目前的文化与语言栏中反映的当前输入语言不同;在文本框中输入仅受当前输入语言的影响。
答案#2B:输入语言或当前文化更改通知没有预定义事件。这里要注意的一个重要事实是,当前文化更改不会立即自动识别输入语言更改。您必须重新启动应用程序才能使当前的文化更改生效 - 除非您能够注意到更改并自行处理。为此,我发现了一篇MSDN文章(The Many Faces of the CultureInfo Class),提供了这样一个钩子来注意到这一变化。
答案 0 :(得分:1)
有三种不同的语言设置在起作用。语言栏控制输入语言(InputLanguage),该语言与显示UI(CurrentUICulture)的语言不同,后者与排序/格式化/解析(CurrentCulture)的语言不同。
这确实令人困惑。