如何获得操作系统语言和语言环境?

Tru*_*an1 6 localization ios nslocale swift

我的应用程序在运行时更改语言,并建议用户重新启动应用程序.我是这样做的:

    typealias LanguageLocaleType = (language: String?, locale: String?, title: String)

    let elements: [LanguageLocaleType] = [
        (nil, nil, "System Default"),
        ("en", "en_US", "English"),
        ("ar", "ar_SA", "Arabic"),
    ]

    //...func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)...

    let element = elements[indexPath.row]

    guard let language = element.language else {
        // How to really reset app back to OS language/locale???
        UserDefaults.standard.removeObject(forKey: "AppleLanguages")
        UserDefaults.standard.removeObject(forKey: "AppleLocale")
        return
    }

    UserDefaults.standard.set([language], forKey: "AppleLanguages")

    if let locale = element.locale, !locale.isEmpty,
        Locale.current.identifier != locale,
        !Locale.current.identifier.hasPrefix("\(language)_") {
            UserDefaults.standard.set(locale, forKey: "AppleLocale")
    }
Run Code Online (Sandbox Code Playgroud)

我想提供在列表中设置语言并选择正确的语言,其中一个语言被提供给语言设置System Default.但是,没有办法找到我能找到的操作系统级语言和语言环境.因为我搞乱后设置UserDefaults,Bundle.main.preferredLocalizations不可靠并且不匹配系统默认(当我从中移除密钥时的事件User Default).

有没有办法获得操作系统级别的语言和区域设置而不是应用程序级别?

Cri*_*oso 1

我会推荐您使用 Cocoa pods 中的这个库。

在您的Podfile中添加以下行:

pod 'Localize-Swift', '~> 1.7'
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令安装您的 pod:

pod install
Run Code Online (Sandbox Code Playgroud)

然后,如果您没有Localized.strings,例如Localized.strings (英语)文件,请添加此行。

"LD" = "Loading ...";
"CAMP" = "Campus";
"MAP" = "MAP";
Run Code Online (Sandbox Code Playgroud)

第一个词就像你的标签,下一个词就是你的价值

然后在你的ViewController中你可以像这样使用你的字符串。

使用示例:

let progressHUD = ProgressHUD(text: "LD".localized())
let progressHUD = ProgressHUD(text: "CAMP".localized())
let progressHUD = ProgressHUD(text: "MAP".localized())
Run Code Online (Sandbox Code Playgroud)

仅此而已。

我希望这有帮助。