Update 2015-02-27: I have updated the script. Read about the changes here: http://blogs.technet.com/b/deploymentguys/archive/2015/02/27/configuring-regional-and-language-settings-online-in-an-mdt-task-sequence-script-update.aspx. Both posts now have the updated script download.
I had a customer who wanted to install the operating system language packs as a dynamic online application installation in the ConfigMgr task sequence based on the region where the client was deployed. Because of this, they wanted to change the locale settings (UI language, keyboard layout, etc.) dynamically after the language pack was installed.
MDT has the properties UserLocale, SystemLocale (XP/2003), InputLocale (XP/2003), KeyboardLocale (Vista and higher), and UILanguage for configuring locale settings. (Note that SystemLocale is only a standard property in MDT 2010 and later. SystemLocale must be added as a custom property for versions of MDT before 2010.) However, these are only used by MDT to configure these settings in the answer file (Sysprep.inf or Unattend.xml) offline when the operating system image is applied.
To configure these settings online requires using a control panel command with a special answer file that just has locale settings. These are documented here for Window XP/2003 and Windows Vista and higher:
How to create the regional and language settings for an unattended installation of Windows MultiLanguage Version
Windows Vista Command Line Configuration of International Settings
So I created the attached script for Windows XP and Windows Vista to run after the MUI Pack install. I put this script together right at the end of the engagement (last minute customer request) so it did not get much testing. I haven’t tried it with Windows 7 but it should work since XML file used should be the same as Windows Vista. If you encounter problems, please post comments.
This script uses the MDT Properties above and a custom property called GeoID (Vista and higher) to create the appropriate XML or INF settings file (named RegionalOptions.log) and then runs the appropriate command with intl.cpl. (If SystemLocale is not specified, then the value of UserLocale is used for that.) You could expand this script to handle other settings using the references links found above.
This post was contributed by Michael Murgolo, a Senior Consultant with Microsoft Services - U.S. East Region.