Lorsque vous développez un SDK. Vous avez besoin d'une opération supplémentaire.
1) créer des chaînes localisables comme d'habitude dans YourLocalizeDemoSDK.
2) créer les mêmes chaînes Localizable.strings chaînes YourLocalizeDemo.
3) Trouvez votre chemin de bundle de bundle de 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))
vous aide à trouver l'ensemble dans YourLocalizeDemoSDK. Si tu utilisesBundle.main
place, vous obtiendrez une valeur incorrecte (en fait, ce sera la même chaîne avec la clé).
Mais si vous souhaitez utiliser l'extension String mentionnée par dr OX . Vous devez en faire plus. L'extension d'origine ressemble à ceci.
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
Comme nous le savons, nous développons un SDK, Bundle.main
obtiendra le bundle du bundle de YourLocalizeDemo. Ce n'est pas ce que nous voulons. Nous avons besoin du bundle dans YourLocalizeDemoSDK. C'est une astuce pour le trouver rapidement.
Exécutez le code ci-dessous dans une instance NSObject dans YourLocalizeDemoSDK. Et vous obtiendrez l'URL de YourLocalizeDemoSDK.
let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL
Imprimez les deux URL, vous constaterez que nous pouvons construire la base bundleURLofSDK sur mainBundleURL. Dans ce cas, ce sera:
let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main
Et l'extension String sera:
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: "")
}
}
J'espère que ça aide.