Thursday, December 5, 2013

ローカライズでいろいろつまづいた

自分のローカライズの方法がわるかったのか、英語環境と日本語環境でのframeが同じなのに表示される場所が違うってことが起きた。

それを解決するためにはユーザーの言語環境を見ないといけないんだけど、それをifで分けたら解決できた。

    frame = self.view.frame;
    
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    CGRect statusFrame = [[UIApplication sharedApplication]statusBarFrame];
    CGRect navFrame = self.navigationController.navigationBar.frame;
    
    // NSLocalizedStringのEnglishとJapaneseどちらが適用されるかを調べる
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    NSArray *languages = [ud objectForKey:@"AppleLanguages"];

    int enIndex = [languages indexOfObject:@"en"];
    int jaIndex = [languages indexOfObject:@"ja"];
    
    float offset = (enIndex < jaIndex ? navFrame.size.height + (version < 7.0 ? 0 : statusFrame.size.height) : 0);
    
    frame = CGRectMake(0, 0, frame.size.width, frame.size.height - offset);
こんな感じにわけたら、うまく解決できた。

多分もっといい方法があると思うんだけどね。


あと、これでわかったことなんだけど、NSLocalizedStringはlanguagesで一番最初の言語に対応する文字を返す。

No comments:

Post a Comment