gpt4 book ai didi

ios - 应用程序的本地化不会改变应用程序中使用的 cocoapods 的语言

转载 作者:行者123 更新时间:2023-11-29 05:51:51 26 4
gpt4 key购买 nike

我正在我的应用程序中进行本地化。当我更改语言时,它会在我的应用程序中的所有位置更新,除了我使用过的 Pod 中。如果我重新启动应用程序,pod 的语言就会更新。当我更改应用程序的语言时,有什么方法可以更改 Pod 的语言。

最佳答案

一旦用户在应用程序内更改其语言首选项,您就需要交换应用程序的 mainBundle

这个想法是有一个自定义 bundle 和扩展:

var bundleKey: UInt8 = 0

class AnyLanguageBundle: Bundle {

override func localizedString(forKey key: String,
value: String?,
table tableName: String?) -> String {

guard let path = objc_getAssociatedObject(self, &bundleKey) as? String,
let bundle = Bundle(path: path) else {
return super.localizedString(forKey: key, value: value, table: tableName)
}

return bundle.localizedString(forKey: key, value: value, table: tableName)
}
}

extension Bundle {

class func setLanguage(_ language: String) {

defer {
object_setClass(Bundle.main, AnyLanguageBundle.self)
}

objc_setAssociatedObject(Bundle.main, &bundleKey, Bundle.main.path(forResource: language, ofType: "lproj"), .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}

当您想要更新应用语言时:

func updateAppLanguageToIT() {
UserDefaults.standard.set("it", forKey: "AppleLanguages")
UserDefaults.standard.synchronize()

// Update the language by swaping bundle
Bundle.setLanguage("it")

// Done to reintantiate the storyboards instantly
let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
UIApplication.shared.keyWindow?.rootViewController = storyboard.instantiateInitialViewController()
}

一些关于如何实现这一点的引用已经在一些帖子/github页面中提供了,比如这两个:

关于ios - 应用程序的本地化不会改变应用程序中使用的 cocoapods 的语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55588175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com