Navigate / search

Windows 10 1903 / 1909 – SCCM Language Pack Integration

As I’ve already described in one of my previous post, language pack integration could be a hell of a ride. Since Windows 10 Version 1809 Microsoft changed the way how language packs are installed. Microsoft now provides “LanguageExperiencePacks” that contain partially-localized language packs. These “LanguageExperiencePacks” that are provided as appx-packages still require base language packs.

Requirements

  • VLSC W10 1909 Image: Download the Windows 10 installation media from the “Volume Licensing Service Center“. Do not download the sources from other official Microsoft sites like https://my.visualstudio.com/ . The language pack integration with dism will fail if not using a VLSC image! Example Image: SW_DVD9_Win_Pro_10_1909.3_64BIT_English_Pro_Ent_EDU_N_MLF_X22-27457.ISO
  • VLSC W10 1903 Multi Language Pack: Even when installing W10 1909 the language pack for 1903 is required! Example: SW_DVD9_NTRL_Win_10_1903_32_64_ARM64_MultiLang_LangPackAll_LIP_X22-01656.ISO
  • VLSC W10 1903 Features on Demand: Even when installing W10 1909 the features on demand pack for 1903 is required! Example: SW_DVD9_NTRL_Win_10_1903_64Bit_MultiLang_FOD_1_X22-01658.ISO

 

Installation Order

  1. Install language packs (e.g Microsoft-Windows-Client-Language-Pack_x64_de-de.cab)
  2. Restart
  3. Install “LanguageExperiencePack” (e.g. LanguageExperiencePack.de-DE.Neutral.appx)
  4. Activate language pack for all users (e.g.  C:\Windows\System32\control.exe intl.cpl /f:”configuartion.xml”)
  5. Restart

 

Create SCCM Package

Start creating an individual SCCM package “MS_W10 1909 LanguagePack de-DE_x64_MU_01” containing all necessary content for language activation:

sign-in Microsoft-Windows-Client-Language-Pack_x64_de-de.cab

This file was extracted from the VLSC media file “SW_DVD9_NTRL_Win_10_1903_32_64_ARM64_MultiLang_LangPackAll_LIP_X22-01656.ISO” and contains the gui translation for the german language.

sign-in LanguageExperiencePack.de-DE.Neutral.appx

This file was extracted from the VLSC media file “SW_DVD9_NTRL_Win_10_1903_32_64_ARM64_MultiLang_LangPackAll_LIP_X22-01656.ISO” Do not forget to copy the “License.xml” file!

sign-in Microsoft-Windows-LanguageFeatures-Basic-de-de-Package[…].cab & […]Handwriting-de-de[…].cap & […]OCR-de-de[…].cap & […]Speech-de-de[…].cap & […]TextToSpeech-de-de[…].cap

These files were extracted from “SW_DVD9_NTRL_Win_10_1903_64Bit_MultiLang_FOD_1_X22-01658.ISO” and include the translation parts for different recognition parts. 

sign-in SCCM_Install_APPX.ps1

This PowerShell Script will install the “LanguageExperiencePack.de-DE.Neutral.appx”. The script will search the root folder of the sccm package for *.appx and License.xml files. Ensure that you anly have one appx package and one License.xml file available otherwise the script will fail.

$LogFileLocation = "C:\ProgramData\SCCM_Install-LanguageExperiencePack.log"

#Start Script
Start-Transcript -path $LogFileLocation -Force

function Write-Log($string)
{
    $dateTimeNow = Get-Date -Format "dd.MM.yyyy - HH:mm:ss"
    $outStr = "" + $dateTimeNow +" "+$string
    Write-Output $outStr
}

function Get-ScriptName
{
    if ($hostinvocation -ne $null) {$hostinvocation.MyCommand.Path}
    else {$script:MyInvocation.MyCommand.Path}
}

[string]$ScriptName = Get-ScriptName
[string]$ScriptDirectory = Split-Path $ScriptName


Write-Log "------------ Start Script  ------------"
Write-Log ""
Write-Log $ScriptName
Write-Log ""
Write-Log "------------------------------------"
Write-Log "Install APPX Package"
Write-Log "------------------------------------"

$appxbundle = Get-ChildItem -Path $ScriptDirectory -Filter *.appx -ErrorAction Stop
$appxbundlepath = $ScriptDirectory + "\" + $appxbundle

Write-Log ""
Write-Log "APPX Bundle Package Path: $appxbundlepath"

$license = Get-ChildItem -Path $ScriptDirectory -Filter License.xml -ErrorAction Stop
$licensepath = $ScriptDirectory + '\' + $license

Write-Log "License File: $licensepath"

Add-AppxProvisionedPackage -Online -PackagePath $appxbundlepath -Licensepath $licensepath


Write-Log ""
Write-Log "------------- End Script -------------"

Stop-Transcript

 

sign-in SCCM_SetLangPack.ps1

This PowerShell script will search the SCCM package root folder for the file “de-DE.xml” containing the language configuration for the operating system. If you like to use a different xml file name just rewrite line 31.

$LogFileLocation = "C:\ProgramData\SCCM_SetLangPack.log"

#Start Script
Start-Transcript -path $LogFileLocation -Force

function Write-Log($string)
{
    $dateTimeNow = Get-Date -Format "dd.MM.yyyy - HH:mm:ss"
    $outStr = "" + $dateTimeNow +" "+$string
    Write-Output $outStr     
}

function Get-ScriptName
{
    if ($hostinvocation -ne $null) {$hostinvocation.MyCommand.Path}
    else {$script:MyInvocation.MyCommand.Path}
}

[string]$ScriptName = Get-ScriptName
[string]$ScriptDirectory = Split-Path $ScriptName


Write-Log "------------ Start Script  ------------"
Write-Log ""
Write-Log $ScriptName
Write-Log ""
Write-Log "------------------------------------"
Write-Log "Get Language XML Path"
Write-Log "------------------------------------"

$XMLfile = Get-ChildItem -Path $ScriptDirectory -Filter de-DE.xml -ErrorAction Stop
$XML = $ScriptDirectory + "\" + $XMLfile

Write-Log ""
Write-Log $XML
Write-Log ""

Write-Log "------------------------------------"
Write-Log "Set Language XML as Active"
Write-Log "------------------------------------"
Write-Log ""
Write-Log "Execute $env:SystemRoot\System32\control.exe intl.cpl,,/f:`"$XML`""

& $env:SystemRoot\System32\control.exe "intl.cpl,,/f:`"$XML`""

Write-Log ""
Write-Log "Start Sleep for 2 seconds"
start-sleep -seconds 2

Write-Log ""
Write-Log "------------- End Script  -------------"

Stop-Transcript

sign-in de-DE.xml

  • Set language as default language for all users
  • Set the system locale to “de-DE”
  • Set the GEOID to “94”
  • Set “en-US” as fallback language
  • Add the German keyboard layout “0407:00000407”
  • Remove the English keyboard layout “0409:00000409”

<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"> <!--User List--> <gs:UserList> <gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/> </gs:UserList> <!-- user locale --> <gs:UserLocale> <gs:Locale Name="de-DE" SetAsCurrent="true"/> </gs:UserLocale> <!-- system locale --> <gs:SystemLocale Name="de-DE"/> <!-- GeoID --> <gs:LocationPreferences> <gs:GeoID Value="94"/> </gs:LocationPreferences> <gs:MUILanguagePreferences> <gs:MUILanguage Value="de-DE"/> <gs:MUIFallback Value="en-US"/> </gs:MUILanguagePreferences> <!-- input preferences --> <gs:InputPreferences> <!--de-DE--> <gs:InputLanguageID Action="add" ID="0407:00000407" Default="true"/> <!--en-US--> <gs:InputLanguageID Action="remove" ID="0409:00000409"/> </gs:InputPreferences> </gs:GlobalizationServices>

 

Modify Task Sequence

Get your Windows 10 deployment Task Sequence (TS) and add the following steps to your TS.

  • Create the TS Step  Install Windows-Client-Language-Pack_x64_de-de  
  • Add the command  dism.exe /norestart /online /add-package /packagepath:.\Microsoft-Windows-Client-Language-Pack_x64_de-de.cab 
  • Select the distributed package.
  • Create the TS Step  Install Windows-LanguageFeatures-Basic-de-de  
  • Add the command  dism.exe /norestart /online /add-package /packagepath:.\Microsoft-Windows-LanguageFeatures-Basic-de-de-Package~31bf3856ad364e35~amd64~~.cab 
  • Select the distributed package.
  • Create the TS Step  Install Windows-LanguageFeatures-Handwriting-de-de  
  • Add the command  dism.exe /norestart /online /add-package /packagepath:.\Microsoft-Windows-LanguageFeatures-Handwriting-de-de-Package~31bf3856ad364e35~amd64~~.cab 
  • Select the distributed package.
  • Create the TS Step  Install Windows-LanguageFeatures-OCR-de-de  
  • Add the command  dism.exe /norestart /online /add-package /packagepath:.\Microsoft-Windows-LanguageFeatures-OCR-de-de-Package~31bf3856ad364e35~amd64~~.cab 
  • Select the distributed package.
  • Create the TS Step  Install Windows-LanguageFeatures-Speech-de-de  
  • Add the command  dism.exe /norestart /online /add-package /packagepath:.\Microsoft-Windows-LanguageFeatures-Speech-de-de-Package~31bf3856ad364e35~amd64~~.cab 
  • Select the distributed package.
  • Create the TS Step  Install Windows-LanguageFeatures-TextToSpeech-de  
  • Add the command  dism.exe /norestart /online /add-package /packagepath:.\Microsoft-Windows-LanguageFeatures-TextToSpeech-de-de-Package~31bf3856ad364e35~amd64~~.cab 
  • Select the distributed package.
  • Create the TS Step  Restart Computer (Installed OS)  
  • Create the TS Step  Install LanguageExperiencePack.de-DE.Neutral.appxRestart Computer (Installed OS)  
  • Run Script  SCCM_Install_APPX.ps1
  • Bypass! 
  • Create the TS Step  Run SCCM_SetLangPack.ps1  
  • Run Script  SCCM_SetLangPack.ps1
  • Bypass! 
  • Create the TS Step  Restart Computer (Installed OS)  
  • Create the TS Step  Install KB4556799 (Language Settings Fix)  
  • Add the command  wusa.exe windows10.0-kb4556799-x64_9de920d8738612baa81a751b003ff98f0ce7156b.msu /quiet 
  • Select the distributed package.
  • Create the TS Step  Restart Computer (Installed OS)  

 

Fixing errors in settings menu

Right after the succesfull installation I’ve noticed several error messages in the settings menu:

 

It took me hours to figure out that the installation of the newest Cumulative Update will fix all these errors.

Leave a comment

name*

email* (not published)

website

This site uses Akismet to reduce spam. Learn how your comment data is processed.