哪个Win32 API在“区域和语言”控制面板中报告“格式”首选项?

时间:2010-06-17 05:13:47

标签: windows winapi internationalization format

Windows 7和Windows Vista有一个“区域和语言”控制面板,其中包含一个“格式”选项卡,其中包含一个名为“格式”的弹出菜单。此菜单允许用户从许多面向语言的数字,货币,时间和日期格式首选项中进行选择,而不管基本系统的语言如何。例如,我可以决定在美国英语系统上更喜欢默认货币符号为日元。 我特别不关心货币符号;这只是一个例子。我在这里指的是可以通过从格式菜单中选择项目来应用的首选项。

Windows联系人应用程序似乎根据此菜单中的选择更改其行为。例如,如果我选择日语,则Windows联系人显示并让我编辑语音名称(AKA“ruby”,“yomi”和“furigana”),但不能编辑中间名。如果我选择美国英语,则会显示Windows联系人,并允许我编辑中间名但不能编辑语音名称。

我需要编写代码(本机C在XP SP2及更高版本上调用Win32),这反映了Windows Contacts应用程序在这方面的行为。我应该拨打哪个API?

2 个答案:

答案 0 :(得分:0)

这个问题似乎结合了两种特征。

使用“控制面板”小程序,可以选择常规语言设置,然后为各个格式项目指定与该语言设置相关联的默认值。

如果您想要检索用户的整体语言设置,那么只需获取用户的默认LCID或类似的内容。

如果要检索单个格式项,我认为您需要CRT函数区域设置()。 Win32 API SetLocaleInfo可以设置区域设置的用户可重写部分。但是,至少有文档记载,GetLocaleInfo和GetLocaleInfoEx(仅限Vista及更高版本)获取与某些现有语言环境相关的信息,而不是来自用户覆盖。标准的C语言环境()函数应该可以工作。

您的问题询问如何检索单个格式设置项,但之后您说您必须键入用户选定的常规语言环境而不是单个格式设置项。根据您对Windows Contacts应用程序的描述,听起来您需要GetUserDefaultLCID。

答案 1 :(得分:0)

对于大多数这些项目,您可以使用GetTimeFormatGetNumberFormatGetCurrencyFormat等功能。与名称所暗示的相反,这些实际上会根据请求格式化数据,而不仅仅是告诉您格式应该是什么。虽然可以指定要使用的区域设置,但通常需要传递LOCALE_USER_DEFAULT,以使用用户在控制面板中指定的设置。