iOS 程序内语言切换 -- 中英文切换
来源:互联网 发布:mac app store更新不了 编辑:程序博客网 时间:2024/06/06 07:48
随着时代的发展,应用程序相继出现了不同语言的版本方案,中文,英文,法文,韩文等等;想在应用程序中实现语言的自由切换,需要配置多个语言的文件,根据用户的动态选择获取不同语言文件下的语言文件,从而显示到界面上面。这里先说中英文的切换,至于其他语言操作复制即可!!!
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;//设置当前语言
static NSBundle *bundle =nil;
+ ( NSBundle * )bundle{
returnbundle;
}
//首次加载的时候先检测语言是否存在
+(void)initUserLanguage{
NSUserDefaults *def = [NSUserDefaultsstandardUserDefaults];
NSString *currLanguage = [defvalueForKey:LocalLanguageKey];
if(!currLanguage){
NSArray *preferredLanguages = [NSLocalepreferredLanguages];
currLanguage = preferredLanguages[0];
if ([currLanguagehasPrefix:@"en"]) {
currLanguage = @"en";
}elseif ([currLanguage hasPrefix:@"zh"]) {
currLanguage = @"zh-Hans";
}else currLanguage =@"en";
[def setValue:currLanguageforKey:LocalLanguageKey];
[def synchronize];
}
//获取文件路径
NSString *path = [[NSBundlemainBundle] pathForResource:currLanguageofType:@"lproj"];
bundle = [NSBundlebundleWithPath:path];//生成bundle
}
//获取当前语言
+(NSString *)userLanguage{
NSUserDefaults *def = [NSUserDefaultsstandardUserDefaults];
NSString *language = [defvalueForKey:LocalLanguageKey];
return language;
}
//设置语言
+(void)setUserlanguage:(NSString *)language{
NSUserDefaults *userDefaults = [NSUserDefaultsstandardUserDefaults];
NSString *currLanguage = [userDefaultsvalueForKey:LocalLanguageKey];
if ([currLanguageisEqualToString:language]) {
return;
}
[userDefaults setValue:languageforKey:LocalLanguageKey];
[userDefaults synchronize];
NSString *path = [[NSBundlemainBundle] pathForResource:languageofType:@"lproj" ];
bundle = [NSBundlebundleWithPath:path];
}
(2)ViewController.m
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(changeLanguage)name:@"changeLanguage"object:nil];
//初始化应用语言
[ChangeLanguageinitUserLanguage];
NSBundle *bundle = [ChangeLanguagebundle];
/*
localizedStringForKey:@"change_language" value:nil table:@"English"
localizedStringForKey:各个语言文件中共同的名称
table: English.strings 多语言文件夹的名称
*/
NSString *str = [bundlelocalizedStringForKey:@"change_language"value:niltable:@"English"];
NSString *buttonStr = [bundlelocalizedStringForKey:@"button"value:niltable:@"English"];
[_changeButtonsetTitle:buttonStr forState:UIControlStateNormal];
_languageLabel.text = str;
}
//切换语言的点击方法
- (IBAction)change:(id)sender {
//修改语言
NSString *language = [ChangeLanguageuserLanguage];
if ([languageisEqualToString:@"en"]) {
[ChangeLanguagesetUserlanguage:@"zh-Hans"];
}else{
[ChangeLanguagesetUserlanguage:@"en"];
}
[[NSNotificationCenterdefaultCenter] postNotificationName:@"changeLanguage"object:self];
}
//点击改变语言,代理方法刷新界面
- (void)changeLanguage{
[_changeButtonsetTitle:[[ChangeLanguagebundle] localizedStringForKey:@"button"value:niltable:@"English"]forState:UIControlStateNormal];
_languageLabel.text =[[ChangeLanguagebundle] localizedStringForKey:@"change_language"value:niltable:@"English"];
}
//适当的位置移除通知
- (void)dealloc{
[[NSNotificationCenterdefaultCenter] removeObserver:self];
}
语言切换成功之后,推出程序重新运行就可以看到保留了上次选择的语言。。
法文,韩文等等其他语言皆是如此,只要写好语言文件即可!
- iOS 程序内语言切换 -- 中英文切换
- iOS 应用程序内切换语言 中英文切换
- iOS 应用程序内切换语言 中英文切换
- iOS 切换语言开发 中英文切换
- Eclipse 中英文语言切换
- Adobe AE CC切换语言 中英文切换
- iOS国际化之app内切换语言
- [iOS]应用内切换语言,本地化,国际化
- iOS应用内语言切换功能
- iOS应用内语言切换功能
- iOS应用内切换语言,本地化,国际化
- iOS--在应用内切换语言
- iOS应用内语言切换功能
- 网页中英文语言切换解决方案
- 中英文语言切换 Locale.CHINA
- 应用内切换语言
- app内切换语言
- 中英文切换
- 手残错误总结
- [BZOJ]1001: [BeiJing2006]狼抓兔子
- SQL中where 1=1 和 where1<>1
- 查找整数
- hibernate三态
- iOS 程序内语言切换 -- 中英文切换
- 一个Myeclipse视图跑出来,脱离窗口的问题
- LCD驱动学习
- 百度2017校招面试总结
- SpringMVC之组合注解@GetMapping
- 操作系统-1.设计的原则
- 设计模式-引言及个人认识(1)
- oracle中=>符号的意义
- 百度语音识别技术负责人李先刚:如何利用Deep CNN大幅提升识别准确率?