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

  • 29
    いいね
  • 8
    コメント
この記事は最終更新日から1年以上が経過しています。

確認する。

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