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.配置环境已经完成,现在看看代码怎么写????
(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];
}
(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 程序内语言切换 -- 中英文切换相关推荐
- ios程序内发送邮件的代码
如下内容是关于ios程序内发送邮件的内容. iPhone API已经提供了系统写邮件界面的接口,使用MFMailComposeViewController,用来显示界面. 项目中需要添加Message ...
- ThinkPHP3.2.3 语言包切换中英文切换
今天要用ThinkPHP3.2.3做一个小网站,其中涉及到切换中文与英文,通过查询手册和百度实现了该操作,现在将我具体的操作步骤记录下来,作为笔记和大家分享. php开发框架:ThinkPHP3.2. ...
- ThinkPHP 语言包切换中英文切换
转: 今天要用ThinkPHP3.2.3做一个小网站,其中涉及到切换中文与英文,通过查询手册和百度实现了该操作,现在将我具体的操作步骤记录下来,作为笔记和大家分享. php开发框架:ThinkPHP3 ...
- iOS程序内打开和发送邮件
程序内写邮件可以使用两种方式: 1.使用openurl. [[UIApplication sharedApplication] openURL:@"mailto://xxx@xxx.com& ...
- iOS App内语言切换(国际化)
想要实现App内的语言切换功能,那么首先要创建国际化语言文件,用于存储对应语言显示的文本. 1.创建国际化语言文件 command+N,选择Other里面的Empty文件. 我们将其命名为Locali ...
- 小记!华为 8.0系统切换APP内语言(中英文)无效(其他版本手机均有效)。
在设置完语言后进行冷启动,其他手机均可以设置成功,但华为8.0新系统手机无效,最终从如下两点解决. 1.在切换完语言后进行冷启动时,对冷启动进行延时处理.(怀疑是没处理完设置流程,直接杀死进程造成) ...
- iPhone 手机怎么设置App Store的显示语言,中英文切换
苹果的 App Store 语言类型取决于你的 Apple ID 账号的国籍设置,它会根据你的 Apple ID 国籍自动调整 App Store 的语言显示.要想把 App Store 设置成中文, ...
- QT 语言家 中英文切换
环境: vs +qt msvc 创建ts文件 第一种: 工具->QT VS Tools 选择 第二种: 点击ok后,生成.pro文件 打开.pro文件,在.pro文件中添加 TRANSLATIO ...
- IOS 程序内调用本地打电话功能-make a phone call
利用openURL接口来调用打电话功能.代码还具备根据正则表达式判断电话好吗输入的合法性. 1 - (void)makeCall:(NSString *)number 2 { 3 NSString * ...
最新文章
- Sobel 边缘实现
- 什么“取消引用”指针意味着什么?
- golang设计模式之原型模式
- 图解JavaScript算法排序
- 深入讲解JSP 2.0下的动态内容缓存技术
- javascript 排序_JavaScript中的排序方法
- vuejs简单介绍特点
- 设计模式之单例模式8种实现方式,其四:懒汉式(线程安全,同步方法)
- Tensorflow:TensorFlow基础(一)
- 将摄像头拍摄图像或者本地图片设置为头像的方法
- 阿里重磅开源中后台UI解决方案Fusion
- Hibernate many-to-many
- thinkphp 5.0 模块设计
- Vue:打印组件PrintPage
- JAVA与GO语言之间应该选择学习哪个?
- 菜鸟历程1腾讯云服务器 10元学生套餐购买
- 2次拒领诺贝尔奖,爱迪生嫉妒他才华,被美国政府列为绝密人物
- P1357 食物链(一)
- 对拍--from Altf4
- 台式计算机连接无线,台式机怎么连接wifi?台式机怎么连接无线网络的方法