Коли ви розробляєте 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, згадане dr 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-адреси, ви побачите, що ми можемо побудувати базу данихURLofSDK на 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: "")
}
}
Сподіваюся, це допомагає.