TUTORIAL: Windows Mobile Smartphone Internationalization Issues - General Topics

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!

Related

TUTORIAL:Changing the language Web pages're requested by PIE

I’ve just received a question from one of my blog readers about how the built-in Web browser in the Pocket PC / Windows Mobile operating system, Pocket Internet Explorer (PIE) / Internet Explorer Mobile (IEM) can be configured to request pages in different language than US English if you use an English language Windows Mobile operating system.
As this question is a very interesting one and very few people have the necessary HTTP- and actual programming (let alone offering a proxy server for free that does the trick!)-level knowledge to answer this question, I’ve decided to write a complete article on it.
What's the point? When can this be useful?
There are a lot of Web sites that offer their content not only in English but also in several other languages. The most important example is Google or, for example, many blogging engines. For example, b2evolution(the engine used in the Smartphone & Pocket PC Magazine Expert Blogs) returns English pages by default. However, if you configure your local Web browser to request Web pages in another language, you'll receive Web content in that language.
For example, if you set your referred language to, say, Finnish, you'll get this (Finnish language) page instead of this (English original) when you try to log in. And, the list continues - there are a LOT of other pages, frameworks, content management systems that do take into account what language the client prefers and return their Web content accordingly.
Making use of this capability can be of enormous advantage for people that don’t really have a good command of English and would like to prefer content or, at least, menus and dialogs in their native tongue.
How can you instruct desktop Web browsers to request Web pages in the language of my choice?
With Internet Explorer, go to Tools/Internet Options/ General and click Languages in the Appearance group. Then, just click the Add button and choose the language you prefer from the list. Make sure you move it up the list (with the Move Up button) so that it'll be your primary language.
As far as the desktop Opera browser is concerned, I'll elaborate on it later.
The desktop Mozilla/Firefox must be configured in exactly the same way as the Pocket PC version (screenshot) - see below.
OK; now, how I configure my Pocket PC Web browsers to do the same?
It's, unfortunately, a bit more complicated. Read on!
A bit geeky stuff: HTTP and Accept-Language
(Note that understanding this section is not needed if you aren't a tech / geek type of person. However, trying to digest it can be very useful to understand my HTTP request header screenshots and to understand how, for example, my proxy servers work.)
First, to understand how the HTTP servers (that is, Web servers) are able to decide in which language they should return the requested Web page, it's very important to know that the HTTP protocol (the protocol used in communicating between a Web server and a browser) uses so-called 'HTTP request headers'. These requests tell the Web server what resource to get, whether it's cached on the client (so that the server only needs to return the resource again if it's been changed in the meantime), whether the client has 'cookies' stored about the server to maintain Web sessions and so on.
One of these headers is called 'Accept-Language' and tells the Web server what language the client prefers (with, optionally, an additional country code and/or quality setting when there is a list of preferred languages). For example, if you'd prefer pages in Finnish instead of the default English, this header looks like the following:
Accept-Language: fi (or, Accept-Language: fi-FI - both are valid and can be used. The first, lowercase 'fi' stands for Finnish, the second, uppercase 'FI' stands for Finland. Note that, in general, the country code can also be lowercase; from now, on, I use lowercase letters to denote the country.)
If you'd prefer your preferred language to be Canadian French, you can use the following request header:
Accept-Language: fr-ca
And, as far as strictly US English is concerned, you'll often see this header:
Accept-Language: en-us
In order to be able to return a Web page tailored for your language preferences, the Web server MUST receive every HTTP request (Web page download) containing the Accept-Language header. If it doesn't receive it, it will in no way know what is your preferred language and will, in almost all cases, return the default one (English in most cases).
Does the system-wide Regional Settings have any effect on the preferred language?
Unfortunately, modifying the regional setting in Settings/System/Regional Settings doesn’t change the “Accept-Language” HTTP header sent out to the Web server (it’s based on this HTTP request header that most HTTP servers – except for Google, which uses a bit more sophisticated algorithm, which I’ll elaborate on later –, if they have content in more than one language, decide what language they should return their content in) – not even in the latest WM5 AKU2, as can also be seen in this screenshot. I took the screenshot on a Dell Axim x51v with the latest, AKU2 A12 ROM, after setting the regional setting to Germany (and rebooting). It certainly shows IEM sends out requests telling the Web server that it prefers U.S. English pages, no matter what the operating system setting is.
PIE AcceptLanguage in the Registry
Fortunately, WM2003SE+ IEM/PIE does store the language code in the Registry (and it, even more importantly, does use it) under HKEY_CURRENT_USER\ Software\ Microsoft\ Internet Explorer\ International\ AcceptLanguage. How it is accessed under different operating systems, however, is varying.
First, under Pocket PC 2000 (the first Pocket PC operating system version), there is no International key at all as can also be seen in here. That is, it’s futile to create the above value in the Registry – it just won’t work.
Under Pocket PC 2002 and WM2003, this value does exist with the value “en-us” for devices with the (American) English ROM. These operating systems, however, do not take this value into account and don’t send out any Accept-Language header as can also be seen in this and this screenshots for PPC2k2/WM2003, respectively.
It’s only with WM2003SE+ operating systems (WM2003SE and WM5) that PIE copies the value of this string value to the HTTP request. However, interestingly, on English devices, the value, by default, doesn’t exist (unlike on Pocket PC 2002 / WM2003 devices, where, much as it does exist, its value isn’t used in the communication with HTTP servers in any way) – this is why I, at first, didn’t realize it’s there and usable. (I've tested this on four different WM5 devices (x51v, hx4700, Wizard, Universal) and on the WM2003SE PL720. None of them had this value, unlike, again, my Pocket PC 2002 Compaq iPAQ 3660 / WM2003 HP iPAQ 2210.)
(Note that there are two other places of the registry having PIE/IEM-related information: HKEY_LOCAL_MACHINE\ SOFTWARE\Microsoft\Windows\ CurrentVersion\ Internet Settings and HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Internet Explorer. There, however, is no language-specific information in there.)
All in all, if you have a WM2003SE+ Pocket PC, you can just create a String value named “AcceptLanguage” under the HKEY_CURRENT_USER\ Software\ Microsoft\ Internet Explorer\ International key with the correct language code (with, when needed, also the country code if it’s necessary).
If you don’t want to create the value by hand, I’ve created a registry import file to do the job for you. It’s available HERE. All you’ll need to do is importing it with a Regedit5-compatible registry editor like Resco Registry Editor (please also see this roundup of registry editors for alternates / converting the file to REGEDIT4 format to be able to import with REGEDIT4-only registry editors like Kilmist and Tascal.) Don’t forget to change ‘en-us’ to your language first (for example, ‘ru’, ‘fi’, ‘fr’ etc.) Also, you may want to use some kind of associated quality value as is defined in section 14.4 of the official HTTP 1.1 header specification. (For example, to express "I prefer Danish the most, but will accept (preferably) British English and, finally, other types of English", use the string “da, en-gb;q=0.8, en;q=0.7”)
Do PIE/IEM plug-ins let for changing the language?
Unfortunately, PIE/IEM plug-ins like PIEPlus, MultiIE or Spb Pocket Plus (click the links for the latest reviews!) don’t let the user directly supply this vaue – ypu’ll need to directly modify the Registry in order to configure this value.
What about NetFront?
As far as alternate browsers are concerned, NetFront 3.3 sends out the ‘en’ language code by default . While it is supposed to have support for changing the request language, it, as with many other NetFront features, is buggy.
In order to test this yourself, you'll need to create a new User-Agent entry in (Menu/)Tools / Browser Settings / Misc (as the default entry can’t be modified). There, choose an empty (or, if you've already defined an alternate User-Agent setting, anything different from the default "NetFront v3.3 Standard" custom setting. In this screenshot, I show an example of selecting an empty entry - you'll see this before creating any new User-Agent record. After this, just click the Edit button on the right, give the new setting a new name (in the top "Title" textfield; in this example screenshot, I've called it "Finnish NetFront") and, in the bottom-most "language" input field, enter the language code (in this screenshot, "fi"). Now, click OK; the new entry will be selected as can be seen in here. Now, you can give the new settings a try; as can be seen in here, the language code sent out is still the default 'en'. (Note that in this example I've also changed the User-Agent to 'My custom Accept-Language tester User-Agent to show what U-A is sent out' from the default 'Mozilla/4.08 (PDA; NF33PPC3AR/1.0) NetFront/3.3' so that we can see Netfront indeed sends out the modified header.)
Note that NetFront has a “Base language” setting in View/Advanced Setting. The setting (which can’t be fine-tuned; for example, North-European languages are only a group and not individual languages), has no effect on anything (it only tells the browser the default encoding it should use when trying to render the page brought back) either.
What about Opera Mobile?
Opera 8.6 doesn’t send out any Accept-Language header at all (click the links to see the screenshots showing this!).
Note that, on the desktop, Opera supports this and it can even be freely redefined in the GUI. I’ve checked the desktop INI files to see whether it’s there that this information is stored (many desktop-based configuration options are also accepted and interpreted by the Pocket PC version of Opera Mobile). Unfortunately, that’s not the case.
NetFront and Opera Mobile – a summary
All in all,
unfortunately, as of their current versions (8.6 of Opera and 3.3 for NetFront) neither of these browsers look up/use the value of HKEY_CURRENT_USER\ Software\ Microsoft\ Internet Explorer\ International\ AcceptLanguage
you can’t configure them either to do so: the built-in request language feature in NetFront doesn't work
In a later section, I'll elaborate on how you can still add/modify an/the Accept-Language header when using these two apps.
What about Thunderhawk?
Thunderhawk also sends out the english-by-default header. Unfortunately, it can't be modified in the Settings dialog, it doesn't take into account the PIE/IEM registry setting and, as Thunderhawk doesn't let you use proxy servers, you can't use external proxy servers either to modify this header. This means it's fully impossible to change the language preferences using Thunderhawk, as opposed to all the other browsers.
What about Minimo?
The (as of writing) latest (08-27-2006) Minimo nighly build offers seamless Accept-Language definition capabilities.
While it doesn't use the PIE/IEM registry value for overriding its setting, you can easily modify the header. To do this, enter the “about:config” URL in the address bar. You’ll be taken into the preference list screen. There, just enter ‘lang’ in the Filter field and, then, you’ll be taken right away to the intl.accept_languages property as can also be seen in this screenshot. Double-click intl.accept_languages and edit the value as you find it OK and press Enter. Then, in the config list, “default” will change to ‘user’ and the headers will indeed be correctly sent out.
Paragon Language Extender
Paragon Language Extender is a well-known language changer application (including HTTP request modifying capabilities) for all Pocket PC (and Handheld / Palm-size) operating systems prior to WM5 (there is no WM5 version and never ever try to install the Language Extender on a WM5 device – I’ve tested it on the WM5 Dell Axim x51v; I had to hard reset).
Among other things, WM2003+ versions of the Paragon Language Extender also support dynamic language change as can be seen for example in here:
{
"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"
}
In this case, ‘de’ denotes I’ve installed the German extender; the screenshot also shows it has its own German-language dictionary.
Interestingly, the Paragon Extender doesn’t create HKEY_CURRENT_USER\ Software\ Microsoft\ Internet Explorer\ International\ AcceptLanguage. It does “sit on” the operating system and inserts its own Accept-Language header into the outgoing PIE requests. (Note that if you do create HKEY_CURRENT_USER\ Software\ Microsoft\ Internet Explorer\ International\ AcceptLanguage by hand, it’ll override that of Paragon).
Note that there are two major versions of Paragon Lang. Extender: and old, PPC2k/PPC2k2-compatible, 4.23 version still available for non-major languages (that is, not available for, say, German or French but available for, say, Finnish, Bulgarian or Arabic) and a new, WM2003/WM2003SE version (the latter is build 4710 for for example Finnish). Unfortunately, the former does NOT make the PPC2k2 PIE send out the correct header. That is, it’s not possible to make the Pocket PC 2002 PIE to send out the correct request with either using Paragon Lang. Extender or, as we’ve already seen, by directly overwriting HKEY_CURRENT_USER\ Software\ Microsoft\ Internet Explorer\ International\ AcceptLanguage.
Finally, in WM2003SE, the Paragon app is not recommended over the “traditional” way of overwriting HKEY_CURRENT_USER\ Software\ Microsoft\ Internet Explorer\ International\ AcceptLanguage – it's an overkill and I only recommend it for “plain” request language modification if you need its other capabilities too.
Note that if you don’t need your device to be fully translated, you won’t need to install the full version – the second, Compact setup (as can also be seen in here) will do just fine. The results after the setup will be as follows:
What can I do if I want to browse the Web with a Pocket PC 2002 / WM2003 PIE or with Opera Mobile / NetFront?
You have two choices.
if you have the capability of running a proxy server somewhere (even on your Pocket PC PDA with a suitable Java Virtual Machine (please read this article and search my blog for the word 'Java' for more info) - after all, it's multiplatform); for example, on a 24/7 online desktop PC,
with a client that can be configured to use an external HTTP proxy (in this regard, Thunderhawk is disqualified) and does send out the Accept-Language header (in this case, NetFront), you'll need to use an external proxy server to change the language code sent out to another one before sending the request further, to the target Web server. If you have a Java Virtual Machine (easily downloadable from here - select 'Java Runtime Environment (JRE) 5.0 Update X'), I’ve written an easily modifiable, open-source (source here) HTTP proxy server available here. You will only need to start it with the command
java HTTPProxyAcceptsLangHeaderRewrite portnumber languagecode
if you have a JRE (I’ve compiled the class with JDK 1.3, so, any JRE will do) installed on your PC (again, you can get it at the above-linked Sun page).
For example, the command
java HTTPProxyAcceptsLangHeaderRewrite 8080 cool-eh
will result in the following response from http://www.proxydetect.com/ (after you correctly set up your Pocket Internet Explorer / NetFront browser to use the proxy - please see for example this article on doing so):
This shows that indeed the (of course non-existing) ‘cool-eh’ language code was sent to the server.
If you, on the other hand, have a proxy-configurable client that does not send out the Accept-Language header (the case with PPC2k2 PIE and Opera Mobile), you’ll need to explicitly add the header to the headers relayed to the HTTP server. To do so, you'll need this Java class file (source here). Its usage is exactly the same as with the previous bullet.
The results of using this header-adding proxy server can be seen for example here (showing Opera Mobile).
[/LIST]
Mail the webmaster of the given webpage to do a dynamic country lookup depending on the client’s IP (internet) address instead of the Accept-Language header. Say, if you have a Thai client IP address, you would receive a page with Thai content even if your Web client sent out an Accept-Language header of ‘en-us’ (or no language code at all). Many Web sites do so – for example, even Google. Google, if it doesn't receive an Accept-Language header or the header (if it does exist) is the standard one requesting English pages, then, just looks up the country of the client and returns the content accordingly, in the local language of the country. If the Accept-Language header exists and it's set to something other than English, it'll return the page in that local(ized) language. This is what Web server administrators should strive for.
What about devices with non-English ROM's? If I, say, dump / sell my English Pocket PC and get a German one, will I get German pages instead of English ones?
Note that I wasn’t able to reliably test how and what Accept-Language headers the Web browsers on a Pocket PC with a non-English ROM send out. I don’t think the built-in PIE would request English pages on a Pocket PC with a German language ROM, but I may be mistaken (after all, PIE / IEM isn't the most sophisticated Web browser). The same (I don't know how it behaves on devices with non-English ROM's) stands for NetFront, which does send out the language header. Finally, as far as Opera Mobile is concerned, I seriously doubt it’d send out the correct header on any (non-English) Pocket PC – after all, it doesn’t seem to be sending out any kind of language header. (Incidentally, it has the ‘Accept-Language’ string once in opera.dll but there doesn’t seem to be any parameter to it.)
Acknowledgements
My blog reader ‘Begemot’ from Russia to point out the never-anywhere (give for example searching for “AcceptLanguage” a try on major PPC boards like PPCT, Brighthand, AximSite, XDA-Developers (and on Google) etc. Note that, on the latter, there will be some (false) hits because of the MMS handler app on WM PE devices) discussed (this is why I didn’t know of it before either – and, as the given AcceptLanguage value only exist under PPC2k2 / WM2003, I haven’t run into it in the Registry either) HKEY_CURRENT_USER\ Software\ Microsoft\ Internet Explorer\ International\ AcceptLanguage. Without him, I wouldn’t have been able to write this tutorial in its present form. Thumbs up
The Netfront-related part of the article updated – along with a new Netfront bug I’ve just found. I’ve also slightly modified the PIE-related part with new, WM2003-related info.

EVERYTHING you need to know about internation. issues. MUST for webadmins & -authors!

EVERYTHING you need to know about internation. issues. MUST for webadmins & -authors!
Web authors, -masters and Pocket PC Web browser users attention: everything you need to know about internationalization and "special character" issues in current PPC Web browsers
Over at the AximSite forums, I've been presented an interesting bug in famous Pocket PC Web browser NetFront, which made me experiment with the internationalization (i18n for short) issues of all Pocket PC Web browsers (and, for that matter, all the three most important desktop Windows ones). I've long been planning a test like this to see how Pocket PC Web browsers compare to desktop browsers in terms of i18n issues.
Elaborating on these issues is not just an über-geek, useless waste of time but can prove very useful if you, for example, speak a non-Western language and would like to read pages written in them or post messages on Web boards in the given language using your Pocket PC.
You can run into these problems even if you don't plan to post in any non-Western language or non-English forum / pages as can be seen in the above-linked AximSite example. All it takes a poster to use Word to compose his or her posts or articles and you end up seeing square characters (or simply nothing) instead of apostrophes and other, special, but otherwise Western characters if you use NetFront as a client. (Note that earlier, Minimo also had very similar problems with UTF-8-encoded pages I've elaborated on in here. These have been in the meantime, thanks to my bug reports, fixed. Also, very early versions of Minimo couldn't render non-Western characters on any page encoded in 8-bit as you can also see in my well-known Web Browser Bible. Those problems have long been fixed.)
Note that my inability to speak / write / read any Middle-East language (Arabic, Hebrew) and write/read Far-East languages like Chinese or Korean, I could only check non-Western, but still left-to-right languages like Russian. That is, in here, I'm unable to elaborate on the issues of these Web browsers outside the Western / Central / Eastern-European language groups. Sorry for this - not even I can speak more than 7-8 (European ones / Japanese) languages
1. URLs with accents
My first test was finding out whether you can enter URL's with accents in them into a given browser. (I recommend for example this article on the subject for more info. It's its test URL that I've used.)
Note that it's highly unlikely you'll ever see any URL's with accents in them (that is, this problem is pretty much non-existent); still, it's nice to know which browsers are able to render these pages. Yes, being able to use the built-in PIE as a "fallback" browser in these cases is highly advantageous.
The results (+ means compatible, - means not compatible):
Click here for the chart
As can be seen, only PIE supports this (as opposed to the desktop version) and Minimo (which I've expected, given that Minimo is the closest to its desktop version of all the Pocket PC browsers available).
(Note that, on he desktop Windows, Desktop IE7 RC1 and Opera 9.02 don't support this by default without explicit reconfiguration (see the above article on this); Mozilla / Firefox does.)
2. Displaying non-standard Western and non-Western characters
The second set of compliance tests is way more interesting and important than the first.
Note that this explanation will be a bit on the technical side; without some knowledge of HTTP and the HTML meta tags, you should skip the explanation and move straight to the summary column of the final chart (and the section following the chart). That is, don't read the following section if you don't know what HTTP is! Web browser developers (particularly those from Access!), website administrators and Web authors, on the other hand, should definitely read it in order to be absolutely sure the non-standard characters (again, it can be "plain" punctuation created by Word, not just non-Western languages!) contained in their documents are correctly rendered by all the browsers.
2.1 Test method
This test shows
whether the given browser takes into account the value of the
"Content-Type" HTTP response header
http-equiv meta tag
what the browser assumes (what it defaults to) when neither of them are defined (which is very often the case)
on the other hand, if there are both of them with different values, does the metatag-based override the HTTP response header.
For the test, I've written a custom HTTP server emulator accessed from all the tested Web browser applications. As usual, I'm making the source available so that you can freely test it if you prefer.
2.1.1 How my custom server emulator should be used?
The application listens to incoming HTTP requests at port 82. It requires a custom parameter (as extra path info - that is, you don't need to use the ? but / instead) in the following form:
http://127.0.0.1:82/xyz
(change 127.0.0.1 to the Internet address of your desktop PC's address if you want to access it from your PDA)
where
x tells the server emulator to set the ‘charset' attribute of the HTTP response header Content-Type. (Doesn't set it at all if you pass a ‘N' instead.)
y tells the program emulator to set the ‘charset' attribute of the "Content-Type" http-equiv meta tag. (Doesn't set it at all if you pass a ‘N' instead.) This is the only way for a plain user (not having access to the Web server configuration) to set a charset for a given page.
z tells the server what character encoding to use internally. In most cases, you can safely keep it as ‘2' for the test.
All values are one-digit numerals; I've tested the browsers with value ‘1' (Western charset) and ‘2' (Central-European charset). As has already been mentioned, with the first two digits, you can also supply ‘N' (which stands for ‘No', ‘Doesn't exist' or ‘Not known'); then, the given HTTP header / HTTP-Equiv tag won't be set / returned. If you set something other than ‘1' or ‘2' for the ‘z' digit, it'll default back to ‘1'.
For example, if you enter http://127.0.0.1:82/111 in your Internet Explorer browser running on the same machine as the server emulator, you'll see this.
In here, there are three rows of special interest (the fourth, the date row is only included so that you can be absolutely sure the browser doesn't just returning a cached document):
"8-bit 8859-1-only punctuation marks" contains strictly 8859-1 punctuation marks. You should see real punctuation marks (if you render the page as a 8859-1 page) after this introduction: no squares, no question marks, no nothing.
"Central-European chars (will ONLY work with the third parameter being 2):" contains two Central-European characters. You'll see them rendered in three ways: as question marks (if you pass anything but ‘2' as the third, ‘z' parameter), as
{
"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"
}
(the closest Western rendering of these characters) and, finally, as
, which is how they should be rendered. (Finally, as a - mark (hyphen) in Thunderhawk because it doesn't contain any non-Western character in its custom character set.)
Finally, the third row will be always displayed the same way because it explicitly uses HTML Unicode character entities, which aren't affected by the language setting. That is, it'll be always rendered as
2.2 The chart
In the following chart, I've (keeping ‘z' as ‘2' in all the cases - again, it doesn't have direct affect on any HTTP header or HTML meta-tag, only the way Java encodes the returned contents) tested all the available combinations. This way, I was able to see
whether the HTTP-Equiv meta tag overrides the "Content-Type" HTTP response header (nope, only in NetFront - this is a big difference in NetFront and any other Web browser and should be modified by the NetFront people! Other browsers only take into account the meta tag if there is absolutely no charset parameter in the HTTP Content-Type response header)
if none of the two alternates are used, what charset the browser defaults to (fortunately, Western charset in all cases)
Click here for the chart
2.2.1 Explanation for the chart
2.2.1.1 NetFront and Content-Type (charset) overriding: different from the approach of all other browsers!
Again and again, NetFront works differently from all other browsers, header overriding-wise. That is, something that works on a desktop browser or any other Pocket PC browser will not necessarily work on NetFront if the HTML document contains a Content-Type metatag. Again, NetFront will override the encoding of the page with the value found in this metatag, unlike any other browser. This seems to be the reason why several people have reported char encoding problems with NetFront.
It should also be pointed out that the overriding being non-standards-compliance aside (which should be fixed by the Access folks - the developers of NetFront - as soon as possible), NetFront isn't able to display any extended punctuation mark contained in the 8859-1 codepage if you don't use the default (and ugly) Courier New font but switch to a proportional font. No matter what language info you return from the Web server, these characters will just not be displayed. A quick fix for this problem (before the Access folks fix this bug) is forcing the browser to, say, use the Central European (windows-1250 as opposed to 8859-2), Baltic or Greek encoding (but not to UTF-8, which hides all these chars) encoding as can be seen in here (note that now the punctuation is displayed in the background, on the Web page).
2.2.1.1.1 How Web administrators should treat NetFront clients?
This also means if you're a Web hoster / Web author and would like to allow your NetFront users to be able to browse your otherwise Western (8859-1) pages and there aren't any, say, French and Spanish names / texts on the website (with all those funny accented characters), you should consider marking these pages as, say, Central-European (windows-1250) or Baltic if and only if your client using NetFront (you can easily see this by checking for the User-Agent HTTP request header as has already been explained in several of my User-Agent header-related articles; for example, this one).
2.2.1.2 How Web administrators should treat Thunderhawk clients?
Incidentally, speaking of server-side User-Agent checking, if you operate a, say, Web site offering content in a Central-European language (that is, a language sufficiently close to Western languages, alphabet-wise; that is, in where using Western characters instead of some special, local characters - for example, using
instead of the "official"
), then, upon sensing the client's using Thunderhawk, you may want to force the content encoding back to 8859-1. That is, return the content as plain 8859-1 (Western) document. This will make sure non-Western characters will be converted back to their closest Western equivalent, resulting in a far better user experience.
2.2.1.3 Generic advice for Webadmins of web hosters: NEVER set the charset attribute in the Content-Type HTTP response header!
Also, the results clearly show if you're providing Web hosting service to customers, you should never set the character set the ‘charset' attribute in the Content-Type HTTP response because your customers won't be able to override it with their own encodings. For example, if you're a Central-European Webspace provider and use the local, non-Western language as default charset returned straight in the HTTP header, you'll make all your customers unable to provide content in the Western-European charset.
The situation is the same in the opposite direction: if you set the Western-European charset and you still have for example Russian customers that would like to publish their Russian pages on your server, most Web browsers won't be able to render these, not even if these folks explicitly try to override your encoding settings.
A real-world example: earlier, this all has been a huge problem with my current webspace provider. Due to cost considerations (I didn't want to pay big bucks to host a webpage I don't use for commercial stuff, just as a database back-end for my articles, images and other downloads), I've chosen a (compared to, for example, the Finnish Web hosting fees) very cheap Central-European webspace provider. It, however, before July 2006, also set the above-mentioned ‘charset' attribute to Central-European encoding, which made it impossible to put Word-generated/-exported English language pages on my page without first changing all the non-standard (extended) punctuation marks to their non-extended (and, therefore, less spectacular) counterparts. That is, when I, for example, posted a comparison chart HTML file there (I can't include comparison charts in Pocket PC discussion forums because of the forum restrictions and wide charts in my Smartphone and Pocket PC Magazine Blog - in these cases, I must link them from my back-end), I always had to change (with a generic search-replace in, say, Notepad) these characters back to the non-extended version.
Note that you can avoid all this hassle in Microsoft Word before starting to write your article / post by disabling the two checkboxes ("Straight quotes" with "Smart quotes" and Hyphens (--) with dash (-)) in Tools / Autocorrect Options / Autoformat As You Type. If you find it necessary and want to avoid problems with, for example, your NetFront or non-Western readers, make sure you do this (that is, disable the two checkboxes).
Now that, during a recent Web server update, this annoyance has been removed, I can post anything without mass-replacing 'special' characters (or disabling autocorrection in Word).
All in all: the inability to override (in everything but NetFront) the HTTP response header means a decent web hoster should never return the language / character encoding parameter in his / her Web pages if there is chance users would want to return pages in different encoding. This is, fortunately, the case with the majority of current web hosters.
3. Form Posting
The second main problem area is not displaying non-Western characters but posting such contents to Web servers via Web forms. In these tests, I've tested the same; with exactly the same input (punctuation, non-Western characters) and I've also added Western accented characters like ä and ö: I've posted these characters to the Web server and checked what they have become.
I've used two sites for this purpose: my PPCMag blog, which is 8859-1 (Western charset) by default and a Central-European server using the Windows-1250 (Central-European) encoding on all its pages. (The page encoding setting has direct effect on what is uploaded back to the server from a form.)
Click here for the chart
As can clearly be seen, the situation isn't at all bad with the three desktop browsers (I've encountered no compatibility issues at all - all special and even Central-European characters were visible in their original - unconverted! - form after posting, even when posted to an 8859-1 server).
With Pocket PC-based browsers, on the other hand, posting special / non-Western characters turned out to be much more problematic, particularly - as opposed to the desktop posting case - when posting to a 8859-1 (Western) server. Then, it was only Thunderhawk that was able to upload these characters; all the other clients either don't upload these characters at all or converted them.
An explicitly windows-1250 server was a bit better as far as NetFront is concerned: now, it was able to upload non-standard Western punctuation and non-Western accents.
Unfortunately, Opera Mobile has never been able to upload any kind of extended Western punctuation. This is a real bug that really should be fixed.
4. Non-8-bit file formats
In addition to 8-bit file formats (ISO-8859-1, Windows-1250 etc), there are some other, non-8-bit file formats. One of them is Unicode, of which a test page is here. Another is UTF-8 (test page here; OK, I know this is, technically, a 8-bit file format, using 2 or 3 bytes for extended 8859-1 or Unicode characters. I didn't want to create a different category for it.)
The former is almost never used on the Web (albeit it's possible some, say, Chinese or Japanese site will use it); the latter pretty extensively in the non-Western language areas. Its penetration in Central-Europe (excluding languages using cyrillic characters) may be 10-20% (because the special characters of these languages are easy to map into a 8-bit chartable); in China/Japan or other languages using alphabets containing Kanjis and other special (and numerous) characters, around 100%.
In this test, I've tested whether the Pocket PC web browsers are able to read these pages (see the above two links if you want to give them a try). As can be seen, the situation is pretty good: the common UTF-8 is read by all browsers. IEM and Minimo fail to render Unicode files, though.
This is, again, not a big problem at all - I've yet to see a Web page that uses Unicode instead of UTF-8. Note that this is one of the very slight differences between Minimo and its desktop big brother, Mozilla / Firefox. The latter, as with the desktop Opera and Internet Explorer, is able to render Unicode files too.
Click here for the chart

Windows Mobile Smartphone Internationalization Issues

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.

(MY) MAJOR BREAKTHROUGH: now, you can use Opera Mini as the system-level Web browser!

Note that the execution has taken on a whole new life with new people continuing the development. As there’re new versions arriving almost every day, I can’t keep up with editing the thread starter posts to reflect the latest state of the development. Therefore, you will want to
1. start with the last posts in this thread, particularly looking for my, JZ SmartMort’s and badbob001's posts and announcements.
2. go to http://forum.xda-developers.com/showthread.php?t=382043 for JZ SmartMort’s similarly named, excellent app.
3. badbob's thread is at http://forum.xda-developers.com/showthread.php?t=384271 - you'll want to visit it too
The original, now-outdated article follows:
You, hopefully, already know Opera Mini 4, which, currently, I recommend the most for all Windows Mobile users as the primary browser. It’s especially useful if you are on either a slow (say, GPRS) or expensive (non-flat rate) data plan and/or you also use Opera on the desktop and, therefore, can make use of the excellent, remote (!) favorite synchronization offered by Opera Link.
So far, it was impossible to quickly invoke Opera Mini from any mailer applications by just clicking / activating Web links in them. This was a major stumbling block for many, which is quite understandable. Yes, it’s a major pain in the back to having to rely on Internet Explorer (Opera Mobile, Netfront etc.) for displaying the given Web page - instead of the much faster / cheaper / prettier Opera Mini.
Of course, Pocket PC (using the new terminology, Windows Mobile 6 Professional / Classic) users have always had an escape route. They still could highlight the link and, then, copy it to the clipboard. After that, they could still invoke Opera Mini, go to Menu / Enter Address and paste the URL there. (Assuming, of course, they use a copy/paste-capable MIDlet Manager. The outdated and, unless you have specific needs or an old operating system, in no way recommended TAO isn’t one of them; the recommended Jbed is.) An example of highlighting a link and copying to the clipboard is depicted in the following screenshot:
{
"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"
}
This, however, resulted in multiple screen taps and has never been so simple as just clicking a link in the mail body and let the system invoke the browser and pass the link to it.
And, of course, the above-explained way of copying URL’s to Opera Mini doesn’t work with touchscreen-less MS Smartphone (in the new terminology, Windows Mobile 6 Standard) models. Not even with external Copy/Paste tools like VITO’s excellent, free CopyPaste.
Because of the acuteness of the problem, I’ve thought very hard on solving the problem and making Opera Mini (OM for short) a browser that doesn’t suffer from this problem. And, during a lengthy swimming & sauna session, it occurred to me how it can be solved. Yeah, it’s mostly during swimming that I get the best, most revolutionary ideas
First, the pros and the cons so that you can see what you can expect of my solution.
Pros
Fully Seamless integration into Messaging (or any other mailer app), Notes, Word Mobile, PDF readers, MobiPocket (or any other text processing / viewing app) etc under ALL Windows Mobile / Pocket PC operating systems before Windows Mobile 6, on both the Pocket PC and Smartphone platforms
While it’s not compatible with WM6 Smartphones (WM6 Standard devices), on WM6 Pocket PC’s, you can still pretty easily invoke OM and pass the given URL to it.
It’s free and pretty easy to set up
Cons
It isn’t compatible with WM6 Smartphones like the HTC Vox (s710) or the HTC Wings (s730). Sorry.
With WM6 Pocket PC’s (unlike previous OS version), some additional manual work is needed, compared to the pre-WM6 cases. That is, just clicking the link won’t suffice.
It will NOT work on local HTM(L) files on your device – that is, not external links. That is, you won’t be able to render a local HTML file if you click it from File Explorer. However, as it’s mostly remote links that you’ll want to view, not local files, this isn’t that big a problem.
Again, let’s emphasize it again:
with WM6 PPC’s (unlike with pre-WM6 ones), you must copy the URL to the clipboard and only after this click the link!
It does NOT work with touchscreen-less WM6 Smartphones (WM6 Standard devices)! That’s because of the operating system’s inability for any kind of copy/paste operation.
Installation, usage
download and install MortScript if you haven’t already done so. Make sure you install it in the main memory (unless you’re ready to modify the scripts I’ve provided).
download THIS file
depending on your operating system version, go to either the WM5 or WM6 directory of the ZIP file downloaded in the previous step. Note that if you’re still using a pre-WM5 operating system, you’ll need the WM5 version.
transfer OMInvokeAndPasteScript.mscr to \Program Files\MortScript on your device
import the registry file into the Registry (WM5: OMInvokeAndPaste.reg; WM6: OMWM6DefBrowser.reg). if you do this on a MS Smartphone, make sure it is application unlocked. I’ve published several articles on (the absolutely legal) app unlock; see for example THIS
If you absolutely don’t know how the Registry import file needs to be imported, do either of the following:
either get (and, even better, purchase - they DO deserve it as it’s a REALLY excellent app) SOTI’s Pocket Controller. Install it, connect to your device, click the Registry icon. Then, select Edit / Import in the new remote Registry Editor window. Search for the registry file and import it.
or, get Resco Explorer. Install it on your mobile device; make sure you don’t disable the Registry editor install. Start the latter and, then, just exit it – this makes sure .REG files become associated with the Registry editor. Now, after you’ve transferred the REG file to your handset, just click it from inside File Explorer. Voila: it gets imported into the local Registry.
That’s all – from now on, clicking links in mails, documents etc. should fire up OM and pass the URL.
How you can (and when you must) modify OMInvokeAndPasteScript.mscr ?
The majority of the application logic is, in both the WM5 and WM6 versions, in OMInvokeAndPasteScript.mscr. Therefore, you’ll need to modify it in the following cases:
first, the most important instruction you’ll need to modify is the second row Run("\Windows\jbed.exe", "-run sX_"), where X is either 0 or 1 (I’ve set it to 0 in the WM5 and to 1 in the WM6 script).
As is explained in my earlier Opera Mini & Jbed-tutorial and posts (see for example THIS) , along with other people (see for example THIS), X stands for as how manieth OM was deployed under Jbed.
also note that, if you have to use a pre-WM5 operating system, it’s here that you need to define your TAO / IMB J9 links. Please consult the related section in the MIDlet Bible for more info on how these links need to be created.
Just remember the following: the Run() function requires two parameters, both enclosed in “’s. First is the executable; the second is the passed parameters. The latter string, of course, can (and with both IBM J9 and TAO, will) consist of several parameters.
the script is geared towards Opera Mini 4 users. Under Opera Mini 3 (or previous versions), the initial two SendLeftSoft calls will NOT result in the “Enter address” dialog coming up. With Opera Mini 3, therefore, you will need to change the second SendLeftSoft to SendCR as follows:
#SetClipText(url)
Run("\Windows\jbed.exe", "-run s0_")
Sleep(6000)
SendLeftSoft
Sleep(400)
SendCR
Note that the above code snippet has SetClipText(url) commented out (note the # at the beginning of the row). This is only needed under WM6; under previous operating systems, you MUST NOT comment it out.
finally, you can fine-tune the parameters of Sleep() in the code so that OM is still reliably invoked. With the code above, for example, I let MortScript wait for 6 seconds (6000 milliseconds) before starting to emulating left softkey presses.
Quick explanation for the different behavior under WM6 (only for geeks / hackers / programmers!)
Under WM6, invoking the default Web browser isn’t any more done the same way as under previous operating systems. There, the contents of HKEY_LOCAL_MACHINE\ SOFTWARE\Microsoft\ Shell\Rai\ : DEFBROWSER\1 tell the system what to invoke. Here, unfortunately, it’s impossible to define additional command-line parameters. Parameters DO get passed (in the background), but you can’t name them. MortScript, however, relies on the latter – that is, named parameters referable under their name, NOT their index.
Under pre-WM6 operating systems, it was easy to name the parameters you passed to programs as can clearly be seen in the WM5-specific Registry import file, which just overwrites the old value of HKEY_CLASSES_ROOT\ http\Shell\Open\ Command:
@="\"\\Program Files\\MortScript\\MortScript.exe\" \"\\Program Files\\MortScript\\OMInvokeAndPasteScript.mscr\" url=\"%1\""
Here, I’ve named the parameter “url”. This is why the first row in the MortScript file is as follows:
SetClipText(url)
This just instructs MortScript to copy the contents of the “var” variable (which, now, comes from the “outside” of the script) to the clipboard so that, later, it can be pasted back to the URL input field.
Feel free to quickly scrutinize the two, WM6- and pre-WM6-specific Registry import files so that you can see this for yourself.
Currently, I don’t know a way of naming parameters under WM6. Of course, when I come up with a solution, I let you all know.
Awesome.
Thanks for this breakthrough.
I shall test it tonight when I get home and report back my success.
UPDATE (11/29/2007): thanks to badbob001 on my blog, now, as opposed to the initial case, WM6 devices (both Pocket PC's and Smartphones) are FULLY supported!!!!!!!
This all means there is no longer a difference between how WM6 and pre-WM6 operating systems behave. You only need to make sure to get the right .MSCR and Registry import files from the already-updated ZIP file, depending on your operating system version. That is, for WM6, get the files from the WM6 subdirectory, for pre-WM6 operating systems, from the WM5 one. And, of course, modify the scripts if Opera Mini isn't deployed as the first app under Jbed, the, by default, supported (and highly recommended) MIDlet manager.
Again: Under WM6, manual link copying to the clipboard is no longer needed and, again, it works 100% on WM6 Smartphones as well!
(note that now that WM6 is fully supported, I haven’t edited the original article; its WM6-related parts are now outdated. Again, WM6 is fully supported now and there's no difference between the usability on pre-WM6 and the WM6 platforms any more.)
Moved to this post, as I noticed that one is for Smartphones, while I am on WM6 Pro.
So as I was saying:
Yes, you are right. I have deleted the string mentioning s0_ all together, and it does work without it. So, what you think.
Basically, here is what I tried:
Code:
If (ProcExists("jbed.exe"))
Run("\Storage Card\Program Files\Jbed\jbed.exe")
sleepmessage(2, "Please Wait...")
Else
Run("\Storage Card\Program Files\Jbed\jbed.exe")
sleepmessage(10, "Please Wait...")
EndIf
SendLeftSoft
Sleep(100)
SendLeftSoft
Sleep(100)
SendEnd
SendHome( "",0,1 )
Sleep(100)
url = substr(url,2)
SetClipText(url)
SendCtrlKey( "V" )
Sleep(100)
SendLeftSoft
What it does with that 10 seconds command is that, it launches Jbed, waits 10 seconds at the menu option (where there is a list of Midelets installed, in my case for now only Opera), and then only launches OM, and again there is no auto address input. So increasing seconds doesn;t give me anything. What can be the problem?
And what about handling of links in apps such as Spb Insight ... I haven't tried clicking links in any other 3rd party app, but perhaps the result will be same, i.e. not launching the OM but going straight to PocketIE.
UPDATE (12/04/2007): Major WM6-related updates have taken place in the meantime.
In the meantime, my blog reader badbob001 has refined the script. Now, if you click a link, you’ll be presented a choice list, where you can select whether to pass the given URL to Internet Explorer Mobile, Opera Mini, just copy to the clipboard or just cancel the operation. This will help you in selecting the right browser if you (still) plan to use IEM (or other native Web browsers like Opera Mobile, Netfront or Minimo).
Cool, eh?
Remember that you don’t need to deploy this script if you don’t need this kind of functionality but always want to be redirected right to Opera Mini. Therefore, I’ve also included the older version of this script in the ZIP file. It’s in the NoBrowserSelectionDialog subfolder. Note that this script has also been updated a bit: it checks for Jbed already running; if it is, then, it doesn’t wait that much. Again, thanks for badbob001 for refining and performance-tuning my initial script.
Note that the usual stuff applies: if the script doesn’t invoke Opera Mini but invokes something else, edit both occurrences of s0 and appropriately change 0 to a greater number.
Finally, note that, these updates & bugfixs being all WM6-related, I haven't edited the old, WM5-related, working MortScript file. If you need some speedup and/or dynamic, runtime selection of the browser you'd like to use, you'll want to copy either of the two new MortScript files - it'll work.
2. Upon HowardForums forum member volwrath’s bug report, I’ve enhanced the Registry import file to support invoking Opera Mini from all applications, not only Messaging and Notes. I wouldn't have thought WM6 is so half-baked (that is, half of the apps still depend on the pre-WM6 (that is, the HKCR/http/Open/Command) way of invocation). That is, the WM6 Registry import script has also been enhanced (basically, I've just added the contents of the old WM5-related Registry import file to it), not only the MortScript file.
Note that reading local files will still default to the system-level browser as I haven’t redefined the default application for opening .htm(l) files. That is, by default, Internet Explorer Mobile will open these.
Again and again, it can’t be stressed enough how much these hacks enhance the usability of Opera Mini under Windows Mobile! I really recommend giving Opera Mini a try – you certainly won’t regret it!
Gr8 ... tnx to all mind tanks and coders .... great, simply great. Hope with this, and my mobile, HTC P3300, being hard reseted, and OM being the first JApplet installed on main memory I will have no further probs
BTW, just wanted to know. Once I have .reg file registered in registry, and suppose I want to return back to factory settings, what will be the simplest procedure.
EazyVG said:
Gr8 ... tnx to all mind tanks and coders .... great, simply great. Hope with this, and my mobile, HTC P3300, being hard reseted, and OM being the first JApplet installed on main memory I will have no further probs
BTW, just wanted to know. Once I have .reg file registered in registry, and suppose I want to return back to factory settings, what will be the simplest procedure.
Click to expand...
Click to collapse
Just export the two reg keys as they were BEFORE your importing the regifile.
Should you no longer have them, let me know and I create it for you when I have some time.
Gr8 Breakthrough
Thanks Menneisyys and badbob001 ..... you the king of the hill.
On my HTC P3300 running WM6, Claudyfs Jbed 1.2, now all is working exceptionally well. Now with the updated script and reg tweak even the links embedded in 3rd party apps (such as the one I mentioned, Spb Insight) the OM get's launched and the browser shows the web site without any delays. The only thing I changed was the Sleep string from 6 to 4.
I can't thank you guys enough ... definitely MAJOR BREAKTHROUGH
Please Help!
I have done everything as mentioned. It comes up with the options - I select OM - It loads OM - that's it!
Nothing loads but when I go to Pocket Word and paste the info, it is in the clipboard.
What do I need to do to get the info from the clipboard into OM?
Otherwise, great app!
cbus said:
I have done everything as mentioned. It comes up with the options - I select OM - It loads OM - that's it!
Nothing loads but when I go to Pocket Word and paste the info, it is in the clipboard.
What do I need to do to get the info from the clipboard into OM?
Otherwise, great app!
Click to expand...
Click to collapse
Also - If I have OM running then click on link, it opens up ie and exits OM and IE?????
Any thoughts?
Ok - I read thru the middle of your info. I am running wm6 pro on sprint touch.
I put the # in front of setcliptext(url)
and put in SendCR instead of the second SendLeftSoft
What happens is I get OM to load and it opens a url but it is not the url I selected. It is from a previous clipboard item. I will continue to play with it.
any thoughts would be appreciated!
Update!
Ok - Got it working!
For those of you having similar issues, here is what I did.
I am running OM 4.0.9751
I took the # symbol off the front and that fixed the clipboard issue.
I did however leave the second SendCr and that did the trick.
So it looks like this:
SendLeftSoft
Sleep100
SendCR
Sleep100
I was under the impression that with OM 4.0 that I didn't need the sendcr command.
Please let me know if this is correct?
Still Exiting
So everything works fine - the only problem is that if OM is running in background, then it will go to OM then to IE then it says in ie "shut down Opera Mini?" Then it shuts down.
Any ideas?
made a fix for the exiting problem
I changed the mortscript to the following and that fixed the exiting issue however I am sure there is an easier way.
if (substr(url,1,1) eq " ")
url = substr(url,2)
EndIf
list[1] = "Open in Opera Mini"
list[2] = "Open in Pocket IE"
list[3] = "Copy to clipboard"
list[4] = "Cancel"
Choice("With this link...", url, list)
Case(1)
Call OpenOM
Case(2)
Run("\Windows\iexplore.exe", url)
Case(3)
SetClipText(url)
Case(0,4)
Exit
EndChoice
Sub OpenOM
If (ProcExists("jbed.exe"))
Run("\Windows\jbed.exe", "-run s2_")
sleep(2000)
SendRightSoft
sleep(2000)
Else
Run("\Windows\jbed.exe", "-run s2_")
sleep(6000)
EndIf
SendLeftSoft
Sleep(100)
SendCR
Sleep(100)
SetClipText(url)
SendEnd
SendHome("",0,1 )
Sleep(100)
SendCtrlKey("V")
Sleep(100)
SendLeftSoft
EndSub
Hope this helps!
Please let me know if there is an easier way.
UPDATE (12/12/2007): upon the problem reports of several Smartphone users (see the posts for example HERE), I’ve released a slightly modified version of the script that, instead of pasting, uses keyboard emulation. This makes it possible to use the script on some Smartphones that are incompatible with pasting.
The script is available HERE. Remember to remove the SP.2 extension before deploying it. Note that, again, it's ONLY meant for Smartphone users that previous script versions didn't work with!!!
Note that while it works on for example the I3 Beta of WM6 of the Samsung BJ, it doesn’t do the same on the (original) WM5 version of the same device or the HTC Vox (s710). It seems it’s impossible to support these devices with the current MortScript version. I'll also try to reimplement the script in nScriptm (another, less widely used scripting language / interpreter) - hope it is able to paste / send characters to these, still incompatible MS Smartphone models.
CABs Ready!!!
I made 3 cabs for easy installation of this hack.
What it does:1. Installs MortScript (Default to Internal Memory, because of links and shortcuts)
2. Installs script to Windows dir and imports Reg values (to be independant of MortScript folder)
3. Creates a shortcut for OperaMini in the programs folder!
These CABs are for ARM processors and for Pocket PC only - not smartphones.
All you need to do is install.
Have fun.
P.S: I need a confirmation that the WM5 cab works.
shlomki said:
I made 3 cabs for easy installation of this hack.
What it does:1. Installs MortScript (Default to Internal Memory, because of links and shortcuts)
2. Installs script to Windows dir and imports Reg values (to be independant of MortScript folder)
3. Creates a shortcut for OperaMini in the programs folder!
These CABs are for ARM processors and for Pocket PC only - not smartphones.
All you need to do is install.
Have fun.
P.S: I need a confirmation that the WM5 cab works.
Click to expand...
Click to collapse
You're great; I'll frontpage this!
UPDATE (12/15/2007): XDA-Devs forum member shlomki has just released the different hacks in CAB format so that they’re very easy to install. They’re available HERE. Comments are welcome. (Note that, due to lack of time, I haven’t checked them.)
Awesome - tested the WM6 without Selection Dialog and it works like a charm! Thanks for this breakthrough indeed!!!

Tool to edit .CPL files

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?

Categories

Resources