【问题标题】:Localize iOS 14 dynamic widget configuration本地化 iOS 14 动态小部件配置
【发布时间】:2021-01-18 08:44:03
【问题描述】:

我正在尝试根据应用语言为小部件加载不同的配置,但是当我使用类似的东西时:

Locale.preferredLanguages
Bundle.main.preferredLocalizations
Bundle.main.localizations

他们都只在 IntentExtensionTarget 中返回“en”。

这是我使用代码的示例:

extension IntentHandler: ReciterAndSurahIntentHandling {
    
    func provideSurahOptionsCollection(for intent: ReciterAndSurahIntent, with completion: @escaping (INObjectCollection<NSString>?, Error?) -> Void) {
        
        Locale.preferredLanguages
        Bundle.main.preferredLocalizations
        Bundle.main.localizations
        // All of them return "en" only, and I have multiple localization for the app.
    }
}

【问题讨论】:

    标签: swift swiftui ios14 widgetkit


    【解决方案1】:

    有一个简单的解决方案:

    1. 为父应用和小部件添加 AppGroups 功能。

    2. 创建简单的UserDefaults

       let SharedGroupName = "group.pl.blueworld.fieldservice"
       let PreferredLanguageKey = "PreferredLanguageKey"
       extension UserDefaults {
           static let shared = UserDefaults(suiteName: SharedGroupName)!
       }
      
    3. 将当前语言保存为共享UserDefaults。

       func applicationDidBecomeActive(_ application: UIApplication) {
           UserDefaults.shared.setValue(Locale.preferredLanguages[0].prefix(2), forKey: PreferredLanguageKey)
       }
      
    4. Widget View 内的访问值:

       struct MyView: View {
           var language: String {
               return UserDefaults.shared.string(forKey: PreferredLanguageKey) ?? "en"
           }
       }
      

    【讨论】:

    • 这有个缺点,如果应用打不开,语言就不会更新。
    • 除非应用程序至少打开一次,否则无法添加小部件,参见 Apple 文档
    • 我建议对 sceneDidBecomeActive 和 sceneWillEnterForeground 都执行第 3 步
    【解决方案2】:

    您只能获得 EN,因为描述和小部件名称中的本地化是基于设备语言的。如果您尝试将设备语言设置为其他语言,则本地化应该可以工作。就目前而言,无法在小部件描述和名称本地化上使用应用内语言。

    【讨论】:

    • 很遗憾,您有什么解决方法吗?
    • 我认为目前没有解决方法。一个月前我在做一个小部件,遇到了同样的问题,不幸的是,我找不到任何关于它的东西。希望将来他们会发布一些东西:)
    • @Jkrist 有官方声明吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2021-02-06
    • 2020-10-18
    • 2021-03-05
    • 2011-11-07
    • 2021-03-14
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多