- 創(chuàng)建多語言文件

image.png
-
點擊下圖中按鈕,會首先顯示默認的英文語言類型
image.png -
PROJECT -> Localizations -> 點擊"+"按鈕添加需要的語言類型
image.png
結(jié)果:

image.png
- 設(shè)置語言
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
- 顯示結(jié)果
手機系統(tǒng)為英文時:
Exchange
Hello World
China: 999
手機系統(tǒng)為中文時:
切換
你好 世界
中國: 999
PS: 這種方式應(yīng)用的語言會跟隨系統(tǒng)語言進行切換,不能應(yīng)用內(nèi)自己切換
多語言文件名字不為Localizable,創(chuàng)建過程一致,只是名字換成其他的,結(jié)果:

image.png
這時候仍然用NSLocalizedString給控件賦值,只會顯示對應(yīng)的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"];
//跟隨系統(tǒng)切換 文件名必須是Localizable
/**
key: 文字對應(yīng)的key
comment: 注釋 一般寫nil
*/
NSLocalizedString(key, comment)
//以下三種均可以手動設(shè)置多語言
/**
key: 文字對應(yīng)的key
tbl: 多語言文件的名字
comment: 注釋 一般nil
*/
NSLocalizedStringFromTable(key, tbl, comment)
/**
key: 文字對應(yīng)的key
tbl: 多語言文件的名字
bundle: 多語言文件的bundle
comment: 注釋 一般nil
*/
NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment)
/**
key: 文字對應(yīng)的key
tbl: 多語言文件的名字
bundle: 多語言文件的bundle
val: 默認值
comment: 注釋 一般nil
*/
NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment)
應(yīng)用內(nèi)手動設(shè)置語言
-
每種語言對應(yīng)一個后綴為lproj的文件夾,且文件為EEE.strings
image.png

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]) {
//默認設(shè)為英文
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:kAppLanguage];
[[NSUserDefaults standardUserDefaults] synchronize];
}
ps: 沒有做什么封裝 只是大概思路和用法來理解一下


