我遵循了许多本地化教程中的步骤。
我添加了故事板本地化,添加了字符串文件。并在两个字符串文件以及故事板中创建vlue。
例如,如果我正在尝试English , french
然后在故事板中我们有:-> Main.Stroyboard
Main.Strings(French)
/* Class = "UILabel"; text = "Hamza Smith"; ObjectID = "2gA-Wx-5v2"; */
"2gA-Wx-5v2.text" = "Hamza Smith";在language.String中相同
Language.string(French)
"Hamza Smith" = "some thing";然后在代码对更改语言按钮的动作:
Bundle.setLanguage(lang: "Fn"). //FN for example i am adding 我的代码:
extension Bundle {
private static var bundle: Bundle!
public static func localizedBundle() -> Bundle! {
if bundle == nil {
var appLang = UserDefaults.standard.string(forKey: "app_lang") ?? "en"
if Bundle.main.path(forResource: appLang, ofType: "lproj") == nil {
appLang = "en"
}
let path = Bundle.main.path(forResource: appLang, ofType: "lproj")
bundle = Bundle(path: path!)
}
return bundle;
}
public static func setLanguage(lang: String) {
UserDefaults.standard.set(lang, forKey: "app_lang")
let path = Bundle.main.path(forResource: lang, ofType: "lproj")
bundle = Bundle(path: path!)
}
}
extension String {
func localized() -> String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.localizedBundle(), value: "", comment: "")
}
func localizeWithFormat(arguments: CVarArg...) -> String{
return String(format: self.localized(), arguments: arguments)
}
}我的iboutlet标签有:
titleLabel.text = "Hamza Smith".localized()现在点击我的保存按钮后,选择任何语言,它不会改变。我杀了这个应用程序然后又重新启动了。但它并没有改变。
任何帮助都会很好。
发布于 2020-08-13 08:08:58
由于.strings文件使用的是自定义名称,因此需要在NSLocalizedString方法中将其作为tableName提供。
extension String {
func localized() -> String {
return NSLocalizedString(self, tableName: "Language", bundle: Bundle.localizedBundle(), value: "", comment: "") // <- note the new parameter tableName
}
}发布于 2020-08-15 15:44:32
首先,我想问一下,您的本地化字符串中是否有"Hamza Smith“的键?
NSLocalizedString将键作为存在于本地化字符串中的第一个参数,例如,您可以创建如下内容:
extension String {
public func localize(key: String) -> String {
return NSLocalizedString(key, tableName: nil, bundle: Bundle.localizedBundle(), value: "", comment: "")
}
}而不是这样称呼它:
label.text = .localize(key: "<localized string key>")或者,如果您想使用类似于您的实现,您需要这样称呼它:
label.text = "<localized string key>".localized()编辑:
如果要更改为法语,则需要设置"fr“而不是"Fn”:)
https://stackoverflow.com/questions/63384131
复制相似问题