< Previous article Next article >
HOWTO: Working with transient languages on Keyman for Windows
This article will explain the Windows limitation of 4 custom language tags, which may result in the display of a message when you attempt to install a Keyman keyboard: "Unable to install keyboard language; Windows has a limit of 4 custom 'transient' languages, and you may have reached this limit."
Background - Windows
Windows has a set of ‘supported’ languages, which each have their own code identifier, but that covers only a tiny fraction of the languages listed in the BCP47 standard. For all the remaining languages, Windows has allocated 4 transient LCIDs (Language Code Identifiers) (0x2000, 0x2400, 0x2800, 0x2C00). These identifiers are really only used for legacy applications, but their use is embedded so deeply in Windows, particularly in terms of input methods, that it is impossible to add more than 4 languages that are not directly supported.
Background - Keyman
With Keyman, we register each keyboard against each of those identifiers when we install it (in the local machine context). Then, the current user context can be used to select the languages that the user wishes to use. Each user should be able to add up to 4 transient LCIDs for use with Keyman keyboards (assuming that no other apps have installed any).
Find out the system's language information
If you are encountering this issue then Windows must have already allocated all of the transient LCIDs. Below is the command to list all of the transient LCIDs in your system, and be sure to look out for the TransientLangId that uses the format of 0x2000
, 0x2400
, 0x2800
, and 0x2C00
.
For instance:
TransientLangId REG_DWORD 0x2400
Input
By using this command in the Command Prompt, you will see the allocated transient LCIDs.
reg query "HKCU\Control Panel\International\User Profile" /s
Output
For example:
HKEY_CURRENT_USER\Control Panel\International\User Profile\und-Latn
CachedLanguageName REG_SZ Undetermined (und-Latn)
TransientLangId REG_DWORD 0x2000 // There is one here
2000:{FE0420F1-38D1-4B4C-96BF-E7E20A74CFB7}{B7781350-2915-4D6F-BE76-B82B25BA4520} REG_DWORD 0x1
HKEY_CURRENT_USER\Control Panel\International\User Profile\ko
CachedLanguageName REG_SZ @Winlangdb.dll,-1255
FeaturesToInstall REG_DWORD 0xf7
0412:{A028AE76-01B1-46C2-99C4-ACD9858AE02F}{B5FE1F02-D5F2-4445-9C03-C568F23C99A1} REG_DWORD 0x1
HKEY_CURRENT_USER\Control Panel\International\User Profile\yi
CachedLanguageName REG_SZ @Winlangdb.dll,-1513
HKEY_CURRENT_USER\Control Panel\International\User Profile\zh-Hans-CN
CachedLanguageName REG_SZ @Winlangdb.dll,-1650
0804:{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{FA550B04-5AD7-411F-A5AC-CA038EC515D7} REG_DWORD 0x1
More information on LCIDs is available in the Microsoft LCID documentation section.
Workaround
There are two workarounds available:
1) Associate with another language: Install the keyboard without a language association, then associate it with the default language (e.g. en-US), or an existing language on the system.
2) Remove a transient language: Remove a transient language that you are no longer using, then install the desired keyboard.
Associated with different language example: With armenian.kmp
-
Open Command Prompt as administrator.
-
Place the .kmp file (in this case, the armenian.kmp) in the directory that shows up on the Command Prompt.
-
Run the command (the final = sign is important):
"C:\program files (x86)\keyman\keyman desktop\kmshell.exe" -i armenian.kmp=
(This will install armenian.kmp for all users, but with no language association.)
If an error occurs, please refer to this article.
-
The keyboard will be visible in Keyman Configuration, but not available for use by a user until they choose a language to use it with.
-
The users can add the language they wish to use by selecting Add/remove language in the Keyman Configuration dialog for that keyboard.
-
The default language(s) for that keyboard will be shown in the Add Language to Keyboard dialog, but they can choose an alternative if they prefer:
-
This should enable you to type the keyboard with the correct language.
Applies to
- Keyman for Windows