‘webOS’ カテゴリーのアーカイブ

中華IMEの研究(その1)

2009 年 11 月 9 日 月曜日

約1ヶ月に渡る解析の結果、webOS を日本語版にする手法が確立できました。
あと足りないものと言えばIME(かな漢字変換)です。
ボクのblogではすでに「webOSで日本語入力成功!(暫定版)」という記事で紹介した方法が有りますが、あくまでもコレはオンライン前提のIMEであり、ホントに暫定的な方法に過ぎません。

どのOSでも似たり寄ったりだと思いますが、IMEを使えるようにする為の方法として、以下の3つのレベルが有ると考えます。

(レベル1) webベースのIME → オンライン+コピペ前提
(レベル2) アプリベースのIME → コピペ前提
(レベル3) OS常駐ベースのIME → おおよそ世間一般のIME

最終的な目標は、レベル3のIMEである事は言うまでもありません。
しかしながら、現在のwebOSでは、これを実現する為に必要な技術情報が、まだ公開されておりませんので、実現出来るとしても、まだまだ先の話になるでしょう。
今の段階では、我々一般ユーザが手の届くのは、せいぜいレベル2までと考えております。

さてボクの方はと言いますと、先週の事なんですが、ひらぱーさんより中華IMEをご紹介頂きまして、結構これにハマっております。
このIMEは、上の分類で言うと「レベル2」になります。
以下はこのアプリの画面です。

chineseime_2009-09-11_230033

中国語の文字が所々化けており、少々お見苦しくなっておりますが、アルファベットを入力すると画面下に候補が表示され、数字キーで指定して確定します。
候補も中国語なのでボクにもサッパリ判りませんが、おおよそ良く見かける、IMEのユーザインターフェイス要件は満たしているようです。

もちろんこのIMEアプリもJavaScriptで書かれておりまして、ソース丸見え、ヤル気次第ですが改造は可能です。

このアプリを日本語用のIMEに改造出来たら良いですね。

で終わらない事は、ボクのページをご覧くださる皆さん、良くご存知のこと。

ロケール(完成編)

2009 年 11 月 4 日 水曜日

前回の記事で webOS のシステムロケールを ja_jp にする方法を解説いたしましたが、この方法ですとマシンが「Japanese」に固定されてしまいますので、余り良い方法とは言えません。

本来は、Language Picker に「Japanese」の選択肢を追加出来れば、それが一番スマートな方法です。
しかしながら、キャリアごとに許可するロケールを列記したファイルが見付けられず、ボクは半分諦めかけていました。

ところがです、本日コメント欄で関野さんから情報を頂いたお陰で、この問題が一気に解決いたしました。
それでは Language Picker で、マシンが元々サポートするロケールのメニューに「Japanese」を追加する方法についてレポートいたします。

■キャリアごとの違い

現在、日本国内に有る Palm Pre は Sprint版、もしくは O2版です。
以下に、各キャリア版で標準サポートされるロケールについて、まとめてみました。

☆ Sprint版が標準でサポートするロケール

ランゲージ カントリー ロケール
英語 米国 en_us
スペイン語 米国 es_us

☆ O2版が標準でサポートするロケール

ランゲージ カントリー ロケール
ドイツ語 ドイツ de_de
英語 英国 en_gb
英語 米国 en_us
英語 アイルランド en_ie
スペイン語 スペイン es_es
スペイン語 米国 es_us
フランス語 フランス fr_fr
イタリア語 イタリア it_it

■Language Picker に「Japanese」の選択肢を追加する方法

(作業手順)

(1)以下より、お使いのマシンに合った locale.txt をダウンロードしてください。

Sprint版をお使いの方
Sprint版 locale.txt のダウンロード

O2版をお使いの方
O2版 locale.txt のダウンロード

(2)解凍した locale.txt は、以下のフォルダへ上書きコピーして、マシンをリブートしてください。

/usr/lib/luna/customization

(3)以下のように、Regional Settings アプリの選択肢に Japanese が追加されます。

※キャプチャ画像はSprint版の場合です
languagepicker_2009-04-11_202309

languagepicker_2009-04-11_202317

ロケール(後編)

2009 年 10 月 30 日 金曜日

webOS のシステムロケールを自由に変更出来ないのは、キャリアの縛りであると仮定した場合、普通にコードを書いてみたところで、これに太刀打ち出来るものでは有りません。

そこでボクは考えました、システムロケールというのは一度設定すれば、ずっとその状態を記憶します、つまりこれはマシンの「不揮発性メモリ」か「ファイルシステム」にその情報を残しているからなのです。

もし「不揮発性メモリ」に残してるのなら、その場所を探し出すのは、残念ながらほぼ不可能です、でも「ファイルシステム」に残しているのなら、上手く行けばそれを探し当てる事が出来るかも知れません。

ボクはダメ元で、有るのか無いのかも判らない、そのファイルを探してみる事にしました。
そして幸運にもボクは、数千にも及ぶファイルの中から、それを探し当てる事が出来たのです。

それでは皆様、大変長らくお待たせいたしました。
webOS のシステムロケールをキャリアの縛りに関わらず、自由に変更出来る方法についてレポートいたします。

■作業手順

(1) ボクが見つけたそのファイルは systemprefs.db という名前のデータベースで、以下のフォルダに存在していました。

/var/luna/preferences

まず、このファイルをPCに持って来ます。

(2) データベースを編集するソフト SQLite Database Browser を以下のページからダウンロードして、PCにインストールします。

http://sourceforge.net/projects/sqlitebrowser/files/

※ダウンロードするのは sqlitebrowser-1.3-win.zip です

(3) SQLite Database Browser で先の systemprefs.db を開いてください。

image22

(4) 書き換えるのは43行目のココ、何とこれが webOS のシステムロケールを決定する、大元の情報だったのです。

image35

(5) ココを { “languageCode”: “ja”, “countryCode”: “jp” } と書き換え systemprefs.db を保存します。

image4

(6) systemprefs.db をPreに書き戻し本体をリブートします。

以上の作業でこんな風に、システムロケールが ja_jp になりました。
hello_2009-30-10_171034

■アプリの挙動変化

実を申し上げますと、ホントのお楽しみはココからなんです。
システムロケールが ja_jp になった事で、各アプリの挙動に何らかの変化が起きているハズです。
アプリをひとつひとつチェックしてみましたところ、以下に示す3つの大きな変化を確認出来ました。

☆挙動変化1

予想通り webブラウザの吐き出す情報が ja_JP になりました。
これにより、複数言語のコンテンツを自動振分けしているようなサイトでは、
日本語のコンテンツが優先されるようになります。
browser_2009-30-10_170453

例えば facebook のログイン画面、
もともと英語だったものが、日本語で表示されるようになりました。
browser_2009-30-10_1705181

☆挙動変化2

Google Maps の初期起動画面、
もともと北米地図だったものが日本地図になりました
maps_2009-30-10_170124

操作画面やメニューについても、
もともと英語だったものが、日本語で表示されるようになりました。
maps_2009-30-10_170241

☆挙動変化3

Doc View で単純な日本語Word文書に限り、正常に読めるようになりました。
5ヶ月前、HALさんが試してくださった画像と比べると、その差は歴然。
http://www.hal9.sakura.ne.jp/fig/Pre090609A037.jpg

docviewer_2009-30-10_170026

※(注1) 文書体裁の凝ったものは、やはり文字化けします
※(注2) Doc Viewのフォントは少し細工してます
※(注3) この文書、ロケール変更前はエラーで開く事さえ出来ませんでした
※(注4) Excel と PowerPoint については、まだ文字化けします

以上が、システムロケールを ja_jp にしたことで、確認できた大きな変化です。
これ以外にも、まだボクが気付いていない、細かな変化が有るかも知れません。

ロケール(前編)

2009 年 10 月 29 日 木曜日

ロケールとはOSが扱う「言語」と「国」を規定するものであります。
Palm Pre Sprint版においては en_us(英語_米国)と es_us(スペイン語_米国)、2つのロケールがサポートされております。

これに jp_jp(日本語_日本)のロケールを追加したい、或いは入れ替えたい、果たしてそんな事が可能なんでしょうか?

webOS のロケール決定メカニズムとは如何なるものなのか?
更にディープな部分へと解析を進めて行きました。

■ランゲージコードとカントリーコード

皆さん良くご存知の通り、旧PalmOSの時代、日本のロケールは jpJP でした。
ボクは webOS でも jp_jp で良いだろうと思っておりましたが、どうもコレは間違いだったみたいです。

調べましたところ ISO 639 では、以下のように規定されておりました。

言語コード:ja → 日本語

また、ISO 3166-2 では以下のように規定されておりました

国コード:JP → 日本

つまり、日本のロケールは jp_jp では無く、ja_jp が正しいコードになります。

■旧来手法による検証

Palm Mojo Framework の API リファレンスを読んでみますと、現在のシステムロケールを取得するAPIとして、Mojo.Locale.getCurrentLocale() という関数が有りました。

http://developer.palm.com/palm-sdk/jsdoc/symbols/Mojo.Locale.html

旧PalmOSでも、これと似たようなAPIが有りました、J-OS や JaPon では、このAPIをフックする事により、システムロケールを jpJP と詐称する手法が用いられました。
つまりホントは英語版で enUS なのに「システムロケールは jpJP だよ~」と嘘をつく訳ですね。
これと同じ手法が webOS でも使えるのではないかと、ボクは考えたのです。

捜しましたところ Mojo.Locale.getCurrentLocale() 関数は、以下のモジュール内に有りました。

/usr/palm/frameworks/mojo/builtins/palmInitFramework200_18.js

もちろん関数自体が java script で書かれていますので、ソースリスト丸見え、テキストエディタで書き換え自由な訳です、ボクは簡単に出来るものと信じておりました。

ところがです、この関数をいくら弄ってみても、ロケールを詐称する事が出来ないのです、これには悩みました。

それで、Pre に標準搭載されているアプリ側のソースも調べてみたんです。
すると、どのアプリからも、この関数を呼んで無いじゃあ~りませんか、こりゃ完全にやられました(TT)

■webOSのサービスによる検証

そこで次にボクは Laungage picker のソースを解析し、この中でロケールを切り替えている処理部分を抜き出して、簡単なテストアプリを作ってみました。

以下は、そのテストアプリの画面と、その部分のソースです、画面のボタンを押すと、webOSのサービスを呼ぶ方法でロケールを切り替えるという、極めて単純なアプリであります。

hello_2009-29-10_203744


var languageCode = “ja”;
var countryCode = “jp”;
this.setLocaleReq1 = new Mojo.Service.Request(”palm://com.palm.systemservice”, {
method: ’setPreferences’,
parameters: {”locale”:{”languageCode”:languageCode,”countryCode”:countryCode}},

});

それで、このテストアプリの

var languageCode = “ja”;
var countryCode = “jp”;

という部分を色々変えてみてテストを行いましたところ、確かに en_us または es_us の場合は、ロケールを切り替える事が出来ました。
ただし、それ以外のロケールには、いくらやっても切り替わりません。

これはどう考えても en_us と es_us ロケール以外は変更出来無いようにしているみたいです。
「これはキャリア(Sprint)の縛りなのか?」そんな憶測がボクの頭の中をよぎりました。

そんな訳で、まさに八方塞がり、もう何日もこの壁に突き当たったまま、ボクは先に進む事が出来なくなってしまったのです。

しかし、運命の女神は、まだボクを見捨てた訳ではありませんでした。

つづく