iOS程序内语言切换使用小结
随着时代的发展,应用程序相继出现了不同语言的版本方案,中文,英文,法文,韩文等等;想在应用程序中实现语言的自由切换,需要配置多个语言的文件,根据用户的动态选择获取不同语言文件下的语言文件,从而显示到界面上面。这里先说中英文的切换,至于其他语言操作复制即可!!!
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程序内语言切换使用小结的更多相关文章
- iOS应用内语言切换功能
当我们的应用仅仅面向国内用户群,一般仅支持一种语言--中文就可以了.当面向国外用户时就需要进行国际化了,不仅仅是语言的转变,也可能包括设计风格,页面布局.交互效果的转变,如微信,微博,QQ这类应用都有 ...
- iOS开发——iOS国际化 APP内语言切换
最近一个一直在迭代的老项目收到一份新的开发需求,项目需要做国际化适配,简体中文+英文.由于项目中采用了storyboard和纯代码两种布局方式,所以国际化也要同时实现.上网查了些资料,实现了更改系统语 ...
- iOS - 国际化语言切换
iOS国际化:如何切换语言 1.国际化就是将标签.提示信息等信息放到资源文件中,随着程序需要的语言提供对应的资源文件.以key/value对存储,每个资源的key值不变,value随着需求改变. ...
- 在使用Qt5.8完成程序动态语言切换时遇到的问题
因为之前了解过一些Qt国际化的东西,所以在写程序的时候需要显示给用户的字符都使用了 tr(" ")的形式,然后使用 Qt Linguist得到相应的 qm(Qt message)文 ...
- IOS程序内发短信 MFMessageComposeViewController
文章转载地址:http://www.headsky.org/?p=63 iOS4.0新加入了MFMessageComposeViewController和MFMessageComposeViewCon ...
- 转: IOS程序内发短信 MFMessageComposeViewController
文章转载地址:http://www.headsky.org/?p=63 iOS4.0新加入了MFMessageComposeViewController和MFMessageComposeViewCon ...
- Android应用内语言切换实现(转)
使用Java反射机制 IActivityManager与ActivityManagerNative都是非公开类,使用Java反射去调用其中的方法. 第一步.使用Android开放的api更改Confi ...
- iOS程序内实现版本更新
最近这段时间刚把手头里面的两个项目交付出去,很想写点东西但又不想随随便便的写些抒情的文字,其实生活中的很多事情.成长的路上遇到的很多问题,并非简简单单的抱怨.埋怨,用一种激情悲昂的情绪去逃避.去发泄所 ...
- Android原生多语言切换方案,兼容Android10
前言 一个应用若需要国际化,至少需要支持中文和英语这两种语言,而同时随着谷歌的系统的更新,安卓系统可以设置当前语言的首选语言.因此,本文立足于此,多语言的切换方案为:App固定的文字内容,跟随系统,中 ...
- IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)
上篇 IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源 介绍了纯代码刷新 实现程序内切换语言. 但效率底下,也存在一些问题.暂放弃. ...
随机推荐
- 【Java】Oshi 硬件信息读取库
实现的功能: 用于开发服务器监控面板,获取服务器硬件参数 官方Github仓库地址: https://github.com/oshi/oshi Maven坐标: <!-- https://mvn ...
- 【Spring-Cloud】Nacos2.0.3 单系统集群部署问题汇总
1.强制要求JDK8版本 且 64位 C:\Users\Administrator\Desktop\Nacos-Server\Nacos-2.0.3-8848\bin>java -version ...
- 《Python数据可视化之matplotlib实践》 源码 第四篇 扩展 第十二章
图 12.1 import matplotlib.pyplot as plt import numpy as np barSlices=12 theta=np.linspace(0.0, 2*np. ...
- 强化学习运行环境,atari 2600 游戏模拟器,atari-py库 —— 无法运行游戏,pacman,surround,报错: Segmentation fault (core dumped)
atari2600运行环境: https://github.com/openai/atari-py 安装环境,以及导入 rom文件这里不进行介绍(前文已介绍): 测试游戏环境rom文件能否正常加载如内 ...
- 如何拉取指定CPU架构并且指定ubuntu版本并且指定cuda和cudnn版本的docker镜像
本篇讲的重点是如何拉取带有cuda和cudnn的docker镜像,因此这些的镜像源的频道为NVIDIA: 官方地址: https://hub.docker.com/r/nvidia/cuda 根据官方 ...
- 在WSL Ubuntu中设置sshd自启动
参考: https://blog.csdn.net/android_cai_niao/article/details/128490566 ------------------------------- ...
- 如何在Ubuntu系统中进行系统级的代理设置
在Ubuntu系统中我们往往需要设置代理上网,比如在Ubuntu22.04中,通过图形化界面的设置方式如下: 这里假设代理服务器地址为: 192.168.1.103:1080 ============ ...
- Opentelemetry collector用法
Opentelemetry collector用法 目录 Opentelemetry collector用法 Service Extensions healthcheckextension Pipel ...
- [最新] Chrome 添加 Cookie 标红的解决方法(测试于119)
最近发现 Chrome 开发人员工具里无法添加 Cookie,输入名称时整行变红,而且不会自动补充域.大小.过期时间等项. 网上搜全都是 Chrome 96 要开 Partitioned Cookie ...
- Synology NAS GitLab 配置
安装 安装的时候会提示服务器名.root用户名等,这步服务器名千万不要写错,不然会登不上去,提示 502. root 密码 网上有很多说 root 密码怎么获取的,但是都不适用. 实际上是第一个访问 ...