Swift 本地化iOS 14动态小部件配置
我正试图根据应用程序语言为小部件加载不同的配置,但当我使用类似以下内容时:Swift 本地化iOS 14动态小部件配置,swift,swiftui,ios14,widgetkit,Swift,Swiftui,Ios14,Widgetkit,我正试图根据应用程序语言为小部件加载不同的配置,但当我使用类似以下内容时: Locale.preferredLanguages Bundle.main.preferredLocalizations Bundle.main.localizations 它们都只在IntentExtensionTarget中返回“en” 下面是我使用代码的示例: extension IntentHandler: ReciterAndSurahIntentHandling { func provi
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.
}
}
extension IntentHandler:readersandurahintenthandling{
func提供UradeShoptionsCollection(用于意图:背诵者和UraHintent,完成:@escaping(INObjectCollection?,Error?)->Void){
Locale.preferredLanguages
Bundle.main.preferredLocalizations
Bundle.main.localizations
//它们都只返回“en”,我有多个应用程序本地化。
}
}
因为描述和小部件名称中的本地化是基于设备语言的,所以只能使用EN。如果您试图将设备语言设置为其他语言,本地化应该可以工作。目前,不可能在小部件描述和名称本地化上使用应用程序内语言。有一个简单的解决方案:
UserDefaults
let SharedGroupName = "group.pl.blueworld.fieldservice"
let PreferredLanguageKey = "PreferredLanguageKey"
extension UserDefaults {
static let shared = UserDefaults(suiteName: SharedGroupName)!
}
UserDefaults
中
func applicationDidBecomeActive(_ application: UIApplication) {
UserDefaults.shared.setValue(Locale.preferredLanguages[0].prefix(2), forKey: PreferredLanguageKey)
}
struct MyView: View {
var language: String {
return UserDefaults.shared.string(forKey: PreferredLanguageKey) ?? "en"
}
}
这很不幸,你对此有什么解决办法吗?我认为目前还没有解决办法。一个月前我在做一个小部件,有同样的问题,不幸的是,我找不到任何关于它的东西。希望将来他们会发布一些东西:)@Jkrist有任何官方声明吗?这有一个缺点,如果应用程序wan没有打开,语言将不会得到更新。如果应用程序没有打开,则无法添加小部件。至少在cfr Apple docsI建议对ScenedDBecomeactive和sceneWillEnterForeground执行步骤3时,应用程序将被打开