Keyboard Support

Contact and Search

Keyman.com Homepage

Header bottom

Keyman.com

Index

On this page

< 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."

Add a language to Keyboard's error

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

  1. Open Command Prompt as administrator.

  2. Place the .kmp file (in this case, the armenian.kmp) in the directory that shows up on the Command Prompt.

  3. 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.

  4. 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.

    Armernian Keyman keyboard with no language association installed
  5. The users can add the language they wish to use by selecting Add/remove language in the Keyman Configuration dialog for that keyboard.

  6. 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:

    Add language to the Armernian Keyman keyboard
  7. This should enable you to type the keyboard with the correct language.

Applies to

  • Keyman for Windows