確認する。
ios9の障害で、日本語表示が英語表示になる問題があるという記事があったんで、
対応もかねて確認することになった。
記事によると、使用言語の判断が失敗するとおっしゃる。
早速、日本語対応アプリケーションをXcode7のIOS9シミュレーションで確認する事にする。
ほぅ 見事に英語になりますね。(噂どうりの現象で驚きました。)
今のアプリは、これで判定してる
NSArray *languages = [NSLocale preferredLanguages];
NSString *currentLanguage = [languages objectAtIndex:0];
isSame = ([currentLanguage isEqualToString:language]);
そして、ターゲットの言語(language)でなければ英語にするようにしている。
languageが日本語なら@"ja"のはずなんだけど、スルーされてるから
全滅ってわけですね。
まずは、Google様にお問い合わせすることに(他力本願)
どうも言語の文字が変わっているらしい。
シミュレーターでログ確認
"ja"でなくて"ja-JP"で来ますね。
なんだこの-JPってのは???
判定に-JP つければいいのだが、本当にそうだろうか・・・・・
#実験する。
まだIOS9の実機ないからシミュレーターで確認
設定>言語と地域 で言語変更する
日本 ja-JP
フランス語 fr-JP
英語 en-JP
なんと、おまけ(-JP)がもれなくついてますね。
では、地域を変更することに
日本+English(US) ja-US
日本+フランス ja-FR
リージョンが付いてきているようだ
地域と言語の組み合わせでなにかいい事あるのかな?
対応考える。
・実験から従来の判定方法の場合、判定数を増やせば対応可能(地域限定)だが
確認が面倒(X国数)なので、比較方法修正でなんとかしないと大変
・'-'までの文字列で比較する場合 '-' の出現は1回でないからターゲットから取得した言語情報の'-'までの文字列取得して 比較したらダメである。
zh-Hans-JP
zh-Hant-JP
こいつらです。
まずは、NSStringについて Google様にお問い合わせすることにした
NSString関連は、文字単位の比較が難しくみえる。(本人未熟)
まぁ、データは、英語(Ascii文字)なんで、C言語で対応することに(妥協早!)
変数 language 検出したい言語
例) @"ja"
BOOL isSame=false;
NSArray *languages = [NSLocale preferredLanguages];
NSString *currentLanguage = [languages objectAtIndex:0];
const char *cur = currentLanguage.UTF8String;
const char *cmp = language.UTF8String;
short i;
short len=strlen(cmp);
for( i=0;i<len; i++ )
{
if( cur[i]!=cmp[i] ) break;
}
if( i==len )
{
if( cur[i]==0 ) isSame=true;
if( cur[i]=='-' ) isSame=true;
}
isSame が trueなら 同じ
falseなら 違う
内容
検出したい文字列の長さ分比較して、次の文字が
NULLまたは、'-'の場合同類で判断する。
この方法なら、多分従来のIOSでも使用可能かと思います。
シミュレーション上では問題なく動いているように見えます。
残務。
IOS9実機準備して確認しないと・・・・・・・・・・・・・・・