【问题标题】:How to programmatically access the apps language in iOS 13?如何以编程方式访问 iOS 13 中的应用程序语言?
【发布时间】:2020-01-09 08:10:21
【问题描述】:

Starting from iOS 13Apple 允许:

每个应用程序的语言选择

使用与您的系统不同的语言的第三方应用程序 语言。

正如我在应用设置页面上的设置应用中看到的那样,有一个新的“首选语言”条目显示了我的应用的本地化语言选择。

来自 Facebook 的示例:

Image source


我能否以编程方式访问所选语言的值?

如果是,用哪个键?

[[NSUserDefaults standardUserDefaults] objectForKey:@"key???"];

【问题讨论】:

    标签: ios ios13


    【解决方案1】:

    我通常会添加这个小扩展:

    public extension Locale {
        /// Returns the prefered locale used in the app, if none is found, returns `Locale.current`
        static var appCurrent : Locale {
            if let prefered = Bundle.main.preferredLocalizations.first {
                return Locale(identifier: prefered)
            }
            else {
                return current
            }
        }
    }
    

    然后你可以使用Locale.appCurrent来检索它。

    注意:我使用Bundle.preferedLocalizations 而不是Locale.preferedLocale,因为它返回真正的应用程序语言。例如,如果您的手机是法语,而您的应用程序仅本地化为英语,则 Bundle.preferedLocalizations 将返回 en,因为这是您的应用程序运行所在的 LocaleLocale.preferedLocale 将返回 French 但所有其他本地化版本都将使用英语,因为您的应用在法语设备上以英语运行。

    编辑:这里是 Objective-C 版本。

    @interface NSLocale(AppCurrent)
    
    + (NSLocale *) appCurrent;
    
    @end
    
    @implementation NSLocale(AppCurrent)
    
    + (NSLocale *) appCurrent {
        NSString * prefered = [[[NSBundle mainBundle] preferredLocalizations] firstObject];
        if (prefered != nil) {
            return [[NSLocale alloc] initWithLocaleIdentifier:prefered];
        }
        else {
            return [NSLocale currentLocale];
        }
    }
    
    @end
    

    那么,这样称呼它:[NSLocale appCurrent]

    【讨论】:

    【解决方案2】:

    您可以尝试以下代码来获取应用程序首选语言。

    let appLang = Locale.preferredLanguages[0]
    

    【讨论】:

      【解决方案3】:

      我认为您正在尝试访问“Locale.current.languageCode”

      【讨论】:

        【解决方案4】:

        要检测设备语言,您可以使用:

        let locale = Locale.current.languageCode
        

        【讨论】:

          【解决方案5】:

          要获得设备语言

          let locale = NSLocale.current.languageCode
          

          获取应用语言

          let appLang = Locale.preferredLanguages[0]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-24
            • 1970-01-01
            • 2012-02-09
            • 2020-09-25
            • 1970-01-01
            • 2021-04-13
            • 1970-01-01
            • 2012-03-01
            相关资源
            最近更新 更多