1.獲取手機當前的語言環(huán)境
NSArray *languagesArr = [NSLocale preferredLanguages];
NSString *currentLanguage = [languagesArr[0] componentsSeparatedByString:@"-"].firstObject;
//[NSLocale ISOLanguageCodes]可獲取世界上所有語言代號(小寫字母)
self.title = [currentLanguage isEqualToString:@"zh"] ? @"商城" : @"Shop";
2.獲取手機當前的位置(國家)
NSLocale *currentLocale = [NSLocale currentLocale];
NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode];
//此處objectForKey是NSLocale的對象方法,并非字典
if ([countryCode isEqualToString:@"CN"]) { //當前位置是否中國
[TSUserDefaults setIsChina:YES];
}else{
[TSUserDefaults setIsChina:NO];
}
//注:[NSLocale ISOCountryCodes]可獲取所有國家代號(大寫字母)
3.ios項目常用的國際化方法
/** NSBundle.h中定義了如下幾個宏:
#define NSLocalizedString(key, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]
#define NSLocalizedStringFromTable(key, tbl, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:(tbl)]
#define NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment) \
[bundle localizedStringForKey:(key) value:@"" table:(tbl)]
#define NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment) \
[bundle localizedStringForKey:(key) value:(val) table:(tbl)]
*/
//國際化是ios提供的一個宏,定義在NSBundle.h文件中馒闷,跟以上的NSLocale沒有關(guān)系酪捡。用法如下
NSLocalizedString(@"中國", nil);
4. NSLocale和NSLocalizedString配合使用舉例
實現(xiàn)目標:App已經(jīng)支持了中英法德俄語言,其他語言環(huán)境用英文顯示
NSArray *languagesArr = [NSLocale preferredLanguages];
NSString *currentLanguage = [languagesArr[0] componentsSeparatedByString:@"-"].firstObject;
if ([currentLanguage wz_IsEqualToString:@"zh"]||
[currentLanguage wz_IsEqualToString:@"en"]||
[currentLanguage wz_IsEqualToString:@"fr"]||
[currentLanguage wz_IsEqualToString:@"de"]||
[currentLanguage wz_IsEqualToString:@"ru"]||
{
NSString *string = NSLocalizedString(keyString, nil);
return string;
}
else {
if (fileName) {//從指定文件中獲取對應(yīng)的本地化字符
return NSLocalizedStringFromTable(keyString, fileName, nil);
}
else //如果fileName為nil,那么就默認在英文本地化table中查找
{
return NSLocalizedStringFromTable(keyString, @"Localizable_EN", nil);
}
}