Quando você está desenvolvendo um SDK. Você precisa de alguma operação extra.
1) crie Localizable.strings como de costume no YourLocalizeDemoSDK.
2) crie as mesmas Localizable.strings em YourLocalizeDemo.
3) encontre o caminho do pacote do 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))
ajuda a encontrar o pacote configurável no YourLocalizeDemoSDK. Se você usar Bundle.main
, em vez disso, obterá um valor errado (na verdade, será a mesma string que a chave).
Mas se você quiser usar a extensão String mencionada pelo dr OX . Você precisa fazer um pouco mais. A extensão de origem se parece com isso.
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
Como sabemos, estamos desenvolvendo um SDK, Bundle.main
que receberá o pacote do pacote YourLocalizeDemo. Não é isso que queremos. Precisamos do pacote em YourLocalizeDemoSDK. Este é um truque para encontrá-lo rapidamente.
Execute o código abaixo em uma instância NSObject em YourLocalizeDemoSDK. E você receberá o URL do YourLocalizeDemoSDK.
let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL
Imprima os dois URLs, você descobrirá que podemos criar a base bundleURLofSDK em mainBundleURL. Nesse caso, será:
let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main
E a extensão String será:
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: "")
}
}
Espero que ajude.