Quando si sviluppa un SDK. Hai bisogno di qualche operazione extra.
1) creare Localizable.strings come al solito in YourLocalizeDemoSDK.
2) creare gli stessi Localizable.strings in YourLocalizeDemo.
3) trova il tuo percorso bundle di YourLocalizeDemoSDK.
Swift4 :
// if you use NSLocalizeString in NSObject, you can use it like this
let value = NSLocalizedString("key", tableName: nil, bundle: Bundle(for: type(of: self)), value: "", comment: "")
Bundle(for: type(of: self))
ti aiuta a trovare il pacchetto in YourLocalizeDemoSDK. Se usiBundle.main
invece, si otterrà un valore errato (in realtà sarà la stessa stringa con la chiave).
Ma se vuoi usare l'estensione String menzionata dal dr OX . Devi fare ancora un po '. L'estensione dell'origine è simile a questa.
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
Come sappiamo, stiamo sviluppando un SDK, Bundle.main
otterremo il pacchetto del pacchetto YourLocalizeDemo. Non è quello che vogliamo. Abbiamo bisogno del pacchetto in YourLocalizeDemoSDK. Questo è un trucco per trovarlo rapidamente.
Esegui il codice seguente in un'istanza NSObject in YourLocalizeDemoSDK. E otterrai l'URL di YourLocalizeDemoSDK.
let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL
Stampa entrambi i due URL, scoprirai che possiamo costruire bundleURLofSDK base su mainBundleURL. In questo caso, sarà:
let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main
E l'estensione String sarà:
extension String {
var localized: String {
let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main
return NSLocalizedString(self, tableName: nil, bundle: bundle, value: "", comment: "")
}
}
Spero che sia d'aiuto.