Xibs won't change language until restart
Closed this issue · 1 comments
mohammadAlnajjar commented
I tried your method, the xibs won't load new language until restarting the app,
i suggest to load to put this block of code and call Bundle.localize() after UIView.localize()
fileprivate extension Bundle {
fileprivate static func localize() {
let orginalSelector = #selector(localizedString(forKey:value:table:))
let swizzledSelector = #selector(customLocaLizedString(forKey:value:table:))
let orginalMethod = class_getInstanceMethod(self, orginalSelector)
let swizzledMethod = class_getInstanceMethod(self, swizzledSelector)
let didAddMethod = class_addMethod(self, orginalSelector, method_getImplementation(swizzledMethod!), method_getTypeEncoding(swizzledMethod!))
if didAddMethod {
class_replaceMethod(self, swizzledSelector, method_getImplementation(orginalMethod!), method_getTypeEncoding(orginalMethod!))
} else {
method_exchangeImplementations(orginalMethod!, swizzledMethod!)
}
}
@objc private func customLocaLizedString(forKey key:String,value:String?,table:String?)->String{
if let bundle = Bundle.main.path(forResource: LanguageManager.shared.currentLang.rawValue, ofType: "lproj"),
let langBundle = Bundle(path: bundle){
return langBundle.customLocaLizedString(forKey: key, value: value, table: table)
}else {
return Bundle.main.customLocaLizedString(forKey: key, value: value, table: table)
}
}
}
Abedalkareem commented
Can you add this as a pull request please?
Thank you.