獲取系統語言/當前 App支持語言

簡述

開發中設計多語言內容的部分老是很讓人頭疼。 本文也是在摸索中找到了幾種能夠獲取當前系統語言的方法。swift

注意區分app 內的當前語言,和系統的當前語言數組

Swift

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 使用的語言
複製代碼

Objective C

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

說明

  • 由此能夠看到這幾個獲取系統語言的方法準確性(或者說顆粒度)是不同的,前兩種userLanguageappLanguages 獲取的會將國家地區的代碼加上,而deviceLanguage只是顯示是中文(大類),並不能區分是繁體中文仍是簡體中文,而最後這個方法帶二級分類的語言類型
  • 表示用戶在當前 app 下使用過的語言。所以返回的是一個數組。這個值返回的會帶上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
    }
}
複製代碼
相關文章
相關標籤/搜索