Windows CE (.NET) とか IoTとか

組込みWindows と IoTの話を扱います

東芝T-01Aが011から始まる番号へ電話をかけられない件

先週発売開始された東芝製のWindows Mobile機"T-01A"ですが、011から始まる番号へ電話をかけられない、という不具合が発生してしまいました。

国内電話が国際電話に? ドコモ端末また販売停止
http://sankei.jp.msn.com/economy/business/090622/biz0906221756009-n1.htm

要するに、国際電話識別番号(国際プレフィックス番号)が日本では現在"010"であるところを、アメリカ/カナダなどの"011"でプログラムしていた、ということのようです。(ちなみに、ヨーロッパでは"00"であることが多いようです)

※これ、設定可能にしておかないと、逆にアメリカで"011"から始まる番号が国際電話と認識されない、とかなりそうですね。

Windows/WindowsCEではこのような地域によって異なる文化的な差異を"ロケール"または"NLS関数"によってハンドリングしています。たとえば日本のロケールIDは0x0411です。この情報はOSのビルド時にwince.nlsというバイナリデータファイルにまとめられ、OS起動時にカーネル内に読み込まれます。

OSが起動した後は、たとえばGetDateFormat()、GetTimeFormat()のようなNLS対応のAPIにより利用されるわけですが、国際電話識別番号はNLS関数により取得することはできないみたいですね。

その代わり、現状ではTAPIの"場所の設定"で国際電話のときの電話番号パターンを設定できるのですが、これはロケールにより自動で切り替わるようにはなっておらず、事実上使えないですね。(CE6でもロケール0411の場合の国際プレフィックスの規定値が"001"のままなのが笑えます) CellCore/exTAPIには何らかの仕組みがあるのでしょうか?

ちなみに、NLS対応のWindows CE APIは以下でリストされています。

National Language Support (NLS) Functions
http://msdn.microsoft.com/en-us/library/aa912043.aspx