Windows 10 IoT Terminal Deployment – Part 6 – Manage the system local on first boot

Hi everyone

Today I will share a small tip if you got a lot of Windows 10 to manage the default language. IoT or any other Windows 10 version for that tip.

A lot of new system come by default in en-US but if you want to automate the distribution you can tweak a bit some policy to set correctly the wanted locale.

It seem simple, but don’t forget the locale impacts those settings differently;

– The OS language

– The login screen language

– The default keyboard for new session

– The default keyboard for the login screen

– The date format and various localized settings


For almost all of those settings it’s a settings to push for each one.

Where it can be tricky is if like me you live in zone where the default keyboard never match by default.

In example, I live in French’s Canada, and Windows put for me Canadian multilingual by default, which is not the best one for fr-CA. You have legacy french Canadian keyboard and finally the french Canadian’s layout.

So when we push the locations settings, as you can guess in a case like me the default keyboard is never set correctly, thus it need a bit more settings to push.

First of, you need to know if your computer got ready the language pack or not. On IoT usually they are already ready. If not, please download the language ISO and copy the one you need to deploy.



When the file is deployed, you can pre-install the .cab that way in a script :

dism /online /add-package /packagepath:C:\

After that we can run the script to set the correct layout we need, I will explain below;

Powershell.exe -executionpolicy remotesigned -File C:\language.ps1

control.exe intl.cpl,, /f:”C:\language.xml”


Set-Culture fr-CA
Set-WinSystemLocale fr-CA
Set-WinHomeLocation -GeoId 39
Set-WinSystemLocale -SystemLocale fr-CA

$langList = New-WinUserLanguageList -Language “fr-CA”

Set-WinUserLanguageList -LanguageList $langList


<!–Keyboard Language Change–>
<gs:GlobalizationServices xmlns:gs=”urn:longhornGlobalizationUnattend”>
<!–User List–>
<gs:User UserID=”Current” CopySettingsToDefaultUserAcct=”true” CopySettingsToSystemAcct=”true”/>

<!– MUI–>
<gs:MUILanguage Value=”fr-CA” />
<gs:MUIFallback Value=”fr-CA” />

<!–input preferences–>
<gs:InputLanguageID Action=”add” ID=”0409:00000409″/>

The command Powershell.exe -executionpolicy remotesigned -File C:\language.ps1 does set the location and the default local.

The only thing the script can’t do, is to set the keyboard for NEW users account.

The XML import, control.exe intl.cpl,, /f:”C:\language.xml”,  simulate a click on apply to new user account and to the login screen and system’s account. The important flag is see is; CopySettingsToDefaultUserAcct & CopySettingsToSystemAcct

That XML set that screen options correctly;



Thanks everyone 🙂