Edited at

IOS9 言語関連で問題でた。対応してみる事に。

More than 3 years have passed since last update.


確認する。

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実機準備して確認しないと・・・・・・・・・・・・・・・