GetUILanguageInfo 函数 (winnls.h)
检索有关已安装 UI 语言的各种信息:
- 是否安装了该语言?
- 当前用户是否获得使用该语言的许可?
- 语言是否已完全本地化? 部分本地化? 语言安装包的一部分 (LIP) ?
- 如果它已部分本地化或 LIP 的一部分:
- 什么是回退语言?
- 如果该回退语言是部分本地化的语言,其基础是什么?
- 什么是默认回退语言?
语法
BOOL GetUILanguageInfo(
[in] DWORD dwFlags,
[in] PCZZWSTR pwmszLanguage,
[out, optional] PZZWSTR pwszFallbackLanguages,
[in, out, optional] PDWORD pcchFallbackLanguages,
[out] PDWORD pAttributes
);
参数
[in] dwFlags
定义指定语言格式的标志。 标志互斥,默认值为MUI_LANGUAGE_NAME。
值 | 含义 |
---|---|
|
检索语言 标识符格式的语言 字符串。 |
|
检索语言 名称格式的语言 字符串。 |
[in] pwmszLanguage
指向函数要检索其信息的语言的指针。 此参数指示语言标识符或语言名称的有序、以 null 分隔的列表,具体取决于标志设置。 有关使用此参数的信息,请参阅备注部分。
[out, optional] pwszFallbackLanguages
指向缓冲区的指针,此函数在其中检索已排序的、以 null 分隔的回退语言列表,该列表的格式由 dwFlags 设置定义。 此列表以两个 null 字符结尾。
或者,如果此参数设置为 NULL 并且 pcchLanguagesBuffer 设置为 0,则该函数在 pcchLanguagesBuffer 中检索语言缓冲区的所需大小。 所需的大小包括两个 null 字符。
[in, out, optional] pcchFallbackLanguages
指向 pwszFallbackLanguages 指示的语言缓冲区的大小(以字符为单位)的指针。 从 函数成功返回后,参数包含检索到的语言缓冲区的大小。
或者,如果此参数设置为 0 并且 pwszLanguagesBuffer 设置为 NULL,则该函数在 pcchLanguagesBuffer 中检索语言缓冲区的所需大小。
[out] pAttributes
指向指示输入语言列表属性的标志的指针。 函数始终检索描述所列出的最后一种语言的标志。
值 | 含义 |
---|---|
|
该语言已完全本地化。 |
|
该语言已部分本地化。 |
|
语言是 LIP 语言。 |
此外, pdwAttributes 根据需要包括以下一个或两个标志。
值 | 含义 |
---|---|
|
此计算机上安装了该语言。 |
|
语言已针对当前用户获得相应许可。 |
返回值
如果成功,则返回 TRUE ,否则返回 FALSE 。 若要获取扩展错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码:
- ERROR_INSUFFICIENT_BUFFER。 提供的缓冲区大小不够大,或者错误地设置为 NULL。
- ERROR_INVALID_PARAMETER。 任何参数值都无效。 有关详细信息,请参阅“备注”。
- ERROR_OBJECT_NAME_NOT_FOUND。 找不到指定的对象名称,或者它无效,或者输入列表中的第一种语言不是已安装的语言。 有关详细信息,请参阅“备注”。
注解
建议MUI_LANGUAGE_NAME而不是MUI_LANGUAGE_ID,因为它允许函数更好地处理不对应于预定义的区域设置,而是对应于 补充区域设置的 LIP 语言。 对应于预定义区域设置的 LIP 语言的处理方式与非 LIP 语言一样。
如果指定了MUI_LANGUAGE_ID标志,则必须提供的语言字符串
使用不包含前导 0x 且长度为 4 个字符的十六进制语言标识符。
例如,en-US 应传递为“0409”,将 en 传递为“0009”。 返回的语言字符串将位于
相同的格式。
如果指定了MUI_LANGUAGE_ID,并且用户首选 UI 语言列表中存在此类语言,则列表中只能有一种此类语言。 该语言可以在 pwmszLanguage 中指定为“1400”,它对应于 LOCALE_CUSTOM_UI_DEFAULT的十六进制值。 不能使用 MUI_LANGUAGE_ID 指定任何其他此类语言。 在 pwmszLanguage 指示的字符串中使用“1000”(对应于LOCALE_CUSTOM_UNSPECIFIED的十六进制值)将导致ERROR_INVALID_PARAMETER代码。
部分本地化语言可以具有部分本地化的回退语言,因此需要重复调用 GetUILanguageInfo 以获取完整信息。 以部分本地化语言 Lang1 为例,该语言提供三种回退语言的选择。 Lang3 回退语言已部分本地化,并提供两种回退语言选择。 依赖项如下所示,首先列出了默认回退:
- Lang1
- Lang2
- Lang3
- Lang5
- Lang6
- Lang4
若要获取 Lang3 相对于 Lang1 的回退语言 () ,应用程序在 pwmszLanguage 中传递为“lang1\0\lang3\0\0”。 从函数返回时, pwszFallbackLanguages 设置为“Lang5\0Lang6\0\0”。
此函数返回以下任一项的ERROR_INVALID_PARAMETER:
- pwmszLanguage 为 NULL 或空。
- 同时设置了MUI_LANGUAGE_ID和MUI_LANGUAGE_NAME。
- 设置除MUI_LANGUAGE_ID或MUI_LANGUAGE_NAME以外的任何标志。
- pcchFallbackLanguages 大于 0,但 pwszFallbackLanguages 为 NULL。
- 不能将 pwmszLanguage 解析为语言标识符或语言名称的多字符串缓冲区,具体取决于标志设置。
C# 签名
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
static extern System.Boolean GetUILanguageInfo(
System.UInt32 dwFlags,
System.String pwmszLanguage,
System.IntPtr pwszFallbackLanguages,
ref System.UInt32 pcchFallbackLanguages,
ref System.UInt32 pdwAttributes
);
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | winnls.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |