I am trying to load different configuration for the widgets depending on the app language, but when I use something like:
Locale.preferredLanguages
Bundle.main.pr
There is a simple solution:
Add AppGroups capability for both Parent App and the widget.
Create simple UserDefaults
let SharedGroupName = "group.pl.blueworld.fieldservice"
let PreferredLanguageKey = "PreferredLanguageKey"
extension UserDefaults {
static let shared = UserDefaults(suiteName: SharedGroupName)!
}
Save current language in shared UserDefaults
.
func applicationDidBecomeActive(_ application: UIApplication) {
UserDefaults.shared.setValue(Locale.preferredLanguages[0].prefix(2), forKey: PreferredLanguageKey)
}
Access value inside Widget View:
struct MyView: View {
var language: String {
return UserDefaults.shared.string(forKey: PreferredLanguageKey) ?? "en"
}
}
You get EN only, because localization in description and widget names is based on device language. If you would try to set device language to a different one, localization should work. As for now, it is not possible to use in-app language on widget description and name localization.