iOS 之国际化语言切换


  一、总则:

       应用内部语言不跟随系统语言,由应用自己进行控制,通过配置多个语言文件,根据用户的选择动态获取不同文件夹下的语言文件,显示在界面上。

       最后把用户选择的语言持久化到本地,下次运行时读取。


二、应用内的国际化

1、新建工程

      新建Single View Application工程,取名为MyInternational。
图片

2、添加多语言文件

      我们选择使用自己的语言文件,而不是系统的localizable.string,因为在项目开发使用svn时,多人操作同一文件可能会造成冲突。

在Resource中添加新的Strings File:
图片 
 取名为hello(记得Targets要勾选项目)

图片

新建完成之后会生成hello.string文件,把它拖进Supporting Files里。


3、配置hello.string国际化

      首先配置刚才的hello.string文件。

      点击hello.strings文件,点击圈中的Make localized(本地化)。
 图片

只有English,没关系点击确定。
 图片

4、配置项目国际化

      网络上很多配置方法不靠谱,因为新版的Xcode位置“+”号的位置换了,这里教大家正确的方法,点击项目—>选择Project—>选择Info—>点击“+”号。

图片
点击“+”号后,添加中文,当然也可以添加其他的语言,弹出对话框,infoPlist是配置系统的国际化文件,可以配置图标之类的多语言环境,不属于本文范围,nib文件看需要配,这里选择不配。
 图片
 配置完成之后,再看hello.string便分成了两个文件。
 图片

完成上面的四步便完成了项目内的多语言环境配置,下面来看看代码怎么写。


5、添加需要的字符串

      分别在hello.strings(English)与hello.strings(Chinese)里面添加对应语言的字符串。

      字符串的格式为“key”=“value”;键值对(别忘记分号!)

      接下来配置项目需要的字符串,一个用于lable的显示,一个用于button的显示。

 

    hello.strings(English)

    "invite" ="hello atany,come to join in us!";

   "buttonInfo" ="change Language";

 

    hello.strings(Chinese)

    "invite" ="你好 atany,快来加入我们吧!";

    "buttonInfo" ="切换语言";

 

6、看看流程

图片

【实现思路:】

      在初始化首个Controller的时候,进行应用语言的加载。首次加载因为userLanguage(应用内语言)不存在,则使用系统当前的语言,保存到userlanguage,下次直接读。读出来之后,获取到对应文件路径,得到文件的索引,储存到工具类InternationalControl的静态变量bundle中。

其他地方需要用字符串时,用工具类获得bundle即可读取相应文件中的字符串。


7、新建工具类InternationalControl
 图片
InternationalControl.h
图片

InternationalControl.m

1)创建静态变量bundle,以及获取方法bundle(注:此处不要使用getBundle)。
 图片

 2)初始化方法:

 userLanguage储存在NSUserDefaults中,首次加载时要检测是否存在,如果不存在的话读AppleLanguages,并赋值给userLanguage。
图片
 
3)获得当前语言方法
 图片

9、配置加载的第一个Controller,这里是YGViewController

YGViewController.h

图片

YGViewController.m

1)加载:
 

  1. - (void)viewDidLoad    
  2. {    
  3.     //注册通知,用于接收改变语言的通知    
  4.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeLanguage) name:@"changeLanguage" object:nil];    
  5.     
  6.     [InternationalControl initUserLanguage];//初始化应用语言    
  7.         
  8.     NSBundle *bundle = [InternationalControl bundle];    
  9.         
  10.     NSString *inviteMsg = [bundle localizedStringForKey:@"invite" value:nil table:@"hello"];    
  11.     
  12.     NSString *buttonInfo = [bundle localizedStringForKey:@"buttonInfo" value:nil table:@"hello"];//table为hello.string的文件名    
  13.         
  14.     [_btChange setTitle:buttonInfo forState:UIControlStateNormal];    
  15.         
  16.     _inviteLabel.text = inviteMsg;    
  17.         
  18.     [super viewDidLoad];    
  19. }    

2)点击修改语言方法
图片 
3)接收到通知执行方法,刷新界面
 

  1. -(void)changeLanguage{    
  2.         
  3.     [_btChange setTitle:[[InternationalControl bundle] localizedStringForKey:@"buttonInfo" value:nil table:@"hello"] forState:UIControlStateNormal];    
  4.         
  5.     _inviteLabel.text =[[InternationalControl bundle] localizedStringForKey:@"invite" value:nil table:@"hello"];    



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值