Бих искал да стартирам скрипт за всеки език. Имам нужда от начин да намеря кой OS език се използва, като използвам пакетни файлове. И на Windows XP, и на Windows 7.
Как мога да намеря текущия език на Windows от cmd?
Отговори (10)
Не знам дали това все още работи в Windows 7, но работи в Windows XP
reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage
След това можете да анализирате изхода. напр.
0409 --> English
0407 --> German
040C -->
френски; 0C0A -->
испански.
- person Alicia; 16.01.2017
Не можете да използвате InstallLanguage под HKLM\SYSTEM\CurrentControlSet\Control\nls\language
, защото точно това казва, че е: Install Language
Въпреки че можете директно да инсталирате локализирана версия на Windows, това не винаги се прави , тъй като не беше на моя компютър. Вместо това се прилага езиков пакет, което е добре, но езикът на показване не е същият като езика за инсталиране.
Освен това, ако потребител промени своя език на показване, InstallLanguage няма да отрази промяната. И може да има повече потребители с различни езици на дисплея.
- Език на текущия потребител
HKCU\Control Panel\Desktop
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\Settings
PreferredUiLanguages
това ще замени стойността на InstallLanguage под HKLM\SYSTEM\CurrentControlSet\Control\nls\language
Има объркване в типовете стойности, докато InstallLanguage е LCID, PreferredUiLanguages е LCID низ. След това този език се отчита като език на локалната машина. Това не е потребителски език за показване
- Системен език
Това е езикът за системния потребител.
Преди потребителят да влезе в системата, този език се използва.
Това означава, че е език за началния екран и за OOBE.
HKEY_USERS\S-1-5-18\Control Panel\Desktop\MuiCached
MachinePreferredUILanguages
Има и WMI начин за получаване на език на ОС, но не тествах кой от тези езици ще получите
wmic os получава локал, осезик, кодов набор
FOR /F "tokens=2 delims==" %%a IN ('wmic os get OSLanguage /Value') DO set OSLanguage=%%a
echo OS Language: %OSLanguage%
wmic os get oslanguage
връща същата стойност (в десетичен знак) като reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage
(в шестнадесетичен). 2. Ако не са инсталирани предпочитани езици, reg заявката (/v PreferredUILanguages) връща грешка и в reg заявката HKCU\Control Panel\Desktop
- person Gilles Maisonneuve; 06.06.2019
query "HKLM\SYSTEM\CurrentControlSet\Control\MUI\Settings"
Пълното решение може да е ваше с връщане към първоначалния език за инсталиране, ако заявката ви за reg върне грешка. Просто мое мнение.
- person Gilles Maisonneuve; 06.06.2019
Кодът по-долу реши проблема ми. Работи на Windows Server 2003 и Windows 7
FOR /F "tokens=3 delims= " %%G in ('reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage') DO (
IF [%%G] EQU [0409] (
ECHO English install language detected
) ELSE (
ECHO Some other language detected
)
Дано помогне!
Използвайте командата "dism /online /get-intl".
В конзолата CMD запис на команда:
intl.cpl
в cmd: reg query "HKEY_CURRENT_USER\Keyboard Layout\Preload"
това произвежда:
HKEY_CURRENT_USER\Keyboard Layout\Preload
2 REG_SZ 00000419
1 REG_SZ 00000809
като първия отговор, след това анализирате най-десните числа, като използвате това или този сайт
ако най-лявото число е номер 1, това е текущият език на клавиатурата, който се използва в момента.
Използвайте команда в cmd и потърсете английска дума(и), свързана с вашата заявка.
Пример: w32tm /query /peers >> somewhere.txt
#Peers: 1
Peer: ca.pool.ntp.org
State: Active
Time Remaining: 58.3260171s
Mode: 3 (Client)
Stratum: 3 (secondary reference - syncd by (S)NTP)
PeerPoll Interval: 17 (out of valid range)
HostPoll Interval: 10 (1024s)
Първият ред винаги е "peers" или "услугата не е стартирана", така че ако потребителят е на език, различен от английски, скриптът няма да намери тази дума и резултатът може да върне 0.
В Windows 10 1903 езиковата настройка на текущия потребител изглежда се намира в "HKCU\Control Panel\International\LocaleName"
има два начина да направите това с помощта на командния ред в Windows
Първо
- отворено повишено
command prompt
- въведете следната команда
dism /online /get-intl
Второ
- отворено повишено
command prompt
- въведете следната команда
systeminfo
и двете работи зависят от вашите нужди
Използване на powershell и тествано на windows7 и windows10 (може да работи на XP, но powershell не е естествен за XP)
Не е необходим команден ред с повишени права.
Синтаксисът е даден за изпълнение на командния ред
powershell get-uiculture
or
powershell -NoProfile "Get-UICulture|select -ExpandProperty LCID"
or
Последният работи само за windows10.
powershell [CultureInfo]::InstalledUICulture
Кредити/реф.:
https://winaero.com/find-default-system-language-windows-10/ и
може ли да знам разликата между [cultureinfo]::InstalledUICulture и get-uiculture в powershell?