開發中設計多語言內容的部分老是很讓人頭疼。 本文也是在摸索中找到了幾種能夠獲取當前系統語言的方法。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
}
}
複製代碼