Ketika Anda sedang mengembangkan SDK. Anda perlu beberapa operasi tambahan.
1) buat Localizable.strings seperti biasa di YourLocalizeDemoSDK.
2) buat Localizable.strings yang sama di YourLocalizeDemo.
3) temukan Bundle Path Anda dari 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))
membantu Anda menemukan bundel di YourLocalizeDemoSDK. Jika Anda menggunakan Bundle.main
sebagai gantinya, Anda akan mendapatkan nilai yang salah (sebenarnya string itu akan sama dengan kunci).
Tetapi jika Anda ingin menggunakan ekstensi String yang disebutkan oleh dr OX . Anda perlu melakukan lebih banyak lagi. Ekstensi asal terlihat seperti ini.
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
Seperti yang kita ketahui, kami sedang mengembangkan SDK, Bundle.main
akan mendapatkan bundel bundel YourLocalizeDemo. Bukan itu yang kita inginkan. Kami membutuhkan bundel di YourLocalizeDemoSDK. Ini adalah trik untuk menemukannya dengan cepat.
Jalankan kode di bawah ini dalam instance NSObject di YourLocalizeDemoSDK. Dan Anda akan mendapatkan URL YourLocalizeDemoSDK.
let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL
Cetak kedua url, Anda akan menemukan bahwa kita dapat membangun bundleURLofSDK berdasarkan mainBundleURL. Dalam hal ini, itu akan menjadi:
let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main
Dan ekstensi String akan menjadi:
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: "")
}
}
Semoga ini bisa membantu.