collectl (особенно его подсистема NFS) является очень хорошей утилитой, которая могла бы быть полезна для Вашего анализа, но это не соответствует Вашему списку требований. Я не знаю ни о какой утилите Linux, которая делает.
(Позвольте мне добавить, что это вне темы отмечает: существует программное обеспечение, которое соответствует Вашим требованиям: находящаяся в DTrace Аналитика Sun (PDF) - но к сожалению не доступно на Linux. Вы найдете много ярких примеров в блоге Brendan Gregg, которые иллюстрируют возможности этого инструмента.)
Нет никакого API Win32 или Сценариев (WMI) к локали системы коммутации. Однако можно использовать эту командную строку, чтобы сделать это:
rundll32 shell32, Control_RunDLL intl.cpl,,/f:”c:\locale.txt”
Содержание C:\locale.txt похоже:
[RegionalSettings]
LanguageGroup=13
SystemLocale=0401
UserLocale=0401
InputLocale=0409:00000409,0401:00000401
(Это изменит Системную и Пользовательскую локаль на арабский язык – Саудовская Аравия и добавит арабскую клавиатуру).
Я не знаю об утилите командной строки, которая строго делает это, но Вы могли использовать маленький бит VBScript для изменения связанных значений реестра. Это не столь просто как изменение локали во вкладке "Общие" Регионального и диалогового окна Опций Языка, но это работает.
Например, для изменения настроек для соответствия "английскому языку (Соединенное Королевство)" можно использовать что-то вроде этого:
Dim WSHShell
Set WSHShell = CreateObject("Wscript.Shell")
WSHShell.RegWrite "HKCU\Control Panel\International\iCountry", "44", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iCurrDigits", "2", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iCurrency", "0", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iDate", "1", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iDigits", "2", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iLZero", "1", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iMeasure", "0", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iNegCurr", "1", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iTime", "1", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iTLZero", "1", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\Locale", "00000809", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\s1159", "AM", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\s2359", "PM", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sCountry", "United Kingdom", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sCurrency", "£", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sDate", "/", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sDecimal", ".", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sLanguage", "ENG", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sList", ",", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sLongDate", "dd MMMM yyyy", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sShortDate", "dd/MM/yyyy", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sThousand", ",", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sTime", ":", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\DefaultBlindDialFlag", "00", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sTimeFormat", "HH:mm:ss", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iTimePrefix", "0", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sMonDecimalSep", ".", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sMonThousandSep", ",", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iNegNumber", "1", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sNativeDigits", "0123456789", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\NumShape", "1", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iCalendarType", "1", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iFirstDayOfWeek", "0", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\iFirstWeekOfYear", "0", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sGrouping", "3;0", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sMonGrouping", "3;0", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sPositiveSign", "", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\sNegativeSign", "-", "REG_SZ"
WSHShell.RegWrite "HKCU\Control Panel\International\Geo\Nation", "244", "REG_SZ"
Значения HKEY_CURRENT_USER\Control Panel\International
можно напрямую редактировать с помощью команды Powershell Get-ItemProperty
.
Также вам не нужно выходить из системы/входить в систему для уведомления об изменениях, просто запустите rundll32 user32.dll,UpdatePerUserSystemParameters
.