Локализация приложения не меняет язык cocoapods, используемых в приложении

#ios #swift #localization #cocoapods

#iOS #swift #локализация #cocoapods

Вопрос:

Я делаю локализацию в своем приложении. Когда я меняю язык, он обновляется везде в моем приложении, за исключением модулей, которые я использовал. Если я перезапущу приложение, язык модуля будет обновлен. Есть ли какой-либо способ изменить язык модулей, когда я меняю язык приложения.

Ответ №1:

Вам нужно будет поменять mainBundle местами ваше приложение, как только пользователь изменит свои языковые предпочтения внутри приложения.

Идея состоит в том, чтобы иметь пользовательский пакет и расширение:

 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, amp;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, amp;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()
}
  

Несколько ссылок о том, как этого добиться, уже доступны на некоторых страницах posts / github, подобных этим двум:

Комментарии:

1. Я делаю то же самое, меняя основной пакет. Язык моего приложения меняется без перезапуска. Проблема с модулями, они не обновляются, пока я не перезапущу свое приложение.