Install Language

The install language is what MLLoadLibrary defaults to when choosing which MUI satellite library to load.

On Windows 2000 and higher, the install language is just the system default UI language. Indeed, this identity of the concepts is cemented into the SHLWAPI version 6.00 from Windows Server 2003 and Windows Vista and higher, such that SHLWAPI no longer has its own internal procedure GetInstallLanguage but simply calls the standard API function GetSystemDefaultUILanguage. Builds of version 6.00 from Windows XP and Internet Explorer 6.0, and all earlier versions back to 5.00, retain the separation but when they find themselves executing on Windows 2000 or higher, they end up evaluating the install language just by calling the standard API function GetUserDefaultUILanguage, if this is available as an export from KERNEL32.

Simulation From Registry Settings

When these earlier builds execute on other operating systems, they make their own determination of the install language from the registry. Of course, the install language is assumed not to change, and so this discovery is done just the once and is then remembered. The defining registry value is:

Key: HKEY_LOCAL_MACHINE\Software\Microsoft\Active Setup\Installed Components\{89820200-ECBD-11CF-8B85-00AA005B4383}
Value: Locale

Data for this value is a two-character code for the install language. The function accepts as many as 3 characters of string data, including a terminating null, or 3 bytes of data (which the function will interpret as characters). The following table shows for each recognised code the language ID as returned by the function and the corresponding language name:

Code Language ID RFC 3066
AR 0x0401 ar-SA
BR 0x0416 pt-BR
CN 0x0804 zh-CN
CS 0x0405 cs-CZ
DA 0x0406 da-DK
DE 0x0407 de-DE
EL 0x0408 el-GR
EN 0x0409 en-US
ES 0x0C0A es-ES
FI 0x040B fi-FI
FR 0x040C fr-FR
HE 0x040D he-IL
HU 0x040E hu-HU
IT 0x0410 it-IT
JA 0x0411 ja-JP
KO 0x0412 ko-KR
NL 0x0413 nl-NL
NO 0x0414 nb-NO
PL 0x0415 pl-PL
PT 0x0816 pt-PT
RU 0x0419 ru-RU
SK 0x041B sk-SK
SL 0x0424 sl-SI
SV 0x041D sv-SE
TR 0x041F tr-TR
TW 0x0404 zh-TW