When I wrote Getting the language (and more!) of an LCID-less keyboard, which admittedly covered a lot of ground, I realized there were a lot of other points that would have to be clarified.

Like how MUI (Multilingual User Interface) fits in.

I mean, it is clear from looking at the registry that something is going on:

That bit with the Custom Language Display Name and the Layout Display Name and their SHLoadIndirectString style strings is fairly obvious.

(I still have to talk more about SHLoadIndirectString; I'll do that another day)

And it leads people like regular reader Ivan Petrov to wonder and even ask:

Hi Michael :-)

I've the following question:

How can someone USE, let's say something like the MUI technology, for the Description text when the custom Keyboard Layout is installed?

I mean when some user is using English User interface (MUI) to see the English Description text and if some user (on the same machine) is using a Bulgarian User interface, to see a Bulgarian Description text. All this at the Language bar and in the Text Services and Input Languages window in the Installed services under the Keyboard tree as localized node!

Regards,

Ivan.

Now of those two MUI-friendly strings, the Layout Display Name actually was added in Windows XP and is used to support localized keyboard layout names in every user interface language in Windows. All of the strings are in input.dll and the localizers can get to them.

But for custom keyboard layouts, obviously one cannot add strings to the input.dll file that ships in Windows. So we talked about it an decided that the resources of the layout DLL itself would work just fine. Starting with MSKLC 1.4, we automatically add the language name at string resource 1100 and the layout name at string resource 1000.

Of course there is no user interface within MSKLC to let you specify the various translations of those two strings, which would seem to defeat the purpose.

But let's take a closer look at the .KLC file from those adventures the other day, near the bottom of the file:

DESCRIPTIONS
0409    Like Totally Fer Shure

LANGUAGENAMES
0409    Valley Girl (California)

And there you have it. For any language you wish to add a translation for, and this is for either or both strings, you can add them here. MSKLC will not let you edit the name directly but if they are there then it will build the keyboard layout DLL containing them. Quite happily, in fact....

You are LCID (technically LANGID) bound since all of the resources are contained in the one DLL and there is no way to do multilingual resource tagging in one file. Perhaps in a future version this would change to including the various .mui files in the language name directories. And then custom languages might fare better (of course for the time being MUI does not work well with custom locales so MSKLC has some time before anyone needs to worry about getting that bit right. :-)

It is funny, the feature idea within MSKLC has been suggested for years but it never really got very far, as people struggled over what to make that UI look like -- some big grid where you choose the target language and put in the translation? Or would you give the DLL to some localization company and have them translate? Probably once they are separate DLLs, sure. But for now many some UI would have been nice? :-)

Ah well, no worries. If you want to put in some different translations of the custom language name (ignored unless it is in fact a custom language) and/or the keyboard layout name, adding them to the file is easy enough by just putting in the LANGID and the name, one line to each you add.

 

This post brought to you by (U+0fcf, a.k.a. TIBETAN SIGN RDEL NAG GSUM)