Wenn Sie ein SDK entwickeln. Sie benötigen eine zusätzliche Operation.
1) Erstellen Sie Localizable.strings wie gewohnt in YourLocalizeDemoSDK.
2) Erstellen Sie die gleichen Localizable.strings in YourLocalizeDemo.
3) Finden Sie Ihren Bundle-Pfad von 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))
hilft Ihnen, das Bundle in YourLocalizeDemoSDK zu finden. Wenn Sie Bundle.main
stattdessen verwenden, erhalten Sie einen falschen Wert (tatsächlich ist es dieselbe Zeichenfolge mit dem Schlüssel).
Aber wenn Sie die von Dr. OX erwähnte String-Erweiterung verwenden möchten . Sie müssen noch etwas tun. Die Ursprungserweiterung sieht so aus.
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
Wie wir wissen, entwickeln wir ein SDK, Bundle.main
erhalten das Bundle des YourLocalizeDemo-Bundles. Das wollen wir nicht. Wir benötigen das Bundle in YourLocalizeDemoSDK. Dies ist ein Trick, um es schnell zu finden.
Führen Sie den folgenden Code in einer NSObject-Instanz in YourLocalizeDemoSDK aus. Und Sie erhalten die URL von YourLocalizeDemoSDK.
let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL
Wenn Sie beide URLs drucken, werden Sie feststellen, dass wir eine bundleURLofSDK-Basis auf mainBundleURL erstellen können. In diesem Fall ist es:
let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main
Und die String-Erweiterung lautet:
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: "")
}
}
Ich hoffe es hilft.