HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links Subscribe free
← Back to Blog
Autopilot AutopilotIntuneLanguage PackLocal Experience PackOOBELocaleKeyboard LayoutLanguagePackManagementMicrosoft GraphWindows 11

Autopilot Language, Region and Keyboard: The Profile Skips a Screen, It Does Not Install a Language

IA
Imran Awan
21 August 2026

You set Language (Region) to German (Germany) in the Windows Autopilot deployment profile. You set Automatically configure keyboard to Yes. A brand new laptop runs through the out-of-box experience, or OOBE, and the language screens really do disappear. Then the user reaches the desktop and Windows is in English. The Start menu is English. The clock shows an American date format. And the keyboard produces the wrong characters. Nothing failed. Nothing errored. The profile did exactly what Microsoft documents it to do, which is a good deal less than most of us assume.

The short version

The Autopilot profile carries one documented locale value, exposed in Microsoft Graph as locale, plus a Boolean called keyboardSelectionPageSkipped. Microsoft documents these as controls that skip OOBE pages, not as controls that install anything. Windows can only display a language whose resources already exist on the disk, so a profile pointing at a language that was never installed leaves you on the factory display language. A genuinely localised device needs a language pack or Local Experience Pack, plus a step that copies the result into the system and new-user settings. The offline Autopilot JSON file has no documented language or region property at all.

The problem: the profile says de-DE and the desktop is still English

The symptom arrives as a ticket that reads like a bug. The Autopilot profile is configured for one country. The device that comes out the other end behaves like a different country. What makes it maddening is that the configuration blade gave you exactly one dropdown. One dropdown feels like it should mean one setting.

In practice the complaints split into distinct flavours. Each flavour is a different layer of Windows misbehaving, and each has a different fix.

Flavour one

OOBE skipped the language and keyboard pages, but Windows is displayed in English on the desktop.

Flavour two

The display language is correct, but the date, number and currency formats are still American.

Flavour three

Everything looks right for the first user. The sign-in screen and the next user are still English.

Flavour four

The keyboard page was skipped and the wrong physical layout was applied anyway.

Flavour four has a documented cause, so deal with it first. Microsoft lists a known issue titled "Setting up keyboard automatically doesn't accurately update keyboard language". The documented wording is that the profile setting "might fail to apply during provisioning due to a known OS issue". The documented resolution is to install KB5072033 or later. If you are chasing a keyboard layout on an unpatched image, stop chasing and patch.

Context: Microsoft documents Language (Region) as "Select the language to use for the device". It documents Automatically configure keyboard as "If a Language (Region) is selected, select Yes to skip the keyboard selection page". That second description contains the whole story. The verb is skip. Skipping a page is not the same thing as configuring an operating system.

The multi-region reality makes this worse. Most enterprises run one Autopilot profile, or a small handful, across a dozen countries. The profile is a service-side object assigned to a group. A single profile therefore hands the same single locale value to every device in every country that group covers. There is no per-device or per-country variable inside it.

Why it happens: five settings, five mechanisms, one profile field

What we casually call "the language of the device" is not one setting. Microsoft's own language documentation names the pieces separately. The Language Pack Management documentation lists them as the distinct things a language installation can touch. Reading that list is the moment the fog clears.

LayerWhat it actually controlsSet by
OOBE language selectionWhich language the setup screens are drawn in, and which pages the user is shown or not shown.The image contents, the manufacturer's Oobe.xml defaults, and the Autopilot profile page-skip settings.
System Preferred UI LanguageThe Windows display language: menus, dialogs, Settings, Start. Needs the matching language resources installed.Set from the OOBE choice on commercial editions. Changed later by Set-SystemPreferredUILanguage or the CSP node.
System localeThe code page used by non-Unicode, legacy applications. Nothing to do with the display language.Set-WinSystemLocale, or a language install run with -CopyToSettings.
Input method (keyboard layout)Which physical key produces which character. This is a per-user setting.Set-WinUserLanguageList and Set-WinDefaultInputMethodOverride, inside a user profile.
Locale and home locationRegional format for dates, numbers and currency, plus the GeoID that identifies the user's country or region.Set-Culture and Set-WinHomeLocation, also per user.

Five layers. Three of them are per-user. A per-user setting lives inside a user profile, and that profile does not exist yet when the Autopilot deployment profile is being read. That is the structural reason a service-side profile cannot fully localise a device.

What the profile field genuinely is

The deployment profile object is documented in Microsoft Graph. Its locale-related surface is small, and it is worth naming precisely. Inventing a field name here is how bad runbooks get written.

Documented propertyWhere it livesDocumented meaning
localewindowsAutopilotDeploymentProfile"The locale (language) to be used when configuring the device. E.g. en-US. The default value is os-default."
languagewindowsAutopilotDeploymentProfileThe older language-code property. Microsoft marks it read-only, and states that from May 2024 it is no longer supported and is deprecated in favour of locale.
keyboardSelectionPageSkippedoutOfBoxExperienceSetting"When TRUE, the keyboard selection page is hidden to the end user during OOBE if Language and Region are set."
skipKeyboardSelectionPageoutOfBoxExperienceSettingsThe same Boolean on the older settings complex type. Microsoft directs new work at outOfBoxExperienceSetting instead.

Notice what is not in that list. There is no keyboard layout identifier. There is no separate region property. There is no language pack reference. The documented default is literally os-default, which means "whatever the image already is".

Watch out: Microsoft's documented property table for AutopilotConfigurationFile.json, the offline profile used by Autopilot for existing devices, lists exactly nine properties: Version, CloudAssignedTenantId, CloudAssignedTenantDomain, CloudAssignedOobeConfig, CloudAssignedDomainJoinMethod, CloudAssignedForcedEnrollment, ZtdCorrelationId, CloudAssignedAadServerData and CloudAssignedDeviceName. None of them is a language or region property. Community tooling does emit language-shaped keys into that file, and it may well work, but it is undocumented. Hand-editing the file is genuinely destructive. Microsoft states the file must be named AutopilotConfigurationFile.json and encoded as ASCII or ANSI, and that OOBE will not follow the Autopilot experience if the file is saved as Unicode or UTF-8. An editor that quietly writes UTF-8 turns a working deployment into a plain retail OOBE.

Why the display language falls back to English

Here is the mechanism behind flavour one. Microsoft's languages overview states that on all commercial editions, the language chosen during OOBE is set as the System Preferred UI language, and that Windows is displayed in that language. That sounds like the profile should be enough. The catch is the word chosen. A language can only be chosen if its resources exist on the device.

Windows ships language resources for a limited set of languages in any given image. Microsoft documents 43 languages available as full language packs. Those are delivered as a .cab file, for example Microsoft-Windows-Client-Language-Pack_x64_es-es.cab. A further 47 language interface pack, or LIP, languages are documented as available only as .appx packages. Those are acquired through the Settings app after signing in, and Microsoft states explicitly that they cannot be used for system imaging. Those .appx packages are the Local Experience Packs, or LXPs.

If the language in your profile has no resources on the device, there is nothing to switch to. The display language simply stays where it was. Windows does not report this as a failure. It is the absence of an option, not an error.

Gotcha: Even a language that was in the factory image can vanish. Microsoft documents a background task, Microsoft\Windows\MUI\LPRemove, that removes language packs which are not actively used. That includes languages not selected during OOBE. The languages overview puts it plainly: "Some time after OOBE, any pre-installed languages that haven't been used are removed automatically." A device can therefore be localisable on day one and not localisable on day thirty.

Two more documented constraints worth knowing

The first is a network requirement. The profiles documentation carries a note that language and keyboard settings require Ethernet connectivity. Wi-Fi is documented as unsupported, because selecting a language, locale and keyboard is a prerequisite for making the Wi-Fi connection in the first place. A device provisioned over wireless will show you the pages regardless of the profile.

The second is a Group Policy conflict. Microsoft's Autopilot troubleshooting guidance lists Disallow changing of language/region/keyboard as a known conflicting policy. The documented reason is that the Group Policy Object, or GPO, is not supported during the OOBE flow because it affects the automatic sign-in experience. The documented advice is to hide those pages in the Autopilot profile instead of blocking them with policy.

Finally, check your expectations if you have moved to Windows Autopilot device preparation. Microsoft's documented capability list for device preparation covers the deployment flow, standard-user enforcement, application and script selection, the simplified OOBE progress view, and the deployment report. A Language (Region) control is not in that list.

How to verify: read the locale stack one layer at a time

Because there are five layers, no single command answers "is this device localised". You have to read each layer and compare them. Start with what the profile says, then read what the device actually did.

Step one: read the profile in the portal

intune.microsoft.comDevices › Windows › EnrollmentDeployment Profilesyour profile › Settings

Confirm two things on that blade. Check the Language (Region) value, and check whether Automatically configure keyboard is Yes. If Language (Region) is left at the operating system default, the keyboard setting has nothing to derive a layout from.

Step two: read the profile through Graph

The portal shows one dropdown. Graph shows the real property names. That is what you want when you are writing a runbook or comparing profiles across regions.

PowerShell — admin workstation, Microsoft Graph PowerShell
Connect-MgGraph -Scopes 'DeviceManagementServiceConfig.Read.All' # least privilege: a read scope is all an audit needs $u = 'https://graph.microsoft.com/v1.0/deviceManagement/windowsAutopilotDeploymentProfiles' (Invoke-MgGraphRequest -Method GET -Uri $u).value | Select-Object displayName, locale, @{n='KbPageSkipped';e={$_.outOfBoxExperienceSetting.keyboardSelectionPageSkipped}} displayName locale KbPageSkipped ----------- ------ ------------- EMEA user-driven de-DE True APAC user-driven os-default False # os-default means "leave the image alone" - the usual root cause

Step three: read the device's own locale stack

This is the step almost nobody runs, and it is the one that identifies which of the five layers is wrong. Run it on a device that came out of Autopilot looking wrong.

PowerShell — on the device (run elevated)
Get-SystemPreferredUILanguage # the Windows display language for the system - layer 2 Get-WinSystemLocale | Select-Object Name, DisplayName # the non-Unicode code page - layer 3, changes need a reboot (Get-WinUserLanguageList).InputMethodTips # keyboard layouts for THIS user only - layer 4 Get-Culture | Select-Object Name; Get-WinHomeLocation # regional format and GeoID home location - layer 5, also per user Get-InstalledLanguage # what resources actually exist on disk. If your target tag is # absent here, nothing above can ever be set to it.

The decision rule is simple. If Get-InstalledLanguage does not list your target language tag, this was never a profile problem. It was a missing language pack.

Step four: read the Autopilot event log

Windows Autopilot writes its profile acquisition and OOBE setting activity to a dedicated event channel. Events 101, 103 and 109 are the interesting ones here. Those are the events that show numeric and string OOBE settings being retrieved and processed.

Channel: Applications and Services Logs › Microsoft › Windows › ModernDeployment-Diagnostics-Provider › Autopilot
Event Viewer
Warning100Autopilot policy [name] not found
Info160AutopilotRetrieveSettings beginning acquisition
Info103AutopilotGetPolicyStringByName succeeded: policy name = [name]; value = [value]
Info111AutopilotRetrieveSettings succeeded
Error815ZtdDeviceHasNoAssignedProfile - no profile assigned, no default profile in tenant

The full documented catalogue for that channel is below. Read it as a profile-delivery diagnostic, not a localisation diagnostic. It will tell you the settings arrived. It will not tell you the display language changed.

Event IDTypeDocumented meaning
100WarningAutopilot policy not found. Typically temporary, while the device waits for a profile download.
101InfoAutopilotGetPolicyDwordByName succeeded. Autopilot retrieving and processing numeric OOBE settings.
103InfoAutopilotGetPolicyStringByName succeeded. Autopilot processing OOBE setting strings, such as the tenant name.
109InfoAutopilotGetOobeSettingsOverride succeeded. Autopilot processing state-related OOBE settings.
111InfoAutopilotRetrieveSettings succeeded. The profile settings that control OOBE behaviour were retrieved.
153InfoState change reported, usually ProfileState_Unknown to ProfileState_Available.
160InfoAutopilotRetrieveSettings beginning acquisition.
161InfoAutopilotManager retrieve settings succeeded. The profile downloaded.
163InfoDownload not required, the device is already provisioned. Clean or reset the device to change this.
164InfoAutopilotManager determined internet is available to attempt policy download.
171ErrorFailed to set TPM identity confirmed. Indicates a TPM attestation problem.
172ErrorFailed to set Autopilot profile as available. Typically related to event 171.
807ErrorZtdDeviceIsNotRegistered. Validate the hardware hash upload and the profile assignment.
809ErrorZtdDeviceHasNoAssignedProfile. The assigned profile no longer exists.
815ErrorZtdDeviceHasNoAssignedProfile. No profile assigned, and no default profile in the tenant.
908ErrorSerialNumberMismatch or ProductKeyIdMismatch. Re-register the device.

The one place the region value is actually visible

Event 103 is the most useful event in that whole catalogue, and almost nobody reads it. It prints the name and value of every string OOBE setting the device received from the deployment service. That includes the region value, under an internal policy name.

Event Viewer — observed on a live Windows 11 Enterprise device
Info101policy name = CloudAssignedDomainJoinMethod; policy value = 1
Info103policy name = CloudAssignedRegion; policy value = os-default
Info103policy name = CloudAssignedTenantId; policy value = {aaaaaaaa-0b0b-1c1c-2d2d-333333333333}
Info103policy name = DeploymentProfileName; policy value = PRD-PROFILE-NAME
Tip: That CloudAssignedRegion line is the closest thing to a direct read-out of what the service actually sent. Be precise about its status though. It is an internal policy name that the Autopilot event provider logs, observed here on a live device. It is not one of the nine documented AutopilotConfigurationFile.json properties, and Microsoft does not publish a reference for it. Read it as evidence, and never write it into a hand-crafted JSON file on the strength of a log line. In this capture the value is os-default, which is precisely the "the profile is not setting anything" state described earlier.

Step five: read the cached profile in the registry

Autopilot caches the settings it received from the deployment service. The documented values are worth looking at precisely because of what is missing from them.

Registry Editor
HKLM\SOFTWARE\Microsoft\Provisioning\Diagnostics\Autopilot(key)
CloudAssignedTenantDomaincontoso.onmicrosoft.com
CloudAssignedTenantId{aaaaaaaa-0b0b-1c1c-2d2d-333333333333}
CloudAssignedOobeConfig0x0000001c (28)
IsAutopilotDisabled0x00000000 (0)
TenantMatched0x00000001 (1)

Microsoft documents CloudAssignedOobeConfig as a bitmap showing which Autopilot settings were configured. The documented values are: SkipCortanaOptIn is 1, OobeUserNotLocalAdmin is 2, SkipExpressSettings is 4, SkipOemRegistration is 8 and SkipEula is 16. There is no language bit and no keyboard bit. Do not go looking in this key for proof that your locale landed, because Microsoft does not document one there.

Step six: collect the cab from OOBE

If the device is still sitting in OOBE, grab the documented diagnostic package before it reboots.

Command Prompt - OOBE (Shift+F10)
C:\> mdmdiagnosticstool.exe -area Autopilot -cab C:\Temp\locale.cab C:\> rem add TPM when investigating pre-provisioning or self-deploying: C:\> mdmdiagnosticstool.exe -area Autopilot;TPM -cab C:\Temp\locale.cab

The fix: the profile skips a screen, a language pack localises a device

Split the work in two. Use the Autopilot profile to control the OOBE experience. Use a language pack plus a policy to control the operating system. Trying to do the second job with the first tool is the whole reason this article exists.

Part one: set the profile correctly

  1. Sign in to the Microsoft Intune admin center.
  2. Select Devices in the left hand pane.
  3. Under By platform, select Windows.
  4. Under Device onboarding, select Enrollment.
  5. Under Windows Autopilot, select Deployment Profiles.
  6. Select your profile, then select Settings.
  7. Set Language (Region) to the target language. Microsoft documents this option as available in all deployment modes.
  8. Set Automatically configure keyboard to Yes to skip the keyboard selection page.
  9. Select Save.
Gotcha: Microsoft documents that changes to a deployment profile apply to devices assigned to it, but that the updated profile is not applied to a device already enrolled in Intune until the device is reset and enrolled again. Editing the language on a profile does nothing at all for the fleet you have already built.

There is no Group Policy equivalent for the Autopilot profile itself, so do not go looking for one. The profile is a cloud object in the Autopilot deployment service. Microsoft documents three ways to create it: the Intune admin center, the Microsoft 365 admin center, and the Intune Graph API. If you want it in code, use the windowsAutopilotDeploymentProfiles Graph resource.

Part two: install the language resources

This is the part that actually localises the device. Microsoft ships a supported PowerShell module for it. The module is documented as client-only, and Install-Language is documented as needing an elevated session.

PowerShell — the documented localisation sequence (run elevated)
Install-Language -Language 'de-DE' -CopyToSettings # downloads the pack plus its language features on demand. # -CopyToSettings is documented as setting the System and Default # Device Settings to the installed language after installation. Set-WinUILanguageOverride -Language 'de-DE' # current user display language. Documented on the Install-Language page. Set-WinUserLanguageList -LanguageList 'de-DE' -Force Set-WinHomeLocation -GeoId 94 Set-Culture -CultureInfo 'de-DE' # keyboard list, GeoID home location and regional format. Per user. Copy-UserInternationalSettingsToSystem -WelcomeScreen $True -NewUser $True # Windows 11 and later only. Copies display language, input language, # regional format and location/GeoID to the Welcome screen and system # accounts, and to new user accounts. Needs a restart to take effect.
Tip: Copy-UserInternationalSettingsToSystem is the cmdlet that fixes flavour three, the "correct for me, English for everyone else" complaint. Microsoft documents it as copying the Windows display language, input language, regional format and location or GeoID into the Welcome screen and system accounts, into new user accounts, or both. It is documented as available only on Windows 11 and later, it requires administrator permissions, and the changes take effect after the computer is restarted.

Deliver that sequence as an Intune platform script or a Win32 app, and assign it to a device group rather than a user group. Assigning to a device group is what lets the Enrollment Status Page, or ESP, track it during provisioning. Signal the reboot requirement through the app's return code rather than forcing a restart mid-OOBE.

Part three: stop Windows from deleting your work

Remember LPRemove. If you pre-install languages in an image, or install extras that a given user never selects, Windows will clean them up. Microsoft documents a Group Policy route, a registry route and an equivalent MDM policy.

Shared parent for every value below: HKEY_LOCAL_MACHINE\SOFTWARE
Subkey under that parentValueWhat Microsoft documents it doing
Policies\Microsoft\Control Panel\InternationalBlockCleanupOfUnusedPreinstalledLangPacks, REG_DWORD 0x1Blocks the LPRemove task from removing image-installed language packs that no user is using.
Microsoft\Windows\CurrentVersion\Policies\TextInputAllowLanguageFeaturesUninstall, REG_DWORD 0x0Blocks the language Features on Demand cleanup task from removing unused language feature packages.
Policies\Microsoft\MUI\SettingsMachineUILockBacks the "Force selected system UI language to overwrite the user UI language" policy, from Globalization.admx.
Microsoft\Provisioning\Diagnostics\AutopilotCloudAssignedOobeConfig and the related valuesRead-only diagnostic cache of the Autopilot profile settings. No documented language or keyboard value.

The Group Policy paths for the first three are documented, so prefer them over raw registry writes. For the cleanup block, the policy is Computer Configuration › Control Panel › Regional and Language Options › Block clean-up of unused language packs, set to Enabled. For the UI language lock, the same node holds Force selected system UI language to overwrite the user UI language. Both settings come from Globalization.admx. The Features on Demand block lives at Computer Configuration › Windows Components › Text Input › AllowLanguageFeaturesUninstall, set to Not allowed.

Through Intune, the same controls are available as MDM policies in the TimeLanguageSettings area of the Policy configuration service provider, or CSP.

./Device/Vendor/MSFT/Policy/Config/TimeLanguageSettings/BlockCleanupOfUnusedPreinstalledLangPacks
./Device/Vendor/MSFT/Policy/Config/TimeLanguageSettings/MachineUILanguageOverwrite
./Device/Vendor/MSFT/Policy/Config/TimeLanguageSettings/RestrictLanguagePacksAndFeaturesInstall
./Device/Vendor/MSFT/Policy/Config/TimeLanguageSettings/ConfigureTimeZone

Microsoft documents the first three for Windows 11 version 21H2 and later. ConfigureTimeZone is documented from Windows 10 version 1903. Watch RestrictLanguagePacksAndFeaturesInstall in particular. Set to 1 it restricts the install of language packs and language features, which is precisely what your localisation script is trying to do.

The CSP route, and its documented status

There is a purpose-built CSP for this. Microsoft documents LanguagePackManagement with an Install node per language tag, an InstalledLanguages inventory node, and a LanguageSettings/SystemPreferredUILanguages node. The documented install sequence adds the language node, replaces CopyToDeviceInternationalSettings with true, then executes StartInstallation.

./Device/Vendor/MSFT/LanguagePackManagement/Install/{Language ID}/StartInstallation
./Device/Vendor/MSFT/LanguagePackManagement/Install/{Language ID}/CopyToDeviceInternationalSettings
./Device/Vendor/MSFT/LanguagePackManagement/InstalledLanguages/{Language ID}/Providers
./Device/Vendor/MSFT/LanguagePackManagement/LanguageSettings/SystemPreferredUILanguages
Gotcha: Read the applicability table on that CSP page before you build a custom OMA-URI profile around it. Every node on it is currently documented as applicable to Windows Insider Preview, and the page carries an Important banner saying the settings are under development and subject to change. For production fleets today, the PowerShell module is the documented and generally available path. The CSP is where this is heading, not where it already is.

The Providers node is genuinely useful diagnostics, and its values are documented. A value of 1 means only the language pack cab is installed. A value of 2 means only the LXP is installed. A value of 3 means both are installed. That single integer answers the question "did this device get a real language pack or a Store LXP".

Part four: the multi-region decision

One profile cannot serve several locales. So pick a model deliberately, rather than arriving at one by accident.

ModelHow it worksWhat it costs
One profile per localeA profile per country, each with its own Language (Region) value, assigned to a country device group. Microsoft documents a limit of 350 profiles per tenant.Profile sprawl and group hygiene. Devices must land in the right group before OOBE, or they receive the default profile.
One neutral profile, localise by policyLeave the profile at the operating system default. Show the OOBE language pages. Localise afterwards with a per-country language app targeted at device groups.Users see the language screens during setup. The device ends up fully localised, including the sign-in screen.
HybridA profile per major region for the OOBE experience, plus a language app per country for the whole stack.The most work to build, and the only model that delivers both a clean OOBE and a correct desktop.
Context: If your hardware manufacturer writes an Oobe.xml into the factory image, that is a fourth mechanism in play. Microsoft documents that Oobe.xml sets the default language, location and keyboard layout, and that these become "the default values the user sees on the Language, Region, and Keyboard layout selection screens during OOBE". The user's own selection overrides them. Microsoft also documents authoring multiple Oobe.xml files for multi-language and multi-region deployments. That is why two devices from the same purchase order can behave differently.

Proof it worked: every layer reporting the same tag

The proof is not "the screens were skipped". The proof is all five layers agreeing. The companion script for this article walks the whole stack read-only and prints one report. That lets you compare a good device against a bad one without remembering six cmdlets.

The script is Get-AutopilotLocaleReport.ps1. It is local only, needs no Microsoft Graph connection, and changes nothing.

PowerShell — Get-AutopilotLocaleReport.ps1, the BEFORE run (identifiers redacted)
PS C:\> .\Get-AutopilotLocaleReport.ps1 === Autopilot Locale Report === Computer : CONTOSO-1234 OS : Microsoft Windows 11 Enterprise OS version : 10.0.26200 --- Layer 2: display language --- SystemPreferredUILanguage : en-US UILanguageOverride (user) : (not set - user follows the system language) --- Layer 3: system locale (non-Unicode programs) --- SystemLocale : en-US (English (United States)) --- Layer 4: input methods / keyboard layouts (current user only) --- [1] en-GB InputMethodTips: 0809:00000809 [2] en-US InputMethodTips: 0409:00000809 --- Layer 5: regional format and home location (current user only) --- Culture (regional format) : en-US (English (United States)) HomeLocation GeoId : 242 HomeLocation name : United Kingdom --- Installed language resources on disk --- en-GB pack : LpCab, LXP feature : BasicTyping, OCR en-US pack : LpCab feature : BasicTyping, Handwriting, Speech, TextToSpeech, OCR --- Consistency check across layers --- SystemPreferredUILanguage=en-US SystemLocale=en-US UserLanguageList[0]=en-GB Culture=en-US RESULT: MISMATCH across 2 distinct values: en-gb, en-us # a real device. The keyboard is British, everything else is American. # no Autopilot profile setting can reconcile those two facts.

That is a genuine run against a live Windows 11 Enterprise device, with the identifiers redacted. Layer 4 says British and layers 2, 3 and 5 say American. The GeoID home location says United Kingdom while the regional format says United States, which is exactly the split that produces "my dates are wrong" tickets. Note also that en-GB has both a language pack cab and an LXP installed while en-US has only the cab, so the raw materials were there all along.

After the localisation app runs, the same script gives you a single-value verdict.

PowerShell — the AFTER run (illustrative target state)
--- Consistency check across layers --- SystemPreferredUILanguage=de-DE SystemLocale=de-DE UserLanguageList[0]=de-DE Culture=de-DE --- Autopilot profile cache (read-only) --- CloudAssignedTenantDomain : contoso.onmicrosoft.com CloudAssignedOobeConfig : 28 IsAutopilotDisabled : 0 There is no documented language bit and no documented keyboard bit here. RESULT: CONSISTENT. Every readable layer reports de-DE. # and if any query had failed, the script would refuse to print a verdict # and exit 1, rather than showing a clean report built from missing data.

Run it before and after your language app. A healthy result is boring, with the same tag on every line. A broken result is obvious at a glance, and it points you at the layer to fix rather than sending you back to the deployment profile.

Microsoft Intune admin center
EMEA user-driven — Out-of-box experience (OOBE)
Deployment mode: User-driven  ·  Join type: Microsoft Entra joined
Language (Region)German (Germany)
Automatically configure keyboardYes
Microsoft Software License TermsHide
User account typeStandard

One last sanity check on the mental model. A profile that skips a screen is a user-experience feature. A language pack is an operating system change. They are configured in different places, they take effect at different times, and neither will ever do the other's job.

References

SourceWhat it establishes
Configure Windows Autopilot profilesThe documented wording for Language (Region) and Automatically configure keyboard, the Ethernet requirement, the 350-profile limit, and the reset-before-reapply behaviour.
windowsAutopilotDeploymentProfile resource typeThe locale property, the deprecation of language, and the shape of the OOBE settings complex types.
outOfBoxExperienceSetting resource typeThe exact documented name and meaning of keyboardSelectionPageSkipped.
Windows Autopilot known issuesThe keyboard auto-configuration known issue and its KB5072033 resolution.
Windows Autopilot troubleshooting FAQThe Autopilot event channel and Event ID catalogue, the profile registry cache, the OobeConfig bitmap, and the language/region/keyboard GPO conflict.
Windows Autopilot for existing devicesThe complete documented property table for AutopilotConfigurationFile.json, and the ASCII or ANSI encoding requirement.
Languages overviewLanguage pack versus LXP delivery, the OOBE language becoming the System Preferred UI language, and the LPRemove cleanup behaviour.
Available language packs for WindowsWhich languages exist as full language packs and which exist only as language interface packs.
LanguagePackManagement CSPThe node tree, the install sequence, the Providers values, and the Insider Preview applicability banner.
TimeLanguageSettings Policy CSPThe four OMA-URIs, their allowed values, and their Globalization.admx registry mappings.
Install-LanguageThe -CopyToSettings and -ExcludeFeatures parameters, and what each one does.
Copy-UserInternationalSettingsToSystemThe Welcome screen and new-user copy behaviour, the Windows 11 requirement, and the restart requirement.
Oobe.xml configuration fileThat manufacturer image defaults set the values the user sees on the Language, Region and Keyboard layout screens.
Windows Autopilot device preparation overviewThe documented capability list, which contains no Language (Region) control.

Community deep-dives

AuthorPostWhy it is worth reading
Sandy Zeng, MSEndpointMgrManaging Windows 11 languages and region settings (Part 1)Walks the same layered problem end to end with Install-Language, Set-WinUILanguageOverride and Copy-UserInternationalSettingsToSystem. Also covers packaging it as a Win32 app with a soft-reboot exit code so the Enrollment Status Page can track it.
Rudy Ooms, Call4CloudAutopilot Device Preparation and the Return of OOBE ControlsTracks the OOBE controls, keyboard skip among them, that device preparation policies do not yet expose. Useful context if you are migrating off classic Autopilot profiles.
Was this post helpful?
React below — no account needed
Share this post
LinkedIn X / Twitter Reddit Bluesky

More from EndpointWeekly

Autopilot
Reading AutopilotConfigurationFile.json: Every Documented Field…
Microsoft documents exactly nine properties for AutopilotConfigurationFile.json, and none…
Autopilot
Autopilot pre-provisioning: the reseal step is the part everyone…
The green success screen at the end of an Autopilot technician flow confirms enrollment,…
Autopilot
The Autopilot Conditional Access deadlock: requiring a compliant…
A brand-new Autopilot device cannot be compliant before it is enrolled, so a Conditional…