Issue

Microsoft have released ISOs containing Windows 10 language packs. This TID details a method to select and integrate them into a Windows 10 build that is deployed via System Center.

Requirements

  • Windows 10 (Enterprise or Education edition)

  • Imaging Toolkit 10.0.4 (or newer)

  • ENGL build process configured in a System Center environment (Windows PE imaging)

Solution

Integrate Language Pack selection and installation into the deployment process as follows;

  1. Update Zim to display a list of available language options when restoring images
  2. When a language is selected restore the appropriate files to the local machine and store information to EBD
  3. Prompt to select the default language if more than one language is selected
  4. Prompt to enforce the selected default language (using Group policy setting)
  5. Install selected language packs during the deployment process and set as the default UI language
NOTE:More information on Windows 10 language packs is available at https://support.microsoft.com/en-us/help/14236/language-packs


WARNING!Do NOT perform this procedure in a production environment without first fully testing in a non-production test environment.



Steps

DoneTask
 
1.Download appropriate language packs from Microsoft
 
2.Configure the Imaging Environment
 
3.Integrate updates into build process
 
4.Test updated files
  1. Download langauge pack ISO files from Microsoft

  2. Configure the Imaging Environment

    Zim is used to select which project is restored to the machine. With the changes in this TID Zim will also let you select the language to be configured once the machine has been built.

    DoneTask
     
    1.Create a language lookup file, lang.ini
     
    2.Configure Zim to read the lang.ini file
     
    3.Configure the project restore form to display a language selection option (if available)
     
    4.Read in language settings from lang.ini based on information selected in the Zim form.
     
    5.Configure Zim to use EBD to store and restore the selected langage details
     
    6.Configure Zim to restore the language image file(s)
     
    7.Update zimpeget.cmd
     
    8.Save files to the server
    1. Create a lang.ini lookup file

      This file will list the available languages for each base image name as well as the locale information for the each language. The locale information will be used to ensure the correct keyboard layout etc. is set for the deployed machine.

      This file should be created in the <integration path>/zenworks/tftp/zimfiles folder.

      In this example scenario there are three MUI packs available plus the default language of English. Note that the MUI language packs are specific to the OS version. So, in order to ensure that the correct version is restored the Base_Image name from the projects.ini file is used.

      Review the projects.ini file and identify the Base_Image name for the OS you wish to deploy MUI packs to. For example, the entries highlighted in red below:

      ;
      ; ENGL Zim projects.ini lookup file
      ;
      
      [projects]
      project1 = Windows 10 Education [10586 (Feb '16)] (x64) - en-US
      project2 = OSONLY-win7-sp1-pro-x86-sccm1606
      project3 = BASEOS-win10-ent-x86-14393-sccm1606
      
      ; Project details
      [Windows 10 Education [10586 (Feb '16)] (x64) - en-US]
      Description        = Windows 10 Education [10586 (Feb '16)] (x64) - en-US
      project_image_path = win10-edu-x64
      project_os         = win10-edu-x64
      partition_count    = 2
      partition1_size    = 600
      partition2_size    = 60000
      driver_os          = win10-x64
      base_image         = win10-edu-x64-10586-postsp
      ztoolkit           = ztoolkit
      efi_boot_image     = win10-edu-x64-10586-uefi-boot
      
      [OSONLY-win7-sp1-pro-x86-sccm1606]
      Description        = OSONLY-win7-sp1-pro-x86-sccm1606
      project_image_path = osonly-win7-sp1-pro-x86-sccm1606
      project_os         = win7-sp1-pro-x86
      partition_count    = 1
      partition1_size    = 60000
      driver_os          = win7-x86
      base_image         = win7-sp1-pro-x86-postsp
      ztoolkit           = ztoolkit
      
      [BASEOS-win10-ent-x86-14393-sccm1606]
      Description        = BASEOS-win10-ent-x86-14393-sccm1606
      project_image_path = baseos-win10-ent-x86-14393-sccm1606
      project_os         = win10-ent-x86
      partition_count    = 1
      partition1_size    = 60000
      driver_os          = win10-x86
      base_image         = win10-ent-x86-14393-postsp
      ztoolkit           = ztoolkit

      Now add these entries into the [language] section of the lang.ini file then populate the language specific settings using the following example as a template:

      ; lang.ini
      
      [language]
      win10-ent-x86-14393-postsp = en, fr, nl
      win10-edu-x64-10586-postsp = en, fr, nl, de
      
      [en]
      SystemLocale=en-GB
      UserLocale=en-GB
      InputLocale=0809:00000809
      mui=en-GB
      Geo = 242
      
      [fr]
      SystemLocale=fr-FR
      UserLocale=fr-FR
      InputLocale=040c:0000040C
      mui=fr-FR
      Geo = 84
      
      [nl]
      SystemLocale=nl-NL
      UserLocale=nl-NL
      InputLocale=0413:00000413
      mui=nl-NL
      Geo = 176
      
      [de]
      SystemLocale=de-DE
      UserLocale=de-DE
      InputLocale=0407:00000407
      mui=de-DE
      Geo = 94
    2. Configure Zim to read the lang.ini file

      Update the zim.cfg file to read in the available language options from the lang.ini file.

      • Open zim.cfg file in a text editor

      • Find the following section in the file and update to include the changes highlighted in green:

        Label:Lookup_Project_Info
        
        ; Read in project specific information
        File:Ini,Get,"%_ZimDir%projects.ini","%Lookup_Project%","Project_Image_Path",Project_Image_Path
        File:Ini,Get,"%_ZimDir%projects.ini","%Lookup_Project%","Project_OS",Project_OS
        File:Ini,Get,"%_ZimDir%projects.ini","%Lookup_Project%","Partition_Count",Partition_Count
        File:Ini,Get,"%_ZimDir%projects.ini","%Lookup_Project%","Driver_OS",Project_Driver_OS
        File:Ini,Get,"%_ZimDir%projects.ini","%Lookup_Project%","Base_Image",Base_Image
        File:Ini,Get,"%_ZimDir%projects.ini","%Lookup_Project%","Ztoolkit",Project_Ztoolkit
        File:Ini,Get,"%_ZimDir%projects.ini","%Lookup_Project%","Novcomp",Project_novcomp
        
        ; Read in language information
        ; This uses the baseimage name from the projects.ini as the key. 
        ; This allows different MUI options to be specified for different OS images to cater for version-specific files
        File:Ini,Get,"%_ZimDir%lang.ini","language","%Base_Image%",lookup_lang
        
        Set:Ebd_lang,GetKeyPairStringValue("%EBDSTRING%", "lang")
        Set:Ebd_ForceMui,GetKeyPairStringValue("%EBDSTRING%", "ForceMui")
        
        ; Identify Win 10 version number from Base_Image variable.
        Set:OSVersion,token("%Base_Image%","-","4")
      • Save the changes to the zim.cfg file

    3. Configure the project restore form to display a language selection option (if available)

      The project restore form only needs to display a list of language options when the base image being restored has language options configured in the lang.ini file.

      • Open the zim.cfg file in a text editor

      • Find the following section in the file and update to include the changes highlighted in  green:

        Label:Ztoolkit_ComputerName_Form
          
        ; Launch a Form to display detected hardware and select machine type
        Form:Start,"Info","Hardware Detected","_OkCancel^_Ok",Blue
        Form:Item,"Item1",Label,"Manufacturer"
        Form:Item,"Item2",EditBox,"%Lookup_Section%",ReadOnly
        Form:Item,"Item3",Label,"Model"
        Form:Item,"Item4",EditBox,"%Lookup_Value%",ReadOnly
        Form:Item,"Item5",Label,"Hardware Image"
        Form:Item,"Item6",EditBox,"%Drivers_Image%",ReadOnly
        Form:Item,"Item7",Label,"Hardware Type"
        Form:Item,"Item8",EditBox,"%Machine_Type%",ReadOnly
        Form:Item,"Item9",Label,"OS"
        Form:Item,"Item10",EditBox,"%Project_OS%",ReadOnly
        Form:Item,"Item11",Label,"Computer Name"
        Form:Item,"Item12",EditBox,"%Ask_COMPUTERNAME%"
        ; Only display language selection if lang.ini info has been identified successfully
        If:Var,lookup_lang,NE,""
          Form:Item,"mui1",Label,"Language:"
          Form:Item,"mui2",CheckBoxes,"%Ebd_lang%","%lookup_lang%"
        End: 
        Form:Item,"Item13",Label,"Auto Restart after imaging"
        Form:Item,"Item14",RadioButtons,"Yes","Yes,No"
        Form:Display,"Info"
        
        If:Var,_Form,EQ,"_Cancel"
        Menu:Return
        End
        
        Set:Ask_COMPUTERNAME,%_Info_item12%
        Set:Ask_lang,%_Info_mui2%
        Set:AutoRestart,%_Info_item14%
        If:Var,Ask_COMPUTERNAME,EQ,""
        Dialog:Ask,"","You must specify a Computer Name.","_Ok",Red
        Goto:Ztoolkit_ComputerName
        Else:
        Set:ComputerNameLength,Len(%Ask_COMPUTERNAME%)
        If:Var,ComputerNameLength,GT,"15"
        Dialog:Ask,"Error","You must specify a Computer Name less than 16 characters","_Ok",Red
        Goto:Ztoolkit_ComputerName_Form
        End:
        End:
        If:Var,Ask_COMPUTERNAME,CONTAINS," "
        Dialog:Ask,"","The Computer Name must not contain a space.","_Ok",Red
        Goto:Ztoolkit_ComputerName_Form
        End:
        If:Var,Ask_COMPUTERNAME,NE,"%COMPUTERNAME%"
        Set:COMPUTERNAME,"%Ask_COMPUTERNAME%"
        End:
        
        If:Var,lookup_lang,NE,""
        Set:MuiCount,TokenCount("%Ask_lang%", ",")
        ; workaround issue with token count in zim(pe)
        Set:LookupMuiLength,len("%ask_lang%")
        If:Var,LookupMuiLength,"GT","1"
        If:Var,MuiCount,EQ,"0"
        Set:MuiCount,Math("+", 1)
        End:
        End:
        If:Var,MuiCount,NE,0
        ; We need to specify which language pack will be set by default and if this will be locked for all users using group policy.
        ; Launch a Form to Set Default Language
        Form:Start,"MUI","Language Options","_BackFinishCancel^_Finish",Blue
        Form:Item,"Item1",Label,"Select Default Language"
        Form:Item,"Item2",RadioButtons,"%zisd_DefaultLang%","%ask_lang%"
        Form:Item,"Item3",Label,"Lock display language to selection"
        Form:Item,"Item4",RadioButtons,"%zisd_ForceMui%","Yes,No"
        Form:Display,"MUI"
        
        If:Var,_Form,EQ,"_Cancel"
        Menu:Return
        End:
        If:Var,_Form,EQ,"_Back"
        Goto:Ztoolkit_ComputerName_Form
        End:
        Set:Ask_DefaultLang,%_Mui_Item2%
        Set:Ask_ForceMui,%_Mui_Item4%
        End:
        End:
        
      • Save the changes to the zim.cfg file

    4. Read in language settings from lang.ini based on information selected in the Zim form.

      When you select a language code in the Zim form the appropriate information needs to then be read in from the lang.ini file.

      • Open the zim.cfg file in a text editor

      • Find the following section in the file and update to include the highlighted changes:

        Dialog:Ask,"", "Warning! All hard disk data on this machine will be erased.\n\nContinue?","_YesNo",red
        If:Var,_ask,eq,"_No"
                Menu:Return
        End:
         
        If:Var,lookup_lang,NE,""
        ; Lookup information based on the language selected in the zim form
        If:Var,ask_DefaultLang,NE,""
        File:Ini,Get,"%_ZimDir%lang.ini","%Ask_lang%","SystemLocale",lookup_SystemLocale
        File:Ini,Get,"%_ZimDir%lang.ini","%ask_lang%","UserLocale",lookup_UserLocale
        File:Ini,Get,"%_ZimDir%lang.ini","%ask_lang%","InputLocale",lookup_InputLocale
        File:Ini,Get,"%_ZimDir%lang.ini","%ask_lang%","Geo",lookup_Geo
        File:Ini,Get,"%_ZimDir%lang.ini","%ask_DefaultLang%","mui",lookup_defaultMui
        
        ; Identify each MUI pack based on the selection
        Set:MuiIndex,"1"
        Set:LookupMui,Token("%ask_lang%", ",", %MuiIndex%)
        File:Ini,Get,"%_ZimDir%lang.ini","%LookupMui%","mui",MuiPacks
        While:Var,MuiIndex,NE,"%MuiCount%"
        Set:MuiIndex,Math("+", 1)
        Set:LookupMui,Token("%Ask_lang%", ",", %MuiIndex%)
        File:Ini,Get,"%_ZimDir%lang.ini","%LookupMui%","mui",lookupMui
        Set:MuiPacks,"%MuiPacks%,%lookupMui%"
        Wend:
        End:
        End:
        
        Dialog:Popup,"Restoring ENGL Smart Windows build process, please wait...",green
      • Save the changes to the zim.cfg file

    5. Update the zim.cfg file to store selected information to EBD

      The language information now needs to be stored to EBD to ensure that the build process can access it within Windows.

      • Open the zim.cfg file in a text editor

      • Update the file to include the highlighted changes:

        ; Update EBDSTRING (sample)
        Set:EBDSTRING,PutKeyPairStringValue("%EBDSTRING%","Machine_Type","%Machine_Type%")
        Set:EBDSTRING,PutKeyPairStringValue("%EBDSTRING%","OS","%Project_OS%")
        Set:EBDSTRING,PutKeyPairStringValue("%EBDSTRING%","Project","%Lookup_Project%")
        ; Store language information to EBD if required.
        If:Var,ask_lang,NE,""
        Set:EBDSTRING,PutKeyPairStringValue("%EBDSTRING%","lang","%Ask_lang%")
        Set:EBDSTRING,PutKeyPairStringValue("%EBDSTRING%","mui","%lookup_defaultMui%")
        Set:EBDSTRING,PutKeyPairStringValue("%EBDSTRING%","ForceMui","%Ask_ForceMui%")
        Set:EBDSTRING,PutKeyPairStringValue("%EBDSTRING%","SystemLocale","%lookup_SystemLocale%")
        Set:EBDSTRING,PutKeyPairStringValue("%EBDSTRING%","UserLocale","%lookup_UserLocale%")
        Set:EBDSTRING,PutKeyPairStringValue("%EBDSTRING%","InputLocale","%lookup_InputLocale%")
        Set:EBDSTRING,PutKeyPairStringValue("%EBDSTRING%","Geo","%lookup_Geo%")
        End:
        
        Set:MonitorStatus,"Started"
        Gosub:SendUpdateToMonitorServer
      • Save the changes to the zim.cfg file

    6. Update the zim.cfg file to restore selected MUI add-on image

      • Open the zim.cfg file in a text editor

      • Update the file to include the highlighted changes:

        Wim:Apply,"%Images_Path%\projects\%Project_Image_Path%\%Project_Ztoolkit%.wim","1","%Project_Partition%"
        If:Var,_Error,Eq,1
                ; Error applying image
                Dialog:Ask,"Error","Failed to restore image:\n\n%Images_Path%\projects\%Project_Image_Path%\%Project_Ztoolkit%.wim\n\nClick OK to return to menu.",_Ok
                Menu:Return
        End:
        Wim:Apply,"%Images_Path%\drivers\%Project_Driver_OS%\%Drivers_Image%.wim","1","%Project_Partition%" 
        
        ; Restore MUI image file(if Required)
        If:Var,MuiPacks,NE,""
        ; Need to Restore each of the specified language pack files
        Set:MuiCount,TokenCount("%MuiPacks%", ",")
        ; workaround issue with token count in zim(pe)
        Set:MuiPacksLength,len("%MuiPacks%")
        If:Var,MuiPacksLength,"GT","1"
        If:Var,MuiCount,EQ,"0"
        Set:MuiCount,Math("+", 1)
        End:
        End:
        Set:MuiIndex,"0"
        While:Var,MuiIndex,NE,"%MuiCount%"
        Set:MuiIndex,Math("+", 1)
        Set:MuiImage,Token("%MuiPacks%", ",", %MuiIndex%)
        Wim:Apply,"%Images_Path%\os\%Project_OS%\mui-%OSVersion%-%MuiImage%.wim","1","%Project_Partition%"
        Wend:
        End:  
        
        
        File:Run,"net use "%Images_Path%" /delete /yes", silent
        Pause:2
        Dialog:Popupclose
        
        
      • Save the changes to the zim.cfg file

    7. Update zimpeget.cmd to download the lang.ini file into the TFTP folder structure

      • Update the standard zimpeget.cmd to also retrieve the lang.ini file:
        ...
        
        REM Disable Windows Firewall
        wpeutil.exe DisableFirewall
        
        REM TFTP files
        for %%i in (zim.exe ztrace.exe) do Ztftpclient.exe /get /blksize:4096 /host:%PROXYADDR% /remote:"zimfiles/%PLATFORM%/%%i" /local:%%i >NUL
        for %%i in (engl.lic zim.cfg zim.jpg images.ini projects.ini lang.ini) do Ztftpclient.exe /get /blksize:4096 /host:%PROXYADDR% /remote:"zimfiles/%%i" /local:%%i >NUL
        
        REM Enable Windows Firewall
        wpeutil.exe EnableFirewall
        
        ...
      • Save the changes to the zimpeget.cmd file

    8. Save the updated files on the server

      The updated zim.cfg, zimpeget.cmd and lang.ini files now need to be transferred to the tftp/zimfiles folder on the ZENworks server.

  3. Integrate updates into the build process

    The build process needs to be updated to install the MUI langage packs and if required force the display langauge to the appropriate language.

    DoneTask
     
    1.Create MUI image files
     
    2.Configure the Language settings within the project
     
    3.Add a phase script to the project to install the MUI packs
     
    4.Create updated files for deployment
    1. Create MUI add-on image files

      The MUI files that were downloaded earlier need to be added to an image so that they can be deployed to the local machine by Zim.

      • Ensure the correct Language pack media has been downloaded for the base image that is being deployed.

         Make a note of the version number used in the base_image name from the projects.ini file.

      • Mount the ISO file that contains the Language pack information

        NOTE:Microsoft has changed the naming format of the language pack files with the Windows 10 1607 release.
         More information here: https://msdn.microsoft.com/en-gb/windows/hardware/commercialize/manufacture/desktop/where-is-lpcab .
         This TID will work with both filename formats.

        The files are either in a folder structure like: 
        \---langpacks
            +---ar-sa
            |       lp.cab
            |       
            +---bg-bg
            |       lp.cab
            |       
            +---cs-cz
            |       lp.cab
            |       
            +---da-dk
            \       lp.cab
         or 
        +---Windows Preinstallation Environment
        +---x64
        |   \---langpacks
        |           Microsoft-Windows-Client-Language-Interface-Pack_x64_af-za.cab
        |           Microsoft-Windows-Client-Language-Interface-Pack_x64_am-et.cab
        |           Microsoft-Windows-Client-Language-Interface-Pack_x64_as-in.cab
        |           Microsoft-Windows-Client-Language-Interface-Pack_x64_az-latn-az.cab
        |           Microsoft-Windows-Client-Language-Interface-Pack_x64_be-by.cab
        |           Microsoft-Windows-Client-Language-Interface-Pack_x64_bn-bd.cab
        |           Microsoft-Windows-Client-Language-Pack_x64_ar-sa.cab
        |           Microsoft-Windows-Client-Language-Pack_x64_bg-bg.cab
        |           Microsoft-Windows-Client-Language-Pack_x64_cs-cz.cab
        |           Microsoft-Windows-Client-Language-Pack_x64_da-dk.cab
        |           Microsoft-Windows-Client-Language-Pack_x64_de-de.cab
        |           
        \---x86
            \---langpacks
                    Microsoft-Windows-Client-Language-Interface-Pack_x86_af-za.cab
                    Microsoft-Windows-Client-Language-Interface-Pack_x86_am-et.cab
                    Microsoft-Windows-Client-Language-Interface-Pack_x86_as-in.cab
                    Microsoft-Windows-Client-Language-Interface-Pack_x86_az-latn-az.cab
                    Microsoft-Windows-Client-Language-Interface-Pack_x86_be-by.cab
                    Microsoft-Windows-Client-Language-Interface-Pack_x86_bn-bd.cab
                    Microsoft-Windows-Client-Language-Pack_x86_ar-sa.cab
                    Microsoft-Windows-Client-Language-Pack_x86_bg-bg.cab
                    Microsoft-Windows-Client-Language-Pack_x86_cs-cz.cab
                    Microsoft-Windows-Client-Language-Pack_x86_da-dk.cab
                    Microsoft-Windows-Client-Language-Pack_x86_de-de.cab
      • Make a note of the language code for each LP or LIP file - this can be identified from the file name, e.g.

        Microsoft-Windows-Client-Language-Interface-Pack_x64_zu-za.cab
        Microsoft-Windows-Client-Language-Pack_x64_de-de.cab
         or 
        \---langpacks
            +---ar-sa
            |       lp.cab
            |       
            +---bg-bg
            |       lp.cab
            |       
            +---cs-cz
            |       lp.cab
            |       
            \---da-dk
                   lp.cab
         This gives a language code of zu-ZA [Zulu (South Africa)] for the Language Interface Pack while the Language Pack has a language code of de-DE [German (Germany)]

        NOTE:The second part of the language code is normally displayed in uppercase


      • Create folder structure to be used to store MUI files under C:\ProgramData\ENGL\ImagingToolkit\Projects\MUI\<win10>-<edition>-<arch>\ folder structure.
        C:\ProgramData\ENGL\ImagingToolkit\Projects\MUI\Win10-edu-x64
             +---mui-10586-de-DE
             |   \---ztoolkit
             |       \---mui
             |           +---de-DE
             +---mui-10586-fr-FR
             |   \---ztoolkit
             |       \---mui
             |           +---fr-FR
             \---mui-10586-nl-NL
                 \---ztoolkit
                     \---mui
                         +---nl-NL
        NOTE:The version number 10586 is required to ensure that the correct MUI files are restored.


      • Copy appropriate files from the ISO into the file structure

        Langauge Pack files (Windows 10 - 1607 or newer) are shown in green

        C:\ProgramData\ENGL\ImagingToolkit\Projects\MUI\Win10-edu-x64
             +---mui-14393-de-DE
             |   \---ztoolkit
             |       \---mui
             |           \---de-DE
             |                   Microsoft-Windows-Client-Language-Pack_x64_de-DE.cab
             +---mui-14393-fr-FR
             |   \---ztoolkit
             |       \---mui
             |           \---fr-FR
             |                   Microsoft-Windows-Client-Language-Pack_x64_fr-FR.cab
             \---mui-14393-nl-NL
                 \---ztoolkit
                     \---mui
                             \---nl-NL
                                 Microsoft-Windows-Client-Language-Pack_x64_nl-NL.cab
         While Langauge Pack files (Windows 10 - 1511 or earlier) will look like: 
        C:\ProgramData\ENGL\ImagingToolkit\Projects\MUI\Win10-edu-x64
             +---mui-10586-de-DE
             |   \---ztoolkit
             |       \---mui
             |           \---de-DE
             |                   lp.cab
             +---mui-10586-fr-FR
             |   \---ztoolkit
             |       \---mui
             |           \---fr-FR
             |                   lp.cab
             \---mui-10586-nl-NL
                 \---ztoolkit
                     \---mui
                         \---nl-NL
                                 lp.cab


      • Install the ENGL Wimwiz tool (available to purchase) from - https://www.engl.co.uk/products/wimwiz

        NOTE:It is possible to use imagex / dism to set up the MUI wim images rather than the ENGL WimWiz tool. The steps for this process are outwith the scope of this TID.

      • Right click on mui-de-DE folder then select WimWiz -> Capture to ..

        Image images/tid-2016014-wimwiz.png not found. [WimWiz]
      • The WimWiz Capture Settings page will load.

         Change the Target path from : C:\ProgramData\ENGL\ImagingToolkit\Projects\MUI\win10-edu-x64\mui-10586-de-DE\ztoolkit.wim
         to:
        C:\ProgramData\ENGL\ImagingToolkit\Projects\MUI\win10-edu-x64\mui-10586-de-DE.wim

         Then click OK

        Image images/tid-2016014-wimwiz1.png not found. [WimWiz capture Settings]
      • Save the newly created wim files to the <server>\<images share>\os\<win10>-<windows edition>-<arch>\ folder structure and name using mui-<Windows Version>-<Language Code>.wim
        i.e.
        \\labsrv1\images\os\win10-edu-x64\mui-10586-de-de.wim
    2. Configure the language settings within the project

      Language settings for the project are stored to EBD by Zim when a project is deployed. The project needs to be updated to ensure that it uses this information.

      • Update project settings to use variables configured using Zim

        Select "Expert View" - "Windows" - "Localisation"

        Expand the System/User/Input locale options

        For each "Build Variable" entry populate the appropriate variable:

        Language SettingBuild Variable
        System Locale%ENGL_SystemLocale%
        User Locale%ENGL_UserLocale%
        Input Locale%ENGL_InputLocale%
        Geographic ID%ENGL_Geo%

        e.g.

        Image images/tid-2016014-expertview.png not found. [Localisation settings]
      • Save the changes to the project

    3. Add a phase script to the project to install the MUI packs

      The build process requires a custom phase script to be added to the project. This script will check if there is a c:\ztoolkit\mui folder and if it exists will run lpksetup to install the language packs in the folder structure.  The script will also read in the language settings from EBD and apply them to the machine.

      • Open notepad

      • Paste in the following Powershell script

        # Powershell script to install MUI language packs if folder structure has been found.
        
        # Create a reference to Ztoolkit Control
        $Utils = new-object -comobject "ENGL.Ztoolkit.Utils"
        $EBD = new-object -comobject "ENGL.Ztoolkit.EBD"
        
        if (Test-Path C:\ztoolkit\mui)
        {
        # The c:\ztoolkit\mui folder exists
        [void]$Utils.AppendLog("C:\ztoolkit\mui exists")
        [void]$Utils.AppendLog("Installing MUI Packs. This may take a while!")
        
        $process="lpksetup.exe"
        $arg = "/r /i * /p c:\ztoolkit\mui"
        $Utils.AppendLog("Using lpksetup to install Language packs found under c:\ztoolkit\mui")
        start-process $process -argumentList:$arg -wait
        $Utils.AppendLog("lpksetup has exited")
        
        # Now setup the display language settings
        
        # Read in MUI information from EBD
        # Read in EBD:Custom
        $EBDSTRING= $EBD.Get("Custom")
        
        # Read the values from EBDSTRING that we need to set the language.
        $Ebd_mui = $Utils.GetKeyPairStringValue($EBDSTRING, "mui")
        $Ebd_ForceMui = $Utils.GetKeyPairStringValue($EBDSTRING, "ForceMui")
        
        $Utils.AppendLog("EBD:MUI : $Ebd_mui")
        
        # Set Culture
        $Utils.AppendLog("Set-Culture $Ebd_mui")
        Set-Culture $Ebd_mui
        
        #Set the system locale 
        $Utils.AppendLog("Set-WinSystemLocale $Ebd_mui")
        Set-WinSystemLocale $Ebd_mui
        
        # Set the Language List
        $Utils.AppendLog("Set-WinUserLanguageList $Ebd_mui -force")
        Set-WinUserLanguageList $Ebd_mui -force
        
        # Set Group Policy key to force the UI settings to apply
        # This will only be processed if $Ebd_ForceMui is set to Yes.
        If($Ebd_ForceMui -eq "Yes") 
        {
        
        [void]$Utils.appendlog("Configure Group Policy to set the PreferredUILanguage to $Ebd_mui")
        $registryPath = "HKLM:\Software\Policies\Microsoft\MUI\Settings"
        $Name = "PreferredUILanguages"
        $value = $Ebd_mui
        
        If(!(Test-Path $registryPath))
        {
        [void]$Utils.appendlog(" Registry key doesn't exist so we need to create it before writing to it.")
        New-Item -Path $registryPath -Force | Out-Null
        New-ItemProperty -Path $registryPath -Name $name -Value $value ` -PropertyType STRING -Force | Out-Null
        }
        Else
        {
        [void]$utils.appendlog("Registry key exists so set value")
        New-ItemProperty -Path $registryPath -Name $name -Value $value  -PropertyType STRING -Force | Out-Null 
        }
        
        }
        }
        Else
        {
        [void]$Utils.AppendLog("C:\ztoolkit\mui does NOT exist")
        }
        
        [void]$Utils.AppendLog("Phase1-after.ps1 has completed.")
      • Save the file to the file system as phase1-after.ps1 and make a note of the path for later

    4. Open Build Console and load the appropriate <project>.xml file

    5. Select the Expert View then navigate to Customisation : Custom Files

    6. Right click in the properties view then select Add

    7. The "Add Custom Files" dialog will open. Browse to the phase1-after.ps1 created earlier then select it

    8. Click Open to add the file to the Custom Files property view

  4. Create updated files for deployment

    The project has now been updated. In order to deploy the changes when a machine is built the deployment process (ztoolkit) image needs to be recreated.

    • Validate the project

    • Launch Deployment wizard and create the build process image (ztoolkit)

    • Update the ..\images\<project>\ folder with new ztoolkit image file.

  5. Test updated files

    The files have all been updated on the server. These now need to be tested to ensure that everything works as required.

    • PXE boot a test machine to the updated imaging environment.

    • Select the Restore menu

    • Select the appropriate Windows 10 project

    • Select the appropriate MUI options to be tested

    • Select OK to restore the project images

      The image files will restore and the machine will reboot

    • The machine will build successfully and when reviewed it will have the selected MUI Language Pack (and / or Language Interface Pack) installed

  6. The process will look like:

    Image images/tid-2016014-zim-lang.gif not found. [demo (animated gif)]



  7. If you have any problems or questions about the steps in this TID please contact the ENGL support team