ios 應用多語言自由切換實現
第一次進入應用擷取母語.1.如果母語在軟體實現語言列表裡.則預設選中母語,但是使用者還是可以選擇其它語言.2.如果母語不在軟體實現語言列表裡,則預設選中英語.使用者還是可以選擇其它語言.
所有要更換語言的controller裡註冊通知.當使用者選擇了一個語言後發送語言修改的通知.控制器收到語言修改通知後,對需要修改語言的控制進行重新設定.
/** 初始化語言 */
- (void)initLanguage{
//1. 擷取系統支援的語言
_languages = [NSMutableArrayarrayWithCapacity:5];
NSURL *url = [[NSBundlemainBundle]URLForResource:kLanguagePlistwithExtension:kTypePlist];
NSDictionary *dic = [NSDictionarydictionaryWithContentsOfURL:url];
//2 產生語言對象
[dicenumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop) {
DYCXLanguage *language = [DYCXLanguagelanguageWithKey:keyAndValue:obj];
[_languagesaddObject:language];
}];
//3. 擷取使用者儲存的語言[0] = 簡體中文, [1] = zh-Hans;
NSString *userLanguageValue = [selfgetUserLanguage];
if (!userLanguageValue) {
userLanguageValue =kDefaultUserLanguage;
//3.1 擷取系統語言
NSString * localLanguage = [selfgetLocalLanguageValue];
//3.2. 確定預設語言
for (DYCXLanguage *languagein_languages) {
//3.3.如果軟體語言套件涵系統語言預設為系統語言,如果不包涵預設設定為英語
if ([localLanguageisEqualToString:language.languageValue]) {
userLanguageValue = localLanguage;
}
}
}
//4. 設定當前語言
for (DYCXLanguage *languagein_languages) {
if ([userLanguageValueisEqualToString:language.languageValue]) {
language.used =YES;
_userLanguage = language;
break;
}
}
}
- (NSString *)getLocalLanguageValue{
NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults];
NSArray *languages = [defaultsobjectForKey:@"AppleLanguages"];
return [languagesobjectAtIndex:0];
}
#pragma mark - 語言更改,重新載入
- (void)reloadStringWithLanguage{
[_confirmsetTitle:[NSStringlocalizedWithString:@"dialog_positive_key"]forState:UIControlStateNormal];
_selectLanguage.text = [NSStringlocalizedWithString:@"select_language_key"];
if ([self.delegaterespondsToSelector:@selector(onLanguageChange)]) {
[self.delegateonLanguageChange];
}
}
#pragma mark -NSString 的分類,載入對應目錄裡的string
+ (NSString *)localizedWithString:(NSString *)key{
NSString *area = [DYCXConfigsharedDYCXConfig].userLanguage.languageValue;
if (!area) {
area = kDefaultUserLanguage;
}
NSString *table = [NSStringstringWithFormat:@"%@.lproj/Localizable", area];
NSString *localizedString = [[NSBundlemainBundle] localizedStringForKey:(key)value:nil table:(table)];
NSAssert(localizedString,@"localized error, table = %@, key = %@", table, key);
return localizedString;
}