Swift超简单国际化封装

使用Swift进行国际化封装,扩展String属性,使用超级简单。有不足之处请指教

public extension String{
    //MARK: 国际化
    /**
     demo
     String.language = .cn  //  此行在本地改变语言后赋值,默认显示中文
     print("扫描大师".local)  //打印出:万能扫描大师
     
     中文:"扫描大师" = "万能扫描大师";
     英文:"扫描大师" = "master scanner";
     */
    enum RFLocalizedType: String {
        case en = "en"   //英文  字符串需要对应本地的国际化文件名(.lproj)
        case cn = "zh-Hans"     //简体中文
        case hk = "zh-Hant"    //繁体中文
    }
    static var language : RFLocalizedType = currentLanguage()     //当前显示的语言,需全局存储维护,更改语言时值改变.默认为当前系统语言
    static let tableName: String = "Localizable"  //国际化文件名,如本地自定义名,修改此处
    var local : String {
        let bundle = Bundle(path: Bundle.main.path(forResource: String.language.rawValue, ofType: "lproj") ?? "")
        if let bundle = bundle {
            return NSLocalizedString(self, tableName: String.tableName, bundle:bundle , value: self, comment: "")
        }else{
            //未找到国际化内容
            return self
        }
        
    }
    //获取当前系统语言:如"zh-Hans-CN"  简体中文
    static var current : String {
        return Locale.preferredLanguages.first ?? ""
    }
    private static func currentLanguage() -> RFLocalizedType {
        if current.lowercased().contains("zh-hans") { //简体中文
            return .cn
        }else if current.lowercased().contains("zh-hans") {
            return .hk
        }else{
            return .en
        }
    }
}

你可能感兴趣的:(Swift超简单国际化封装)