当你在开发SDK时。你需要一些额外的操作。
1)创建Localizable。字符串通常在YourLocalizeDemoSDK。
2)创建相同的Localizable。字符串在YourLocalizeDemo。
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。如果你使用Bundle。相反,在Main中,您将得到一个错误的值(实际上它将是与键相同的字符串)。
但是如果你想使用OX博士提到的String扩展,你需要做更多的事情。原点扩展是这样的。
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
正如我们所知,我们正在开发一个SDK, Bundle。main将获得YourLocalizeDemo的bundle。这不是我们想要的。我们需要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
而String扩展名将是:
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: "")
}
}
希望能有所帮助。