Adobe AIR での使用言語判別方法
現在製作中の iOS / Android 向けの Adobe AIR のアプリにおいて、世界各国向けのローカライズを行う必要が発生しました。
Flash の ActionScript で、再生環境の言語判定を行う際に使用する 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の説明によると、
オペレーティングシステムにより、ロケールストリングで返される地域の情報は異なります。
ということらしい。
すなわち、再生する環境によって、戻って来る値が変化するということのようです。
ならば、今回の対象プロジェクトである iOS と Android ではどんな値が帰って来るのかを、実際にテストしてみました。
言語 | Capabilities.language | Capabilities.languages[0] |
---|---|---|
タイ語 | en | th-TH |
インドネシア語 | en | in-ID |
ベトナム語 | en | vi-VN |
と、何故か「Capabilities.language」の値を取得すると、「en(英語)」が戻ってきます。
[asin:B00BO3H46U:detail]
- iPhone5 (iOS7.0))の場合
言語 | 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の種類やバージョンによって、この値が変化するようであれば、上記のコードでは全く役に立たないので、検証が必要かもしれませんが・・・