本地化多语言是啥?
在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"
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END