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的音频应用.实现 ...
随机推荐
- Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(序章)
Dubbo的背景介绍 Apache Dubbo 是一款微服务开发框架(是一款高性能.轻量级的开源 Java 服务框架),它提供了 RPC通信 与 微服务治理 两大关键能力.这意味着,使用 Dubbo ...
- MySQL基本类型、操作
MySQL 前言(一些废话,可以不看) 为什么学习数据库呢,大家都知道,为了学习删库跑路,因为数据库在工作中起着至关重要的作用,只会写代码的是码农:学好数据库,基本能混口饭吃:在此基础上再学好操作系统 ...
- Mybatis源码解析2—— 实例搭建
大家好,我是可乐. 上篇文章给大家撸了一遍用 JDBC 直接操作数据库的实例,还只是简单写了一个查询的接口,其代码量就已经很大了,并且可乐还给大家分析了直接使用 JDBC 带来的一些问题,总之是一种反 ...
- Android 9.0 BufferSlot注解
源码位置 /frameworks/native/libs/gui/include/gui/BufferSlot.h 源码 struct BufferSlot { BufferSlot() : mGra ...
- 【笔记】numpy.array的常用基本运算以及对数据的操作
numpy.array的基本运算以及对数据的操作 设置一个问题,例如 这种只需要基本的运算就可以实现 类似的 numpy对向量的运算进行了优化,速度是相当快的,这种被称为universal funct ...
- DVWA靶场之Brute Force(暴破)通关
DVWA最经典PHP/MySQL老靶场,简单回顾一下通关流程吧 DVWA十大金刚,也是最常见的十种漏洞利用:Brute Force(暴破).Command Injection(命令行注入).CSRF( ...
- javaWeb之Maven
为什么要学这个技术? 在JavaWeb开发中,需要使用大量的jar包 如何能够让一个工具自动帮我们导入和配置这个jar包 一.Maven项目架构管理工具 核心思想:约定大于配置 有约束,不要去违反 M ...
- 06.SpringBoot核心技术
目录 一.配置文件 二.Web开发 静态资源访问 欢迎页支持 自定义 Favicon 普通参数和基本注解 1.1 @PathVariable 1.2 @RequestHeader 1.3 @Reque ...
- k8s 执行 ingress yaml 文件报错: error when creating "ingress-myapp.yaml": Internal error occurred: failed calling webhook
k8s 执行 ingress yaml 文件报错:错误如下: [root@k8s-master01 baremetal]# kubectl apply -f ingress-test.yaml Err ...
- CLR、CLI、CTS、CLS的关系
网站:https://blog.csdn.net/dodream/article/details/4719578 ·CLR(公共语言运行库)是一个CLI的实现,包含了.NET运行引擎和符合CLI的类库 ...