Mon application est supposée prendre en charge le changement de langue lors de l'exécution. J'utilise SwiftGen 5.0. ViewControllers s'abonner à la notification de changement de langue et j'ai vérifié que la fonction de localisation se déclenche correctement. Ma fonction overriden tr
ressemble à ceci:Modification de la langue lors de l'exécution à l'aide de SwiftGen
fileprivate static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String {
guard let bundle = LanguageManager.shared.bundle else {
fatalError("Cannot find bundle!")
}
let format = NSLocalizedString(key, tableName: table, bundle: bundle, comment: "")
let locale = Locale(identifier: LanguageManager.shared.currentLanguageKey!)
return String(format: format, locale: locale, arguments: args)
}
Le bundle
est défini comme ceci:
if let path = Bundle.main.path(forResource: currentLanguageKey, ofType: "lproj") {
bundle = Bundle(path: path)
}
Cependant, la fonction retourne tr
la plupart des chaînes de langue précédentes. Une seule de toutes les étiquettes actuellement en mémoire est actualisée. Définition d'un point d'arrêt dans la fonction et l'impression bundle
retours
NSBundle </var/containers/Bundle/Application/ED5A6C7D-1807-4319-8817-45E693BC45E2/MyApp.app/en_US.lproj> (not yet loaded)
qui est la nouvelle langue correcte. Une fois l'application redémarrée, la langue est correctement définie. Est-ce que je fais quelque chose de mal?