在开发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
改用,则会得到错误的值(实际上,它是与键相同的字符串)。
但是,如果要使用OX博士提到的String扩展名。您还需要做更多。原点扩展名看起来像这样。
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的基础上构建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: "")
}
}
希望能帮助到你。