一、总则:

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

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

二、应用内的国际化

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. [InternationalControl initUserLanguage];//初始化应用语言
  6. NSBundle *bundle = [InternationalControl bundle];
  7. NSString *inviteMsg = [bundle localizedStringForKey:@"invite" value:nil table:@"hello"];
  8. NSString *buttonInfo = [bundle localizedStringForKey:@"buttonInfo" value:nil table:@"hello"];//table为hello.string的文件名
  9. [_btChange setTitle:buttonInfo forState:UIControlStateNormal];
  10. _inviteLabel.text = inviteMsg;
  11. [super viewDidLoad];
  12. }

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

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

iOS 之国际化语言切换相关推荐

  1. iOS App内语言切换(国际化)

    想要实现App内的语言切换功能,那么首先要创建国际化语言文件,用于存储对应语言显示的文本. 1.创建国际化语言文件 command+N,选择Other里面的Empty文件. 我们将其命名为Locali ...

  2. java 设置语言_Java 国际化 语言切换

    Java国际化 我们使用java.lang.Locale来构造Java国际化的情境. java.lang.Locale代表特定的地理.政治和文化.需要Locale来执行其任务的操作叫语言环境敏感的操作 ...

  3. 微信小程序配置实现中英文国际化语言切换

    目录 1,在根目录新建文件夹和js文件 2. 在main.js中设置全局语言状态(默认设置为中文) 3. 页面添加  语言切换按钮(登录页面) 4. 在需要显示的页面导入使用 1,在根目录新建文件夹和 ...

  4. iOS 程序内语言切换 -- 中英文切换

    随着时代的发展,应用程序相继出现了不同语言的版本方案,中文,英文,法文,韩文等等:想在应用程序中实现语言的自由切换,需要配置多个语言的文件,根据用户的动态选择获取不同语言文件下的语言文件,从而显示到界 ...

  5. vue中element国际化语言切换

    一. 安装依赖 npm install vue-i18n 二. 创建文件 在src目录下先创建一个lang 文件夹,再创建两个js文件en.js(英文), zh.js(中文), 另外创建一个index ...

  6. vue中实现国际化--语言切换(转载)

    https://segmentfault.com/a/1190000011800593 转载于:https://www.cnblogs.com/aidixie/p/10215892.html

  7. IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)

    IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard .xib 混用.完美解决方案) 参考文章: (1)IOS APP 国际化 程序内切换语言实现 不重新启动系统 ...

  8. IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)...

    此问题已解决.请看: IOS APP 国际化 程序内切换语言实现 不重新启动系统(完美解决方案) 接了个变态的需求,要在程序内切换程序语言实现国际化. 可以先看看这个,比较详细. http://blo ...

  9. iOS App的国际化,以及App内的语言切换

    一.国际化文件 其实国际化跟我们的NSDictionary差不多,我们要支持中文和英文,就会生成两个国际化文件(.string为后缀名),然后在两个国际化文件中,设置一个Key,在中文的国际化文件中这 ...

最新文章

  1. Android SDK上手指南:虚拟与物理设备
  2. 去除掉TabHost下面那个边线的小技巧
  3. Creating-Observables
  4. XSLT简单教程--XSLT的实例
  5. vs2012编译使用lua 5.2静态库
  6. 管理软件实施(2)——开发包括哪些成本
  7. Yii2如何用migrate快速建表
  8. 计算机在课程中的应用,计算机科学技术在计算机教育中的应用
  9. 手机连接Fiddler后无法上网问题解决
  10. 完全用Linux工作--你还在用老掉牙的windows吗?
  11. python随机生成10道乘法题_python3 随机生成10以内的加法算术题
  12. 取模(mod)与取余(rem)的区别
  13. perror()函数
  14. oraclenbsp;命名规范
  15. 几种android实时视频网络传输方案比较
  16. STW(stop the )
  17. 口碑问答营销推广如何做?广告联盟同样需要
  18. 微软官方工具_英文写作在线工具推荐:微软官方免费打分评改网站微软小英
  19. 又在开会……[原文写作时间:2006年6月26日]
  20. 用战斗证明自己的尊严 ------- 给TMAC致敬

热门文章

  1. webSocket 和 webWorker
  2. 什么是WebWorker?
  3. 如何快速摆脱焦虑困扰,重建内心平静?分享一份无需药物的指南,让你重拾自信并远离焦虑!
  4. 钉钉机器人关键词应答_电销机器人智能外呼机器人
  5. FortiGate防火墙HA下联堆叠交换机
  6. 【mac如何修改git本地提交代码的用户名和邮箱】
  7. 通过Kuberneters Goat学习K8S安全(下)
  8. SD净价计算原理及订单与发票的关联关系
  9. linux上ps命令详解
  10. 有符号数和无符号数负数