码迷,mamicode.com
首页 > 移动开发 > 详细

ios 应用多语言自由切换实现

时间:2015-03-13 18:51:49      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:ios   语言切换   ios 应用多语言自由切换实现   

第一次进入应用获取本机语言.1.如果本机语言在软件实现语言列表里.则默认选中本机语言,但是用户还是可以选择其它语言.2.如果本机语言不在软件实现语言列表里,则默认选中英语.用户还是可以选择其它语言.

所有要更换语言的controller里注册通知.当用户选择了一个语言后发送语言修改的通知.控制器收到语言修改通知后,对需要修改语言的控制进行重新设置.

/** 初始化语言 */

- (void)initLanguage{

    //1. 获取系统支持的语言

    _languages = [NSMutableArrayarrayWithCapacity:5];

    NSURL *url = [[NSBundlemainBundle] URLForResource:kLanguagePlistwithExtension:kTypePlist];

    NSDictionary *dic = [NSDictionarydictionaryWithContentsOfURL:url];


    //2 生成语言对象

    [dicenumerateKeysAndObjectsUsingBlock:^(id key,id obj, BOOL *stop) {

       DYCXLanguage *language = [DYCXLanguagelanguageWithKey:key AndValue:obj];

        [_languagesaddObject:language];

    }];

    

    

    //3. 获取用户保存的语言[0] = 简体中文, [1] = zh-Hans;

   NSString *userLanguageValue = [selfgetUserLanguage];

   if (!userLanguageValue) {

        userLanguageValue =kDefaultUserLanguage;

        //3.1 获取系统语言

       NSString * localLanguage = [selfgetLocalLanguageValue];

        //3.2. 确定默认语言

       for (DYCXLanguage *languagein _languages) {

            //3.3.如果软件语言包涵系统语言默认为系统语言,如果不包涵默认设置为英语

           if ([localLanguage isEqualToString:language.languageValue]) {

                userLanguageValue = localLanguage;

            }

        }

    }

    

    //4. 设置当前语言

    for (DYCXLanguage *languagein _languages) {

       if ([userLanguageValue isEqualToString:language.languageValue]) {

            language.used =YES;

           _userLanguage = language;

           break;

        }

    }

}


- (NSString *)getLocalLanguageValue{

    NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults];

   NSArray *languages = [defaults objectForKey:@"AppleLanguages"];

   return [languages objectAtIndex:0];

}



#pragma mark - 语言更改,重新加载

- (void)reloadStringWithLanguage{

    [_confirm setTitle:[NSString localizedWithString:@"dialog_positive_key"] forState:UIControlStateNormal];

    _selectLanguage.text = [NSString localizedWithString:@"select_language_key"];

    

    if ([self.delegate respondsToSelector:@selector(onLanguageChange)]) {

        [self.delegate onLanguageChange];

    }

}


#pragma mark - NSString 的分类,加载对应目录里的string

+ (NSString *)localizedWithString:(NSString *)key{

    NSString *area = [DYCXConfig sharedDYCXConfig].userLanguage.languageValue;

    if (!area) {

        area = kDefaultUserLanguage;

    }

    NSString *table = [NSString stringWithFormat:@"%@.lproj/Localizable", area];

    NSString *localizedString = [[NSBundle mainBundle] localizedStringForKey:(key) value:nil table:(table)];

    NSAssert(localizedString, @"localized error, table = %@, key = %@", table, key);

    return localizedString;

}


ios 应用多语言自由切换实现

标签:ios   语言切换   ios 应用多语言自由切换实现   

原文地址:http://blog.csdn.net/zhangping871/article/details/44243415

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!