Internationalisation (i18n) en Swift : Guide complet pour iOS et macOS
L'internationalisation (abrégée i18n) est le processus de conception d'une application afin qu'elle puisse être adaptée à différentes langues et régions sans modification du code source. Pour les développeurs sur les plateformes Apple (iOS, macOS, watchOS, tvOS), Swift offre un ensemble d'outils puissant mais élégant. Dans cet article, nous allons détailler comment configurer l'i18n dans votre projet Swift en utilisant les mécanismes intégrés d'Apple.
Pourquoi l'i18n est-elle cruciale ?
Même si votre application est initialement créée dans une seule langue, l'internationalisation doit être intégrée dès la phase d'architecture. Cela permet de :
- Élargir l'audience : Les utilisateurs de différents pays préfèrent les applications dans leur langue maternelle.
- Simplifier la localisation : Une i18n correcte transforme l'ajout d'une nouvelle langue en une simple opération sur les fichiers.
- Éviter le codage en dur : Toutes les chaînes sont placées dans des ressources séparées, ce qui améliore la lisibilité et la maintenance du code.
Outil principal : NSLocalizedString
Le cœur de l'internationalisation en Swift est la macro NSLocalizedString. Elle recherche une chaîne dans les fichiers de localisation (.strings) et renvoie la version traduite. Si la traduction n'est pas trouvée, la clé (généralement la chaîne anglaise) est utilisée.
// Exemple d'utilisation en Swiftlet welcomeMessage = NSLocalizedString("welcome_message", comment: "Message d'accueil sur l'écran principal")label.text = welcomeMessageIl est recommandé de toujours spécifier comment — cela aide les traducteurs à comprendre le contexte.
Structure des fichiers de localisation
Dans Xcode, les langues sont ajoutées via Project Settings > Info > Localizations. Ensuite, des dossiers xx.lproj sont créés (par exemple, en.lproj, ru.lproj). À l'intérieur, on trouve :
- Localizable.strings — le fichier principal avec les paires "clé" = "valeur" ;
- InfoPlist.strings — pour la localisation du nom de l'application et des chaînes système ;
- Storyboard.strings — un fichier généré automatiquement pour les interfaces créées dans les storyboards.
Format de Localizable.strings
Le fichier a une syntaxe simple :
// Anglais (en.lproj/Localizable.strings)"welcome_message" = "Welcome to our app!";"login_button" = "Log In";
// Russe (ru.lproj/Localizable.strings)"welcome_message" = "Добро пожаловать в наше приложение!";"login_button" = "Войти";Important : Les chaînes se terminent par un point-virgule. L'encodage du fichier doit être UTF-8 ou UTF-16.
Formatage des chaînes avec paramètres
Il est souvent nécessaire d'insérer des données dynamiques dans une chaîne (nom d'utilisateur, nombre d'éléments). Pour cela, on utilise String(format:) :
// Dans Localizable.strings :"items_count" = "You have %d items.";"user_greeting" = "Hello, %@!";
// Dans le code Swift :let count = 5let itemsText = String(format: NSLocalizedString("items_count", comment: "Nombre d'articles"), count)
let userName = "Алексей"let greeting = String(format: NSLocalizedString("user_greeting", comment: "Salutation de l'utilisateur"), userName)Pour prendre en charge les formes plurielles (1 pomme, 2 pommes, 5 pommes), utilisez StringDict (fichiers .stringsdict).
Travailler avec XLIFF pour les traducteurs
Apple prend en charge le format XLIFF (XML Localisation Interchange File). C'est un standard industriel pour l'échange de traductions. Dans Xcode, vous pouvez exporter toutes les chaînes dans un fichier XLIFF, le donner à un traducteur, puis l'importer à nouveau.
// Commande dans le terminal pour l'export :xcodebuild -exportLocalizations -localizationPath ./translations -project YourProject.xcodeproj
// Import des traductions prêtes : Aussi dans la bibliothèque
SDK Firebase Android pour Kotlin : guide complet avec exemples
Travailler avec YAML en C# (.NET) : la bibliothèque YamlDotNet
Autorisation et authentification en PHP : guide complet avec exemples
Journalisation pour TypeScript : la bibliothèque Winston