iOS 多语言设置与管理最佳实践 - Objective-C 和 Swift 示例
- (NTVLocalized *)sharedInstance { static NTVLocalized *instance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[NTVLocalized alloc] init]; }); return instance; }
-
(void)initLanguage{ NSString *language=[self currentLanguage]; if (language.length>0) { NSLog('自设置语言:%@',language); }else{ [self systemLanguage]; } }
-
(NSString *)currentLanguage{ NSString *language=[[NSUserDefaults standardUserDefaults]objectForKey:AppLanguage]; return language; }
-
(void)setLanguage:(NSString *)language{ [NSBundle setLanguage:language];
[[NSUserDefaults standardUserDefaults] setObject:language forKey:AppLanguage]; [[NSUserDefaults standardUserDefaults] synchronize]; } -
(void)systemLanguage{ NSString *languageCode = [[NSUserDefaults standardUserDefaults] objectForKey:'AppleLanguages'][0]; NSLog('系统语言:=%@',languageCode); if([languageCode isEqualToString:'hi-US']) { languageCode = 'hi'; [[NSUserDefaults standardUserDefaults]setInteger:0 forKey:'LanguageType']; }else if([languageCode hasPrefix:'en']) { languageCode = 'en';//英语 [[NSUserDefaults standardUserDefaults]setInteger:1 forKey:'LanguageType']; }else { languageCode = 'en';//简体中文 [[NSUserDefaults standardUserDefaults]setInteger:1 forKey:'LanguageType']; } [self setLanguage:languageCode]; } 转swift内容:+ (var sharedInstance: NTVLocalized) { struct Static { static var instance: NTVLocalized? = nil static var onceToken: dispatch_once_t = 0 }
dispatch_once(&Static.onceToken) { Static.instance = NTVLocalized() }
return Static.instance! }
func initLanguage() { let language = currentLanguage() if language.count > 0 { NSLog('自设置语言:(language)') } else { systemLanguage() } }
func currentLanguage() -> String? { let language = UserDefaults.standard.object(forKey: AppLanguage) as? String return language }
func setLanguage(_ language: String) { Bundle.setLanguage(language) UserDefaults.standard.set(language, forKey: AppLanguage) UserDefaults.standard.synchronize() }
func systemLanguage() { var languageCode = UserDefaults.standard.object(forKey: 'AppleLanguages')?[0] as? String NSLog('系统语言:=(languageCode)')
if languageCode == 'hi-US' {
languageCode = 'hi'
UserDefaults.standard.set(0, forKey: 'LanguageType')
} else if languageCode?.hasPrefix('en') == true {
languageCode = 'en'
UserDefaults.standard.set(1, forKey: 'LanguageType')
} else {
languageCode = 'en'
UserDefaults.standard.set(1, forKey: 'LanguageType')
}
setLanguage(languageCode!)
}
原文地址: https://www.cveoy.top/t/topic/b4MP 著作权归作者所有。请勿转载和采集!