Install Language Packs when creating a Windows 10 reference image

These past few days, I’ve shared some scripts and tricks on how you can create a Windows 10 reference image. Next up is how to add Language Packs to your reference image. Over the years, I’ve worked with customers that have the need for adding Language Packs into their deployment process. Dealing with Language Packs in MDT, essentially adding them to your reference image, is a process that’s not very well documented. I’ve seen many examples of using for instance dism.exe, lpksetup.exe and other methods. They all may do the trick, but since MDT has built-in support for adding Language Packs to the reference image, I always tend to use that.
In this post, I’ll show you how to add Language Packs in your Windows 10 reference image by using MDT 2013 Update 2. I will also cover some bits of what’s going on under the hood regarding how MDT is applying the Language Pack, since it’s not really documented well.

NOTE! If you’re using MDT 2013 U1 (even the re-released version), you should install Update 2 and update your deployment share, since Update 2 contains fixes to a bug regarding Language Packs in Windows 10. You do not have to re-create your Task Sequence since the client.xml file have not been updated.

Obtaining Language Packs

Language Packs are available for each Current Branch release of Windows 10. The most recent version as to date is 1511. So if you’re creating a Windows 10 1511 reference image, you should look for the corresponding Language Packs. For volume licensed customers, you have access to download a bundle of all available Language Packs for Windows 10 through the Volume Licensing Service Center. OEMs can download Language Packs from the OEM Partner portal. Once you have obtained the Language Packs, simply extract the ones you need and save them on your MDT Build server for import into your Deployment Share.

Import Language Packs as Packages in MDT

Once you have extracted the desired Language Packs that you need, and placed them on your MDT Build server, you can go ahead and import them into your Deployment Share. This process is the same as any other process of importing Applications, Operating Systems etc in MDT. In the picture below, I’ve extracted the Swedish and Norwegian Language Packs, which I’ll be using through out this post.
1. Open Deployment WorkBench and expand your Deployment Share.
2. I recommend that you create a folder under the Packages node, called e.g. Windows 10 Enterprise x64. With that folder created, right click on the newly created folder under Packages and select Import OS Package.
3. Browse to the folder where you’ve extracted the Language Packs and click Next.
4. On the Summary and Confirmation pages, click Next and Finish.
5. Once imported, you should now see your Language Packs in the WorkBench under the folder called Windows 10 Enterprise x64.
With that completed, there’s no more to in terms of importing the Packages. Except for one small thing, that could be proven useful if you want to automate the selection of Language Packs during the Deployment Wizard by leveraging the Rules for your Deployment Share. Each of the imported Language Packs have been given an unique ID, also known as GUID. To locate the GUID of each Language Pack, either expand the columns to show the GUID:
Or open up the Properties of each Language Pack, to give you the ability to copy the GUID, like shown below:

Control what Language Packs should be installed

We have several options to control what Language Packs to install. One of them is the manual way, by simply select the desired Language Packs during the Deployment Wizard. Another is to leverage the Rules of the Deployment Share to dynamically install Language Packs based upon various variable values. Either way, whatever option you end up choosing, you should be familiar with two built-in MDT variables that comes into play when dealing with Language Packs. They are:

  • SkipPackageDisplay
  • LanguagePacks (property array)

The SkipPackageDisplay variable can be set to either YES or NO, and will control whether or not any Packages Deployment Wizard pages are shown in the Deployment Wizard, like in the screenshot below:
If we were to dynamically select for instance the only the Swedish Language Pack when building a reference image on a specific machine, we can control that with the Rules by looking for a particular MAC address. See the Rules example  below:

Priority=MacAddress, Default

In the example above, we say that the Swedish Language Pack (with the GUID taken from the Language Package properties), should be installed on a machine with the MAC address of 00:15:5D:85:6B:00. When running the Deployment Wizard for that particular system, it will look like below:
To skip this page in the wizard, ultimately not showing any of the Deployment Wizard pages, change the SkipPackageDisplay property to YES. On a final note on how to control what Language Packs to install in your reference image, remember that the LanguagePacks property is a sort of an array. You can specify multiple Language Packs by incrementing the trailing number, like in the following example:

Priority=MacAddress, Default

That’s everything you need to do, select a method of selecting what Language Packs to install and MDT will take care of the rest.

What’s happening behind the scenes

For advanced users, and also the curious ones (like me), I wanted to give you an overview of what’s going on behind the scenes after a Language Pack have been selected for installation. In your Task Sequence, under the Preinstall phase, there’s a step called Apply Patches. This step is eventually a script (like most of MDT, which is pretty cool) called ZTIPatches.wsf that takes care of imported OS packages (Language Packs, Hotfixes etc).
To explore what’s going a bit more, I’ve added a suspend step by calling the LTISuspend.wsf script in the State Restore phase. At this point, I’ve kicked off a reference image creation process, selected the Swedish Language Pack to be installed and have suspended the deployment right before the machine will get syspreped. If I open up Windows Explorer and go to C:\MININT\SMSOSD\OSDLOGS there’s a log file called ZTIPatches.log, created by the Apply Patches step in the Preinstall phase of my deployment.
In that file, we can examine what has happened in terms of installing our Language Pack. As we can see, it’s actually not installing anything, while instead it’s amending the unattend.xml file with a servicing section that holds a package.
With that knowledge, we can dig deeper and have a look at the unattend.xml that have been used during this deployment. Browse to C:\MININT and open up the unattend.xml file.
In order to get a better viewing experience while reading the XML file, I suggest that you open up the file by using Windows System Image Manager from Windows ADK. As we can see in the screenshot below, at the bottom of the different phases, there’s a Packages section containing information about the select Language Pack:
This is how MDT is in fact telling the deployment process to install the desired Language Pack.

Verify that your Language Pack have been installed

Once your reference image creation process has completed, you can start up the machine again and log back on.
1. Open the Control Panel and go to Clock, Language and Region.
2. Click on Languages.
3. Select options next to e.g. Swedish.
4. Under Windows display language, it should say whether a Language Pack for the select language is available and give you options to make it the primary language or to uninstall it.
That should cover it about how to add a Language Pack to your Windows 10 reference image. As usual, if you have any questions, write a comment in the section below.

Nickolaj Andersen

Chief Technical Architect and Enterprise Mobility MVP since 2016. Nickolaj has been in the IT industry for the past 10 years specializing in Enterprise Mobility and Security, Windows devices and deployments including automation. Awarded as PowerShell Hero in 2015 by the community for his script and tools contributions. Creator of ConfigMgr Prerequisites Tool, ConfigMgr OSD FrontEnd, ConfigMgr WebService to name a few. Frequent speaker at conferences such as Microsoft Ignite, NIC Conference and IT/Dev Connections including nordic user groups.


  • Hi, I am on MDT 8456, trying to deploy 1803 for Windows 10. I did as explained, imported language packs into deployment share under the packages folder, then configured the customsettings.ini:
    I still do not see the additional languages.

  • Very nice guide! But is this still working for new Windows 10 v1809? They have done something to the language packs in Windows 10 v1809. Right? Have issues to find the correct LanguagePacks for v1809. :-/

    • Hi Matthias,
      I don’t have access to VLSC right now, but on MSDN there’s a Windows 10 Language Pack version 1809 downloadable ISO, so there should also be one for volume licensing. Since 1803, they started developing LXP’s that could be used the same way as LP’s but during an in-place upgrade from 1803 to 1809 the language packs installed could be updated automatically from the Microsoft Store (if there’s any access to internet). Not really sure if that’s what you’re referring to though?

  • Nickolaj,
    Like a couple others, even though I specify SkipPackageDisplay=NO in my customsettings.ini, the Language Packs step does not show up in my Deployment Wizard. I have read of this issue on a few other sites as well, and am curious as to what the issue is? Could it be the lastest version of MDT (8450) dropped support for SkipPackageDisplay=NO? Wondering if you could share your cs.ini so I can compare.
    Thanks, great article!

  • Hi,
    In my MDT the window the PackageDisplay window doesn’t show up. Even though I have specified in rules.ini SkipPackageDisplay=NO
    Any idea why it is not showing?

    • After struggling with this same issue, I’ve found you have to download the correct language pack VERSION for your build! I downloaded the wrong ISO version from Volume Licensing Service Center. Make sure you use the large ISO (9GB or so) that has all the Windows 10 build versions!!!

    • Hi Edy,
      The Language Pack cab files need to match the selected OS image for the task sequence that will run, in terms of build version. So if the task sequence will deploy Windows 10 1803, the Language Pack selection in the wizard will only be shown when there’s matching Language Packs for that build in the selection profile.

  • […] wishing to add Russian language support to my Gold Image and have followed the guide here: Install Language Packs when creating a Windows 10 reference image | System Center ConfigMgr However when I go to deploy my reference image there is no option to add in Russian. is this […]

  • Following this tutorial I end up with my deployment halting on a screen saying “Hi there, Lets get a few basic things out of the way” which then needs me to choose the default language (out of the languages I have installed as per the steps in your article) and click next before the TS proceeds.
    Any ideas on how to skip this screen automatically?

    • Hi Jonathan, you had to specifiy the settings into the unattend.xml file.
      Important thing is to set it into the oobe and the specilized phase.

  • hi,
    Thank you for this tutorial.
    I want to automatically include a language pack to my reference image using MDT2013 but without displaying any choice during the initial install.
    Any clue?

  • i want to install language pack manually but even after using the variable, i am not getting the language pack selection screen could you tell me how to set this variables

  • the Windows where I can select the language will not Display. Try all what you have done. when I add the LanguagePacks Setting to the CustomSettings.ini file it will installed but I can not devide between Windows 7 and Windows 10 Installation. Any Idea?

  • Thanks for the post. Great stuff!
    Any ideas on how to make that installed language pack the default UI during OSD?

  • Also, remember that Cortana, OCR, Text-to-speech translations/ language features are separate from the language pack


Categories use cookies to ensure that we give you the best experience on our website.