windowspowershellcommand-lineregedit

How to set only keyboard language / layout in Windows 10?


How do I set only keyboard layout/language in Windows 10?

I wanna be able to change only the keyboard language. But it does also end up changing the Apps & Website.

I tried this.

Set-WinUserLanguageList da-DK,en-US -Force
Set-Culture da-DK # Region?
Set-WinSystemLocale -SystemLocale da-DK
Set-WinUILanguageOverride -Language en-US # Changed language in windows
Set-WinHomeLocation -GeoId 61
# https://learn.microsoft.com/en-us/windows/win32/intl/table-of-geographical-locations

But the Apps and Websites is changed to da-DK too.

enter image description here

It seems to follow the priority of the WinUserLanguageList. But that is also the only direct way of setting the keyboard language I have found.

So is there a command to only set the keyboard language? Or a command to only set the Apps and Websites language?


Solution

  • Solution originally at my PowerShell keyboard layout gist

    NOTE: This approach was tested with WIN10 and WIN11

    Steps

    1. Choose the Keyboard layout from M$ documentation.
    2. Identify Installed languages positions PS > Get-WinUserLanguageList
    3. Add desired keyboard layout (if not present yet) to any installed language
    4. Apply settings
    #Add international keyboard layout to first language
    
    $actualKB = Get-WinUserLanguageList
    $actualKB[0].InputMethodTips.Add('0409:00020409') #change [0] to your desired lang position
    Set-WinUserLanguageList $actualKB -Force
    
    #Set international keyboard as default to current user
    
    Set-WinDefaultInputMethodOverride -InputTip "0409:00000409" #set default keyboard en-US(International)
    

    Your Script

    Above i've shared how to deal with it generally. Bellow i'll put how to deal with it in your example script ensuring we've en-US international keyboard defined

    Set-WinUserLanguageList da-DK -Force
    
    #How we've set the lang list with only one lang, the lang id is [0]
    $actualKB = Get-WinUserLanguageList #get lang list object
    $actualKB[0].InputMethodTips.Clear() #OPTIONAL: clear all da-DK keyboard layouts to avoid annoying keyboard layout changes by accidentally shortcut triggers
    $actualKB[0].InputMethodTips.Add('0409:00020409') #add en-US (international) KB layout
    
    Set-WinUserLanguageList $actualKB -Force #update lang list with KB Settings
    
    

    NOTE: If You sure en-US international keyboard layout is present, jump last steps and just run following code to set it as default to current user:

    Set-WinDefaultInputMethodOverride -InputTip "0409:00000409" #set default keyboard en-US(International)