Search code examples
iosswiftxcodelocalizationplist

Localized text not showing for Privacy alert in iOS


I am developing an iOS application which supports English and Arabic. User can change the application language from inside the app. When user changes the language I am setting it like ,

    //change app language
UserDefaults.standard.set([language], forKey: "AppleLanguages")
currentLanguage = language
UserDefaults.standard.synchronize()



 //current language updating

var currentLanguage : String{
        get{
                if let selectedLanguage = UserDefaults.standard.string(forKey: "selectedLanguage"){
                    return selectedLanguage
                }else{
                    let language = Locale.preferredLanguages[0]
                    if language.hasPrefix("ar"){
                        return SupportedLanguage.ar.rawValue
                    }else{
                        return SupportedLanguage.en.rawValue
                    }
                }
        }
        set{
            UserDefaults.standard.setValue(newValue, forKey: "selectedLanguage")
        }
    }

In this way, App is not exiting. Just reloading the root view controller

The issue I am facing is, when I change the application language like this, the privacy alerts like “..requesting permission for using Location”, “… would ,like to use Photo album” etc are not showing in the selected language. I have created InfoPlist.string files for English and Arabic and added like

NSCameraUsageDescription = ".... would like to access Camera"; NSLocationAlwaysAndWhenInUseUsageDescription = ".... wants to use your current location for better usability";

Still its not showing. Also I tried deleting, cleaning app, deleting derived data.

Any idea why its happening?


Solution

  • Changing AppleLanguages key needs app to be restarted so new localization applied , you can try to use NSLocalizedString with tableName or change current bundle you read from , but system localization won't be changed until app restarted