开发中设计多语言内容的部分老是很让人头疼。 本文也是在摸索中找到了几种能够获取当前系统语言的方法。swift
注意区分app 内的当前语言,和系统的当前语言数组
let userLanguage = UserDefaults.standard.object(forKey: "AppleLanguages") //返回的也是数组
let appLanguages = Locale.preferredLanguages // 返回一个数组
let deviceLanguage = Locale.current.languageCode
let bundleLanguages = Bundle.main.preferredLocalizations // 返回一个数组
let availableLanguages = Localize.availableLanguages() // 必须引入第三方库 import Localize_Swift, 获取当前 app 全部支持的语言列表
let currentLanguage = Localize.currentLanguage() // 引入第三方库,表示当前 App 使用的语言
复制代码
NSString *userLanguage = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]
NSString *appLanguages = [NSLocale preferredLanguages];
NSString *deviceLanguage = [[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode];
NSString *bundleLanguages = [[NSBundle mainBundle] preferredLocalizations]
复制代码
userLanguage | appLanguages | deviceLanguage | bundleLanguages | availableLanguages | |
---|---|---|---|---|---|
返回类型 | ["zh-Hans-CN", “en"] | ["zh-Hans-CN", “en"] | “zh" | ["zh-Hans"] | [“zh-Hans","zh-Hant”,”en"] |
说明 | 从 userDefault 中获取到的,返回的是一个数组. 表示在当前 app 下使用过的 | 用户在手机系统设置里设置的语言。能够经过设置 -> 通常 -> 语言与地区 看到,不是程序正在显示的语言。 |
彷佛是当前使用语言的大类。不带地区码 | 带语言的二级分类,但不带地区码 | (第三方库支持) 当前 App 设置的支持切换的语言数组 |
;app
userLanguage
和 appLanguages
获取的会将国家地区的代码加上,而deviceLanguage
只是显示是中文(大类),并不能区分是繁体中文仍是简体中文,而最后这个方法带二级分类的语言类型zh-Hans-CN
地区和分类 zh-Hant-HK
import Localize_Swift
let bundleLanguage = Bundle.main.preferredLocalizations[0]
let availableLanguages = Localize.availableLanguages()
var language = "en" // 若是找不到当前匹配的语言,默认使用英语
for availableLanguage in availableLanguages {
if let _ = availableLanguage.range(of: bundleLanguage) {
language = appLanguage
break
}
}
复制代码