在开发 SDK 时。你需要一些额外的操作。
1)像往常一样在 YourLocalizeDemoSDK 中创建Localizable.strings 。
2)在 YourLocalizeDemo 中创建相同的Localizable.strings 。
3) 找到 YourLocalizeDemoSDK 的Bundle Path。
斯威夫特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 博士提到的 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
字符串扩展名将是:
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: "")
}
}
希望能帮助到你。