SDK를 개발할 때 추가 작업이 필요합니다.
1) YourLocalizeDemoSDK에서 평소와 같이 Localizable.string 을 만듭니다 .
2) YourLocalizeDemo 에서 동일한 Localizable.string 을 만듭니다 .
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
대신 사용 하면 잘못된 값을 얻습니다 (사실 키와 동일한 문자열이됩니다).
그러나 당신이 언급 문자열 확장 사용하려면 박사의 OX를 . 좀 더해야 해요 원점 확장은 다음과 같습니다.
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
아시다시피, 우리는 SDK를 개발 중이며 Bundle.main
YourLocalizeDemo 번들 번들을 얻게됩니다. 그것은 우리가 원하는 것이 아닙니다. YourLocalizeDemoSDK에 번들이 필요합니다. 이것은 빨리 찾는 요령입니다.
YourLocalizeDemoSDK의 NSObject 인스턴스에서 아래 코드를 실행하십시오. 그리고 YourLocalizeDemoSDK의 URL을 얻게됩니다.
let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL
두 URL을 모두 인쇄하면 mainBundleURL에 bundleURL ofSDK 기반을 빌드 할 수 있습니다. 이 경우 다음과 같습니다.
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: "")
}
}
도움이 되길 바랍니다.