本地化多言语是啥?
在App项目中,通常开发者只是会支撑一种语音。比如中国大陆区的开发者,仅支撑汉语版。多言语的好处能够帮助运营适配各个国家的App名称,以及内容方便App进行出海前的准备工作。
咋装备呢?
1.增加装备
项目装备 -> “Info” -> “Localizations”区域下,能够看到工程默许只支撑英文,我们能够再增加中文言语。实际依据本身需求,进行增加。
2.点击Finsh增加装备
3.增加Localizable装备
在工程中,右键增加文件(New File…),挑选Resource下的Strings File文件类型,文件名界说为“Localizable.strings”
Localizable
姓名必定不要瞎起,否则无法正常运用!
4.创立需求的言语类型
5.分别在英文和中文资源下,输入如下键值对
;
必定不能忘记了!
//中文资源里
"Welcome" = "欢迎你好";
//英文资源里
"Welcome" = "Welcome to Hello";
切换言语的话,咋装备呢?
1.创立一个单例类进行管理
import UIKit
enum LanguageType {
case chinese,english,auto
}
class LocalizableManager: NSObject {
static func localValue(_ str:String) -> String {
LocalizableManager.shared.localValue(str: str)
}
static func setLanguage(_ type:LanguageType){
LocalizableManager.shared.setLanguage(type)
}
//单例
static let shared = LocalizableManager()
private override init() { }
var bundle:Bundle = Bundle.main
private func localValue(str:String) -> String{
//table参数值传nil也是能够的,传nil体系就会默许为Localizable
bundle.localizedString(forKey: str, value: nil, table: "Localizable")
}
/// 获取体系言语办法-->能够依据本身事务场景进行处理
private func getCurrentLanguage() -> String {
let preferredLang = NSLocale.preferredLanguages.first! as NSString
switch String(describing: preferredLang) {
case "en-US", "en-CN":
return "en"//英文
case "zh-Hans-US","zh-Hans-CN","zh-Hant-CN","zh-TW","zh-HK","zh-Hans":
return "cn"//中文
default:
return "en"
}
}
private func setLanguage(_ type:LanguageType){
var typeStr = ""
switch type {
case .chinese:
typeStr = "zh-Hans"
UserDefaults.standard.setValue("zh-Hans", forKey: "language")
case .english:
typeStr = "en"
UserDefaults.standard.setValue("en", forKey: "language")
default:
break
}
//回来项目中 en.lproj 文件的途径
let path = Bundle.main.path(forResource: typeStr, ofType: "lproj")
//用这个途径生成新的bundle
bundle = Bundle(path: path!)!
if type == .auto {
//和体系言语共同
bundle = Bundle.main
UserDefaults.standard.removeObject(forKey: "language")
}
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "languageChanged"), object: nil)
}
}
2.在AppDelegate,获取设置的言语
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
if let languageType = UserDefaults.standard.value(forKey: "language"){
print(languageType)
let type = languageType as! String
switch type {
case "en":
LocalizableManager.setLanguage(.english)
case "zh-Hans":
LocalizableManager.setLanguage(.chinese)
default:
break
}
}
return true
}
3.运用示例
增加切换的监听事情
NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "languageChanged"), object: nil, queue: nil) { (notification) in
self.setUpdateUI()
}
func setUpdateUI(){
//取值
languageLabel.text = LocalizableManager.localValue("auto")
}
4.项目装备中切换语音
App姓名,怎么装备呢?
同理,还是需求创立一个 .String
的文件。姓名命名为 InfoPlist.strings
千万不要改成其他的姓名否则无效!
//中文装备:
"CFBundleDisplayName" = "姓名"
//英文文装备:
"CFBundleDisplayName" = "Name"