本地化请求权限基于应用程序语言而非设备语言

时间:2019-07-18 14:17:21

标签: ios swift iphone localization

Localization在我的应用程序中工作正常。我想本地化权限对话框文本消息。更改设备语言后一切正常,但我想根据我的应用程序语言来更改消息。

我尝试了以下代码

import UIKit

class LocalizeHelper: NSObject {

    private var myBundle: Bundle? = nil

    static let shared: LocalizeHelper = {
        let instance = LocalizeHelper()
        return instance
    }()

    override init() {
        super.init()
        // use systems main bundle as default bundle
        myBundle = Bundle.main

    }

    func localizedString(forKey key: String) -> String {
        return myBundle!.localizedString(forKey: key, value: "", table: nil)
    }

    //  Converted with Swiftify v1.0.6331 - https://objectivec2swift.com/
    func setLanguage(_ lang: String) {
        // path to this languages bundle
        let path: String? = Bundle.main.path(forResource: lang, ofType: "lproj")
        if path == nil {
            // there is no bundle for that language
            // use main bundle instead
            myBundle = Bundle.main
        }
        else {
            // use this bundle as my bundle from now on:
            myBundle = Bundle(path: path!)
            // to be absolutely shure (this is probably unnecessary):
            if myBundle == nil {
                myBundle = Bundle.main
            }
        }
    }

    func getLanguage() -> String {
        print("\(String(describing: myBundle?.bundlePath.last))")
        //return myBundle!.bundlePath.last >> Error
        return myBundle!.bundlePath.lastCharacter!
    }
}

extension String {
    public var lastCharacter: String? {
        guard let aLast = self.last else {
            return nil
        }
        return String(aLast)
    }
}

enter image description here

我已经在StackOverflow中冲浪,但是没有找到任何解决方案。我们感谢任何帮助壳。

1 个答案:

答案 0 :(得分:0)

您最好的选择是将用户默认语言中的应用程序语言保存为字符串,然后从用户默认值中删除该应用程序语言时,将其解析为自定义应用程序语言枚举。如果您没有任何应用程序语言保存,则可以随时使用设备语言,但是在用户默认设置为nil的情况下,可以使用应用程序语言来替代或覆盖它。同样,最好将用户默认交互与您在视图控制器中访问的用户默认管理器进行包装。

因此建议的步骤是:

  • 创建userdefualts管理器
  • 定义语言枚举
  • 实现setLanguage func语言参数
  • 实现getLanguage func语言输出与设备语言或 以英语为后卫回报