Вопросы о региональных настройках и локализации возникают на форуме Автоматической установки с завидной регулярностью. В принципе, практически вся информация, позволяющая разобраться с проблемой, на страницах сайта представлена, хотя и не собрана в одном месте. Кроме того, некорректная отработка секции [RegionalSettings] из файла ответов вносит дополнительную неразбериху. В данной статье я постарался собрать как личный опыт, так и опыт участников форума. Я попытаюсь осветить все тонкости локализации и выработать алгоритм применения настроек, срабатывающий на 100%.
Статья разбита на секции, каждая из которых так или иначе относится к локализации. Для каждой секции приводится работающий метод применения настроек. В конце статьи все методы сводятся воедино для выполнения во время автоматической установки системы.
Multilanguage User Interface (MUI)
Если вы работаете с локализованной версией Windows, то можете пропустить эту секцию.
Для локализации элементов интерфейса используется Multilanguage User Interface (MUI). Вообще, он предназначен для корпоративных пользователей и не доступен для загрузки с сайта Microsoft (где выложен только MUI для Windows Embedded, который не подходит для Windows XP). В данном примере рассматривается русский MUI и выбор русского интерфейса, как интерфейса по умолчанию для всех учетных записей, создаваемых впоследствии.
muisetup.exe /i 0419 /d 0419 /l /f /r /s
Ключ /i указывает, какой язык выбирается, и соответственно 0419 - русский, а ключ /d назначает язык интерфейса по умолчанию. Полный список ключей, а также значений языков можно найти в файле muisetup.hlp, входящем в комплект поставки MUI.
Важно! Для наиболее полной локализации интерфейса вам нужно взять muisetup.exe от SP2 и заменить им одноименный файл в дистрибутиве MUI. Также, вам могут понадобиться дополнительные пакеты для локализации Справки, Windows Media Player 10 и Windows Movie Maker 2.1.
Если вы хотите, чтобы русский интерфейс был уже при первом входе в систему, то устанавливайте MUI из cmdlines.txt. В противном случае, вы можете произвести установку при первом входе в систему любым удобным вам способом (пакетный файл из GuiRunOnce, RunOnceEx и т.д.). Ниже пример установки русского MUI и его обновлений из cmdlines.txt
[COMMANDS]
".WinMUImuisetup.exe /i 0419 /d 0419 /l /f /r /s"
".WinMUIWindowsXP-KB841625-x86MUI-RUS.exe /quiet /norestart"
".WinMUIMP10Setup_muiRUS.exe /Q"
".WinMUImm21_muirus.exe /Q"
Понятно, что абсолютный путь к файлам на CD должен быть $OEM$WinMUI. Подробнее об $ОЕМ$ директориях читайте в соответствующей статье Справочника.
Корректное отображение кириллицы в меню и диалогах ПО
Как было сказано выше, локализация интерфейса ОС осуществляется при помощи MUI. А вот за корректное отображение кириллических шрифтов в меню и диалогах программного обеспечения отвечает параметр SystemLocale файла ответов. Однако, в некоторых программах все равно наблюдается некорректное отображение кириллических символов (также известное как иероглифы или кракозябры ;-). Стандартной рекомендацией является импортирование следующих ключей в реестр:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNlsCodePage] "1250"="c_1251.nls" "1251"="c_1251.nls" "1252"="c_1251.nls" "1253"="c_1251.nls" [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionFontSubstitutes] "System,0"="Arial,204" "Fixedsys,0"="Fixedsys,204" "Small Fonts,0"="Small Fonts,204" "MS Serif,0"="MS Serif,204" "MS Sans Serif,0"="MS Sans Serif,204" "Courier,0"="Courier New,204" "Arial Cyr,0"="Arial,204" "Courier New Cyr,0"="Courier New,204" "Times New Roman Cyr,0"="Times New Roman,204" "Helv,0"="MS Sans Serif,204" "Tms Rmn,0"="MS Serif,204" "Arial,0"="Arial,204"
Эти настройки являются системными и распространяются на всех пользователей. Вы можете включить их в уже существующий файл hklm.reg (подробнее в статье Твики реестра) или создать отдельный файл для настроек шрифтов, скажем, fonts.reg, который [из личного опыта] лучше импортировать при входе в систему любым удобным вам способом (пакетный файл из GuiRunOnce, RunOnceEx и т.д.).
Языковые и Региональные настройки
Одной из основных причин неразбeрихи с региональными настройками является [частично] некорректная отработка секции [RegionalSettings]. Почему это происходит не знают, похоже, и в Microsoft, т.к. я пока не видел статьи объясняющей причину или по крайней мере признающей проблему. Кроме того, не все региональные настройки могут быть сконфигурированы через файл ответов.
Секция [RegionalSettings] файла ответов
Я рекомендую внимательно изучить параметры секции [RegionalSettings] файла ответов, т.к. ее мы применим другим способом.
[RegionalSettings]
LanguageGroup=1,2,3,4,5
SystemLocale=00000419
UserLocale=00000419
InputLocale=0409:00000409,0419:00000419
Секцию [ReginalSettings] удобно конфигурировать через Setup Manager. Однако, давайте рассмотрим ее детально, т.к. она содержит много параметров и традиционно вызывает вопросы. Ниже я привожу подробные описания параметров, которые взяты из KB289125 (в статье также перечислены и другие параметры).
LanguageGroup - Задает поддержку языковой группы операционной системой, установленной на компьютере. Если данная настройка указана, то она определяет также значения настроек InputLocale, SystemLocale и UserLocale. По умолчанию в любом случае устанавливаются первые пять языковых групп из этого списка, так что для поддержки кириллицы данный параметр вообще необязателен.
SystemLocale

Разрешает программам, не использующим кодировку Юникод (Unicode), выполнять работу, выводить меню и диалоговые окна с использованием локализованных языковых символов. Если в локализованной программе некорректно отображаются языковые символы, настройка языка системы по умолчанию с целью обеспечить соответствие языку локализованной программы может разрешить проблему. Однако данная настройка является сетевой, поэтому невозможно одновременно поддерживать версии локализованных программ, не использующих Юникод, на нескольких языках. Значения параметров должны соответствовать списку Locale IDs.
UserLocale

Управляет способом отображения чисел, времени, денежных сумм и дат.
InputLocale

Задает код раскладки клавиатуры и комбинации раскладок. Если указано несколько языков ввода, первой используемой раскладкой клавиатуры будет являться та, которая определена для данного компьютера по умолчанию ((в том числе и при вводе пароля при входе в систему). Указанные комбинации раскладок клавиатуры должны поддерживаться для языков, либо определенных путем использования настройки LanguageGroup, либо для языка по умолчанию для устанавливаемой локализованной версии операционной системы Windows XP. Если для доступного языка не поддерживается указанная комбинация, будет использоваться комбинация раскладки клавиатуры по умолчанию. Данная настройка игнорируется, если задана настройка Language.
Таким образом, в приведенном выше примере будут установлены:
LanguageGroup=1,2,3,4,5
Пять языковых групп: Western Europe and United States, Central Europe, Baltic, Greek и Cyrillic. Строго говоря можно не указывать данный параметр вообще, т.к. группы 1-5 устанавливаются по умолчанию.
SystemLocale=00000419
Русский язык по умолчанию для программ, не использующих Юникод.
UserLocale=00000419
Русские Стандарты и Форматы.
InputLocale=0409:00000409,0419:00000419
Две раскладки клавиатуры: русская и английская. Английская будет раскладкой по умолчанию (в том числе и при входе в систему, т.к. идет первой в списке).
regopts.txt
Как уже было сказано выше, секция [RegionalSettings] не отрабатывает корректно из файла ответов. Точнее, не срабатывают некоторые параметры (UserLocale и InputLocale, если мне не изменяет память), но это не суть важно, т.к. общий итог все равно неудовлетворительный. Существует альтернативный способ конфигурирования региональных настроек, который описан в этой статье MS KB. Вкратце, секция [RegionalSettings] помещается в текстовый файл regopts.txt, а потом выполняется команда
rundll32.exe shell32,Control_RunDLL intl.cpl,,/f:"c: egopts.txt"
Кoманду лучше выполнять при первом входе в систему, что косвенно и подтверждает примечание в конце статьи MS KB. Конечно, файл regopts.txt не обязательно должен находиться в корне диска C:. Вы можете изменить путь соответственно расположению файла. Выполнить команду вы можете любым удобным вам способом (пакетный файл из GuiRunOnce, RunOnceEx и т.д.)
Далее в статье этот способ я буду обозначать как "способ regopts.txt".
Раскладка клавиатуры
Наборы раскладок клавиатуры и их порядок (приоритет) можно задать при помощи способа regopts.txt, а вот способ переключения между раскладками

конфигурируется через реестр. Достаточно настроить желаемый способ на рабочей системе и экспортировать ветку реестра
HKEY_CURRENT_USERKeyboard LayoutToggle
Ниже приводится пример ключа, отвечающего за переключение раскладки левым ALT+SHIFT
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERKeyboard LayoutToggle]
"Hotkey"="1"
Приоритет раскладки клавиатуры при входе в систему (Экран приветствия или классический вход) можно задать следующим образом:
[HKEY_CURRENT_USERKeyboard LayoutPreload]
"1"="00000409"
"2"="00000419"
В данном случае по умолчанию выставляется английская раскладка клавиатуры.
Поскольку раскладка клавиатуры является пользовательской настройкой, вам нужно обеспечить импорт ключа из cmdlines.txt, если вы хотите применить его для всех пользователей. Вы можете включить экспортированные значения в уже существующий файл hkcu.reg (подробнее в статье Твики реестра) или создать отдельный файл для региональных настроек, скажем, regional.reg, который также будет импортироваться из cmdlines.txt.
Расположение (Location)
Это еще один элемент региональных настроек, который надо конфигурировать через реестр.

За настройку элемента отвечает ключ Geo из веткии
HKEY_CURRENT_USERControl PanelInternationalGeo
Например, расположению Россия соответствует
[HKEY_CURRENT_USERControl PanelInternationalGeo]
"Nation"="203"
Поскольку "Расположение" является пользовательской настройкой, вам нужно обеспечить импорт ключа из cmdlines.txt, если вы хотите применить его для всех пользователей. Вы можете включить экспортированные значения в уже существующий файл hkcu.reg (подробнее в статье Твики реестра) или в regional.reg, который вы, возможно, создали для импорта способа переключения клавиатуры.
Сводим все вместе
Итак, подведем итог. Для наиболее полной и корректной локализации нам понадобится:
Установить MUI (если ОС не локализована)
Обеспечить корректное отображение кириллицы в меню и диалогах ПО
Сконфигурировать языковые и региональные настройки и способ раскладки клавиатуры
Как вы уже поняли из прочтения статьи, часть этих настроек устанавливается при помощи файлов, исполняемых из cmdlines.txt, а оставшиеся настройки задаются при первом входе в систему. Пример содержимого cmdlines.txt:
[COMMANDS]
".WinMUImuisetup.exe /i 0419 /d 0419 /l /f /r /s"
".WinMUIWindowsXP-KB841625-x86MUI-RUS.exe /quiet /norestart"
".WinMUIMP10Setup_muiRUS.exe /Q"
".WinMUImm21_muirus.exe /Q"
"REGEDIT /S regional.reg"
Первые четыре команды последовательно устанавливают MUI, а также обновления Справки, Windows Media Player 10 и Windows Movie Maker. Если вы не устанавливаете MUI, то все строки относящиеся к нему вам не нужны. Последняя команда импортирует regional.reg, содержащий способ переключения раскладки клавиатуры и настройки Расположения. Альтернативно, можно включить содержимое regional.reg в состав hkcu.reg, если у вас таковой имеется. Все перечисленные в файле cmdlines.txt команды будут выполнены за 12 минут до окончания установки ОС.
Далее, при первом входе в систему нужно применить "способ regopts.txt" и импортировать настройки кодовой страницы и шрифтов для корректного отображения кириллицы в ПО. Я приведу пример пакетного файла regional.bat, который и совершит нужные действия:
@echo off
REGEDIT /S c:fonts.reg
rundll32.exe shell32,Control_RunDLL intl.cpl,,/f:"c: egopts.txt"
exit
В данном примере файлы fonts.reg и regopts.txt должны находиться в корне диска C:, однако вы можете разместить их где угодно при помощи $OEM$ директорий и изменить пути соответственно.о.
Надеюсь, данная статья будет вам полезна и поможет обойти подводные камни, препятствующие успешной локализации с первого захода.