iOS多语言-跟随系统/应用内切换
2020-09-28 本文已影响0人
CoderCurtis
- 创建多语言文件
-
点击下图中按钮,会首先显示默认的英文语言类型
image.png -
PROJECT -> Localizations -> 点击"+"按钮添加需要的语言类型
image.png
结果:
image.png
- 设置语言
Localizable.strings(Chinese, Simplified)
"BTNTITLE" = "切换";
"TITLE" = "你好 世界";
"COUNTRY" = "中国: %@";
Localizable.strings(English)
"BTNTITLE" = "Exchange";
"TITLE" = "Hello World";
"COUNTRY" = "China: %@";
- 为控件赋值
self.test1Label.text = NSLocalizedString(@"BTNTITLE", nil);
self.test2Label.text = NSLocalizedString(@"TITLE", nil);
self.test3Label.text = [NSString stringWithFormat:NSLocalizedString(@"COUNTRY", nil), @"999"];
PS: 使用[NSLocalizedString(@"TITLE", nil);]这种方式赋值的,多语言文件的名字必须是Localizable,否则只会显示它的key
- 显示结果
手机系统为英文时:
Exchange
Hello World
China: 999
手机系统为中文时:
切换
你好 世界
中国: 999
PS: 这种方式应用的语言会跟随系统语言进行切换,不能应用内自己切换
多语言文件名字不为Localizable,创建过程一致,只是名字换成其他的,结果:
image.png
这时候仍然用NSLocalizedString给控件赋值,只会显示对应的key了
BTNTITLE
TITLE
COUNTRY
正确显示:
self.test1Label.text = NSLocalizedStringFromTable(@"BTNTITLE", @"EEE", nil);
self.test2Label.text = NSLocalizedStringFromTable(@"TITLE", @"EEE", nil);
self.test3Label.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"COUNTRY", @"EEE", nil), @"999"];
//跟随系统切换 文件名必须是Localizable
/**
key: 文字对应的key
comment: 注释 一般写nil
*/
NSLocalizedString(key, comment)
//以下三种均可以手动设置多语言
/**
key: 文字对应的key
tbl: 多语言文件的名字
comment: 注释 一般nil
*/
NSLocalizedStringFromTable(key, tbl, comment)
/**
key: 文字对应的key
tbl: 多语言文件的名字
bundle: 多语言文件的bundle
comment: 注释 一般nil
*/
NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment)
/**
key: 文字对应的key
tbl: 多语言文件的名字
bundle: 多语言文件的bundle
val: 默认值
comment: 注释 一般nil
*/
NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment)
应用内手动设置语言
-
每种语言对应一个后缀为lproj的文件夹,且文件为EEE.strings
image.png
- 切换语言: 获取EEE.strings中value的值,即切换语言 -> 切换不同语言文件夹 -> 切换不同的语言资源文件
NSString *path = [[NSBundle mainBundle] pathForResource:@"zh-Hans" ofType:@"lproj"];
NSString *string = [[NSBundle bundleWithPath:path] localizedStringForKey:@"TITLE" value:nil table:@"EEE"];
NSLog(@"==%@", string); //你好 世界
- 切换语言,存储当前语言key
NSString *currentLanguage = [[NSUserDefaults standardUserDefaults] objectForKey:kAppLanguage];
if (btn.tag == 0) {
//中文
if ([currentLanguage isEqualToString:@"zh-Hans"]) {
return;
}
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:kAppLanguage];
[[NSUserDefaults standardUserDefaults] synchronize];
} else {
//英文
if ([currentLanguage isEqualToString:@"en"]) {
return;
}
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:kAppLanguage];
[[NSUserDefaults standardUserDefaults] synchronize];
}
启动时,默认语言:
if (![[NSUserDefaults standardUserDefaults] objectForKey:kAppLanguage]) {
//默认设为英文
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:kAppLanguage];
[[NSUserDefaults standardUserDefaults] synchronize];
}
ps: 没有做什么封装 只是大概思路和用法来理解一下