GADGET FACTORY 雑記帳

iPhone アプリ / Flash コンテンツ /Adobe AIR などを開発していて気づいたことや備忘録、TIPS、HACKなど

Adobe AIR での使用言語判別方法

現在製作中の iOS / Android 向けの Adobe AIR のアプリにおいて、世界各国向けのローカライズを行う必要が発生しました。

FlashActionScript で、再生環境の言語判定を行う際に使用する API としては

Capabilities.language

があります。

この API で判別できる言語は以下のようなものがあります。

言語
チェコ語 cs
デンマーク da
オランダ語 nl
英語 en
フィンランド fi
フランス語 fr
ドイツ語 de
ハンガリー語 hu
イタリア語 it
日本語 ja
韓国語 ko
ノルウェー no
その他/不明 xu
ポーランド pl
ポルトガル語 pt
ロシア語 ru
簡体字中国語 zh-CN
スペイン語 es
スウェーデン sv
繁体字中国語 zh-TW
トルコ語 tr

ところが、今回のプロジェクトでは、上記の表にない、タイ語インドネシア語などの判定が必要とのこと。



自動判別するにはどうすれば良いのかと調べたところ、可能性のある APIを発見。
それは

Capabilities.languages

上記の API をたたくと、配列が戻って来るので、その先頭の値を取得すれば、何とかなりそうな感じ。
すなわち、取得するのは

Capabilities.languages[0]

ただし、それに関しても問題が少しあって、APIの説明によると、

オペレーティングシステムにより、ロケールストリングで返される地域の情報は異なります。

ということらしい。

すなわち、再生する環境によって、戻って来る値が変化するということのようです。

ならば、今回の対象プロジェクトである iOSAndroid ではどんな値が帰って来るのかを、実際にテストしてみました。

言語 Capabilities.language Capabilities.languages[0]
タイ語 en th-TH
インドネシア語 en in-ID
ベトナム語 en vi-VN

と、何故か「Capabilities.language」の値を取得すると、「en(英語)」が戻ってきます。
[asin:B00BO3H46U:detail]

言語 Capabilities.language Capabilities.languages[0]
タイ語 xu th
インドネシア語 xu id
ベトナム語 xu vi

と、こちらは「Capabilities.language」の値が「xu(その他/不明)」が戻ってきます。
[asin:B009K3GKHK:detail]

現状で、手持ちの機材で複数言語を設定できるものがないので、2機種分しか調べる事ができていませんが、他の端末でも同じ結果であれば、以下のようなコードで判別できるのかなぁと。

var lang:String = Capabilities.language;
var lang2:String =  Capabilities.languages[0];
var langArray:Array = lang2.split("-");
	
if(lang=="en" || lang=="xu"){
	var testStr:String = langArray.pop();
	if(testStr=="TH" || testStr == "th"){
		// タイ
	}else if(testStr=="ID" || testStr == "id"){
		// インドネシア
	}else if(testStr=="VN" || testStr == "vi"){
		// ベトナム
	}else{
		// 英語扱い
	}
}

OSの種類やバージョンによって、この値が変化するようであれば、上記のコードでは全く役に立たないので、検証が必要かもしれませんが・・・