iOS开发教程之应用内部切换语言的实现方法

  


  

  

相信大家在iOS开发中都遇到了一个问题,随着应用越来越完善,很多应用都做了国际化,也实现了应用程序内部切换语言。那么如何实现的呢?下面来一起看看详细的介绍吧
  

  

  

国际化都会走到NSBundle的<代码> - (NSString *) localizedStringForKey: (NSString *)键值:(nullable NSString *)值表:(nullable NSString *)表>   

  

<强> 1。拦截国际化方法
  

  

通过分类和运行时来实现拦截,将包替换为自定义CLBundle。
  

        +(空白)负载{   静态dispatch_once_t>   (NSString *) localizedStringForKey:(NSString *)键值:(NSString *)值表:(NSString *)表名{   如果([CLBundle cl_mainBundle]) {   返回[[CLBundle cl_mainBundle] localizedStringForKey:键值:价值表:表名);   其他}{   返回(超级localizedStringForKey:键值:值表:表名);   }   }      + (NSBundle *) cl_mainBundle {   如果([NSBundle currentLanguage] . length) {   NSString *路径=[[NSBundle mainBundle] pathForResource: [NSBundle currentLanguage]减低:@“lproj”);   如果(path.length) {   返回(NSBundle bundleWithPath:路径);   }   }   返回nil;   }      + (NSString *) currentLanguage {   返回(CLLanguageManager userLanguage] & # 63;当做又NSLocale: [preferredLanguages] .firstObject;   }      

<强> 3。语言管理类
  

  

将语言切换调用设置简单封装,方便调用。
  

        + (void) setUserLanguage:(NSString *) userLanguage {//跟随手机系统   如果(! userLanguage.length) {   (自我resetSystemLanguage);   返回;   }//用户自定义   [[NSUserDefaults standardUserDefaults] setValue: userLanguage forKey: CLUserLanguageKey);   [[NSUserDefaults standardUserDefaults] setValue: @ [userLanguage] forKey: @“AppleLanguages”);   [[NSUserDefaults standardUserDefaults)同步);   }      + (NSString *) userLanguage {   返回[[NSUserDefaults standardUserDefaults] valueForKey CLUserLanguageKey):;   }/* *   重置系统语言   */+ (void) resetSystemLanguage {   [[NSUserDefaults standardUserDefaults] removeObjectForKey CLUserLanguageKey):;   [[NSUserDefaults standardUserDefaults] setValue: nil forKey: @“AppleLanguages”);   [[NSUserDefaults standardUserDefaults)同步);   }      

<强> 4。切换根控制器来切换语言
  

  

为了减少工作量,直接切换根控制器来达到语言切换。
  

        [CLLanguageManager setUserLanguage: @“en”);   CLTabbarController *选项=[[CLTabbarController alloc] init);   选项卡。selectedIndex=3;   UINavigationController *导航控制器=tabbarController.selectedViewController;   NSMutableArray * viewcontroller=navigationController.viewControllers.mutableCopy;//取出我的页面,提前加载,解决返回按钮不变化   CLMyController *我=(CLMyController *) [viewcontroller firstObject);   [我loadViewIfNeeded];//新建设置语言页面   CLChangeLanguageController * languageController=[[CLChangeLanguageController alloc] init);   languageController。hidesBottomBarWhenPushed=是的;   [viewcontroller addObject languageController):;//解决奇怪的动画bug。   设置(dispatch_get_main_queue ()、^ {   UIApplication sharedApplication .keyWindow。rootViewController=选项;   导航控制器。viewcontroller=viewcontroller;   CLLog(@”已切换到语言% @”,[NSBundle currentLanguage]);   });      

效果图   

 iOS开发教程之应用内部切换语言的实现方法”>,</p>
  <p> <br/>
  </p>
  <p>以上是使用国际化来实现应用内部切换语言,希望能够给大家帮助,演示地址——→祝辞CLDemo (本地下载)</p>
  <p>好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。</p><h2 class=iOS开发教程之应用内部切换语言的实现方法