Nous pouvons localiser une image dans le File Inspector
en utilisant Localize...
comme ça:
Ensuite, nous pouvons obtenir ceci:
Mais maintenant, j'utilise Images.xcassets pour gérer mes images dans mon projet iOS, comment dois-je localiser ces images dans Images.xcassets?
Bien qu'il n'y ait (apparemment) actuellement aucun moyen de localiser explicitement le fichier xcassets directement, vous pourriez localiser le nom de l'actif à extraire à l'aide de votre fichier Localizable.strings. Par exemple, supposons que vous ayez un logo graphique pour le menu principal d'un jeu qui doit être localisé. Vous pouvez mettre les traitements de logo localisés dans le fichier d'actifs avec des noms différents, ajouter les noms à votre fichier Localizable.strings, puis récupérer l'image appropriée avec du code comme celui-ci:
UIImage *img = [UIImage imageNamed:NSLocalizedString(@"MAIN_MENU_IMAGE", nil)];
Lorsque Apple vous donne des citrons, faites de la limonade, ou dans ce cas, lemonade_en, lemonade_es ou tout ce qui convient à vos besoins.
Tout d'abord, je crée une entrée pour chaque langue souhaitée dans mon fichier d'actifs comme suit:
Ensuite, vous devrez obtenir un code de langue pour l'appareil. La chose importante à retenir ici est que l'utilisateur peut avoir une langue non prise en charge, donc si c'est le cas, retournez votre langue par défaut (j'utilise l'anglais).
L'extension suivante de UIApplication
gérera tout cela pour vous:
extension UIApplication {
var languageCode: String {
let supportedLanguageCodes = ["en", "es", "fr"]
let languageCode = Locale.current.languageCode ?? "en"
return supportedLanguageCodes.contains(languageCode) ? languageCode : "en"
}
}
Cette extension effectue les opérations suivantes:
Maintenant, nous combinons les deux pour obtenir la bonne image:
let languageCode = UIApplication.shared.languageCode
let image = UIImage(named: "access_\(languageCode)")
Après quelques recherches sur Internet, je pense que cette fonctionnalité n'est pas fournie par xcassets pour le moment. Par conséquent, n'utilisez pas xcassets pour gérer vos images de localisation.
J'ai trouvé un autre moyen:
let languageCode = UIApplication.shared.languageCode let image = UIImage(named: "\(languageCode)\assetname")
Pour le moment, je retire les images qui nécessitent une localisation à partir d'Images.xcassets et les place dans le dossier de projet standard. Je laisse les images non localisées dans les .xcassets. J'utilise votre méthode pour les images qui doivent être localisées.