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:
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
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.
1.2.1 A caveat: very important!
When you install ANY language pack, HKEY_LOCAL_MACHINE\ Software\Tegic\eT9\ AvailableLanguages (see section 1.1) will be overridden and the old dictionaries NOT present in the just-installed one will just disappear! Therefore, you MUST for example save the original contents of this entry and, after installing ANY language pack, just concatenate these numbers to the new ones.
For example, if you install the Scandinavian pack on a handheld that previously had the MoDaCo multilingual pack, eT9\AvailableLanguages will contain only the following after the import (that is, four languages; not even English):
011D,0114,010B,0106
instead of the combination of both packs, listing all the languages in both of them; that is,
0109,010C,0107,0110,010A,0113,0105,0108,0118,0115,0116,011B,011F,010E,011D,0114,010B,0106
(I’ve used italic to denote the languages installed by the previously and, by bold, the Scandinavian pack.)
Therefore, you’ll need to re-add the, now, invisible languages to eT9\AvailableLanguages. Should you be aware of this (by manually editing the Registry), just use for example THIS registry import script.
1.2.2 Compatibility
These files worked just great on my HTC Vox. They, however, didn’t work at all on my WM5 AKU3 HTC Oxygen (s310).
2. Redefining the layout of the built-in hardware keyboard (thumbboard)
Unlike on the Pocket PC, where you could quickly swap the keyboard layout by just editing (as is described in the “Change slide-out keyboard layout” section of the related XDA-Dev Wiki page)
With this platform, the situation is a bit more complicated: you must supply the full keyboard mapping file and, in addition, you must also register it in the Registry.
2.1 Keyboard layout files
The recommended (but not compulsory) naming convention for a keyboard mapping file is the following:
eT9.Vox.XXXX.kmap.txt
where XXXX is the official language code (see the already-linked MSDN page for them) and you can change “Vox” to “Excalibur” on the HTC Excalibur (or anythign similar on other, keyboard-enabled devices). Note that, the Smartphone platform (as opposed to Pocket PC) lacking related file name conventions (you must explicitly refer to the keyboard mapping file in the Registry), it can be named anything. I only use this name to be compliant with the naming conventions used by the Vox version of the MoDaCo dictionary installer.
The contents of these files may seem a bit complicated at first but you will soon be able to navigate around. For example, let’s have a look at the following (Greek) configuration file:
As one can see, there are five fields (referred to as {VK VK' CH1 CH2 KeyIndex} by the code samples) in each record defining a button. The first of them just lists what is physically printed on the key and doesn’t need to be touched – it’s only for human consumption, to give you a helping hand when editing the keyboard map file. The second is more important: it’s what you will want to modify when defining a different letter to be input when you press a button. The third and fourth fields define the symbols produced by Fn + key and the symbols entered in 123 mode (the latter two is the same). Finally, you don’t need to touch the last field either.
Note that you can entirely leave the last field (KeyIndex) off (as is in the German layout I provide below). Then, only the first field in the record will be used to determine which key you’re talking about. An example of this (with the German layout):
{Q Q @ @}
{W W ! !}
{E E 0 0}
{R R 1 1}
{T T 2 2}
{Y Z 3 3}
{U U + +}
{I I / /}
{O O ( (}
{P P ) )}
{A A ? ?}
{S S * *}
{D D 4 4}
{F F 5 5}
{G G 6 6}
{H H - -}
{J J _ _}
{K K : :}
{L L ; ;}
{Z Y 0x09 Z}
{X X # #}
{C C 7 7}
{V V 8 8}
{B B 9 9}
{N N 0xFA N} // 0xFA = Launch symbol window
{M M 0xFB M} // 0xFB = Launch SMS
{0xBE . , ,} // 0xBE = VK_PERIOD
{0x26 0x26 0x21 0x26} // 0xF1 = up arrow, 0x21 = page up
{0x28 0x28 0x22 0x28} // 0xF2 = down arrow, 0x22 = page down
{0x25 0x25 0xFD 0x25} // 0xF3 = left arrow, 0xFD = launch pIE
{0x27 0x27 0xDE 0x27} // 0xF4 = right arrow, 0xDE = '
Let’s take a closer look at the Z and the Y records above: that is, the two records you need to modify to get the German layout out of the English one (on limited keyboards not having a number row and non-alphabetic keys):
{Z Y 0x09 Z}
…
{Y Z 3 3}
As you can see, if you need to instruct the handheld to enter a ‘Y’ character when you press the “Z” button, you need to modify the “Z” record.
(Note that this map file is HERE and the accompanying Registry import file – see the next, 2.2 section – HERE)
2.2 Registering keyboard layout files in the Registry
Only providing keyboard layout files (see section 2.1) is insufficient. You must also register these files in the Registry so that the system knows you use a, from English, different keyboard layout.
To do this, you must register they layout file under both HKEY_LOCAL_MACHINE\Software\ Tegic\eT9\IME\ KeyboardLayouDlls and HKEY_LOCAL_MACHINE\Software\ Tegic\eT9\IME\ LanguageKeyboardIDMapping.
With the former, you must create a new value named 000007XX, where XX is the lower byte of the language code (for example, 07 for (the 0407 hexa) German), with the value containing the map file (for example, for a German map, "eT9.Vox.0407.kmap.txt").
With the latter, you must map the language and the keyboard layout together. To do this, you must create a value named after the language ID (with the changes outlined in Section 1.1.1; that is, changing 4 to 1 in the upper byte). Its value must be the lower (16-bit) word of the KeyboardLayouDlls registration – as a String (incidentally, as with, for example, the Pocket PC keyboard language string under HKCU\ControlPanel\ Keybd\Locale).
That is, with the German example, the two new values you must create are the following:
[HKEY_LOCAL_MACHINE\Software\Tegic\eT9\IME\KeyboardLayouDlls]
"00000707"="eT9.Vox.0407.kmap.txt"
[HKEY_LOCAL_MACHINE\Software\Tegic\eT9\IME\LanguageKeyboardIDMapping]
"0107"="0707"
Again, the value of the second value refers back to the first.
Note that, unfortunately, defining a keyboard mapping file to fix the well-known, annoying HTC Vox bug affecting many games / emulators (for example, ScummVM) won’t work. Yes, I’ve tested this (HERE is the file completely switching off numbers in Fn mode) and it didn’t work – pressing the E, R, T, Y, D, F, G, C, V and B keys on the keyboard still resulted in the numbers 0, 1,… 9 being input.
2.3 What about AEKMap?
The well-known AEKMap has gone a LONG way since its first versions (then, only usable with external USB keyboard). This, unfortunately, also means it has gone commercial – at least as far as accessing its advanced features are concerned. The current version is pretty powerful and also supports Smartphones. Unfortunately, very few ready-made Smartphone-related config / layout files are available now, which means you will end up having to write one yourself if you want to use a non-English mapping.
As I find the non-AEKMap way is more system-friendly, I’d, myself, prefer defining your keyboard layout using it, the traditional way. However, you will still want to give AEKMap a try to see whether you can use its advanced capabilities.
3. Tips for ThinkOutstide StowAway keyboard support
Unfortunately, currently, the StowAway keyboards by Mobility Electronics, Inc. (ex- ThinkOutstide) are, officially, not supported by the manufacturer on several Smartphone models. However, this is in no way a problem: if you have a HTC Vox, just download the driver meant for Excalibur (accessible HERE), it’ll work just great. The same may stand for other, officially, not supported models - just give a try to drivers meant for other smartphones (preferably running the same operating system version).
This also means you can safely redefine the keyboard layout by both ThinkOutstide’s official tool (which must be requested by mail as can be read HERE) and, most probably, AEKMap.
Thanks for the amazing guide
do you know by chance if the symbol window is anyhow customizable? I'd like to change the first 4 symbols showing...
thanks
stepir said:
Thanks for the amazing guide
do you know by chance if the symbol window is anyhow customizable? I'd like to change the first 4 symbols showing...
thanks
Click to expand...
Click to collapse
1, thanks
2, nope, sorry
UPDATE (09/27/2007): there are other language packs HERE. It also has a downloadable T9 word editor.
Pantech PN-820
Thanks for your detailed guide. I have contacted all sorts of vendors and tech support people and you seem to be the only out there who is able to get a handle on this. Can you please explain to me how to prevent my native T9 English dictionary (and English inputing abililty) from being wiped out when I install the russiant9.cab that you have a linked at the bottom of your page. I was so happy to find that link and install the Russian only to find that I could not then use the English. I have the PN-820 from Verizon and the only languages it lets you choose are English and Spanish. For that matter I would be happy if you told me how to just add Russian as an input method (even if I don't get T9 abilities).
Also, I downloaded the mobile registry editor but it would not allow me to make any changes and said access denied when I tried changing values. Any ideas on how to get past the protection there? Thanks! Martin
clewirm3 said:
Thanks for your detailed guide. I have contacted all sorts of vendors and tech support people and you seem to be the only out there who is able to get a handle on this. Can you please explain to me how to prevent my native T9 English dictionary (and English inputing abililty) from being wiped out when I install the russiant9.cab that you have a linked at the bottom of your page. I was so happy to find that link and install the Russian only to find that I could not then use the English. I have the PN-820 from Verizon and the only languages it lets you choose are English and Spanish. For that matter I would be happy if you told me how to just add Russian as an input method (even if I don't get T9 abilities).
Also, I downloaded the mobile registry editor but it would not allow me to make any changes and said access denied when I tried changing values. Any ideas on how to get past the protection there? Thanks! Martin
Click to expand...
Click to collapse
1, thanks and welcome to XDA-Dev
2, forget MRE. Get either Resco, Pocket Controller or, even better (because it's free) CeRegEditor ( http://forum.xda-developers.com/showthread.php?t=327511 ). And, of course, don't forget to app unlock your Smartphone
Menneisyys said:
1, thanks and welcome to XDA-Dev
2, forget MRE. Get either Resco, Pocket Controller or, even better (because it's free) CeRegEditor ( http://forum.xda-developers.com/showthread.php?t=327511 ). And, of course, don't forget to app unlock your Smartphone
Click to expand...
Click to collapse
Hi, first of all, thanks for this guide, I´ve been playing with it for about 2 days, and I´m now a little desperate, I´m using the Rogers ROM, and I want to have the spanish dictionary installed, so, when I install the language pack, I can use the dictionary but I can´t use caps and the symbol button either. I tried to copy the needed files and I´ve been making some tweaks to the registry, with no luck til now... Could you help me to achieve this, to have only the spanish dictionary with no changes on my keyboard layout?? Thanks in advance!!!
Still in Qwerty...
Hello,
I have a french HTC with azerty keyboard with HTC_Vox_ARA_1.27.415.4_4.1.13.47 rom.
It works well, it is totally in french, except my keyboard (in abc mode) write in qwerty (when i type on visual touch A, a Q appears on the screen).
I made all the steps of the second post of this thread.
And when i want to write with keyboard, nothing appears on screen !
I maybe made a mistake in I my "eT9.Vox.040C.kmap.txt". I attached this file to the post.
Could you tell me what's wrong in this file?
What can I do?????
Thanks in advance and sorry for my poor english...
Rafael1000 said:
Hello,
I have a french HTC with azerty keyboard with HTC_Vox_ARA_1.27.415.4_4.1.13.47 rom.
It works well, it is totally in french, except my keyboard (in abc mode) write in qwerty (when i type on visual touch A, a Q appears on the screen).
I made all the steps of the second post of this thread.
And when i want to write with keyboard, nothing appears on screen !
I maybe made a mistake in I my "eT9.Vox.040C.kmap.txt". I attached this file to the post.
Could you tell me what's wrong in this file?
What can I do?????
Thanks in advance and sorry for my poor english...
Click to expand...
Click to collapse
I have the same problem.
I have tried to change "eT9.Vox.040C.kmap.txt" with this code :
Code:
//
// N O T E: This file must be saved as Unicode
//
// This file contains the virtual keys mapping table for the
// Cavalier device. The mapping table is define as follow
//
// VK_TPOUND = 0x78
// VK_TSTAR = 0x77
// VK_TAB = 0x09
//
// We do not support escape value yet. So the key/char values should be
// entered explicitly or by encoding start with 0x
//
// Format:
// {VK VK' CH1 CH2}
// VK -> value from keyboard driver
// VK' -> printed on keys
// CH1 -> symbols produced by Fn + key
// CH2 -> symbols in 123 mode
{Q A @ @}
{W Z ! !}
{E E 0 0}
{R R 1 1}
{T T 2 2}
{Y Y 3 3}
{U U + +}
{I I / /}
{O O ( (}
{P P ) )}
{A Q ? ?}
{S S * *}
{D D 4 4}
{F F 5 5}
{G G 6 6}
{H H - -}
{J J _ _}
{K K : :}
{L L;;}
{Z W 0x09 Z}
{X X # #}
{C C 7 7}
{V V 8 8}
{B B 9 9}
{N N 0xFA N} // 0xFA = Launch symbol window
{M M 0xFB M} // 0xFB = Launch SMS
{0xBE . , ,} // 0xBE = VK_PERIOD
{0x26 0x26 0x21 0x26} // 0xF1 = up arrow, 0x21 = page up
{0x28 0x28 0x22 0x28} // 0xF2 = down arrow, 0x22 = page down
{0x25 0x25 0xFD 0x25} // 0xF3 = left arrow, 0xFD = launch pIE
{0x27 0x27 0xDE 0x27} // 0xF4 = right arrow, 0xDE = '
but nothing appears on the screen when i type a message.
Could you help me please ?
Here my config :
Code:
[HKEY_LOCAL_MACHINE\Software\Tegic\eT9\IME\KeyboardLayouDlls]
"0000070C"="eT9.Vox.040C.kmap.txt"
[HKEY_LOCAL_MACHINE\Software\Tegic\eT9\IME\LanguageKeyboardIDMapping]
"010C"="070C"
Thanks and excuse my poor english...
I have found my problem.
My config (code : .reg and .txt) was Ok, my only problem was the file type for the "eT9.Vox.040C.kmap.txt".
I've tried to save the file in UNICODE type, not in ANSI type, this solve the problem.
Bye.
And, once again, excuse my poor english...
could any one create an arabic or persian one ? really thanks .
Fn+Left arrow launches Internet Explorer, even with Norwegian keymap
On my Vox (with the great Dr Gonzo's WM 6.1 1.1), Fn+left arrow launched PIE. I want it to produce the normal "Æ". I was hoping that installing the Norwegian keymap (http://forum.xda-developers.com/showthread.php?t=384186) would get rid of this, but it doesn't.
I've peeked around the registry for clues (according to the informative first post), with no luck.
Any ideas?
My new keymap:
Code:
{Q Q @ @}
{W W ! !}
{E E 0 0}
{R R 1 1}
{T T 2 2}
{Y Y 3 3}
{U U + +}
{I I / /}
{O O ( (}
{P P ) )}
{A A ? ?}
{S S * *}
{D D 4 4}
{F F 5 5}
{G G 6 6}
{H H - -}
{J J : :} // modified by Tegic
{K K ; ;} // modified by Tegic
{L L ' '} // modified by Tegic
{Z Z 0x09 Z}
{X X # #}
{C C 7 7}
{V V 8 8}
{B B 9 9}
{N N 0xFA N} // 0xFA = Launch symbol window
{M M , ,} // 0xFB = Launch SMS // modified by Tegic
{0xBE . Ö Ö} // 0xBE = VK_PERIOD // modified by Tegic
{0x26 0x26 Ä 0x26} // 0x26 = up arrow // modified by Tegic
{0x28 0x28 Ø 0x28} // 0x28 = down arrow // modified by Tegic
{0x25 0x25 Æ 0x25} // 0x25 = left arrow, // modified by Tegic
{0x27 0x27 Å 0x27} // 0x27 = right arrow // modified by Tegic
Link: I figured this out now.
Enable eT9/xt9 and Automatic capitalization
Sorry if this has been answered somewhere else, but I have looked to no avail.
My question:
The HTC S620 that I bought from Dubai is WM5 and has Arabic enabled (Mobidiv Software SmartArabizer) and all seems to work fine (can switch between English and Arabic just fine). However, I can't seem to enable eT9/xT9 for either English or Arabic. Hitting and long-pressing the "Fn" button does nothing, and hitting the "Fn" key with the Space only switches languages. Is there a way to enable eT9/xT9 for the English at least? What is also peculiar is that the first word of every sentence is not automatically capitalized, which I thought would be the case. I would like to have the option of word suggestions, and automatic capitalization.
I looked in the registry to try and find the entries to make these changes. I also do not appear to have the Tegit entry under software. Does that mean that I don't have eT9/xT9? I think it would be nice to have word completion and suggestion available as well as automatic capitalization. Any help on this issue would be appreciated, including tweaks or software suggestions.
Thanks.
hello,
is it difficul to create the cab-file with my own xt9-languages?
if not please send me the informations how to do that.
Or if i have already a cab file with all languages i need and some others, so how can i delete this other languages to save the ROM-memory on my phone.
Thank You
mda5
looking for a better DLL to handle CAPS!
Hi,
thank your for this guide, which really rocks.
As many have complained, upon installing eT9 you appear to lose the CAPS key which has got completely dead.
With WM3.1 you lose the ability to enter text data with MobileR as well.
This is really dramatic, since now you hav'nt got any chance at all to enter any password containing caps. Many threads with the caps problem end up without any solution.
Maybe someone has got a better DLL, to cope with the caps as well?
The original DLLs appear to originate from 12 key keyboard smartphones, does someone have a full keyboard phone with WM3.1 and CAPS working and would be able to share his DLL?
I dont' mind to loose T9, I just lack bitterly the CAPS.
RIN67630
imate jaq upgrade
hello
i m using imate jaq i wants to upgrade it 2 win 5 2 6 can any 1 help for this. thnx inadvance. awaiting for the best reply
thnx again
mahendra
I tried to install the greek laguange to my phone with windows 6.1 but because of the wrong version, I mean that the pack was for windows 2003, after the instalation complete ask me to reset the device. Then the device never reboot.The message 'Windows Mobile' appears in the screen but the windows doesn't boot. Can somebody help me? Do I need to reinstall windows? -Or hard reset the device? If one of those please describe. Thanks.
Related
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:
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
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.
1.2.1 A caveat: very important!
When you install ANY language pack, HKEY_LOCAL_MACHINE\ Software\Tegic\eT9\ AvailableLanguages (see section 1.1) will be overridden and the old dictionaries NOT present in the just-installed one will just disappear! Therefore, you MUST for example save the original contents of this entry and, after installing ANY language pack, just concatenate these numbers to the new ones.
For example, if you install the Scandinavian pack on a handheld that previously had the MoDaCo multilingual pack, eT9\AvailableLanguages will contain only the following after the import (that is, four languages; not even English):
011D,0114,010B,0106
instead of the combination of both packs, listing all the languages in both of them; that is,
0109,010C,0107,0110,010A,0113,0105,0108,0118,0115,0116,011B,011F,010E,011D,0114,010B,0106
(I’ve used italic to denote the languages installed by the previously and, by bold, the Scandinavian pack.)
Therefore, you’ll need to re-add the, now, invisible languages to eT9\AvailableLanguages. Should you be aware of this (by manually editing the Registry), just use for example THIS registry import script.
1.2.2 Compatibility
These files worked just great on my HTC Vox. They, however, didn’t work at all on my WM5 AKU3 HTC Oxygen (s310).
2. Redefining the layout of the built-in hardware keyboard (thumbboard)
Unlike on the Pocket PC, where you could quickly swap the keyboard layout by just editing (as is described in the “Change slide-out keyboard layout” section of the related XDA-Dev Wiki page)
With this platform, the situation is a bit more complicated: you must supply the full keyboard mapping file and, in addition, you must also register it in the Registry.
2.1 Keyboard layout files
The recommended (but not compulsory) naming convention for a keyboard mapping file is the following:
eT9.Vox.XXXX.kmap.txt
where XXXX is the official language code (see the already-linked MSDN page for them) and you can change “Vox” to “Excalibur” on the HTC Excalibur (or anythign similar on other, keyboard-enabled devices). Note that, the Smartphone platform (as opposed to Pocket PC) lacking related file name conventions (you must explicitly refer to the keyboard mapping file in the Registry), it can be named anything. I only use this name to be compliant with the naming conventions used by the Vox version of the MoDaCo dictionary installer.
The contents of these files may seem a bit complicated at first but you will soon be able to navigate around. For example, let’s have a look at the following (Greek) configuration file:
As one can see, there are five fields (referred to as {VK VK' CH1 CH2 KeyIndex} by the code samples) in each record defining a button. The first of them just lists what is physically printed on the key and doesn’t need to be touched – it’s only for human consumption, to give you a helping hand when editing the keyboard map file. The second is more important: it’s what you will want to modify when defining a different letter to be input when you press a button. The third and fourth fields define the symbols produced by Fn + key and the symbols entered in 123 mode (the latter two is the same). Finally, you don’t need to touch the last field either.
Note that you can entirely leave the last field (KeyIndex) off (as is in the German layout I provide below). Then, only the first field in the record will be used to determine which key you’re talking about. An example of this (with the German layout):
{Q Q @ @}
{W W ! !}
{E E 0 0}
{R R 1 1}
{T T 2 2}
{Y Z 3 3}
{U U + +}
{I I / /}
{O O ( (}
{P P ) )}
{A A ? ?}
{S S * *}
{D D 4 4}
{F F 5 5}
{G G 6 6}
{H H - -}
{J J _ _}
{K K : :}
{L L ; ;}
{Z Y 0x09 Z}
{X X # #}
{C C 7 7}
{V V 8 8}
{B B 9 9}
{N N 0xFA N} // 0xFA = Launch symbol window
{M M 0xFB M} // 0xFB = Launch SMS
{0xBE . , ,} // 0xBE = VK_PERIOD
{0x26 0x26 0x21 0x26} // 0xF1 = up arrow, 0x21 = page up
{0x28 0x28 0x22 0x28} // 0xF2 = down arrow, 0x22 = page down
{0x25 0x25 0xFD 0x25} // 0xF3 = left arrow, 0xFD = launch pIE
{0x27 0x27 0xDE 0x27} // 0xF4 = right arrow, 0xDE = '
Let’s take a closer look at the Z and the Y records above: that is, the two records you need to modify to get the German layout out of the English one (on limited keyboards not having a number row and non-alphabetic keys):
{Z Y 0x09 Z}
…
{Y Z 3 3}
As you can see, if you need to instruct the handheld to enter a ‘Y’ character when you press the “Z” button, you need to modify the “Z” record.
(Note that this map file is HERE and the accompanying Registry import file – see the next, 2.2 section – HERE)
2.2 Registering keyboard layout files in the Registry
Only providing keyboard layout files (see section 2.1) is insufficient. You must also register these files in the Registry so that the system knows you use a, from English, different keyboard layout.
To do this, you must register they layout file under both HKEY_LOCAL_MACHINE\Software\ Tegic\eT9\IME\ KeyboardLayouDlls and HKEY_LOCAL_MACHINE\Software\ Tegic\eT9\IME\ LanguageKeyboardIDMapping.
With the former, you must create a new value named 000007XX, where XX is the lower byte of the language code (for example, 07 for (the 0407 hexa) German), with the value containing the map file (for example, for a German map, "eT9.Vox.0407.kmap.txt").
With the latter, you must map the language and the keyboard layout together. To do this, you must create a value named after the language ID (with the changes outlined in Section 1.1.1; that is, changing 4 to 1 in the upper byte). Its value must be the lower (16-bit) word of the KeyboardLayouDlls registration – as a String (incidentally, as with, for example, the Pocket PC keyboard language string under HKCU\ControlPanel\ Keybd\Locale).
That is, with the German example, the two new values you must create are the following:
[HKEY_LOCAL_MACHINE\Software\Tegic\eT9\IME\KeyboardLayouDlls]
"00000707"="eT9.Vox.0407.kmap.txt"
[HKEY_LOCAL_MACHINE\Software\Tegic\eT9\IME\LanguageKeyboardIDMapping]
"0107"="0707"
Again, the value of the second value refers back to the first.
Note that, unfortunately, defining a keyboard mapping file to fix the well-known, annoying HTC Vox bug affecting many games / emulators (for example, ScummVM) won’t work. Yes, I’ve tested this (HERE is the file completely switching off numbers in Fn mode) and it didn’t work – pressing the E, R, T, Y, D, F, G, C, V and B keys on the keyboard still resulted in the numbers 0, 1,… 9 being input.
2.3 What about AEKMap?
The well-known AEKMap has gone a LONG way since its first versions (then, only usable with external USB keyboard). This, unfortunately, also means it has gone commercial – at least as far as accessing its advanced features are concerned. The current version is pretty powerful and also supports Smartphones. Unfortunately, very few ready-made Smartphone-related config / layout files are available now, which means you will end up having to write one yourself if you want to use a non-English mapping.
As I find the non-AEKMap way is more system-friendly, I’d, myself, prefer defining your keyboard layout using it, the traditional way. However, you will still want to give AEKMap a try to see whether you can use its advanced capabilities.
3. Tips for ThinkOutstide StowAway keyboard support
Unfortunately, currently, the StowAway keyboards by Mobility Electronics, Inc. (ex- ThinkOutstide) are, officially, not supported by the manufacturer on several Smartphone models. However, this is in no way a problem: if you have a HTC Vox, just download the driver meant for Excalibur (accessible HERE), it’ll work just great. The same may stand for other, officially, not supported models - just give a try to drivers meant for other smartphones (preferably running the same operating system version).
This also means you can safely redefine the keyboard layout by both ThinkOutstide’s official tool (which must be requested by mail as can be read HERE) and, most probably, AEKMap.
UPDATE (09/27/2007): there are other language packs HERE.
(end of update)
The just-posted link ( http://melgurth.ovh.org/index.php?page=downloads ) also has a downloadable T9 word editor.
The language packs nearly-destroyed my bootloader. I don't recommend installing them without any "safe-mode" utility.
could you please write a tutorial how to compiled a t9 dictionary so if the language not aviable people can do it themshelp
I want to make my language in t9 dictionary but i dont know how and what to do , can you tell me which program to use and how to make it , any advice is welcome
Anyone have the T9JapaneseLdb.dll file?
I need to input japanese in my smartphone.
T9 Vietnamese
Anyone have the T9VietnameseLdb.dll file?
I need to input Vietnamese in my PPC.Help me please!
hanoiwap said:
Anyone have the T9VietnameseLdb.dll file?
I need to input Vietnamese in my PPC.Help me please!
Click to expand...
Click to collapse
I'm too. Please help me. Thanks
need to imput Korean
Hi~!
Anyone have the T9KoreanLdb.dll file?
I need to input Korean in my smartphone please!
Because people asked and didn't find the threat on MoDaCo, a small tutorial here. The example is from my Slide Panther theme, there is another one in make.zip. You have to write an *.inf for each cab you want to create. I t contains all files from a specific location and where they will be copied to. You can also specify reg keys.
[Version]
Signature = "$Windows NT$" <-- no changes needed
CESignature = "$Windows CE$" <-- no changes needed
Provider = "frauhottelmann" <-- change to your name
[CEStrings]
Appname="slide panther" <-- the name that will be displayed in the programs menu in settings
[CEDevice] <-- you don't have to change this for the vox
ProcessorType=0
VersionMin=5.2
VersionMax=6.0
[SourceDisksNames]
1=,"Source1",,"Home" <-- specify the name of your source and then the folder with your files (should be in the same location of the *.ini)
[SourceDisksFiles] <-- All files you want to copy have to be here. The 1 stands for Source1 mentioned above, if you have more than one sources (folders) you have to add it above and add an = 2 ... to the end of the corresponding files!
"Slide Panther.home.xml"= 1
"panther.jpg" = 1
"pantherlc.jpg" = 1
[CopyFiles1] <-- Here you have to list the files for one destination folder on the phone. More than one destiantion means more [CopyFiles2] etc.
"Slide Panther.home.xml"
"panther.jpg"
"pantherlc.jpg"
[DestinationDirs] <-- Specify the destinations for the above
CopyFiles1=0,"\Application Data\Home"
[RegData] <-- add reg data, the following is for string values, I don't know how to add dwords, but I never needed it!
HKCU,ControlPanel\Home,Scheme,,\Application Data\Home\Slide Panther.home.xml
[DefaultInstall] <-- Finally specify what you want to be installed, here every destination dir and reg data should be included
CopyFiles=CopyFiles1
AddReg=RegData
Click to expand...
Click to collapse
Once your done with your *.inf, just drag'n'drop it onto the cabwiz.exe and it'll make a cab with the same name as the *.inf! Now you can install it!
Or the alternative, use this program!
BIIIIIIIIIIIIG thx to the german guy ;D
but don't we have to change the versionmax to 6.1 or we will get this stupid "this prog may not display correctly" message??
No, this is the version of WinCE not Windows Mobile, which is still at 5.2...!
Can this be used to install changes to the registry that will be lost after a hard reset?
Roland
Yes everything you install with a cab is lost after hard reset
Nice work...as always...
/**still waiting for german emulator image......same here for italian's one. **/
could you please be a bit more precise about those regkeys? what are all these commas? what are the folder, keys, values?
HKCU,ControlPanel\Home,Scheme,,\Application Data\Home\Slide Panther.home.xml
Click to expand...
Click to collapse
HKCU = HKEY_CURRENT_USER
then after the comma the "folder" path, after the next comma the key name
then after the next comma comes the reg key type, so none is for a string, for others you have to search, because I don't know them. And finally after the last comma comes the value of the reg key!
funny thing, now that i was looking for th value-types i found the tutorial on modaco.
http://www.modaco.com/content/Smart...iscussion/235885/Tutorial-Creating-Cab-Files/
and here are the flags for diferrent types of registry entries:
[add_registry_section]
registry_root_string , subkey,[value_name], flags, value[,value]
[registry_root_string, subkey,[value_name], flags, value[,value]]
registry_root_strings
String that specifies the registry root location. The following table shows the values that are supported by Windows CE.
Root string Description
HKCR The same as HKEY_CLASSES_ROOT
HKCU The same as HKEY_CURRENT_USER
HKLM The same as HKEY_LOCAL_MACHINE
value_name
Registry value name. If empty, the "(default)" registry value name is used.
flags
Numeric value that specifies information about the registry key. The following table shows the values that are supported by Window CE.
Flag Value Description
FLG_ADDREG_NOCLOBBER 0x00000002 If the registry key exists, do not overwrite it. This flag can be used in combination with any of the other flags in this table.
FLG_ADDREG_TYPE_SZ 0x00000000 The REG_SZ registry data type.
FLG_ADDREG_TYPE_MULTI_SZ 0x00010000 The REG_MULTI_SZ registry data type. The value field that follows can be a list of strings separated by commas.
FLG_ADDREG_TYPE_BINARY 0x00000001 The REG_BINARY registry data type. The value field that follows must be a list of numeric values separated by commas, one byte per field, and must not use the 0x hexadecimal prefix.
FLG_ADDREG_TYPE_DWORD 0x00010001 The REG_DWORD data type. Only the non-compatible format in the Win32 Setup .inf documentation is supported.
The following code example shows a typical [AddReg] section.
AddReg = RegSettings.All
[RegSettings.All]
HKLM,%reg_path%,,0x00000000,alpha ; <default> = "alpha"
got it from here http://www.sundialsoft.freeserve.co.uk/cabinfo.htm
could it be that we need to make a .inF (as it says in the instructions) file and not a .inI file?
Is it possible to delete registry entries??
Yes it's inf sorry. And I am not aware of a way to delete reg key with cabs!
Hi frauhottelmann,
It is realy great starting point for CAB maker. I will use this instructions for making my Sliding Panel Default Green cab for 6.1 ver 1.1 ROM.
I have found something really great for cab makers: http://www.gpcarreon.com/?p=524
Haven't tried it though!
EDIT: Under Vista it does, unfortunately, not work!
It DOES work, in compatibility mode!
Hello,
I need a tool to edit CPL files. I have done quite a bit of searching on Google and here, but none of the tools found on the net are actually intended for CPL files, while threads here only mention people editing them, not how.
Why I want to do this - I would like to edit Japanese text inside these CPLs so that I can fully localize my device(s) into English.
These are some of the files:
- ShPowerMng.cpl
- ShUsbCnt.cpl
- ShWrlsMgrRes.cpl
- shutil.cpl
Thanks in advance!
cheeseus said:
Hello,
I need a tool to edit CPL files. I have done quite a bit of searching on Google and here, but none of the tools found on the net are actually intended for CPL files, while threads here only mention people editing them, not how.
Why I want to do this - I would like to edit Japanese text inside these CPLs so that I can fully localize my device(s) into English.
These are some of the files:
- ShPowerMng.cpl
- ShUsbCnt.cpl
- ShWrlsMgrRes.cpl
- shutil.cpl
Thanks in advance!
Click to expand...
Click to collapse
did you try looking in the reg for it... i think its something like HKCU\***\MyCpl
irus said:
did you try looking in the reg for it... i think its something like HKCU\***\MyCpl
Click to expand...
Click to collapse
Yes, of course, I have looked through each registry folder - this is how, for instance, I found out how to translate Today items and Button descriptions (HKLM/Software/MS/Shell/Keys).
Suggested from posts here about HTC devices, I looked for HKEY_LOCAL_MACHINE\ControlPanel\MyCpl --- but I do not have such a registry setting.
Is it a far guess to tell that the files I mention above are used instead of registry settings?
This is why I am looking for a tool to edit these files. Is there one?
Any resource editor would do, try reshacker
stepw said:
Any resource editor would do, try reshacker
Click to expand...
Click to collapse
Thank you! Reshacker does open the files.
How to edit them, though, is less obvious than I thought. I was thinking there'd be strings of text I would just need to replace.
I'd like to ask for more help here, please.
For instance, I have:
Code:
STRINGTABLE
LANGUAGE LANG_JAPANESE, 0x1
{
101, "???????"
102, "Utility Applet"
}
1st Question: how can I see the Japanese text not garbled?
2nd: The two values above - do I just switch them somehow? 101, "???????" is the Japanese correspondent of 102, "Utility Applet".
Similarly here:
Code:
119 DIALOG 0, 0, 200, 110
STYLE DS_FIXEDSYS | WS_CHILD | WS_DISABLED
CAPTION ""
LANGUAGE LANG_JAPANESE, 0x1
FONT 8, "MS Shell Dlg"
{
CONTROL "????????????????\n??????", 1067, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 6, 6, 138, 24
CONTROL "???????(????)", 1006, BUTTON, BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 6, 42, 120, 12
CONTROL "???????????????\n(???????????)", 1007, BUTTON, BS_AUTORADIOBUTTON | BS_TOP | BS_MULTILINE | WS_CHILD | WS_VISIBLE, 6, 60, 126, 24
CONTROL "*RGB???????????????", 1068, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 6, 84, 138, 12
}
How do I change the language - LANGUAGE LANG_JAPANESE, 0x1?
And, of course, if I can't see the Japanese text, I can't translate it -- I tried the various fonts available in ResHacker, but none of them seems to support Japanese.
PS. After installing Japanese (East Asian) Languages support on my PC, ResHacker now offers a couple more fonts that have "Japanese" under "Script", e.g. MS Mincho, MS Gothic etc. but they are still unable to properly render the Japanese text of the CPL file, whose font is "MS Shell Dlg".
cheeseus said:
Thank you! Reshacker does open the files.
How to edit them, though, is less obvious than I thought. I was thinking there'd be strings of text I would just need to replace.
I'd like to ask for more help here, please.
For instance, I have:
Code:
STRINGTABLE
LANGUAGE LANG_JAPANESE, 0x1
{
101, "???????"
102, "Utility Applet"
}
1st Question: how can I see the Japanese text not garbled?
2nd: The two values above - do I just switch them somehow? 101, "???????" is the Japanese correspondent of 102, "Utility Applet".
Similarly here:
Code:
119 DIALOG 0, 0, 200, 110
STYLE DS_FIXEDSYS | WS_CHILD | WS_DISABLED
CAPTION ""
LANGUAGE LANG_JAPANESE, 0x1
FONT 8, "MS Shell Dlg"
{
CONTROL "????????????????\n??????", 1067, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 6, 6, 138, 24
CONTROL "???????(????)", 1006, BUTTON, BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 6, 42, 120, 12
CONTROL "???????????????\n(???????????)", 1007, BUTTON, BS_AUTORADIOBUTTON | BS_TOP | BS_MULTILINE | WS_CHILD | WS_VISIBLE, 6, 60, 126, 24
CONTROL "*RGB???????????????", 1068, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 6, 84, 138, 12
}
How do I change the language - LANGUAGE LANG_JAPANESE, 0x1?
And, of course, if I can't see the Japanese text, I can't translate it -- I tried the various fonts available in ResHacker, but none of them seems to support Japanese.
PS. After installing Japanese (East Asian) Languages support on my PC, ResHacker now offers a couple more fonts that have "Japanese" under "Script", e.g. MS Mincho, MS Gothic etc. but they are still unable to properly render the Japanese text of the CPL file, whose font is "MS Shell Dlg".
Click to expand...
Click to collapse
Try PE-explorer, this one gives you more power and also will display an example of the form (for certain compilers).
Regards,
EqX
the-equinoxe said:
Try PE-explorer, this one gives you more power and also will display an example of the form (for certain compilers).
Regards,
EqX
Click to expand...
Click to collapse
Thanks! Tried PE explorer as well. Just like ResHacker, it displays the form, but not the form is actually readable - ResHacker displays garbled chars in the script and the form, PE -- only in the script. Sadly, I still can't see, and copy, the Japanese text so that I can have it translated. Tried the various fonts in PE Explorer too...
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
cheeseus said:
Thanks! Tried PE explorer as well. Just like ResHacker, it displays the form, but not the form is actually readable - ResHacker displays garbled chars in the script and the form, PE -- only in the script. Sadly, I still can't see, and copy, the Japanese text so that I can have it translated. Tried the various fonts in PE Explorer too...
Click to expand...
Click to collapse
It seems that those scripts can handle only western language .
If you try to edit the form (like moving Tedit boxes etc..), is there any chance to grep the text?
And if you look in the hex editor, any chance to get it from there?
(there is a program that can get the text from a dialog, sadly I forgot it's name.)
Regards,
EqX
the-equinoxe said:
It seems that those scripts can handle only western language .
If you try to edit the form (like moving Tedit boxes etc..), is there any chance to grep the text?
And if you look in the hex editor, any chance to get it from there?
(there is a program that can get the text from a dialog, sadly I forgot it's name.)
Regards,
EqX
Click to expand...
Click to collapse
Couldn't grip the text from the form editor - can move it around, but can't select it.
Can't find out how to see the file in HEX editor mode - this stuff is quite new to me...
The best idea I had was use OCR software to extract the text from a screenshot of the form. Abbyy Fine Reader 9 advertises Japanese/Chinese support but the copy I found doesn't have Japanese in its list of languages... so, I am stuck here, unless you can remember that program;s name
Regards,
Stefan
Little progress
I am having very little progress here...
I started editing the "ShPowerMng.cpl" file by looking at my other device and comparing tabs and options. And so I translated two screens. However, when I upload the file to the device, only the tab names are in English, while the other stuff I translated is still in Japanese
Tried resetting the device... no change.
When I copy back the ShPowerMng.cpl file from the device to the PC - checking if the file was successfully overwritten - it is translated, but why doesn't it show the English text?
cheeseus said:
I am having very little progress here...
I started editing the "ShPowerMng.cpl" file by looking at my other device and comparing tabs and options. And so I translated two screens. However, when I upload the file to the device, only the tab names are in English, while the other stuff I translated is still in Japanese
Tried resetting the device... no change.
When I copy back the ShPowerMng.cpl file from the device to the PC - checking if the file was successfully overwritten - it is translated, but why doesn't it show the English text?
Click to expand...
Click to collapse
Could be that the cpl has a separate "strings" section in the resources, or that the ROM also contains a ShPowerMng.cpl.04**.MUI file (not sure that cpl files can have a mui).
Regards,
EqX
the-equinoxe said:
Could be that the cpl has a separate "strings" section in the resources, or that the ROM also contains a ShPowerMng.cpl.04**.MUI file (not sure that cpl files can have a mui).
Regards,
EqX
Click to expand...
Click to collapse
Excellent point, .mui seems to be supported for .cpl's too. If there's a native mui file, this is where the resources should be translated. If there's none, it could be created for ease of translation, then you won't have to patch up .cpl's.
More details regarding MUI on Windows CE/Mobile are avaiable on MSDN:
http://msdn.microsoft.com/en-us/library/aa913592.aspx
http://msdn.microsoft.com/en-us/library/aa912683.aspx
Most resource editors don't support unicode string resources properly, hence Japanese characters are replaced with question marks. MS Visual Studio resource editors may be able to handle them properly. Another freeware that claims proper unicode support is XN resource viewer, maybe you could get the chars displayed properly using it.
stepw said:
Excellent point, .mui seems to be supported for .cpl's too. If there's a native mui file, this is where the resources should be translated. If there's none, it could be created for ease of translation, then you won't have to patch up .cpl's.
More details regarding MUI on Windows CE/Mobile are avaiable on MSDN:
http://msdn.microsoft.com/en-us/library/aa913592.aspx
http://msdn.microsoft.com/en-us/library/aa912683.aspx
Most resource editors don't support unicode string resources properly, hence Japanese characters are replaced with question marks. MS Visual Studio resource editors may be able to handle them properly. Another freeware that claims proper unicode support is XN resource viewer, maybe you could get the chars displayed properly using it.
Click to expand...
Click to collapse
XN Resource Editor saves the day!
However, because it returns save error for some of the files (write protected), I open the resource in it, copy the caption text in Japanese, paste in Google Translate, take the text and paste it inside the corresponding box in PE Explorer because it has no problem saving the file.
I have made significant progress this way, THANK YOU!
There are still some unknown problems:
- on the Power Management file (ShPowerMng.cpl), everything is translated but only the title and the tab captions are shown in English - the rest is still displayed in Japanese.
- on the Utilities file (shutil.cpl) - again everything is translated, but this time the tab captions are shown in Japanese, while the tab texts are all in English.
- on the USB connection manager (ShUsbCnt.cpl) the situation is as in the Power Management - tab names are in English, texts are in Japanese.
- the ShSystemInfo.cpl file is fully translated but I cannot see its contents in Settings - when I tap "S01SH Firmware", which is this file, I see only one page with some text that I could not see while editing, while the texts I edited are hidden. The text I can see is about the firmware version - 1.05a (upgraded from 1.00) - in Japanese, and the texts I cannot see contain: "Firmware version 0.00 / NAND ver.: / NOR ver.:" and over 10 other screens with texts that I presume are various warning messages displayed by the system, e.g. "An invalid argument was encountered."
Thanks for the help, guys! I hope that I can finish the job...
Some strings, for instance tab captions and window titles may be dynamic and the strings could be manipulated in code. In this case you won't be able to find them in the resource sections.
Use Sisulizer, it correctly displays all the languages, including Japanese
the big question
So, what I am still struggling to grasp is, where exactly are the texts written?
stepw says: "Some strings, for instance tab captions and window titles may be dynamic and the strings could be manipulated in code. In this case you won't be able to find them in the resource sections." --- does this then mean that the texts, written inside the CPL file are just there for no reason:
[above is the resource being edited, below is a screenshot of the resource displayed - tab names are in English, the rest is not displayed...]
Maybe these texts are also written in some other file and when the two files are loaded, the first one has greater weight than the CPL?
I also tried, following your advice to try creating a MUI file - in Windows directory there is also a "ShPowerMng.cpl.409.mui" file but it doesn't seem to change anything.
Maybe there is some other file I need to edit as well?
PS. I realize this thread has changed its original topic - the tool to edit CPL files - but I don't want to start a new thread for something which very few people would be interested in.
----------------------
PSPS. Looking at this thread, I see that the following are displayed from "cplmain.cpl":
Settings>System>Backlight>Brightness = 20#ctlpnl cplmain.cpl,6
Settings>System>Backlight>Battery power= 20#ctlpnl cplmain.cpl,6,1
Settings>System>Backlight>External power = 20#ctlpnl cplmain.cpl,6,2
Unfortunately, this is the only CPL file that I can't copy from my device - I get "cannot copy" in total commander and "access denied" in activesync. Any idea how I can cheat this?
cheeseus said:
...Unfortunately, this is the only CPL file that I can't copy from my device - I get "cannot copy" in total commander and "access denied" in activesync. Any idea how I can cheat this?...
Click to expand...
Click to collapse
try it with ROM Extractor 1.0. with that tool you can copy "non-copyable" files from device to storage card, and from there to your computer (via active sync). you'll have to do these steps on your device off course ;-)
see you
kel187 said:
try it with ROM Extractor 1.0. with that tool you can copy "non-copyable" files from device to storage card, and from there to your computer (via active sync). you'll have to do these steps on your device off course ;-)
see you
Click to expand...
Click to collapse
Thanks! ROM Extractor did manage to copy cplmain.cpl but it cannot be edited - ResHack and XN Resource Editor won't open it, while PE Editor opens it but gives a warning of some errors ("Erros detected! File opened in Safe Mode."). Still, the Resources are not viewable (View > Resources is grey) so even if there is text that should be edited in there I cannot get to it.
So, maybe I am looking in the wrong direction?
Yesterday I managed to completely edit another one of the CPLs, Pointing.cpl, which deals with the pointing device on my S01SH - I still have to fix the sizes of a couple of text boxes because some text is cut off but that isn't difficult.
Where else should I be looking for stuff to edit/translate?
Am submitting changes to the registry, and the phone will not remember them. How to make these changes?
Is it really true noone has been able to translate the known language changing registry method so that it can be applied using MFG-editor?
So this is the registry method used in other phones:
1. Enter HKEY_LOCAL_MACHINE\MUI\Available and add a new string.
2. Enter your locale, for example 040b -> Name: 040b
3. Enter the language name -> Value: Finnish
Now, how to do the same in MFG because there are no name or value fields? What goes into Input key and Input data -fields?
Disclaimer
This short tutorial is based on my own research regarding missing keyboard layout mapping in stock Honeycomb/ICS Android for my Motorola XOOM. It is not intended to be a complete description of the Android input system, please refer to the official documentation for more information. This text should suffice for anyone with a basic knowledge about IT Anyway, if you break something, 'aint my fault. Won't take any responsibilities for YOUR actions.
Requirements
- rooted Android 3.0+ device (3.0, 3.1, 3.2, 4.0)
- text editor
- external keyboard to play with
Background stuff
(simplified, no bashing )
Keyboard (connected to any device) sends key codes to the target device. Key codes are just plain numbers, eg. if you press the "A" key on the keyboard, the computer reads "30" number. Since "30" is quite difficult to remember as being the "A" button, it is much more handy to describe keycodes as char codes: in the target software we get a KEY_A instead of 30.
Android uses two files for keyboard key-to-output mapping: .kl (key layout) and .kcm (key character map).
*.kl file describes the mapping between real keyboard codes to their virtual values, eg. 30 => KEY_A.
*.kcm file converts char codes to key events (KEY_A pressed? Send character "a". Shift + KEY_A? Send character "A", etc.)
So if you connect an external keyboard (USB, BT, Ir?) to your Android device, you get the following chain:
Code:
[keyboard] => [kl] => [kcm] => [application]
All devices (well, most of them) can be identified by VID (Vendor ID) and PID (product ID). VID and PID are 4 hex symbols each.
Android by default uses /system/usr/keylayout/Generic.kl and /system/usr/keychars/Generic.kcm for keyboard handling. If you look into /system/usr/keylayout/ and /system/usr/keychars/ you may find some more keymaps, including something like Vendor_xxxx_Product_xxxx.* Those files are used for specific devices, eg. Vendor_045e_Product_028e.kl is used for XBox 360 controller. When you connect the keyboard, Android checks the peripherial device VID and PID and looks for matching kl and/or kcm. If there is no matching file found, Generic.kl/Generic.kcm is used instead (disjoint -> you may have a specific kl and generic kcm, generic kl and specific kcm, etc.).
You may get the PID/VID of your external keyboard under for example Windows (in device manager [devmgmt.msc] find your keyboard and check its details [properties->details], for example HID\VID_046D&PID_C312\6&26DA469B&0&0000 => Vendor_046d_Product_C312). So if you would like to prepare a keymap for my USB Logitech keyboard, you will have to provide me with Vendor_046d_Product_C312.[kl|kcm] files
Both KCM and KL files are encoded in ANSI -> no special (national) characters allowed except for 'classic' set! If you want to include any national or extra character, you need to use their unicode hex values in \uXXXX variant. See http://www.tamasoft.co.jp/en/general-info/unicode.html for a huge list of unicode characters.
Getting hands dirty
- pull Generic.kcm from your device via adb:
Code:
adb pull /system/usr/keychars/Generic.kcm
- open it with Notepad++
- scroll through the blahblah about not modifying the file to the section with
Code:
key A {
label: 'A'
- this is where your work starts!
In general the map is composed as fillows:
Code:
# comment starts with a hash
key [keycode] {
label: '[label]'
base: '[key without any modifiers]'
[modifier]: '[key with modifier]'
[modifier]+[modifier]: '[key with both modifiers]'
[modifier],[modifier]: '[key with any of listed modifiers]'
[modifier]: fallback [magic key] # read below
[modifier],[modifier]: none
}
Modifiers can be: ralt, lalt, alt (right/left ALT, any ALT), rshift, lshift, shift (right/left SHIFT, any SHIFT), rctrl, lctrl, ctrl (left/right CTRL, any CTRL), capslock (no right CAPSLOCK on the kb, sorry ), rmeta, lmeta, meta (right/left WIN key, any WIN key). There are probably more, but didn't encounter any...
So, let's make the A key work like on Polish (Programmer) keyboard layout (namely a, A, ą, Ą letters):
Code:
key A {
label: 'A'
base: 'a'
shift, capslock: 'A'
ralt: '\u0105'
shift+ralt, capslock+ralt: '\u0104'
lalt, meta: none # ctrl omitted - ctrl+a does something...
}
Polish letters "ą" and "Ą" have their unicode values of 0x0105 and 0x0104 respectively, thus in order to have them available via right alt + A, we use ralt modifier and shift/capslock ralt modifier. Please note, that it is necessary to have 'shift' modifier for capital A.
Code:
fallback [i]magic key[/i]
is used to map certain key combinations to other commands ("hardware buttons"), such as HOME, SEARCH, MENU, APP_SWITCH, etc. Thus if for example you would like to have lalt+tab for app switching you would have to use the following:
Code:
key TAB {
label: '\t'
base: '\t'
lalt: fallback APP_SWITCH # alt + tab :)
ralt, meta: none
}
And now a Windows+D for desktop shortcut:
Code:
key D {
label: 'D'
base: 'd'
shift, capslock: 'D'
meta: fallback HOME # show desktop
alt: none
}
In short
- in most cases the Generic.kl file is ok, there is no need to prepare .kl for a common keyboard
- either edit Generic.kcm or get VID/PID of your keyboard and prepare a key layout for your language and push it to /system/usr/keychars/
Hints
- backup your Generic.kcm file!
- try to be as specific as possible if you do not use a combination, map it into 'none' section; when you map ralt, don't include alt in 'none', include lalt instead. Remember, that some key combinations have special meanings (ctrl+d, ctrl+c, ctrl+v, etc), and it is better not to include them in your map.
- backup your layout - I lost a lot of time re-creating my keymap after ROM upgrade (symbolic link is a better idea!)
- look through the entire Generic.kcm file - there are a lot of fancy key combinations, for example ESCAPE key can !by default! handle MENU, BACK and HOME keys!
- possible fallback keys are listed in .kl file
- use logcat! You can spot information about external input device and a note about applied KCM/KL files
Finally
Hit "thanks" if you find it helpful. If you prepare a good (national) key layout, please share it!
For Polish national characters we can use "Polska Klawiatura Programisty V2" it works very well with external keyboard on MoPho with 2.3.
thanks for the information. I couldnt find the the Android ICS/Honeycomb virtual key for task switcher..do you know what name is that Task switcher virtual key ?
Hi, I am a newbie with android....
I modify the kcm file to (spanish layout, Generic to Vendor both attached):
An I can't make it work, maybe:
Something is missing?
Errors in the kcm file?
Any advice would be appreciated :crying:
I am away from my PC, but:
1) run Terminal Emulator before connecting the external keyboard
2) enter superuser mode (su)
3) launch logcat (logcat)
4) launch another Terminal Emulator window
5) enter superuser mode (su)
6) connect external keyboard
7) break logcat feed
8) launch dmesg (dmesg) in other window
9) check logcat and dmesg outputs looking for errors
I'm on vacation till next Sunday. I will help you directly once I'm back
Sent from my Galaxy Nexus using Tapatalk 2
Thanks for the help:
Here are fragments of:
dmesg
Start called p = df8e3820
starting connect time
DWC_OTG : [tcc_set_vbus] vbus_state:1
usb 1-1: new low speed USB device number using dwc_otg
usb 1-1: device v1241 p1503 is not supported
input: USB Keyboard as /devices/platform/dwc_otg.0/usb1/1-1/1-1:1.0/input/input5
Click to expand...
Click to collapse
logcat
D/EventHub( 1114): No input device configuration file found for device ' USB Keyboard'.
E/KeyCharacterMap( 1114): /system/usr/keychars/Generic.kcm:454: Malformed character literal.
E/KeyCharacterMap( 1114): /system/usr/keychars/Generic.kcm:454: Invalid character literal for key.
Click to expand...
Click to collapse
I will check line 454 and see what I can do.
UPDATE
So I checked the 454 lien an a 'u' was missing, "\00xx" to "\u00xx".
I use the droidedit pro (1.15.2, and god the save file doesn't work unless root mode is enabled), changed in the ext_sd version use the terminal and copy then I connect the keyboard and it work, oh yeah it simply works (just a fu..ing 'u' for 22kb file)
Anyway thanks for the tip it really, REALLY help me :highfive: :highfive: :good: :good:
Thanks for this, will come in handy.
Hi everyone! Need some help with character map modding for Jelly Bean. I need to assign multiple letters to one button, e.g. "A" for single tap and "[" for double tap (just an example, don't mention).
What I found on source.android.com:
http://source.android.com/tech/input/key-character-map-files.html said:
The following keyboard types are recognized:
...
PREDICTIVE: A keyboard with all the letters, but with more than one letter per key.
This type of keyboard is generally designed for thumb typing.
Corresponds to KeyCharacterMap.PREDICTIVE.
Click to expand...
Click to collapse
Seems like the one thing I need, but I haven't found any syntax explanations or charmap examples for that layout type. Neither on AOSP pages, nor via Google. If your device uses such keymap type or you just know the syntax, post here examples, or attach kcm files. Any hint is good.
Android 4.2.2 - Virtual
Hi
Many thanks for this guides.
On my device Virtual.kcm is used (Acer A1-811, android 4.2.2)
Obviously it is nice to modify some file, rather than to pay 2$ for some application to do such mappings to right characters.
Regards
Logitech K400
Not sure if this goes here, but I have a Logitech K400 keyboard and it has some "special" keys, like the music player key.
What I want to do is to change the default player that opens when pressing that key, in my case it would be Poweramp.
The keyboard also has some other keys on the function keys, and when pressed some of them just are letters, want to edit this too.
There is also a "lock pc" key that opens S Planner.
I hope someone knows what I mean and can help me.
Mapping an external keyboard
In attempting to re-map an external keyboard, i have succesfully found and edited the P1_keyboard.kl file for instance changing the function of the voice search button from performing that function to performing an "Enter" or typing a letter "B" . However what i am trying to do is to use that button to do a combination of Both Letter B and then ENTER, i have tried "+" space etc but with no luck... Is this possible to do in any way?
kcm file has no effect
I create this file for the logitech K810
/system/usr/keylayout/Vendor_046d_Product_b319.kl
This successfully remaps keys.
However creating and editing this has no effect:
/system/usr/keychars/Vendor_046d_Product_b319.kcm
The generic behavior also does not match Generic.kcm
One example is Alt-Tab which switches actually switches applications on my device. It is not mentioned anywhere in anything in /system/usr. Redefining
Alt-Tab in the kcm file has no effect.
I am running KitKat on a Galaxy Note 10.1 2014.
file permissions
injola said:
I create this file for the logitech K810
/system/usr/keylayout/Vendor_046d_Product_b319.kl
This successfully remaps keys.
However creating and editing this has no effect:
/system/usr/keychars/Vendor_046d_Product_b319.kcm
The generic behavior also does not match Generic.kcm
One example is Alt-Tab which switches actually switches applications on my device. It is not mentioned anywhere in anything in /system/usr. Redefining
Alt-Tab in the kcm file has no effect.
I am running KitKat on a Galaxy Note 10.1 2014.
Click to expand...
Click to collapse
Just a guess, are the file permission set appropriately? (chmod 644 /system/usr/keychars/*.kcm)
Ctrl+SPACE does not work
On my nexus7 2012 4.4.4, chroot debian wheezy is running.
When I use emacs with Apple Wireless Keyboard (JIS).
Ctrl-SPACE does not allow me to set mark,
although keep pressing them for about one second just makes it work.
(but keep pressing makes flickering "Mark activated", "Mark deactivated"...)
In the kcm file, CTRL+SPACE is specified as "fallback LANGUAGE_SWITCH".
I tried changing it to none, or commenting out the line, but these doesn't affect.
I also used keytest.apk to inspect the behavior.
It seems just when CTRL+SPACE is pressed, no event happens...?
Does anyone know how to make Ctrl+SPACE (without keep pressing) function as setting mark ?
thank you in advance.
Genius luxepad 9100 keyboard
Hi i have this keyboard and android 4.2.2 i want the keyboard with spanish layout without pay an app, i want to choose the language on the system. Thanks in advance
Keycodes not recognised
Hi there,
I have a problem where I can't remap a key because it's not showing any keycode.
That is: standard keys like A, B, C, etc are ok: I can see their scan code and change it if I want to, but I don't.
Keys like Volume_up, play_pause, etc I would like to have them changed, but I cannot as I can't see any scan code when I press them.
I know all keys work as I tested the remote on windows and it works properly, and I can see keycodes there (but they are not the same as in android, so I can't use windows' keycodes)
Thank you if you can help
enter to send message
hello everyone! does anyone solve question about ENTER key to sending message insdeat of new line command? combination of buttons not works too for the sending messages....
android 4.4.2 + universal external keyboard (with comand buttons)
Toggle Languages
Thanks for this helpful and specific tutorial. :good:
I am trying to map keys for Urdu language. :angel:
My question is, will it work properly with lollipop?
Will it be able to toggle between language.
...
Thanks in advance for you kind information
_TB_TB_ said:
Disclaimer
- rooted Android 3.0+ device (3.0, 3.1, 3.2, 4.0)
Click to expand...
Click to collapse
Hi!
Is there any way to replace kcm without loosing your warranty?
Code:
adb push move /system/usr/
push: move/keychars/Virtual.kcm -> /system/usr/keychars/Virtual.kcm
failed to copy 'move/keychars/Virtual.kcm' to '/system/usr/keychars/Virtual.kcm': Read-only file system
Should I change permissions to put back onto system/usr?