Podczas opracowywania zestawu SDK. Potrzebujesz dodatkowej operacji.
1) Utwórz Localizable.strings jak zwykle w YourLocalizeDemoSDK.
2) utwórz te same Localizable.strings w YourLocalizeDemo.
3) znajdź ścieżkę pakietu 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))
pomaga znaleźć pakiet w YourLocalizeDemoSDK. Jeśli użyjesz Bundle.main
zamiast tego, otrzymasz niewłaściwą wartość (w rzeczywistości będzie to ten sam ciąg z kluczem).
Ale jeśli chcesz użyć rozszerzenia String wspomnianego przez dr OX . Musisz zrobić coś więcej. Rozszerzenie pochodzenia wygląda następująco.
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
Jak wiemy, opracowujemy pakiet SDK, Bundle.main
otrzymamy pakiet pakietu YourLocalizeDemo. Nie tego chcemy. Potrzebujemy pakietu w YourLocalizeDemoSDK. Jest to sztuczka, aby szybko ją znaleźć.
Uruchom poniższy kod w instancji NSObject w YourLocalizeDemoSDK. Otrzymasz adres URL YourLocalizeDemoSDK.
let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL
Wydrukuj oba dwa adresy URL, a przekonasz się, że możemy zbudować pakiet bundleURLofSDK na mainBundleURL. W takim przypadku będzie to:
let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main
A rozszerzenie String będzie:
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: "")
}
}
Mam nadzieję, że to pomoże.