International companies often have issues with handling languages. It becomes a difficult task if the organization is global and requires maintaining multiple base versions of Windows and different languages.
You have deployed multiple language operating systems in your environment that might require you to patch with that language. Select a base language for your organization and then layer on the language packs as part of the process. For instance, if you only deployed the English USA version of the base ISO and then layered on language packs, you only need to deploy one version of the patches monthly because it is only looking for the base OS. This is much easier to manage and you are not required to store multiple large ISO files of the different base OSs. This article explains how to package language packs with BigFix.
- Download the language pack from the Microsoft Enterprise portal. Be sure to download the correct build that matches the version you want to deploy. For the example demonstrated in the article, the Spanish – Mexico language pack on Windows 10 1903 64 bit is used.
Note: Each build of Windows 10 has its own language pack and has to be packaged. Be sure to download the correct language pack to your corresponding build
- Open the ISO and browse to the correct architecture.
- Copy the cab file to be uploaded to BigFix.
- Create a software deployment in BigFix.
- In BigFix Console, open the Systems Lifecycle domain.
- Click Software Distribution > Manage Software Distribution.
- Click New Package to create a package. Enter a name for the package.
- Click Add Files to upload the cab file.
- Add the files to the package.
- Create a task to install the language pack. In the Manage Tasks tab, click New Task.
- Add the cab file to the task and click Next.
dism.exe /norestart /online /add-package /packagepath:"es-mx.cab"
- Add the 3 relevance statements to your new task:
operating system as string contains "1903"
system language does not contain "Spanish"
not exists key "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\es-mx" of registry
- Open the action script and add the following line after the end prefetch block:
action requires restart
- In BigFix Console, click Tools > Create a new Task to create a task.
- Add the following code to the action script. This creates an xml file and activates the language pack. You might need to run the script twice after a reboot.
Following is the action script (in Italics). Copy and paste into the BigFix Task. The items highlighted in bold need to be adjusted to the language you intend to deploy.
action uses wow64 redirection false
delete __createfile
Createfile until END_OF_FILE
<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="es-mx" SetAsCurrent="true"/>
</gs:UserLocale>
<!-- system locale -->
<gs:SystemLocale Name="es-mx"/>
<!-- GeoID -->
<gs:LocationPreferences>
<gs:GeoID Value="166"/>
</gs:LocationPreferences>
<gs:MUILanguagePreferences>
<gs:MUILanguage Value="es-mx"/>
<gs:MUIFallback Value="en-US"/>
</gs:MUILanguagePreferences>
<!-- input preferences -->
<gs:InputPreferences>
<!--es-mx-->
<gs:InputLanguageID Action="add" ID="080a:0000080a" Default="true"/>
<!--en-US-->
<gs:InputLanguageID Action="remove" ID="0409:00000409"/>
</gs:InputPreferences>
</gs:GlobalizationServices>
END_OF_FILE
delete es-mx.xml
move __createfile es-mx.xml
delete __createfile
waithidden control intl.cpl,, /f:"es-mx.xml"
This XML can be used with a variety of Windows 10 builds. You need not recreate it when you update the Windows build.
Note: To determine the correct Keyboard, Geo ID, and language name, refer to the following documentation. You might also need to change the keyboard and language if you are not using an English US OS.
- https://docs.microsoft.com/en-us/windows/win32/intl/table-of-geographical-locations
- https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-8.1-and-8/hh825682(v=win.10)?redirectedfrom=MSDN
- Edit the success criteria so it includes custom success criteria and click Edit.
- Select ... the applicability relevance evaluates to false option.
- Add the following 3 relevance statements to the task:
(if( name of operating system starts with "Win" ) then platform id of operating system != 3 else false) AND (if exists property "in proxy agent context" then ( not in proxy agent context ) else true )
not pending restart
exists key "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\es-MX" of registry
- Deploy the task. The first task created checks the relevance to see if the computer has the correct build of Windows installed and then installs the language pack. The second task that should be run next activates the language pack for the current users with profiles and the users who log in to the machine in the future. The activation performs better if the computer is restarted after the language pack install. You can set up a baseline to run these steps automatically and initiate 2 reboots.
Create a new baseline and add the two newly created tasks:
- Click set action settings.
- Select Reapply this action and whenever it becomes relevant again. Limit to 1 reapplication.
- In the Post-Action tab, select Restart computer after action completes.
When the baseline deploys the first time, you will see that the action is Pending Restart to install the language pack and not relevant for activation. Once the computer restarts, the activation will become relevant and activates the language pack and requests a second reboot.
You will also notice that the computer displays in the language of your choice.
You might want to set relevance for certain locations to install language packs by using a logic like "this location gets this language pack". For instance, if your OU structure is something similar where you separate each location, you can easily set relevance so certain locations get specific language packs.
Create an automatic group to create a relevance statement. In this example, an automatic group looks for the Active Directory path that contains "Mexico".
Once the group is created, you will see a relevance statement. You can add it to the baseline or task so that this language pack becomes relevant only for your Mexico locations.
(exists true whose (if true then (exists (if exists value of settings "_BESClient_ActiveDirectoryPathOverride" of client then value of setting "_BESClient_ActiveDirectoryPathOverride" of client else if exists true whose (if true then exists distinguished name of local computer of active directory else false) then distinguished name of local computer of active directory else "<none>") whose (it as string as lowercase contains "Mexico" as lowercase)) else false))
Edit the baseline or task to include the relevance that restricts installing the language pack to only your Mexico OU computers.
You can also provision languages packs as part of the OS Deployment. If you use BigFix OSD and have implemented the phases as described in Fat Images vs. Layered Images, the article now includes information about language packs too. If you have any questions, feel free to reach out.