Bir SDK geliştirirken. Ekstra bir operasyona ihtiyacınız var.
1) YourLocalizeDemoSDK içinde her zamanki gibi Localizable.strings oluşturun .
2) YourLocalizeDemo'da aynı Localizable.strings dosyasını oluşturun.
3) YourLocalizeDemoSDK Paket Yolunuzu bulun.
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))
paketinizi YourLocalizeDemoSDK içinde bulmanıza yardımcı olur. Eğer kullanırsanız Bundle.main
yerine, yanlış bir değer (aslında anahtarla aynı dize olacaktır) alacak.
Ancak dr OX tarafından belirtilen String uzantısını kullanmak istiyorsanız . Biraz daha yapmalısın. Orijin uzantısı buna benzer.
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
Bildiğimiz gibi, bir SDK geliştiriyoruz Bundle.main
, YourLocalizeDemo'nun paketini alacaksınız. İstediğimiz bu değil. Paketinize YourLocalizeDemoSDK içinde ihtiyacımız var. Bu onu hızlı bir şekilde bulmak için bir numara.
Aşağıdaki kodu YourLocalizeDemoSDK bir NSObject örneğinde çalıştırın. Ve YourLocalizeDemoSDK URL'sini alacaksınız.
let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL
Her iki url'yi de yazdırın, mainBundleURL üzerinde bundleURLofSDK tabanı oluşturabileceğimizi göreceksiniz. Bu durumda, olacak:
let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main
Ve String uzantısı:
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: "")
}
}
Umarım yardımcı olur.