Когда вы разрабатываете SDK. Вам нужна дополнительная операция.
1) создайте Localizable.strings как обычно в YourLocalizeDemoSDK.
2) создайте те же Localizable.strings в 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.main
вместо этого, вы получите неправильное значение (на самом деле это будет та же строка с ключом).
Но если вы хотите использовать расширение String, упомянутое доктором OX . Вам нужно сделать еще немного. Исходное расширение выглядит следующим образом.
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
Как мы знаем, мы разрабатываем SDK, Bundle.main
получим комплект поставки YourLocalizeDemo. Это не то, что мы хотим. Нам нужен пакет в YourLocalizeDemoSDK. Это трюк, чтобы быстро его найти.
Запустите приведенный ниже код в экземпляре NSObject в YourLocalizeDemoSDK. И вы получите URL-адрес YourLocalizeDemoSDK.
let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL
Распечатав оба этих URL, вы обнаружите, что мы можем построить базу bundleURLofSDK на mainBundleURL. В этом случае это будет:
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: "")
}
}
Надеюсь, поможет.