Windows Virtual Desktop – Windows 10 Multisession – comes only in one language, that is English. My native language is Dutch, and I work for a lot of Dutch clients who want their WVD also in Dutch.
Adding a different language manually on a Windows 10 laptop is not so hard, just go to the settings, language add the language … well you know the drill. When building your WVD image for W10 Multisession you need to add the language pack to the image. There are many ways to do so. Microsoft has documented this on this DOCS page: https://docs.microsoft.com/en-us/azure/virtual-desktop/language-packs
This BLOG Post will explain how to add the language pack to your image or running Session Hosts and create a GPO that will change the language for your users. Because my native language is Dutch, I will explain how to create the GPO for Dutch language. It should work for all languages.
Some GPO settings are registry values, most of them are reverse engineered by me. I changed the settings on a lab machine from English to Dutch and monitored what registry values changed. Also I verified those registry values with a regular Windows 10 Pro Dutch version installed from an ISO file. Those settings where used in my GPOs. Use this BLOG at your own risk. See my disclaimer.
- Windows Server 2019 Domain Controller with AAD Connect running on an B2S in Azure
- Windows 10 Multi Session 20H2 without M365 Apps for Enterprise
Steps for adding and setting the language pack
You need to perform two steps to change the language for the Windows 10 Multi Session 20H2 image.
Adding language Pack
Please construct the share as instructed on the official DOCS page of Microsoft. Download these three ISO files: (URL’s are available on the official Microsoft DOCS page)
- (A) Windows 10, version 2004 or 20H2 Language Pack ISO
- (B) Windows 10, version 2004 or 20H2 FOD Disk 1 ISO
- (C) Windows 10, version 20H2 Inbox Apps ISO
Extract all ISO files with 7Zip or mount them in Windows.
Create a Shared Folder on a fileserver or similar.
- From the language pack ISO (A) copy the content from the LocalExperiencePacks and x64\langpacks folders, then paste the content into the file share root.
- From the FOD Disk 1 ISO (B) copy all, then paste the content into the file share root.
- From the Inbox Apps ISO (C) copy the content of folder amd64fre, then paste the content into the file share root.
Installing the language packs
This PowerShell script will add all language components. You can download the script here. Make sure you put the correct drive letter in the $LIPContent variable. It needs to point to the share created before. The original script can be found on the DOCS page. I changed the language parameters for Dutch.
######################################################## ## Add Languages to running Windows Image for Capture ## ######################################################## ##Disable Language Pack Cleanup## Disable-ScheduledTask -TaskPath "\Microsoft\Windows\AppxDeploymentClient\" -TaskName "Pre-staged app cleanup" ##Set Language Pack Content Stores## [string]$LIPContent = "F:" ##Dutch## Add-AppProvisionedPackage -Online -PackagePath $LIPContent\nl-nl\LanguageExperiencePack.nl-nl.Neutral.appx -LicensePath $LIPContent\nl-nl\License.xml Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-Client-Language-Pack_x64_nl-nl.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Basic-nl-nl-Package~31bf3856ad364e35~amd64~~.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Handwriting-nl-nl-Package~31bf3856ad364e35~amd64~~.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-OCR-nl-nl-Package~31bf3856ad364e35~amd64~~.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Speech-nl-nl-Package~31bf3856ad364e35~amd64~~.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-TextToSpeech-nl-nl-Package~31bf3856ad364e35~amd64~~.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-NetFx3-OnDemand-Package~31bf3856ad364e35~amd64~nl-nl~.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-InternetExplorer-Optional-Package~31bf3856ad364e35~amd64~nl-nl~.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-MSPaint-FoD-Package~31bf3856ad364e35~amd64~nl-nl~.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-Notepad-FoD-Package~31bf3856ad364e35~amd64~nl-nl~.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-PowerShell-ISE-FOD-Package~31bf3856ad364e35~amd64~nl-nl~.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-Printing-WFS-FoD-Package~31bf3856ad364e35~amd64~nl-nl~.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-StepsRecorder-Package~31bf3856ad364e35~amd64~nl-nl~.cab Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-WordPad-FoD-Package~31bf3856ad364e35~amd64~nl-nl~.cab $LanguageList = Get-WinUserLanguageList $LanguageList.Add("nl-nl") Set-WinUserLanguageList $LanguageList -force
In my LAB the line with “Microsoft-Windows-LanguageFeatures-Speech-nl-nl-Package~31bf3856ad364e35~amd64~~.cab” failed. This file simply is not available on the ISO files. So, do not be alarmed when it fails in your environment too. After installing the language packs, you can prep the image as you would before.
Adding the language pack does not make it default for all users, in fact Microsoft advices to “instruct your users how to change the language”. In the most environments I work we want to preset this for the users, especially if all users use the same language.
Proof of installation
As you can see in above screenshot the Dutch (Nederlands) language is installed. But is not set as default for the user (yet). As you can see at the red A, B, C, D and E everything is listed as English (United States).
Creating the GPO for Dutch
Short version click here.
In this section we are going to create a Group Policy Object that will make sure that the user that logs in to the WVD Session host will receive the settings for a Dutch session. Without any user interaction.
In this instruction we set the following with this GPO:
- Windows 10 Language (interface, menu’s, apps)
- Regional Settings
- Locale (Currency, date time notations, etc)
- Keyboard language
- Time zone redirection
I created a special OU for this BLOG post. The OU is called “WVDMulti-MicroCloud” in the OU is my Session Host with Windows 10 – 20H2 Multi Session and the language pack installed like above. To make sure all the policies apply you need to create a Loopback policy with the Replace option. I always put that setting in a separate GPO. In the screenshot “C_LoopBack”. The other GPO is for the language settings. I named it “C_Dutch_nl-NL”.
Windows Display Language (A)
To change the Windows Display Language, we need to set these two GPO settings.
User Configuration/Policies/Administrative Templates/Control Panel/Regional and Language Options.
Change these two GPO settings:
- Restrict the UI languages Windows should use for the selected user: Enabled / Dutch
- Restrict selection of Windows menus and dialogs language: Enabled / Dutch
After setting those two GPO settings, we have a Dutch interface, as you can see in the screenshot above. A – Checked.
Apps and Websites (B)
In this section I will explain how to change the language of the Apps and Websites to Dutch. I reverse engineered these registry settings by looking with REGEDIT and changing the settings manually on the machine. After that I copied the registry values to a GPO and tested it. It seems to be working fine. For other languages please check with REGEDIT, change the setting manually on a test machine to figure out the exact values needed.
This is how the registry looks before. (English with Dutch language pack installed)
As you can see in the above Calculator screenshot it is in English.
This registry overview is when Dutch is selected.
And after logging in, the calculator (Rekenmachine) is in Dutch.
Now put them in the GPO:
These two registry keys are the only 2 that needs changing. The Languages changes, the WindowsOverride key needs to be deleted. Note: This is for Dutch, and only two installed languages. If you have another language or more then two things might be different.
After setting those two additional GPO settings, we have a Dutch Apps and Websites, as you can see in the screenshot above. B – Checked.
Regional Settings (C)
Next up is the Regional Settings. As you can see in the screenshot below, most things are in Dutch, except the date/time. It is listed as Monday instead of “maandag” and also the PM notation which is uncommon in The Netherlands.
This setting can be changed with a Group Policy Preference.
In the same GPO in the User Configuration/Preferences/Control Panel Settings/Regional Options click on the + sign in the toolbar. Default User Locale is English. Press F5 to change the red dotted line to green. When the line is green you can change the language to something else.
Change the language to Dutch and press Apply.
After making this GPO change the C is also fixed.
For changing the keyboard, we need to dive back into the registry again. I also reverse engineered this one. In HKCU/Keyboard Layout/Preload there are two values in my environment, as you can see in the screenshot below. The first with the “1” is the preferred keyboard language. Number 409 is English, number 413 is The Netherlands. Changing settings in a test lab and refreshing in regedit got me this far.
Screenshot above makes the English language/keyboard preferred.
Add these two lines to the GPO, this will make The Netherlands (413) preferred number 1.
After adding these two registries to the GPO and logging in the keyboard is also in Dutch (Netherlands). The layout stays in US International as is the default in The Netherlands.
At time of writing speaking to Windows is not yet possible in Dutch so we cannot fix this one.
After making all above changes we are nearly there. When we investigate the Settings panel, we still see some non-localized items. When browsing the registry I reverse engineered these settings as mentioned above.
As you can see on the screenshot above the “Country or region” is still on United States (Verenigde Staten).
Also, the timezone (tijdzone) as shown in above screenshot is still on UTC.
As you can see in above screenshot from regedit we still see ENU in the sLanguage key. Also a few others are missing.
In above section of the registry, we see nation “244” we need to change that too.
Add these five registry settings to change the last settings to “Nederland”. You can pick them from the server where your run the GPEdit and change the Value Data to the values in the above screenshot.
After that, the “Land of Regio” is now also changed to Nederland.
When I deploy a WVD Hostpool in location “West Europe” it will always put the Timezone on “UTC”. For the Netherlands this should be UTC+1 (Amsterdam).
This can be resolved in two ways:
- Set a fixed timezone with a PowerShell command run for every user.
- Timezone redirection from the client.
Create a powershell script called “timezone.ps1” and put this line in it:
Set-TimeZone -Id "W. Europe Standard Time"
After logging the timezone will be set to West Europe Standard Time for every user that logs on.
In the same GPO change the “Allow time zone redirection” to enabled. I prefer this solution, because when your user travel to another time zone they will probably still want a Dutch environment, but they need the local time of the region where they are. If they change their laptops to the local time zone and logon to WVD it will change with them.
Creating the GPO (short version)
This section has the same GPO settings as the long version, it is lacking explanation and proof. The GPO is for Dutch language on an English Windows 10 Multi Session – 20H2 version. Please install the language packs first as described in the beginning of this blog post.
Create a GPO for your WVD machines and put all setting you see below in it:
For the interface language.
For apps and websites.
For Regional settings: Go through all TABs press F5 to change the line color to green. When you are done press OK.
For the keyboard language.
For changing Country or region.
And last for time zone redirection. (other method explained in long version)
End of short version!