जब आप एक एसडीके विकसित कर रहे हैं। आपको कुछ अतिरिक्त ऑपरेशन की आवश्यकता है।
1) YourLocalizeDemoSDK में हमेशा की तरह Localizable.strings बनाएँ ।
2) YourLocalizeDemo में एक ही Localizable.strings बनाएँ।
3) YourLocalizeDemoSDK के अपने बंडल पथ को खोजें।
स्विफ्ट 4 :
// 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
इसके बजाय उपयोग करते हैं, तो आपको एक गलत मान मिलेगा (वास्तव में यह कुंजी के साथ समान स्ट्रिंग होगा)।
लेकिन अगर आप ड्रिक एक्सएक्सएक्स द्वारा उल्लिखित स्ट्रिंग एक्सटेंशन का उपयोग करना चाहते हैं । आपको कुछ और करने की जरूरत है। मूल विस्तार इस तरह दिखता है।
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
जैसा कि हम जानते हैं, हम एक एसडीके विकसित कर रहे हैं, Bundle.main
YourLocalizeDemo के बंडल का बंडल मिलेगा। यही हम नहीं चाहते। हमें YourLocalizeDemoSDK में बंडल की आवश्यकता है। यह जल्दी से खोजने की एक चाल है।
YourLocalizeDemoSDK में एक NSObject उदाहरण में नीचे दिए गए कोड को चलाएं। और आपको YourLocalizeDemoSDK का URL मिल जाएगा।
let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL
दोनों दो url का प्रिंट लें, आप पाएंगे कि हम 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: "")
}
}
आशा करता हूँ की ये काम करेगा।