版权所有,禁止匿名转载;禁止商业使用。
第一次进入应用获取本机语言.1.如果本机语言在软件实现语言列表里.则默认选中本机语言,但是用户还是可以选择其它语言.2.如果本机语言不在软件实现语言列表里,则默认选中英语.用户还是可以选择其它语言.
所有要更换语言的controller里注册通知.当用户选择了一个语言后发送语言修改的通知.控制器收到语言修改通知后,对需要修改语言的控制进行重新设置.
/** 初始化语言 */ - ( void )initLanguage{ //1. 获取系统支持的语言 _languages = [ NSMutableArray arrayWithCapacity : 5 ]; NSURL *url = [[ NSBundle mainBundle ] URLForResource : kLanguagePlist withExtension : kTypePlist ]; NSDictionary *dic = [ NSDictionary dictionaryWithContentsOfURL :url]; //2 生成语言对象 [dic enumerateKeysAndObjectsUsingBlock :^( id key, id obj, BOOL *stop) { DYCXLanguage *language = [ DYCXLanguage languageWithKey :key AndValue :obj]; [ _languages addObject :language]; }]; //3. 获取用户保存的语言 [0] = 简体中文 , [1] = zh-Hans; NSString *userLanguageValue = [ self getUserLanguage ]; if (!userLanguageValue) { userLanguageValue = kDefaultUserLanguage ; //3.1 获取系统语言 NSString * localLanguage = [ self getLocalLanguageValue ]; //3.2. 确定默认语言 for ( DYCXLanguage *language in _languages ) { //3.3. 如果软件语言包涵系统语言默认为系统语言 , 如果不包涵默认设置为英语 if ([localLanguage isEqualToString :language. languageValue ]) { userLanguageValue = localLanguage; } } } //4. 设置当前语言 for ( DYCXLanguage *language in _languages ) { if ([userLanguageValue isEqualToString :language. languageValue ]) { language. used = YES ; _userLanguage = language; break ; } } } - ( NSString *)getLocalLanguageValue{ NSUserDefaults *defaults = [ NSUserDefaults standardUserDefaults ]; 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; }