เมื่อคุณพัฒนา SDK คุณต้องมีการดำเนินการพิเศษ
1) สร้างLocalizable.stringsตามปกติใน YourLocalizeDemoSDK
2) สร้างLocalizable.stringsเดียวกันใน YourLocalizeDemo
3) ค้นหาเส้นทาง Bundleของคุณ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))
ช่วยคุณค้นหาบันเดิลใน YourLocalizeDemoSDK หากคุณใช้Bundle.main
แทนคุณจะได้รับค่าที่ไม่ถูกต้อง (อันที่จริงมันจะเป็นสตริงเดียวกันกับคีย์)
แต่ถ้าคุณต้องการที่จะใช้นามสกุลสตริงดังกล่าวโดยดร OX คุณต้องทำอะไรมากกว่านี้ ส่วนขยายต้นฉบับมีลักษณะเช่นนี้
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
อย่างที่เรารู้เรากำลังพัฒนา SDK Bundle.main
จะได้รับมัดของ YourLocalizeDemo มัด นั่นไม่ใช่สิ่งที่เราต้องการ เราต้องการชุดข้อมูลใน YourLocalizeDemoSDK นี่เป็นเคล็ดลับในการค้นหาอย่างรวดเร็ว
เรียกใช้รหัสด้านล่างในอินสแตนซ์ NSObject ใน YourLocalizeDemoSDK และคุณจะได้รับ URL ของ YourLocalizeDemoSDK
let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL
พิมพ์ทั้งสอง url คุณจะพบว่าเราสามารถสร้าง bundleURLofSDK ฐานบน mainBundleURL ในกรณีนี้มันจะเป็น:
let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main
และนามสกุลของสตริงจะเป็น:
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: "")
}
}
หวังว่ามันจะช่วย