Sunday, April 6, 2008

Activate all the international keyboards/dictionaries on an iPhone version 1.1.4

As opposed to the iPod Touch which comes with a wide-enough selection of on-screen keyboards and dictionaries, the iPhone (1.1.4) is limited to the ones for the countries in which the phone was officially available at the time of the firmware's release (English/UK, English/US, French/France, German/Germany). So thanks to Apple, if you want to input text in another language, you will have to jailbreak your iPhone and tweak it a bit.

Here is how to do it:

A. Activate the international keyboards

To activate all the international keyboards, follow these steps:
  1. Download the file from here.
  2. Drop the UIKit file found inside into /System/Library/Frameworks/UIKit.framework on your iPhone (you can use SCP or SFTP - i.e. your iPhone must be jailbroken with the SSH server installed and running). Maybe it is a good idea to backup the old file beforehand.
  3. Set the right permissions for hte file (chmod 755) if your SCP/SFTP client doesn't do it automatically.
  4. Restart the iPhone.

B. Copy dictionaries to have spell check with the newly activated keyboards

Then, you can copy dictionaries if needed. For example, I want to use the French-Canadian keyboard to have a qwerty layout instead of the French azerty one. I am able to do that once step A is completed, however as it is hidden by default Apple didn't include the dictionary files for it, as a consequence there is no spell check when you use it. To solve this, I copied the French dictionary for the French-France keyboard to the French-Canadian keyboard. To do that, you can connect to the iPhone via ssh and type:

# cd /System/Library/KeyboardDictionaries
# cp ./fr_CA-one-letter-words.dat ./fr_CA-one-letter-words.dat.bak

# cp ./fr_CA-two-letter-words.dat ./fr_CA-two-letter-words.dat.bak
# cp ./fr_FR-one-letter-words.dat ./fr_CA-one-letter-words.dat
# cp ./fr_FR-two-letter-words.dat ./fr_CA-two-letter-words.dat
# cp ./fr_FR-stems.dat ./fr_CA-stems.dat
# cp ./fr_FR-unigrams.idx ./fr_CA-unigrams.idx
# cp ./fr_FR-unigrams.dat ./fr_CA-unigrams.dat