使用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
}
}
}