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.preferredLocalizations
Bundle.main.localizations
all of them are returning "en" only in IntentExtensionTarget.
here is an example where I am using the code:
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.
}
}
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.
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"
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With