Вы не можете использовать InstallLanguage в HKLM \ SYSTEM \ CurrentControlSet \ Control \ nls \ language
потому что это именно то, что написано: Установить язык
Хотя вы можете напрямую установить локализованную версию Windows, это не всегда делается, так как это было не на моем ПК. Вместо этого применяется языковой пакет, и это нормально, но тогда язык отображения не совпадает с языком установки.
Также, если пользователь меняет свой язык отображения, InstallLanguage не будет отражать это изменение. И может быть больше пользователей с разными языками отображения.
- Текущий пользовательский язык отображения
HKCU \ Панель управления \ Рабочий стол
PreferredUILanguages
FOR /F "tokens=3" %%a IN ('reg query "HKCU\Control Panel\Desktop" /v PreferredUILanguages ^| find "PreferredUILanguages"') DO set UILanguage=%%a
echo User Display Language: %UILanguage%
Существует разница между языком локального компьютера, языком системы и языком пользователя. Также есть отдельные настройки для языка BCD, используемые для восстановления и менеджера загрузки
Язык установки устанавливается при установке и никогда не изменяется
также значение по умолчанию для ключа "HKLM \ SYSTEM \ CurrentControlSet \ Control \ nls \ language" установлено на то же значение. Это значение неправильно читается некоторыми программами установки InstallShield, что приводит к появлению интерфейса на английском языке в локализованной Windows.
При изменении языка отображения новое значение сохраняется в
HKLM \ SYSTEM \ CurrentControlSet \ Control \ MUI \ Настройки
PreferredUiLanguages
это переопределит значение InstallLanguage в HKLM \ SYSTEM \ CurrentControlSet \ Control \ nls \ language
В типах значений есть путаница, в то время как InstallLanguage - это LCID, PreferredUiLanguages - это строка LCID.
Этот язык затем сообщается как Local Machine Language. Это не язык интерфейса пользователя
Это язык для пользователя системы.
Перед тем, как пользователь вошел в систему, используется этот язык.
Это означает, что это язык для экрана приветствия и для OOBE.
HKEY_USERS \ S-1-5-18 \ Панель управления \ Рабочий стол \ MuiCached
MachinePreferredUILanguages
Существует также способ получения языка ОС с помощью WMI, но я не проверял, какой из этих языков вы получите
wmic os get locale, oslanguage, codeset
FOR /F "tokens=2 delims==" %%a IN ('wmic os get OSLanguage /Value') DO set OSLanguage=%%a
echo OS Language: %OSLanguage%