localizable.strings !!!!捆绑(路径)尚未加载

Posted

技术标签:

【中文标题】localizable.strings !!!!捆绑(路径)尚未加载【英文标题】:localizable.strings !!!! Bundle(path) not yet loaded 【发布时间】:2017-04-10 03:28:48 【问题描述】:

当我在做localizable时,Bundle只是还没有加载,路径应该是正确的,因为当我打印(fm.fileExists(atPath:path!))时,它返回我真的

这里是函数 initUserLanguage()

string = string.replacingOccurrences(of: "-CN", with: "")
                   .replacingOccurrences(of: "-US", with: "")
                   .replacingOccurrences(of: "-SG", with: "")

    var path = Bundle.main.path(forResource: string, ofType: "lproj")
    print("path 1 = \(String(describing: path))")
    if path == nil 
        def.set("en", forKey: UserLanguage)
        def.synchronize()
        path = Bundle.main.path(forResource: "en", ofType: "lproj")
        print("path 2 = \(String(describing: path))")
    
    bundle = Bundle(path: path!)
    print(bundle!)
    let fm = FileManager()
    print(fm.fileExists(atPath: path!))

这是日志

// ==== 1-1 - 没有改变系统语言(中文),路径存在,Bundle(路径)只是还没有加载 字符串 -> zh-Hans-SG

#####用户语言! -> zh-Hans-SG = zh-Hans-SG

LanguageHelper - 是客人 LanguageHelper - loadData_Language - zh-Hans //当系统语言为中文时,我发送到服务器我需要中文API 路径 1 = 可选(“/var/containers/Bundle/Application/0142208A-EC53-46C1-B6D8-276A5C5D87F7/DiningButlerSG.app/zh-Hans.lproj”) bundle = 可选(NSBundle(尚未加载)) 真的

// ==== 1-2 - 更改系统语言(中文转英文)后,路径存在,Bundle(路径)只是尚未加载 字符串 -> zh-Hans-SG

#####用户语言! -> zh-Hans-SG = en-SG

LanguageHelper - 是客人 LanguageHelper - loadData_Language - en //当系统语言为英语时,我发送到服务器,我需要英语 API 路径 1 = 可选(“/var/containers/Bundle/Application/F185F1E3-0F34-4208-8D8A-F9362978BD9C/DiningButlerSG.app/en.lproj”) bundle = 可选(NSBundle(尚未加载)) 真的

// ==== 2 - 更改系统语言(英文转日文)后,路径不存在,Bundle(路径)也未加载 字符串 -> zh-SG

#####用户语言! -> en-SG = ja-SG

LanguageHelper - 是客人 LanguageHelper - loadData_Language - en ////当系统语言是日语(任何其他)时,我发送到服务器,我需要英语 API 路径 1 = 无 路径 2 = 可选(“/var/containers/Bundle/Application/DDFACBDA-7AFA-4DD6-828E-E69F56B624BE/DiningButlerSG.app/en.lproj”) bundle = 可选(NSBundle(尚未加载)) 真的

但是,Localizable.strings 和storyboard 可以在中英文切换系统语言时工作(但从日志来看,实际上路径还没有加载)

我之前删除并删除了可本地化的文件,我担心路径可能会混乱,所以我清除所有并重新创建 localizable.strings,因此有什么问题吗?

【问题讨论】:

【参考方案1】:

您无法在代码更改语言时加载情节提要。如果你想使用两个不同语言的故事板,你必须重新启动你的代码。但是您可以使用相同的故事板直接从语言更改代码中使用 Localizable 字符串。意味着您可以通过连接每个元素的插座来使用您的 Langauge_Helper 类更改文本。您将始终收到错误消息(尚未加载),但它适用于 localizable.strings 但您无法在不重新启动应用程序的情况下加载情节提要。

希望对你有帮助..

【讨论】:

是的,实际上我的意思是当我将系统语言更改为其他语言时,而不是三种语言(en、th、zh-Hans),我希望我的应用程序可以使用默认的 Base.lproj 或 en.lproj ,有什么办法可以做到吗? 如果您在更改语言时更新 NSUserDefaults 中的 appleLanguages,那么如果您的应用程序不查找系统语言。它适用于应用程序的 NSUserDefaults 中设置的数组语言。因此,在这种情况下,系统语言无关紧要。只要确保项目中有 Locazible.string(Base) 即可。并选择你的方案来编辑​​方案,在选项中将语言设置为系统语言。

以上是关于localizable.strings !!!!捆绑(路径)尚未加载的主要内容,如果未能解决你的问题,请参考以下文章

将 localizable.strings 导入 XIB

将 localizable.strings 提交到存储库

Localizable.strings 中的多行字符串

如何使用存储在 CocoaTouch 框架中的 Localizable.strings?

应用程序扩展是不是应该有自己的 Localizable.strings?

iOS - 将 NSDictionary 写入 Localizable.strings