首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地化运行时不更改

本地化运行时不更改
EN

Stack Overflow用户
提问于 2020-08-12 20:15:53
回答 2查看 401关注 0票数 0

我遵循了许多本地化教程中的步骤。

我添加了故事板本地化,添加了字符串文件。并在两个字符串文件以及故事板中创建vlue。

例如,如果我正在尝试English , french

然后在故事板中我们有:-> Main.Stroyboard

Main.Strings(French)

代码语言:javascript
复制
/* Class = "UILabel"; text = "Hamza Smith"; ObjectID = "2gA-Wx-5v2"; */
"2gA-Wx-5v2.text" = "Hamza Smith";

language.String中相同

Language.string(French)

代码语言:javascript
复制
"Hamza Smith" = "some thing";

然后在代码对更改语言按钮的动作:

代码语言:javascript
复制
 Bundle.setLanguage(lang: "Fn"). //FN for example i am adding 

我的代码:

代码语言:javascript
复制
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标签有:

代码语言:javascript
复制
 titleLabel.text = "Hamza Smith".localized()

现在点击我的保存按钮后,选择任何语言,它不会改变。我杀了这个应用程序然后又重新启动了。但它并没有改变。

任何帮助都会很好。

EN

回答 2

Stack Overflow用户

发布于 2020-08-13 08:08:58

由于.strings文件使用的是自定义名称,因此需要在NSLocalizedString方法中将其作为tableName提供。

代码语言:javascript
复制
extension String {
    func localized() -> String {
        return NSLocalizedString(self, tableName: "Language", bundle: Bundle.localizedBundle(), value: "", comment: "") // <- note the new parameter tableName
    }
}
票数 0
EN

Stack Overflow用户

发布于 2020-08-15 15:44:32

首先,我想问一下,您的本地化字符串中是否有"Hamza Smith“的键?

NSLocalizedString将键作为存在于本地化字符串中的第一个参数,例如,您可以创建如下内容:

代码语言:javascript
复制
extension String {
    
    public func localize(key: String) -> String {
        return NSLocalizedString(key, tableName: nil, bundle: Bundle.localizedBundle(), value: "", comment: "")
    }
  
}

而不是这样称呼它:

代码语言:javascript
复制
label.text = .localize(key: "<localized string key>")

或者,如果您想使用类似于您的实现,您需要这样称呼它:

代码语言:javascript
复制
label.text = "<localized string key>".localized()

编辑:

如果要更改为法语,则需要设置"fr“而不是"Fn”:)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63384131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档