ios - 无法使用本地化设置语言
问题描述
我正在制作一个测试应用程序来实现本地化。在测试应用程序中,这就是我想要实现的......
当用户启动应用程序时,屏幕将显示一个带有文本的标签...“这是一个测试项目”和下面名为“更改”的按钮。现在,当我单击“更改”按钮时,标签应显示为法语..“c'est un projet test”,该按钮将被称为“更改”。
我有一个名为的类L102Language
,它将我的语言设置为当前语言。它是这样给出的..
import Foundation
import UIKit
// constants
let APPLE_LANGUAGE_KEY = "AppleLanguages"
/// L102Language
class L102Language {
/// get current Apple language
class func currentAppleLanguage() -> String{
let userdef = UserDefaults.standard
let langArray = userdef.object(forKey: APPLE_LANGUAGE_KEY) as! NSArray
let current = langArray.firstObject as! String
return current
}
/// set @lang to be the first in Applelanguages list
class func setAppleLAnguageTo(lang: String) {
let userdef = UserDefaults.standard
userdef.set([lang,currentAppleLanguage()], forKey: APPLE_LANGUAGE_KEY)
userdef.synchronize()
}
}
在视图控制器中,这是我编写的代码..
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var txtLabel: UILabel!
@IBOutlet weak var change: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func changeLanguage(_ sender: Any) {
if L102Language.currentAppleLanguage() == "en" {
L102Language.setAppleLAnguageTo(lang: "fr")
} else {
L102Language.setAppleLAnguageTo(lang: "en")
}
}
}
但是当我点击“更改”按钮时,什么也没有发生。文本只有英文。
编辑1:我的Main.strings
文件有这些......
/* Class = "UILabel"; text = "This is a test project"; ObjectID = "OQM-55-dEJ"; */
"OQM-55-dEJ.text" = "c'est un projet test";
/* Class = "UIButton"; normalTitle = "CHANGE"; ObjectID = "eMn-n8-na5"; */
"eMn-n8-na5.normalTitle" = "changement";
解决方案
要在项目中使用本地化,您可以使用以下方式!
将本地化添加到项目。项目 -> 本地化 -> 添加本地化语言,例如(英语/德语/印地语等)
添加字符串文件并从右侧面板应用本地化。
根据您的语言在 crated 文件(英语/德语/印地语等)中添加键和关联值
例如
"localizeText" = "English";
"localizeText" = "German";
将它应用到任何你想要的地方。例如
class ViewController: UIViewController { @IBOutlet weak var name: UILabel! @IBAction func showGermanText(_ sender: Any) { let val = name.text!.localized("de") name.text = val } @IBAction func showEnglishText(_ sender: Any) { let val = name.text!.localized("en") name.text = val } }
`
extension String {
func localized(_ lang:String) ->String {
let path = Bundle.main.path(forResource: lang, ofType: "lproj")
let bundle = Bundle(path: path!)
return NSLocalizedString("localizeText", tableName: "local", bundle: bundle!, value: "", comment: "")
}}
注意* 这
local
是您的本地化字符串文件名。
推荐阅读
- ios - GeoFire observeBlock 在 Swift 项目中只被调用一次
- dart - Flutter - android.os.ParcelableException:java.io.IOException:仅在内部请求,但空间不足
- python - 使用基本身份验证保护 Flask-SocketIO 通信
- hosting - 使用 Google Domains 托管 Firebase - 如何配置 CNAME
- python - Discord Bot 响应短语(Discord.py 重写)
- java - 无法使用 JavaMail 从电子邮件中获取密码
- c# - 是否可以在 Roslyn 中修改 SyntaxTree 并运行编辑后的代码?
- mysql - 将mysql datetime解析为golang时间
- java - elasticsearchrepository 在字段中保存空值
- python - 使用python解释结果