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
語言已針對目前用戶適當授權。

傳回值

如果成功或 FALSE,則傳回 TRUE 。否則傳回 TRUE 。 若要取得擴充錯誤資訊,應用程式可以呼叫 GetLastError,其可傳回下列錯誤碼:

  • ERROR_INSUFFICIENT_BUFFER。 提供的緩衝區大小不夠大,或設定為 NULL 不正確。
  • ERROR_INVALID_PARAMETER。 任何參數值都無效。 如需詳細資訊,請參閱<備註>。
  • ERROR_OBJECT_NAME_NOT_FOUND。 找不到指定的物件名稱,或無效,或輸入清單中的第一種語言不是已安裝的語言。 如需詳細資訊,請參閱<備註>。
如果 GetLastError 傳回任何其他錯誤碼,則會取消定義 pcchFallbackLanguagespdwAttributes 參數。

備註

建議使用MUI_LANGUAGE_NAME而非MUI_LANGUAGE_ID,因為它可讓函式更妥善地處理未對應至預先定義地區設定的LIPS 語言,而是對應至 補充地區設定。 對應至預先定義地區設定的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 來指定任何其他這類語言。 使用 「1000」,其對應於 LOCALE_CUSTOM_UNSPECIFIED的十六進位值, 在 pwmszLanguage 所指示的字串中,將會產生ERROR_INVALID_PARAMETER程式代碼。

部分本地化的語言可以有部分本地化的後援語言,需要 重複呼叫 GetUILanguageInfo 以取得完整資訊。 請考慮部分當地語系化語言 Lang1 的案例,該語言提供三種後援語言的選擇。 Lang3 後援語言已部分當地語系化,並提供兩種後援語言的選擇。 相依性如下所示,並先列出預設後援:

  • Lang1
    • Lang2
    • Lang3
      • Lang5
      • Lang6
    • Lang4
若要取得 Lang1 (s) 後援語言,應用程式會將 pwmszLanguage 傳遞為 “Lang1\0\0”。 從函式傳回時, pwszFallbackLanguages 會設定為 “Lang2\0Lang3\0Lang4\0\0”。 請注意,此列表的順序表示 Lang2 是預設後援語言。

若要取得與 Lang1 相關的 Lang3 (後援語言) ,應用程式會將 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)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

EnumUILanguages

GetFileMUIInfo

多語系使用者介面

多語系使用者介面函式