Localization in Swift - Restrict app to one language even if the app has more languages

前端 未结 3 563
慢半拍i
慢半拍i 2020-12-18 09:02

I have developed an app in Swift 3.2 which is currently live with base language English. I have added String files for Arabic and French. But till the time everything in co

相关标签:
3条回答
  • 2020-12-18 09:55

    Added below code to AppDelegate in didFinishLaunchingWithOptions First line to force app left to right. Then in Edit Scheme - Added an Argument on Launch -AppleLanguages (Base). Working quite well for me to force user to English.

    UIView.appearance().semanticContentAttribute = .forceLeftToRight
        UserDefaults.standard.set(["Base"], forKey: "AppleLanguages")
        UserDefaults.standard.synchronize()
    

    0 讨论(0)
  • 2020-12-18 09:59

    Here's a method that do what you want. I don't think there's another way to do that in the code.

    // You can change 'Base' to 'en' if you don't have Base.lproj folder 
    func localizedString(_ key: String) -> String? {
        if let path = Bundle.main.path(forResource: "Base", ofType: ".lproj"),
            let baseBundle = Bundle(path: path) {
            return baseBundle.localizedString(forKey: key, value: nil, table: nil)
        }
        return nil
    }
    

    EDIT: I found another way to do it based on this answer.

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        UserDefaults.standard.set(["Base"], forKey: "AppleLanguages")
        UserDefaults.standard.synchronize()
        // Rest of your init code
    }
    

    EDIT 2:

    What you could do for the first launch of the app in the viewDidLoad of your initial ViewController:

        if let languageArray = UserDefaults.standard.object(forKey: "AppleLanguages") as? [String],
            languageArray.count >= 1,
            languageArray[0] != "Base" && languageArray.count == 1 {
            UserDefaults.standard.set(["Base"], forKey: "AppleLanguages")
            UserDefaults.standard.synchronize()
        } 
    
    0 讨论(0)
  • 2020-12-18 10:06

    Have you tried removing languages from the localization settings in the project file?

    This is based on the guide provided by apple: Enabling Base Internationalization

    I believe you would not have to delete anything. This would just disable the localization.

    0 讨论(0)
提交回复
热议问题