Language settings in Windows 10 is a little more complicated than just setting the display language and keyboard input. Let me explain further.
Region settings
The region settings control a number of things. If you change the language here, you will also change “cultural” properties such as date format, currency, number formatting and so on. These settings are linked together with the region language.
That means you can’t have English display language and Danish currency and time format. Because if you change the region to English you will also get English cultural settings. 😲 Stupid right?
Note: this behavior may have changed in Windows 10 1903, but I have not tested this thoroughly.
This is super frustrating for those who would like to have Windows in English, but different region settings.
The solution is a simple PowerShell command:
Set-WinCultureFromLanguageListOptOut -OptOut $True
As the documentation says, this disables the action of dynamically setting the “culture” for the current user based on changes to the Windows display language.
So now you can set the region in one of two ways. You can either set the region with the cmdlet:
Set-Culture -CultureInfo de-DE
or you can edit the region language in Control Panel – > Region.
Display language and keyboard language
In Windows 10 there is also something called “language lists“. Languages in Windows 10 can be a little more complicated than just setting the right display language and keyboard language.
I mean, if you think about it… Switzerland, for example, has four national languages; German, French, Italian and Romansh. People living in the cities Canton of Valais, Fribourg, and Bern are bilingual (speaking French and German), while Canton Graubünden is trilingual (German, Romansh and Italian).
So what language settings would you use in Switzerland?
My point here is that although you may have one main language, you might need multiple keyboard types. The Japanese, for example, speak one language but use three alphabets; hiragana, katakana, and kanji.
This leads us to the “language lists”.
A language list in Windows is basically just a bunch of display languages that each contain the following:
- Display language
- Text-to-speech
- Speech recognition
- Handwriting input mode
- Input method
- Spelling setting
- Text prediction setting
So when you change the language in Settings, you will also adjust these sub-properties of the language list.
To make things easier for myself I use this script to set all the language and culture settings according to my main language.
Feel free to grab it 😉
# Set WinUserLanguageList as a variable
$lang = Get-WinUserLanguageList
# Clear the WinUserLanguageList
$lang.Clear()
# Add language to the language list
$lang.add("en-US")
# Remove whatever input method is present
$lang[0].InputMethodTips.Clear()
# Add this keyboard as keyboard language
$lang[0].InputMethodTips.Add('0409:00000414')
# Set this language list as default
Set-WinUserLanguageList $lang -Force
# Make region settings independent of OS language
Set-WinCultureFromLanguageListOptOut -OptOut $True
# Set region to this Country
Set-Culture nb-NO
# Set the location to this location
Set-WinHomeLocation -GeoId 0xb1
# Set non-unicode legacy software to use this language as default
Set-WinSystemLocale -SystemLocale nb-NO
Sources:
http://drizin.io/Change-Keyboard-Input-Languages-with-Powershell/
http://output.to/sideway/default.asp?qno=180700016
https://4sysops.com/archives/adding-and-removing-keyboard-languages-with-powershell/
https://docs.microsoft.com/en-us/windows/win32/intl/table-of-geographical-locations
https://docs.microsoft.com/en-us/windows/win32/msi/localizing-the-error-and-actiontext-tables
https://docs.microsoft.com/en-us/windows/win32/wmformat/language-strings
https://powershell.org/forums/topic/modify-keyboard-layout/
https://www.autoitscript.com/autoit3/docs/appendix/OSLangCodes.htm
https://www.tenforums.com/tutorials/30656-see-default-system-language-windows-10-a.html