Create a package with the lp.cab and LXP from the language ISO and the cabs from the FOD Disc 1 ISO. Stick the below PS script into the package. It works with any language but I'd create a package for each language (or create one giant package for all languages! "You get a language! You get a language! And YOU get a language!")
Create a TS step to run the PowerShell script. Choose the above package you just created.
The script parses through and installs all the cabs and appx's in the package. Then when a user or tech goes in and chooses the language, there is nothing to download. Works well for bare metal but I have not tested for an upgrade. I'll test that later today.
#Execution Policy
Set-ExecutionPolicy -ExecutionPolicy Bypass -Force
#Get List of Language Feature Packages from Folder
$LanguagePackages = (Get-ChildItem -Path ".\" -Filter "*.cab")
#Install All Language Packages and Feature - Output Results
foreach($LanguagePackage in $LanguagePackages)
{Add-WindowsPackage -Online -PackagePath $LanguagePackage.FullName -IgnoreCheck -NoRestart | Out-Null
$LanguageFeature = (Get-WindowsPackage -Online -PackagePath $LanguagePackage.FullName)
Add-WindowsCapability -Online -Name $LanguageFeature.ProductName | Out-Null}
$InstalledPackages = (Get-WindowsPackage -Online | ?{$_.PackageName -like "*LanguagePack*" -or $_.PackageName -like "*LanguageFeatures*" -and $_.PackageState -eq "Installed"})
foreach($InstalledPackage in $InstalledPackages){Write-Host -ForegroundColor Cyan $InstalledPackage.PackageName $InstalledPackage.PackageState}
#Install Language Experience Pack
$LXPs = (Get-ChildItem -Path ".\" -Filter "*.appx")
foreach($LXP in $LXPs)
{Add-ProvisionedAppxPackage -Online -PackagePath $LXP.FullName -SkipLicense | Out-Null}
if(Get-ProvisionedAppxPackage -Online | ?{$_.DisplayName -like "*LanguageExperiencePack*"}){Write-Host -ForegroundColor Cyan $LXP.BaseName "Installed"}
else{Write-Host -ForegroundColor Red $LXP.BaseName "Not Installed"}
Thanks!
John