随着时代的发展,应用程序相继出现了不同语言的版本方案,中文,英文,法文,韩文等等;想在应用程序中实现语言的自由切换,需要配置多个语言的文件,根据用户的动态选择获取不同语言文件下的语言文件,从而显示到界面上面。这里先说中英文的切换,至于其他语言操作复制即可!!!

1.新建工程之类的就不用说了,配置项目本地化支持简体中文和英文

工程-PROJECT-info->Localizations,点“+”,选择(Chinese(Simplified))添加简体中文,英文Xcode自带有(English),所以不需要再次添加。(点击添加弹出语言菜单,即可选择你所需要的语言)

2.现在可以添加多语言文件了。

注意:需要手动切换语言,而不是根据系统语言变换,所以命名不能与系统语言文件同名,即Localizable.strings;

自己随意命名,后缀是.strings,一定要记得Targets要勾选项目

3.配置English.strings本地化,现在支持中文和英文。

(1)选中English.strings文件,查看右边栏中的信息;(2)点击Localization中的按钮,弹出框中显示出前面添加的语言;(3)选择中文和英文,base选项可有可无,

勾选之后,English.strings中多出了两个文件

完成之后便是完成了项目内多语言环境的配置,下面看一下这两个文件中应该怎样写

4.文件中添加两个需要的字符串

中文:

"change_language" = "悄悄是别离的笙箫,沉默是今晚的康桥";

"button" = "切换语言";

英文:

"change_language" = "Quietness is my farewell music, silence is Cambridge tonight";

"button" = "Change Language";

5.配置环境已经完成,现在看看代码怎么写????

(1)新创建工具类,继承自NSObject(在这里我命名为ChangeLanguage)

(2)ChangeLanguage.h

+(NSBundle *)bundle;//获取当前资源文件

+(void)initUserLanguage;//初始化语言文件

+(NSString *)userLanguage;//获取应用当前语言

+(void)setUserlanguage:(NSString *)language;//设置当前语言

ChangeLanguage.m

static NSBundle *bundle = nil;

+ ( NSBundle * )bundle{

return bundle;

}

//首次加载的时候先检测语言是否存在

+(void)initUserLanguage{

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

NSString *currLanguage = [def valueForKey:LocalLanguageKey];

if(!currLanguage){

NSArray *preferredLanguages = [NSLocale preferredLanguages];

currLanguage = preferredLanguages[0];

if ([currLanguage hasPrefix:@"en"]) {

currLanguage = @"en";

}else if ([currLanguage hasPrefix:@"zh"]) {

currLanguage = @"zh-Hans";

}else currLanguage = @"en";

[def setValue:currLanguage forKey:LocalLanguageKey];

[def synchronize];

}

//获取文件路径

NSString *path = [[NSBundle mainBundle] pathForResource:currLanguage ofType:@"lproj"];

bundle = [NSBundle bundleWithPath:path];//生成bundle

}

//获取当前语言

+(NSString *)userLanguage{

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

NSString *language = [def valueForKey:LocalLanguageKey];

return language;

}

// 设置语言

+(void)setUserlanguage:(NSString *)language{

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

NSString *currLanguage = [userDefaults valueForKey:LocalLanguageKey];

if ([currLanguage isEqualToString:language]) {

return;

}

[userDefaults setValue:language forKey:LocalLanguageKey];

[userDefaults synchronize];

NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj" ];

bundle = [NSBundle bundleWithPath:path];

}

6.现在方法已经写完,下面就来检测一下是否好用吧
(1)拖拽storyboard,设置点击事件(storyboard方便,简单)

(2)ViewController.m

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeLanguage) name:@"changeLanguage" object:nil];

//初始化应用语言

[ChangeLanguage initUserLanguage];

NSBundle *bundle = [ChangeLanguage bundle];

/*

localizedStringForKey:@"change_language" value:nil table:@"English"

localizedStringForKey:各个语言文件中共同的名称

table: English.strings 多语言文件夹的名称

*/

NSString *str = [bundle localizedStringForKey:@"change_language" value:nil table:@"English"];

NSString *buttonStr = [bundle localizedStringForKey:@"button" value:nil table:@"English"];

[_changeButton setTitle:buttonStr forState:UIControlStateNormal];

_languageLabel.text = str;

}

//切换语言的点击方法

- (IBAction)change:(id)sender {

//修改语言

NSString *language = [ChangeLanguage userLanguage];

if ([language isEqualToString:@"en"]) {

[ChangeLanguage setUserlanguage:@"zh-Hans"];

}else{

[ChangeLanguage setUserlanguage:@"en"];

}

[[NSNotificationCenter defaultCenter] postNotificationName:@"changeLanguage" object:self];

}

//点击改变语言,代理方法刷新界面

- (void)changeLanguage{

[_changeButton setTitle:[[ChangeLanguage bundle] localizedStringForKey:@"button" value:nil table:@"English"] forState:UIControlStateNormal];

_languageLabel.text =[[ChangeLanguage bundle] localizedStringForKey:@"change_language" value:nil table:@"English"];

}

//适当的位置移除通知

- (void)dealloc{

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

7.下面就来两张运行的界面界面吧

语言切换成功之后,推出程序重新运行就可以看到保留了上次选择的语言。。

法文,韩文等等其他语言皆是如此,只要写好语言文件即可!

iOS 程序内语言切换 -- 中英文切换相关推荐

  1. ios程序内发送邮件的代码

    如下内容是关于ios程序内发送邮件的内容. iPhone API已经提供了系统写邮件界面的接口,使用MFMailComposeViewController,用来显示界面. 项目中需要添加Message ...

  2. ThinkPHP3.2.3 语言包切换中英文切换

    今天要用ThinkPHP3.2.3做一个小网站,其中涉及到切换中文与英文,通过查询手册和百度实现了该操作,现在将我具体的操作步骤记录下来,作为笔记和大家分享. php开发框架:ThinkPHP3.2. ...

  3. ThinkPHP 语言包切换中英文切换

    转: 今天要用ThinkPHP3.2.3做一个小网站,其中涉及到切换中文与英文,通过查询手册和百度实现了该操作,现在将我具体的操作步骤记录下来,作为笔记和大家分享. php开发框架:ThinkPHP3 ...

  4. iOS程序内打开和发送邮件

    程序内写邮件可以使用两种方式: 1.使用openurl. [[UIApplication sharedApplication] openURL:@"mailto://xxx@xxx.com& ...

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

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

  6. 小记!华为 8.0系统切换APP内语言(中英文)无效(其他版本手机均有效)。

    在设置完语言后进行冷启动,其他手机均可以设置成功,但华为8.0新系统手机无效,最终从如下两点解决. 1.在切换完语言后进行冷启动时,对冷启动进行延时处理.(怀疑是没处理完设置流程,直接杀死进程造成) ...

  7. iPhone 手机怎么设置App Store的显示语言,中英文切换

    苹果的 App Store 语言类型取决于你的 Apple ID 账号的国籍设置,它会根据你的 Apple ID 国籍自动调整 App Store 的语言显示.要想把 App Store 设置成中文, ...

  8. QT 语言家 中英文切换

    环境: vs +qt msvc 创建ts文件 第一种: 工具->QT VS Tools 选择 第二种: 点击ok后,生成.pro文件 打开.pro文件,在.pro文件中添加 TRANSLATIO ...

  9. IOS 程序内调用本地打电话功能-make a phone call

    利用openURL接口来调用打电话功能.代码还具备根据正则表达式判断电话好吗输入的合法性. 1 - (void)makeCall:(NSString *)number 2 { 3 NSString * ...

最新文章

  1. Sobel 边缘实现
  2. 什么“取消引用”指针意味着什么?
  3. golang设计模式之原型模式
  4. 图解JavaScript算法排序
  5. 深入讲解JSP 2.0下的动态内容缓存技术
  6. javascript 排序_JavaScript中的排序方法
  7. vuejs简单介绍特点
  8. 设计模式之单例模式8种实现方式,其四:懒汉式(线程安全,同步方法)
  9. Tensorflow:TensorFlow基础(一)
  10. 将摄像头拍摄图像或者本地图片设置为头像的方法
  11. 阿里重磅开源中后台UI解决方案Fusion
  12. Hibernate many-to-many
  13. thinkphp 5.0 模块设计
  14. Vue:打印组件PrintPage
  15. JAVA与GO语言之间应该选择学习哪个?
  16. 菜鸟历程1腾讯云服务器 10元学生套餐购买
  17. 2次拒领诺贝尔奖,爱迪生嫉妒他才华,被美国政府列为绝密人物
  18. P1357 食物链(一)
  19. 对拍--from Altf4
  20. 台式计算机连接无线,台式机怎么连接wifi?台式机怎么连接无线网络的方法

热门文章

  1. 杰理之AC104如何解析FAT文件系统中的dir文件【篇】
  2. ParsePosition 作用
  3. IBM测试分类-AVT,BVT,CVT,FVT,GVT,TVT,SVT,PVT
  4. JAVA生成唯一递增序列_java代码薄:递增序列
  5. 用U盘就可进入有密码的Windows系统
  6. html中精灵图的使用方法,css sprites(精灵图)如何使用?
  7. 申请苹果IOS开发者步奏
  8. GENUS152/INNOVUS152/EXT151依赖包安装(Centos7)
  9. IPv6技术—PPPoE
  10. 计算机硬盘正在工作应特别注意避免,省二级计算机考试试题