SDKを開発しているとき。追加の操作が必要です。
1)YourLocalizeDemoSDKで通常どおりLocalizable.stringsを作成します。
2)YourLocalizeDemoに同じLocalizable.stringsを作成します。
3)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
すると、間違った値が取得されます(実際には、キーと同じ文字列になります)。
ただし、 drOXで説明されている文字列拡張子を使用する場合。もう少しやる必要があります。オリジン拡張子は次のようになります。
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
2つのURLの両方を印刷すると、mainBundleURLに基づいてbundleURLofSDKを構築できることがわかります。この場合、次のようになります。
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: "")
}
}
それが役に立てば幸い。