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。

含义
MUI_LANGUAGE_ID
检索语言 标识符格式的语言 字符串。
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

指向指示输入语言列表属性的标志的指针。 函数始终检索描述所列出的最后一种语言的标志。

含义
MUI_FULL_LANGUAGE
该语言已完全本地化。
MUI_PARTIAL_LANGUAGE
该语言已部分本地化。
MUI_LIP_LANGUAGE
语言是 LIP 语言。
 

此外, pdwAttributes 根据需要包括以下一个或两个标志。

含义
MUI_LANGUAGE_INSTALLED
此计算机上安装了该语言。
MUI_LANGUAGE_LICENSED
语言已针对当前用户获得相应许可。

返回值

如果成功,则返回 TRUE ,否则返回 FALSE 。 若要获取扩展错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码:

  • ERROR_INSUFFICIENT_BUFFER。 提供的缓冲区大小不够大,或者错误地设置为 NULL
  • ERROR_INVALID_PARAMETER。 任何参数值都无效。 有关详细信息,请参阅“备注”。
  • ERROR_OBJECT_NAME_NOT_FOUND。 找不到指定的对象名称,或者它无效,或者输入列表中的第一种语言不是已安装的语言。 有关详细信息,请参阅“备注”。
如果 GetLastError 返回任何其他错误代码,则参数 pcchFallbackLanguagespdwAttributes 未定义。

注解

建议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
若要获取 Lang1) (回退语言,应用程序会将 pwmszLanguage 传入为“Lang1\0\0”。 从函数返回时, pwszFallbackLanguages 设置为“Lang2\0Lang3\0Lang4\0\0”。 请注意,此列表的排序指示 Lang2 是默认回退语言。

若要获取 Lang3 相对于 Lang1 的回退语言 () ,应用程序在 pwmszLanguage 中传递为“lang1\0\lang3\0\0”。 从函数返回时, pwszFallbackLanguages 设置为“Lang5\0Lang6\0\0”。

此函数返回以下任一项的ERROR_INVALID_PARAMETER:

  • pwmszLanguageNULL 或空。
  • 同时设置了MUI_LANGUAGE_ID和MUI_LANGUAGE_NAME。
  • 设置除MUI_LANGUAGE_ID或MUI_LANGUAGE_NAME以外的任何标志。
  • pcchFallbackLanguages 大于 0,但 pwszFallbackLanguagesNULL
  • 不能将 pwmszLanguage 解析为语言标识符或语言名称的多字符串缓冲区,具体取决于标志设置。
如果 pwmszLanguage 可以分析但无效,则会发生ERROR_OBJECT_NAME_NOT_FOUND错误代码。 对于无效的区域设置标识符,或者输入列表中的第一种语言不是已安装的语言,或者完全本地化的语言已定义回退语言,则也可能返回代码。

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

另请参阅

EnumUILanguages

GetFileMUIInfo

多语言用户界面

多语言用户界面函数