iOS之多语言开发
前要:iOS多语言开发,可以分为两种
- 系统设置,通过在手机设置中切换语言,进而改变app中语言;
- app中手动切换,用户在app中,手动选择语言,进行切换。
一.添加需要的语言
不管使用哪种方法,都需要先添加语言,这一点是相同的。
- 在项目的project中添加语言
添加完成后是这样的

- 创建 Localizable.strings 文件


文件名是 Localizable ,也可以更改其它名,后面会讲到

上面都完成后,项目是这样的

在每个语言的.string文件中,把项目中的所有需显示的文字,按照key-value 的形式放进去。
至此,所有的前置工作都完成了。
二. 代码部分
1.使用系统设置切换语言
使用系统设置切换语言,比较简单,直接上代码:
1 NSArray *array = @[@"中文",@"英文",@"法语",@"韩语"];
2 for (int i=0; i<4; i++) {
3 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
4 btn.frame = CGRectMake(100, 200+70*i, 200, 40);
5 btn.backgroundColor = [UIColor orangeColor];
6
7 //第一种:使用系统设置语言
8 [btn setTitle:NSLocalizedString(array[i], nil) forState:UIControlStateNormal];
9
10 [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
11 [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
12 btn.tag = i+10;
13 [self.view addSubview:btn];
14 }
直接使用 NSLocalizedString(key, comment)方法,“key”就是Localizable.strings文件中的我们设置的key, “comment”写niu即可
如此,只要在手机 设置-通用-语言与地区 中,切换语言,再打开app,app中文字就会切换成对应的语言。
2.app中手动切换语言
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *array = @[@"中文",@"英文",@"法语",@"韩语"];
for (int i=0; i<4; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(100, 200+70*i, 200, 40);
btn.backgroundColor = [UIColor orangeColor];
//第一种:使用系统设置语言
//[btn setTitle:NSLocalizedString(array[i], nil) forState:UIControlStateNormal];
//第二种,app中手动选择语言
[btn setTitle:KLanguage(array[i]) forState:UIControlStateNormal];
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
btn.tag = i+10;
[self.view addSubview:btn];
}
}
-(void)btnClick:(UIButton *)btn{
NSInteger tag = btn.tag-10;
if (tag==0) {
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
}else if(tag==1){
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
}else if (tag==2){
[[NSUserDefaults standardUserDefaults] setObject:@"fr" forKey:@"appLanguage"];
}else{
[[NSUserDefaults standardUserDefaults] setObject:@"ko" forKey:@"appLanguage"];
}
[[NSUserDefaults standardUserDefaults]synchronize];
UIWindow *window = [UIApplication sharedApplication].delegate.window;
[UIView animateWithDuration:0.4f animations:^{
CGAffineTransform curent = window.transform;
CGAffineTransform scale = CGAffineTransformScale(curent, 0.0001,0.0001);
[window setTransform:scale];
} completion:^(BOOL finished) {
exit(0);
}];
}
每次选择语言后,保存到本地
这里用了一个宏:
#define KLanguage(key) [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:key value:nil table:@"Localizable"]
"appLanguage":将选择的语言保存在本地,本地偏好设置保存用的key,
"Localizable":这就是我们创建的Localizable.strings文件名。也可以用其它名字,只要与宏里的保持一致即可。
每种语言对应的字符串:

首次进入app,使用系统默认的语言:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//首次进入app,设置语言。自己根据实际情况,设置刚进入app的默认语言
NSString *currentLanguage = [[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"];
if (!currentLanguage) {
//获得当前语言
NSArray *languages = [NSLocale preferredLanguages];
NSString *language = [languages objectAtIndex:0];
if([language hasPrefix:@"en"]){
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
}else if([language hasPrefix:@"zh-Hans"]){
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
}else{
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
}
[[NSUserDefaults standardUserDefaults]synchronize];
}
[self.window makeKeyAndVisible];
return YES;
}
代码演示:
进入app:

点击英文,重新进入app:

点击韩语:

iOS之多语言开发的更多相关文章
- iOS开发进阶 - 项目的本地化处理(多语言开发)
移动端访问不佳,请访问我的个人博客 最近项目本地化,需要支持多国语言,下面将本地化的步骤记录下来,方便查找使用,步骤很简单,有些地方也有坑,希望大家看后少走弯路~~ 什么是本地化 本地化说直白点就是多 ...
- 收集Github上的iOS控件和开发资料
文章来源:http://www.mobile-open.com/2015/85017.html 动画 awesome-ios-animation 收集了iOS平台下比较主流炫酷的几款动画框架 RCTR ...
- iOS - Swift Swift 语言新特性
1.Swift 2.0 带来哪些新变化 常规变化: 1.OS X 10.11.iOS 9 和 watchOS 2 SDK 采纳了一些 Objective-C 的特性用来提高 Swift 的编程体验, ...
- iOS 国际化多语言设置 xcode7
iOS 国际化多语言设置 方式一: 1. 在storyboard中创建好UI,然后在 project 里面 Localizables 栏目里面,添加你需要的语言:默认是Englist; 比如这里我添 ...
- Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会
文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...
- Mac电脑C语言开发的入门帖
本文是写给Mac电脑开发新手的入门帖,诸神请退散. C语言 C语言可说是电脑环境中的"镇国神器",从发明至今,虽然C语言的使用者缓慢的减少,但从当前市场应用情况看,尚无一台电脑能够 ...
- Go语言开发Windows应用
Go语言开发Windows应用 当第一次看到Go程序在windows平台生成可执行的exe文件,就宣告了windows应用也一定是Go语言的战场.Go不是脚本语言,但却有着脚本语言的轻便简单的特性.相 ...
- 给iOS开发者的Android开发建议
本人从事iOS应用开发已经5年有余,直到现在还总是刻意回避Andriod应用的开发.但是不管你信不信,安卓开发还是很有意思的,从iOS转向Android应用开发的跨度并没有你想象的那么大. 现在我把在 ...
- iOS 9音频应用开发基础教程
iOS 9音频应用开发基础教程(大学霸内部资料) 介绍:iOS 9音频应用开发基础教程(内部资料)是iOS 9音频应用开发专向教程.本书采用Swift 2.0语言开发基于iOS 9的音频应用.实现 ...
随机推荐
- 在Ubuntu下的OpenStack中配置使用Spice协议
在Ubuntu下的OpenStack中配置使用Spice协议 by 无若 ####控制节点#安装apt-get install nova-spiceproxy spice-html5 spice-vd ...
- DVWA靶场之File Inclusion(文件包含)通关
文件包含,未经过严格过滤,将一些恶意构造带入了包含函数,可以使用一些包含函数来包含一些其他乱七八糟的东西,要么导致任意文件读取,要么命令执行 文件包含包括远程文件包含(RFI)和本地文件包含(LFI) ...
- SQL 练习12
查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息 分析 如果某同学学的某一个课程和01同学所学的课程有对应,那么子查询返回false. 如果没有对应,子查询返回tru ...
- virtualenv 创建python虚拟环境
为什么要创建python虚拟环境 在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4.所有第三方的包都会被pip安装到Python3的site-packages目录下. 如 ...
- C语言 Ubuntu系统 UTF-8 文字处理
关于UTF-8的规则:https://baike.baidu.com/item/UTF-8/481798?fr=aladdin 使用windows系统下的Ubuntu子系统,实现C语言对UTF-8编码 ...
- C#协作试取消线程
https://segmentfault.com/q/1010000017109927using System; using System.Collections.Generic; using Sys ...
- QT怎样插入图片
工具/原料 QT designer 方法/步骤 1 首先创建一个Manwindow窗口 拖一个label到窗口上 把文字去掉,然后把label放大 找到stylesheet一栏 ...
- C#多线程---Semaphore实现线程同步
一.简介 Semaphore类限制可同时访问某一资源或资源池的线程数.线程通过调用 WaitOne方法将信号量减1,并通过调用 Release方法把信号量加1. 构造函数:public Semapho ...
- 如何在指定的地址上创建C++对象
如果已经掌握在静态存储区上创建对象的方法,那么可以扩展一下,可以在任意地址上创建C++对象. 解决方案:-在类中重载new/delete操作符-在new的操作符重载函数中返回指定的地址-在delete ...
- Mac Ideal 常用快捷键
智能提示 ⌘ -> command ⇧ -> shift ⌥ -> option -> 上箭头 -> 下箭头 ⌃ -> Control mac的option键 = ...