In this tutorial, I explain how you can add new word completion (XT9) dictionaries to your Windows Mobile Smartphone and how you can redefine their built-in keyboard layout to match the official keyboards used in different languages (QWERTZ in German, AZERTY in French etc.). Based on my tutorial, you will be able to define any keyboard layout – not just the official ones.
One of the drivers that made me write this was the complete lack of any kind of a tutorial or even usable forum posts on these questions (make a Google search for any of the Registry subkey names!). The available ones (see for example THIS) are pretty much useless. That is, this article, as with most of my other articles, is the first REAL article / tutorial / description of all these issues never ever published by anyone before.
Note that this article only refers to touchscreen-less MS Smartphone (Windows Mobile Standard) devices, NOT Pocket PC’s. Should you want to know how you can redefine the default word completion directory used by Pocket PC’s, check out for example THIS article of mine. In addition, should you want to know how to redefine the built-in thumbboard layout, just read the “Change slide-out keyboard layout” section of the related XDA-Dev Wiki page.
1. Adding new XT9 dictionaries
My biggest problem with my TC Vox (s710) was the lack of a Finnish dictionary, as I do most of my chatting in either English or Finnish. The English dictionary works just great and really greatly increases the text entering speed; this is why I’ve tried very hard to find a Finnish dictionary. This forced me to discover how the XT9 dictionaries work and how additional dictionaries can be registered.
First, some good news. Unlike with the Pocket PC platform, you can easily switch between the XT9 dictionaries by just long-pressing the * dial button (or, on the keyboard, the Sym + Space keys) and just selecting the new dictionary. With the Pocket PC, you couldn’t do this very easily – you would need to quickly change the two Registry values HKCU\ControlPanel\ Sip\DictFile and HKCU\ControlPanel\ Sip\ProbFile. (Of course, using a scripting language / environment like the excellent nScriptm either executable from Start / Programs, you can quickly create a program that switches between the two (or more) dictionaries quickly. You can even assign this file to a hardware button. See my past nScriptm-related articles on how this can be done.)
First, an elaboration on how this all works. Note that you will NOT need this in most cases, unless you want to add your DLL’s not existing in the two CAB’s provided in the next section; in this case, you can safely skip this section and move to the next, 1.2.
1.1 In the Registry
First, some advanced stuff. Let me clarify how the Registry keeps track of the different dictionaries.
1.1.1 eT9\AvailableLanguages
First, let’s have a look at HKEY_LOCAL_MACHINE\ Software\Tegic\eT9\ AvailableLanguages. This lists the supported languages. That is, if a given language is enabled in here, then, it will be selectable in the dictionary selector menu (regardless of whether its dictionary DLL really exists or not).
The language codes here come right from the official ISO country codes (listed for example HERE, in the LCIDHex column), with the exception of 04 being changed to 01.
That is, while the official language code of English is 0409, you must use 0109 to refer to English in here. The same stands for all other languages: for example, French is 040C; therefore, it must be referred to as 010C in here.
Note that the order of the numbers of the different languages is also important. For example, if you want to make sure French is the first, just move 010C to the first place of the list in this Registry value; then, the latter will be something like this:
010C,0109,0107,0110,010A,0113,0105,0108,0118,0115,0116,011B,011F,010E,011D,0114,010B,0106
(This registry import script is also available HERE, should you want to play with it.)
Doing this will result in French being offered as the first in the list:
You will need this information particularly useful when you want to move a language otherwise not in the first section (for example, not accessible with a phonepad shortcut key). For example, this THIS screenshot, you can see Finnish is at the end of the list - you both need a lot of scrolling (even if you press Up at first) to be able to access it and you can’t use a keypad shortcut to activate it either. To fix the problem, you only need to find the language code for Finnish (040B ), change the first 04 to 01 and just move the resulting 010B to the beginning of the list as can, for example, be seen in the following screenshot:
(registry import file available HERE; in it, the list is as follows: "010B,010C,0109,0107,0110,010A,0113,0105,0108,0118,0115,0116,011B,011F,010E,011D,0114,0106")
See how easy is to bring the languages you REALLY need to the beginning of the language list?
Note that, as with all the other Registry hacks in this article, contrary what some people state (for example HERE), the changes will be visible as soon as you modify the Registry. You do NOT need to restart your handheld.
Now, let’s move on to providing the real dictionaries for the system.
1.1.2 eT9\IME\KdbDlls
As one can easily guess, dictionaries take up a lot of memory (in general, between 100 and 400 kbytes); therefore, more scare languages don’t come with all Smartphones to conserve ROM memory. (For example, a Smartphone sold in the U.K. doesn’t necessarily need the Swedish or the Finnish dictionary built-in; therefore, they’re left out.)
This means, in addition to listing the language in eT9\AvailableLanguages (see section 1.1), you must also provide the given DLL for the system.
To do this, the given DLL, firs, must be got from somewhere (for example, extracted form a ROM of a localized (non-general) Smartphone having it) and, after being copied to the \Windows directory of your handheld, must be listed under the HKEY_LOCAL_MACHINE\ Software\Tegic\eT9\ IME\KdbDlls subkey.
The values in here are pretty straightforward: their names end up at the lower byte of the country code and their values contain the name of the DLL. For example, with English (language code in hex: 0409; therefore, lower byte: 09) will be represented like this:
"00010609"="eT9.Dis.9Keys.English.kbd.dll"
The upper three bytes will always be 000106 with eT9.Dis.9Keys DLL’s and 000107 with the much rarer (for example, Greek) eT9.HQD.Libra DLL’s.
1.2 Ready-made dictionaries
Should you want to avoid direct Registry editing, all you need to do is importing the CAB file containing the language dictionary you need. For example, if you need one or more of the English, French, German, Italian, Spanish, Dutch, Czech, Greek, Romanian , Polish, Portuguese, Slovak, Turkish, Hungarian set, you can just download and install the CAB file provided HERE (for the HTC Vox / s710) or HERE (HTC Excalibur / s620).
Should you, on the other hand, need Scandinavian languages (yes, including Finnish, Mr. Rutkowski ), you’ll need THIS file, originally compiled by XDA-Developers forum member mriz. (I provide a link to the version hosted by me because mriz hosts his version on Rapidshare, which is known to take down its downloads after a while.)
A screenshot of the language list is HERE; an in-action screenshot with the Finnish dictionary.
One of the drivers that made me write this was the complete lack of any kind of a tutorial or even usable forum posts on these questions (make a Google search for any of the Registry subkey names!). The available ones (see for example THIS) are pretty much useless. That is, this article, as with most of my other articles, is the first REAL article / tutorial / description of all these issues never ever published by anyone before.
Note that this article only refers to touchscreen-less MS Smartphone (Windows Mobile Standard) devices, NOT Pocket PC’s. Should you want to know how you can redefine the default word completion directory used by Pocket PC’s, check out for example THIS article of mine. In addition, should you want to know how to redefine the built-in thumbboard layout, just read the “Change slide-out keyboard layout” section of the related XDA-Dev Wiki page.
1. Adding new XT9 dictionaries
My biggest problem with my TC Vox (s710) was the lack of a Finnish dictionary, as I do most of my chatting in either English or Finnish. The English dictionary works just great and really greatly increases the text entering speed; this is why I’ve tried very hard to find a Finnish dictionary. This forced me to discover how the XT9 dictionaries work and how additional dictionaries can be registered.
First, some good news. Unlike with the Pocket PC platform, you can easily switch between the XT9 dictionaries by just long-pressing the * dial button (or, on the keyboard, the Sym + Space keys) and just selecting the new dictionary. With the Pocket PC, you couldn’t do this very easily – you would need to quickly change the two Registry values HKCU\ControlPanel\ Sip\DictFile and HKCU\ControlPanel\ Sip\ProbFile. (Of course, using a scripting language / environment like the excellent nScriptm either executable from Start / Programs, you can quickly create a program that switches between the two (or more) dictionaries quickly. You can even assign this file to a hardware button. See my past nScriptm-related articles on how this can be done.)
First, an elaboration on how this all works. Note that you will NOT need this in most cases, unless you want to add your DLL’s not existing in the two CAB’s provided in the next section; in this case, you can safely skip this section and move to the next, 1.2.
1.1 In the Registry
First, some advanced stuff. Let me clarify how the Registry keeps track of the different dictionaries.
1.1.1 eT9\AvailableLanguages
First, let’s have a look at HKEY_LOCAL_MACHINE\ Software\Tegic\eT9\ AvailableLanguages. This lists the supported languages. That is, if a given language is enabled in here, then, it will be selectable in the dictionary selector menu (regardless of whether its dictionary DLL really exists or not).
The language codes here come right from the official ISO country codes (listed for example HERE, in the LCIDHex column), with the exception of 04 being changed to 01.
That is, while the official language code of English is 0409, you must use 0109 to refer to English in here. The same stands for all other languages: for example, French is 040C; therefore, it must be referred to as 010C in here.
Note that the order of the numbers of the different languages is also important. For example, if you want to make sure French is the first, just move 010C to the first place of the list in this Registry value; then, the latter will be something like this:
010C,0109,0107,0110,010A,0113,0105,0108,0118,0115,0116,011B,011F,010E,011D,0114,010B,0106
(This registry import script is also available HERE, should you want to play with it.)
Doing this will result in French being offered as the first in the list:
You will need this information particularly useful when you want to move a language otherwise not in the first section (for example, not accessible with a phonepad shortcut key). For example, this THIS screenshot, you can see Finnish is at the end of the list - you both need a lot of scrolling (even if you press Up at first) to be able to access it and you can’t use a keypad shortcut to activate it either. To fix the problem, you only need to find the language code for Finnish (040B ), change the first 04 to 01 and just move the resulting 010B to the beginning of the list as can, for example, be seen in the following screenshot:
(registry import file available HERE; in it, the list is as follows: "010B,010C,0109,0107,0110,010A,0113,0105,0108,0118,0115,0116,011B,011F,010E,011D,0114,0106")
See how easy is to bring the languages you REALLY need to the beginning of the language list?
Note that, as with all the other Registry hacks in this article, contrary what some people state (for example HERE), the changes will be visible as soon as you modify the Registry. You do NOT need to restart your handheld.
Now, let’s move on to providing the real dictionaries for the system.
1.1.2 eT9\IME\KdbDlls
As one can easily guess, dictionaries take up a lot of memory (in general, between 100 and 400 kbytes); therefore, more scare languages don’t come with all Smartphones to conserve ROM memory. (For example, a Smartphone sold in the U.K. doesn’t necessarily need the Swedish or the Finnish dictionary built-in; therefore, they’re left out.)
This means, in addition to listing the language in eT9\AvailableLanguages (see section 1.1), you must also provide the given DLL for the system.
To do this, the given DLL, firs, must be got from somewhere (for example, extracted form a ROM of a localized (non-general) Smartphone having it) and, after being copied to the \Windows directory of your handheld, must be listed under the HKEY_LOCAL_MACHINE\ Software\Tegic\eT9\ IME\KdbDlls subkey.
The values in here are pretty straightforward: their names end up at the lower byte of the country code and their values contain the name of the DLL. For example, with English (language code in hex: 0409; therefore, lower byte: 09) will be represented like this:
"00010609"="eT9.Dis.9Keys.English.kbd.dll"
The upper three bytes will always be 000106 with eT9.Dis.9Keys DLL’s and 000107 with the much rarer (for example, Greek) eT9.HQD.Libra DLL’s.
1.2 Ready-made dictionaries
Should you want to avoid direct Registry editing, all you need to do is importing the CAB file containing the language dictionary you need. For example, if you need one or more of the English, French, German, Italian, Spanish, Dutch, Czech, Greek, Romanian , Polish, Portuguese, Slovak, Turkish, Hungarian set, you can just download and install the CAB file provided HERE (for the HTC Vox / s710) or HERE (HTC Excalibur / s620).
Should you, on the other hand, need Scandinavian languages (yes, including Finnish, Mr. Rutkowski ), you’ll need THIS file, originally compiled by XDA-Developers forum member mriz. (I provide a link to the version hosted by me because mriz hosts his version on Rapidshare, which is known to take down its downloads after a while.)
A screenshot of the language list is HERE; an in-action screenshot with the Finnish dictionary.