XCode项目原生开发有自带的可区分语言的功能体系,建议采用原生开发,此处利用类的继承来实现不同地区语言的显示是为了方便,而且在unity游戏开发中采用此法也挺灵活适用。
// 定义一个语言控制类
class LanguageController {
// 根据系统切换
static func CRL() -> CN? {
/*
print(Locale.current.language.languageCode)
print(Locale.current.region?.identifier)
print(Locale.current.identifier)
打印结果
简体中文
Optional(zh)
Optional("CN")
zh_CN
英文
Optional(en)
Optional("CN")
en_CN
香港
Optional(zh)
Optional("CN")
zh_HK@rg=cnzzzz
澳门
Optional(zh)
Optional("CN")
zh_MO@rg=cnzzzz
台湾和其他国家地区
Optional(zh)
Optional("CN")
zh-Hant_CN
*/
if let xxx = CRL_ {
// 判断是否已经获取过当前系统语言,而不是每次创建实例都进行判断。
// print("已获取过了")
}
else{
// print("未获取过")
let languageCode = Locale.current.language.languageCode
switch languageCode {
case "zh":
let identifier = Locale.current.identifier
if "zh_CN" == identifier {
// 大陆用简体
CRL_ = CN()
}
else {
// 其他用繁体
CRL_ = HK()
}
break
case "en":
CRL_ = EN()
break
default:
CRL_ = EN()
break
}
}
return CRL_
}
private static var CRL_:CN?
// 简体中文
public class CN {
public var txt:String = "简体中文"
}
// 繁体中文—香港
private class HK : CN {
override init() {
super.init() // 调用父类的初始化器
// 这里可以修改或基于父类的属性进行操作
self.txt = "繁體中文"
}
}
// 英文
private class EN : CN {
override init() {
super.init() // 调用父类的初始化器
// 这里可以修改或基于父类的属性进行操作
self.txt = "English"
}
}
}
调用方法
print(LanguageController.CRL()?.txt)