ロケール(前編)

ロケールとは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)の縛りなのか?」そんな憶測がボクの頭の中をよぎりました。

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

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

つづく

コメント / トラックバック 4 件

  1. ryo-n より:

    おぉ〜、このまま終わってしまうのか!?。。。と思ったら続きがあるんですねぇ!
    わくわくo(^^)o

  2. ミニー より:

    ryo-nさん

    すみません~
    ちょっと1回引っ張ってみたかったの(^^)

  3. ひら より:

    つづく って、そんな殺生なww

    いえいえ、どんどん引っ張って下さいませませ。

  4. ミニー より:

    ひらさん

    涙と感動の後編は今晩にでも、乞うご期待を・・・