我正在尝试根据应用程序语言为窗口小部件加载不同的配置,但是当我使用类似的内容时:
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.
}
}
答案 0 :(得分:3)
有一个简单的解决方案:
为父应用程序和小部件添加 AppGroups 功能。
创建简单的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"
}
}
答案 1 :(得分:1)
您只会得到EN,因为描述和窗口小部件名称中的本地化基于设备语言。如果您尝试将设备语言设置为另一种语言,则应该进行本地化。到目前为止,无法在小部件描述和名称本地化中使用应用内语言。