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

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.配置环境已经完成,现在看看代码怎么写

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.

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-Hant";

}else currLanguage = @"en";

[def setValue:currLanguage forKey:@"LocalLanguageKey"];

[def synchronize];

}

//废弃按钮

UIButton *btnAbandoned=[UIButton buttonWithType:UIButtonTypeCustom];

btnAbandoned.frame=CGRectMake(100, 100, 100, 45);

[btnAbandoned  setBackgroundColor:[UIColor orangeColor]];

[btnAbandoned addTarget:self action:@selector(btnAbandonedClick:) forControlEvents:UIControlEventTouchDown];

[btnAbandoned setTitle:@"点击" forState:UIControlStateNormal];

[btnAbandoned setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

[btnAbandoned.titleLabel setFont:[UIFont systemFontOfSize:16]];

[self.view addSubview:btnAbandoned];

}

- (void)btnAbandonedClick:(UIButton*)sender{

//修改语言

NSString *language = [[NSUserDefaults standardUserDefaults] objectForKey:@"LocalLanguageKey"];

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

[[NSUserDefaults standardUserDefaults] setValue:@"zh-Hant" forKey:@"LocalLanguageKey"];

}else{

[[NSUserDefaults standardUserDefaults] setValue:@"en" forKey:@"LocalLanguageKey"];

}

NSString *path = [[NSBundle mainBundle] pathForResource:[[NSUserDefaults standardUserDefaults] objectForKey:@"LocalLanguageKey"] ofType:@"lproj"];

NSBundle* bundle = [NSBundle bundleWithPath:path];

//此处是上面赋值的bundle

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

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

NSLog(@"wenzi:%@,%@",str,buttonStr);

}

iOS程序内语言切换使用小结的更多相关文章

  1. iOS应用内语言切换功能

    当我们的应用仅仅面向国内用户群,一般仅支持一种语言--中文就可以了.当面向国外用户时就需要进行国际化了,不仅仅是语言的转变,也可能包括设计风格,页面布局.交互效果的转变,如微信,微博,QQ这类应用都有 ...

  2. iOS开发——iOS国际化 APP内语言切换

    最近一个一直在迭代的老项目收到一份新的开发需求,项目需要做国际化适配,简体中文+英文.由于项目中采用了storyboard和纯代码两种布局方式,所以国际化也要同时实现.上网查了些资料,实现了更改系统语 ...

  3. iOS - 国际化语言切换

    iOS国际化:如何切换语言   1.国际化就是将标签.提示信息等信息放到资源文件中,随着程序需要的语言提供对应的资源文件.以key/value对存储,每个资源的key值不变,value随着需求改变. ...

  4. 在使用Qt5.8完成程序动态语言切换时遇到的问题

    因为之前了解过一些Qt国际化的东西,所以在写程序的时候需要显示给用户的字符都使用了 tr(" ")的形式,然后使用 Qt Linguist得到相应的 qm(Qt message)文 ...

  5. IOS程序内发短信 MFMessageComposeViewController

    文章转载地址:http://www.headsky.org/?p=63 iOS4.0新加入了MFMessageComposeViewController和MFMessageComposeViewCon ...

  6. 转: IOS程序内发短信 MFMessageComposeViewController

    文章转载地址:http://www.headsky.org/?p=63 iOS4.0新加入了MFMessageComposeViewController和MFMessageComposeViewCon ...

  7. Android应用内语言切换实现(转)

    使用Java反射机制 IActivityManager与ActivityManagerNative都是非公开类,使用Java反射去调用其中的方法. 第一步.使用Android开放的api更改Confi ...

  8. iOS程序内实现版本更新

    最近这段时间刚把手头里面的两个项目交付出去,很想写点东西但又不想随随便便的写些抒情的文字,其实生活中的很多事情.成长的路上遇到的很多问题,并非简简单单的抱怨.埋怨,用一种激情悲昂的情绪去逃避.去发泄所 ...

  9. Android原生多语言切换方案,兼容Android10

    前言 一个应用若需要国际化,至少需要支持中文和英语这两种语言,而同时随着谷歌的系统的更新,安卓系统可以设置当前语言的首选语言.因此,本文立足于此,多语言的切换方案为:App固定的文字内容,跟随系统,中 ...

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

    上篇 IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源 介绍了纯代码刷新 实现程序内切换语言. 但效率底下,也存在一些问题.暂放弃. ...

随机推荐

  1. Jmeter函数助手25-log

    log函数用于记录一条日志并返回其值. String to be logged (and returned):函数会返回该值.控制台也能看到该字符 Log level (default INFO) o ...

  2. 【BatchProgram】 读取文本批量创建目录

    NameList.txt文件内容 FILE-NAME-A FILE-NAME-B FILE-NAME-C ... 根据上面文件批量创建对应的目录,且附加序号 CMD代码: @ECHO OFF SETL ...

  3. 【TypeScript】01 基础入门

    前提:使用TypeScript你需要安装NodeJS支持 然后安装TypeScript: npm intsall -g typescript 安装完成后查看版本号: tsc -v 新建一个TypeSc ...

  4. VcXsrv: 一个好用的Windows X11 Server

    windows10没有系统自带的X11服务器,使用了几款X11的windows下X11服务器软件后发现了一个好用的软件--VcXsrv. 下载地址: https://sourceforge.net/p ...

  5. 再用国产操作系统deepin出现拖影现象

    问题如题,使用deepin系统后发现不论是网页的拖动.滑动都会出现明显拖影现象,最神奇的是使用爱奇艺的客户端播放器时同样出现拖影现象. 不过这个拖影现象截图还体现不出来这个拖影的效果,估计只有录屏才可 ...

  6. SpringBoot优雅开发REST API最佳实践

    写在前面 博主最近在做一个数据服务的项目,而这个数据服务的核心就是对外暴露的API,值得高兴的这是一个从0开始的项目,所以终于不用受制于"某些历史"因素去续写各种风格的Contro ...

  7. JavaScript魔法:在线Excel附件上传与下载的完美解决方案

    最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/ 前言 在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求,例如在Exce ...

  8. FFT 高精度乘法模板

    #define L(x) (1 << (x)) const double PI = acos(-1.0); const int N = 1e7 + 10; double ax[N], ay ...

  9. .NET 开源实时监控系统 - WatchDog

    前言 在平时的开发中随着我们系统应用不断地迭代变的复杂,对应用的实时监控变得越来越重要.实时监控不仅可以帮助我们快速定位问题,还能在出现问题时及时采取措施,减少业务中断的时间. 本文将介绍一个名为Wa ...

  10. 基于surging的木舟IOT平台如何添加网络组件

    一 . 概述 为了弥补代码的遗失,木舟IOT平台正在加班加点进行研发,后面不只是针对于IOT设备接入上报,告警,视频管理,组态数据可视化大屏,后面还会有快速搭建微服务平台,利用surging.cli工 ...