步驟一、在info中添加中英文支持:
步驟二紊服、創(chuàng)建資源文件
1.創(chuàng)建中英文資源文件(必須使用: Localizable.strings)
Localizable?勾選上中英文:
編寫資源文件:
中文:
英文:?
2.創(chuàng)建應用名稱顯示資源文件(名稱必需叫做:infoPlist.strings)?
還有一點要注意的是 工程Plist文件中的 Bundle display name 要設置為: ${PRODUCT_NAME}.
那么應用在顯示iPhone 桌面時 就一樣會根據(jù)設置的語言而顯示不同的語言了.
code:?
單獨建一個工具類GDLocalizableController萝挤,用來切換本地語言:
GDLocalizableController.h 文件
#import
@interface GDLocalizableController : NSObject
+(NSBundle *)bundle;//獲取當前資源文件
+(void)initUserLanguage;//初始化語言文件
+(NSString *)userLanguage;//獲取應用當前語言
+(void)setUserlanguage:(NSString *)language;//設置當前語言
@end
GDLocalizableController.m文件
#import GDLocalizableController.h
@implementation GDLocalizableController
static NSBundle *bundle = nil;
+ ( NSBundle * )bundle{
return bundle;
}
+(void)initUserLanguage{
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSString *string = [def valueForKey:@userLanguage];
if(string.length == 0){
//獲取系統(tǒng)當前語言版本
NSArray* languages = [def objectForKey:@AppleLanguages];
NSString *current = [languages objectAtIndex:0];
string = current;
[def setValue:current forKey:@userLanguage];
[def synchronize];//持久化,不加的話不會保存
}
//獲取文件路徑
NSString *path = [[NSBundle mainBundle] pathForResource:string ofType:@lproj];
bundle = [NSBundle bundleWithPath:path];//生成bundle
}
+(NSString *)userLanguage{
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSString *language = [def valueForKey:@userLanguage];
return language;
}
+(void)setUserlanguage:(NSString *)language{
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
//1.第一步改變bundle的值
NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@lproj ];
bundle = [NSBundle bundleWithPath:path];
//2.持久化
[def setValue:language forKey:@userLanguage];
[def synchronize];
}
@end?
- 自定義一個宏方便處理:
// ----- 多語言設置
#define CHINESE @zh-Hans
#define ENGLISH @en
#define GDLocalizedString(key) [[GDLocalizableController bundle] localizedStringForKey:(key) value:@ table:nil]
6.使用:
[GDLocalizableController setUserlanguage:CHINESE];
NSLog(GDLocalizedString(@SUBMIT_BTN_TITLE));
[GDLocalizableController setUserlanguage:ENGLISH];
NSLog(GDLocalizedString(@SUBMIT_BTN_TITLE));
注意:?
iOS9需要注意的問題
iOS國際化問題:當前設備語言字符串返回有變化。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *allLanguage = [defaults objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [allLanguage objectAtIndex:0];
NSLog(@"The current language is : %@", currentLanguage);
iOS 9 之前:以上返回結果:語言字符串代碼责球。例如:"zh-Hans"
iOS 9以上返回結果:語言字符串代碼 + 地區(qū)代碼。例如:"zh-Hans-US"
備注:
1.請注意判斷當前語言類型拓劝,不要用以下形式的代碼了雏逾,不然在iOS9上就會遇到坑。
if ([currentLanguage isEqualToString:@"zh-Hans"])
可以使用:
if ([currentLanguage hasPrefix:@"zh-Hans"])
另外:對于中文郑临,語言有:
簡體中文:zh-Hans
繁體中文:zh-Hant
香港中文:zh-HK
澳門中文:zh-MO
臺灣中文:zh-TW
新加坡中文:zh-SG
備注:以上iOS9 當前語言字符串返回結果:語言字符串代碼 + 地區(qū)代碼栖博。在某些情況下不是這樣,iOS開發(fā)培訓者本人手機型號:大陸版電信iPhone5S/A1533/16GB測試結果:zh-HK/zh-TW厢洞,在地區(qū)為"中國"仇让、"中國香港"、"中國臺灣"的時候躺翻,顯示的還是zh-HK/zh-TW丧叽,一旦切換到其它地區(qū),設備語言會自動的切換到中文繁體公你。請開發(fā)人員注意中文的問題踊淳!
?相關博客:http://www.cocoachina.com/ios/20151120/14258.html
?
?
?
?