Comment localiser votre application iOS : guide d'internationalisation SwiftUI
Préparez votre application Xcode, traduisez .xcstrings avec l'IA, puis téléversez des captures d'écran pour que PTC (Private Translation Cloud) révise l'application iOS rendue dans chaque langue. Ce guide détaille l'ensemble du flux de travail utilisant SwiftUI et les String Catalogs d'Xcode 15+, la méthode moderne recommandée par Apple. Pour une vue d'ensemble du service multiplateforme couvrant à la fois iOS et Android, consultez la page traduire des applications iOS et Android avec l'IA.
Partie 1 : Comment fonctionne la localisation iOS
La localisation iOS est le processus d'adaptation du texte, du formatage et des assets de votre application pour prendre en charge plusieurs langues et régions. Avec les String Catalogs introduits dans Xcode 15, le flux de travail est considérablement plus simple que l'ancienne approche .strings / .stringsdict.
Internationalisation et localisation
Il s'agit de deux étapes distinctes, et elles doivent se dérouler dans cet ordre :
- L'internationalisation (i18n) est le travail technique préparatoire. Vous structurez votre code de manière à ce que le texte, les images et le formatage puissent varier selon la locale sans modification du code. À faire une seule fois, idéalement avant votre première version.
- La localisation (l10n) est le travail continu qui suit. Rédiger les traductions, ajuster les mises en page et fournir des assets spécifiques à la locale pour chaque nouvelle langue.
L'erreur la plus courante est de traiter la localisation comme une tâche post-lancement, pour finalement découvrir que la base de code n'est pas prête. Revenir en arrière pour corriger des chaînes en dur, des mises en page à direction fixe et des formateurs non adaptés à la locale dans une application existante prend beaucoup plus de temps que de développer en gardant la localisation à l'esprit dès le départ.
Comment Xcode 15+ utilise Localizable.xcstrings comme source de vérité unique
Le modèle de localisation d'Apple dans Xcode 15+ est centré sur un seul fichier par target : Localizable.xcstrings. Ce fichier est un String Catalog au format JSON qui contient votre langue source ainsi que chaque traduction, y compris les variations plurielles, les variations spécifiques aux appareils et les substitutions.
Xcode extrait automatiquement les chaînes localisables de votre code SwiftUI (tout Text("..."), Label("...", systemImage:), Button("..."), et toute interpolation de chaîne utilisant LocalizedStringKey). L'exécution du build de votre application remplit Localizable.xcstrings avec chaque chaîne source extraite.
Apple prend en charge plusieurs formats. .strings (clé-valeur hérité), .stringsdict (pluriels hérités) et .xcstrings (moderne). Les nouveaux projets doivent commencer avec .xcstrings. Les projets existants basés sur .strings peuvent migrer via File > New > File > String Catalog et l'option d'importation d'Xcode. La documentation officielle de localisation d'Apple couvre tout le contexte.
Partie 2 : Configurer votre projet Xcode pour la localisation
Étape 1 : Activer la localisation. Ouvrez votre projet dans Xcode et sélectionnez le fichier de projet dans le Navigator. Sous l'onglet Info, faites défiler jusqu'à Localizations. L'anglais y figure déjà comme langue de base. Cliquez sur + pour ajouter chaque langue cible (espagnol, français, arabe, etc.).
Étape 2 : Créer un String Catalog. Faites un clic droit sur votre projet et sélectionnez New File from Template. Cherchez String Catalog et ajoutez-le. Conservez le nom par défaut Localizable.xcstrings. Exécutez le build du projet une fois avec Cmd+B. Xcode analyse votre code, trouve chaque chaîne localisable et remplit le catalogue automatiquement.
Étape 3 : Marquer les chaînes pour la localisation. Dans SwiftUI, toute chaîne littérale passée à Text(_:), Label, aux libellés d'action Button, aux titres de navigation, etc., est automatiquement LocalizedStringKey :
import SwiftUI
struct WelcomeView: View {
let userName: String
let unreadCount: Int
var body: some View {
VStack {
Text("Welcome, \(userName)!")
Text("You have \(unreadCount) unread messages")
Button("Get Started") {
// action
}
}
}
}
Il existe deux cas de figure où Xcode ne peut pas extraire les chaînes automatiquement. Les deux échouent silencieusement :
Astuce 1 : Évitez de passer des variables à Text. Lorsque vous passez une variable à une vue Text au lieu d'une chaîne littérale, SwiftUI la traite comme une chaîne simple et ignore complètement la recherche dans le catalogue :
// NOT localized - SwiftUI treats the variable as a plain String
let title = "welcome_title"
Text(title)
// Localized correctly
Text(LocalizedStringKey(title))
Astuce 2 : Utilisez String(localized:) en dehors des vues. Pour les chaînes que vous devez localiser dans un modèle de vue, une fonction d'aide (helper) ou n'importe où en dehors d'une vue SwiftUI, utilisez String(localized:) plutôt qu'une chaîne simple :
let errorMessage = String(localized: "error_generic")
Étape 4 : Ajouter des variantes plurielles et d'appareils. Les chaînes ont souvent besoin de formes différentes selon le contexte.
Pour la pluralisation, commencez par la chaîne dans votre vue SwiftUI :
Text("\(bookCount) books on your shelf")
Ouvrez le String Catalog, faites un clic droit sur la clé et choisissez Vary by Plural. Xcode génère automatiquement les catégories de pluriel et les pré-remplit avec la chaîne source. Pour l'anglais, vous verrez One et Other. Corrigez le champ One par "%lld book on your shelf". Marquez les deux comme révisés.
Lorsque vous enverrez plus tard le catalogue à PTC, la structure du pluriel voyagera avec le fichier. Pour l'arabe, PTC génère des traductions pour les six catégories de pluriel (zero, one, two, few, many, other) car la grammaire arabe exige les six. L'espagnol en nécessite deux, tout comme l'anglais.
Pour les variations d'appareil (par exemple, « Tap to continue » (Touchez pour continuer) sur iPhone contre « Click to continue » (Cliquez pour continuer) sur Mac), faites un clic droit sur la clé et choisissez Vary by Device. Ajoutez les appareils que vous souhaitez personnaliser et saisissez la chaîne appropriée pour chacun. iOS sert la version qui correspond à l'appareil actuel à l'exécution.
Partie 3 : Traduire vos .xcstrings avec PTC
Pour les petits projets, vous pourriez ouvrir chaque colonne de langue dans le catalogue et taper les traductions directement. À mesure que votre application grandit, cela devient ingérable sur des centaines de clés et des dizaines de langues. PTC gère le téléversement, la traduction et la synchronisation.
Étape 1 : Exporter votre String Catalog depuis Xcode. Allez dans Product > Export Localizations. Xcode empaquette votre String Catalog dans un fichier .xcloc par langue cible. Pour PTC, vous n'avez besoin que du fichier .xcstrings situé à l'intérieur du paquet .xcloc. Faites un clic droit sur le .xcloc exporté dans le Finder et sélectionnez Show Package Contents pour trouver Localizable.xcstrings.
Si vous voyez une notification « Unable to build project for localization string extraction » (Impossible de compiler le projet pour l'extraction des chaînes de localisation), votre projet utilise des API exclusives à iOS qu'Xcode ne peut pas compiler avec son SDK macOS interne lors de l'extraction des chaînes. Solution : sélectionnez la target du projet sous TARGETS, allez dans Build Settings, cherchez « Use Compiler to Extract Swift Strings », et réglez-le sur No. Puis exportez à nouveau.
Étape 2 : S'inscrire à PTC. L'essai couvre 20 000 mots dans 2 langues, ce qui est suffisant pour localiser la plupart des applications. Après l'essai, PTC fonctionne en Pay-As-You-Go. Sans abonnement, les premiers 500 mots de chaque mois sont gratuits.
Étape 3 : Configurer votre projet et traduire. Faites glisser Localizable.xcstrings dans PTC. Laissez le nom de fichier de sortie sur Localizable.xcstrings. Xcode attend ce nom exact lors de la résolution des chaînes localisées. Sélectionnez vos langues cibles.
PTC génère automatiquement une description de votre application à partir du fichier téléversé. Révisez-la et modifiez-la si nécessaire. Si vous avez des fichiers de traduction existants, téléversez-les pour que PTC puisse s'adapter à votre style. Sinon, traduisez de zéro. Ajoutez des termes au glossaire. PTC ajoute le nom de votre application automatiquement. Ajoutez toute terminologie spécifique à la marque qui doit être traduite d'une certaine manière ou ne pas l'être du tout. Cliquez sur Start Translation.
Étape 4 : Réviser et télécharger. Une fois la traduction terminée, l'onglet Translations affiche chaque chaîne source à côté de sa traduction. Toute personne que vous ajoutez au projet peut modifier les traductions directement. Si quelque chose vous semble incorrect, signalez un problème avec une traduction spécifique et demandez une retraduction gratuite par IA. PTC apprend des retours et les applique aux futures chaînes du même projet.
Si une chaîne traduite dépasse sa limite de longueur, elle est mise en évidence. Vous avez trois options. Acceptez la traduction plus longue si votre interface utilisateur peut l'accueillir. Demandez une retraduction qui respecte la limite actuelle. Ajustez la limite dans Paramètres > Longueurs de traduction.
Partie 4 : Intégrer les .xcstrings traduits dans votre projet Xcode
Vous avez trois options.
Option 1 : Télécharger manuellement les fichiers depuis PTC. Allez dans l'onglet Resource Files et téléchargez le ZIP. Il contient un seul Localizable.xcstrings avec vos chaînes sources en anglais et toutes les traductions. Fermez Xcode, remplacez le Localizable.xcstrings existant dans le dossier de votre projet par celui de PTC, puis redémarrez Xcode. Vos traductions apparaissent dans le String Catalog avec une coche à côté de chaque langue entièrement traduite.
Option 2 : Intégrer avec Git. Si votre projet est hébergé sur GitHub, GitLab ou Bitbucket, connectez PTC directement. L'intégration Git est une fonctionnalité Pro. Activez le Pay-As-You-Go pour y accéder. Dans votre tableau de bord PTC, allez dans Paramètres > Merge Requests et cliquez sur Add Git Integration. Fournissez l'URL de votre dépôt, accordez l'accès à PTC, et choisissez votre branche et vos fichiers sources. PTC envoie une merge request avec les traductions.
Option 3 : Utiliser l'API. L'API de PTC vous donne un contrôle total sur le moment et la manière dont les traductions sont intégrées dans votre pipeline CI/CD. Avec le Pay-As-You-Go activé, allez dans Paramètres > Gérer les jetons API, cliquez sur Add access token, puis consultez la référence de l'API PTC pour les points de terminaison d'API.
Un sélecteur de langue dans l'application (certaines applications en ont besoin) peut remplacer la locale du système par vue via l'environnement SwiftUI :
import SwiftUI
@MainActor
class LocaleManager: ObservableObject {
@Published var currentLocale: Locale = .current
func setLocale(_ identifier: String) {
currentLocale = Locale(identifier: identifier)
UserDefaults.standard.set([identifier], forKey: "AppleLanguages")
}
}
struct LanguageSettingsView: View {
@EnvironmentObject var localeManager: LocaleManager
var body: some View {
List {
Button("English") { localeManager.setLocale("en") }
Button("Español") { localeManager.setLocale("es") }
Button("Français") { localeManager.setLocale("fr") }
}
.environment(\.locale, localeManager.currentLocale)
}
}
Changer AppleLanguages à l'exécution nécessite un redémarrage de l'application pour certaines chaînes du système. Le remplacement de l'environnement SwiftUI prend effet immédiatement pour les vues à l'intérieur de cette portée.
Partie 5 : Tester votre application iOS localisée
Tester avec le réglage de langue du scheme. Le moyen le plus rapide de tester une langue spécifique est via votre scheme Xcode. Allez dans Product > Scheme > Edit Scheme, cliquez sur l'onglet Options, changez App Language et App Region pour la locale souhaitée, et exécutez avec Cmd+R. Cela fonctionne bien pour la plupart des langues. Vous devriez voir la même mise en page et le même design qu'en anglais avec tout le texte traduit.
Tester l'arabe et les autres langues écrites de droite à gauche. Le réglage de langue du scheme peut ne pas être fiable dans le Simulator pour les langues RTL. Utilisez les propres réglages de langue du Simulator :
- Exécutez l'application avec Cmd+R pour ouvrir le Simulator.
- Appuyez sur Cmd+Home pour aller à l'écran d'accueil.
- Ouvrez Réglages > Général > Langue et région.
- Touchez Ajouter une langue, sélectionnez l'arabe, et définissez-la comme langue principale.
- Le Simulator redémarre. Ouvrez votre application depuis l'écran d'accueil.
Vérifiez que le texte apparaît en arabe et que la mise en page se reflète correctement, avec le titre de navigation et le contenu alignés à droite. Pour des tests d'aperçu sans vous engager sur une langue, Edit Scheme > Options > Application Language > Right-to-Left Pseudolanguage est une vérification plus rapide. Pour les tests d'expansion de texte, utilisez Double-Length Pseudolanguage pour voir comment les mises en page gèrent des chaînes 30 à 40 % plus longues avant de vous engager sur une langue cible.
Bonnes pratiques de localisation iOS
- Vérifiez votre interface utilisateur pour les différentes longueurs de texte. L'allemand est environ 30 % plus long que l'anglais. Le français et l'espagnol d'environ 20 %. Utilisez le système de mise en page flexible de SwiftUI, laissez les libellés s'agrandir et passer à la ligne naturellement, évitez les contraintes de largeur fixe sur les éléments de texte, et testez dans quelques langues différentes pendant le développement.
- Ne sautez pas les variantes de pluralisation. Le russe a trois catégories de pluriel, l'arabe en a six, le japonais n'en a aucune. Les String Catalogs gèrent cela lorsque vous ajoutez la langue. Assurez-vous que tous les champs générés sont remplis avant de publier.
- Localisez les images et les assets. Les images contenant du texte ou des visuels culturellement spécifiques nécessitent des variantes localisées. Dans
Assets.xcassets, sélectionnez l'image et dans l'Attributes Inspector, cliquez sur Localize. Choisissez les langues pour lesquelles vous souhaitez des variantes et remplacez chacune par la version appropriée. iOS sert l'image correcte en fonction de la locale de l'utilisateur. - Gardez votre langue de base complète. Votre langue de base (généralement l'anglais) sert de repli pour toute traduction manquante. Une base incomplète peut provoquer des replis inattendus même dans des langues par ailleurs entièrement traduites. Xcode signale les chaînes de base manquantes ou obsolètes pendant le build.
- Localisez votre fiche App Store. Une application localisée avec une fiche uniquement en anglais perd des utilisateurs lors de la découverte. Dans App Store Connect, vous pouvez localiser le nom de l'application, le sous-titre, la description et les mots-clés par territoire. Les mots-clés sont particulièrement précieux. Apple indexe les mots-clés de plusieurs locales par territoire, multipliant ainsi efficacement votre budget de caractères pour les mots-clés au-delà des 100 caractères standards. Utilisez la fonctionnalité Paste to Translate de PTC pour le contenu de l'App Store.
- Utilisez des formateurs adaptés à la locale. Des formateurs prenant en compte
Date.FormatStyle,Decimal.FormatStyleetLocale. Ne codez jamais en dur"$"ou"MM/DD/YYYY". - Utilisez
%lldpour les nombres entiers etString(localized: "You have ^[\(count) message](inflect: true)")là où l'accord grammatical automatique d'Apple s'applique.
Révision visuelle de la traduction de votre application iOS traduite - publiez sans contrôle qualité manuel par langue
Après que PTC a traduit vos .xcstrings, vous devez toujours vérifier l'application en cours d'exécution dans chaque langue. Traditionnellement, il s'agit d'une passe de contrôle qualité manuel de plusieurs jours par version. Un libellé traduit peut déborder d'une barre de navigation en allemand. « Send » (Envoyer) peut se traduire par un nom en français alors que le bouton nécessitait un verbe. Une chaîne en anglais codée en dur en dehors de Text(_:) sera manifestement non traduite dans l'application iOS en cours d'exécution.
L'AI Visual QA de PTC remplace cette passe. Pour les applications iOS natives (le processus de relecture via l'extension ne s'applique pas), utilisez le téléversement de captures d'écran. Capturez les écrans critiques de l'application en cours d'exécution dans chaque langue cible (connexion, onglet principal, paramètres, cas limites) et téléversez-les sur PTC. L'IA de vision de PTC inspecte chaque écran et :
- Corrige les problèmes dans les
.xcstringslorsque PTC les contrôle. Retraduit une mauvaise catégorie grammaticale, choisit un synonyme plus court qui tient dans une barre de navigation, régénère une forme plurielle avec un accord grammatical correct. - Génère un prompt Cursor / Claude Code lorsque le problème réside dans votre code Swift. Un
LocalizedStringKeymanquant, unStringcodé en dur en dehors du système de localisation, une phrase construite par concaténation au lieu d'une substitution.
Le livrable : une application iOS vérifiée par version. Pas un .xcstrings traduit avec un contrôle qualité manuel restant à faire.
Traduire votre fiche App Store, vos notes de version et vos notifications push
La description de votre App Store, les notes de version des nouveautés et le texte des notifications push se trouvent en dehors de Localizable.xcstrings. La fonctionnalité Paste to Translate de PTC gère ce texte dans le même projet. Collez le texte source dans le tableau de bord PTC, choisissez les langues cibles, et obtenez des traductions qui utilisent le même glossaire et la même voix de marque que vos chaînes dans l'application. Apple indexe les mots-clés de plusieurs locales par territoire, les fiches localisées sont donc particulièrement précieuses pour la découverte.
Traduire le contenu utilisateur dans l'application avec l'API PTC
Le chat dans l'application, les publications sociales et les avis d'utilisateurs nécessitent une traduction à mesure que le contenu arrive. L'API REST PTC traduit ce contenu à la demande avec une authentification par jeton Bearer, en utilisant le même glossaire et la même voix de marque que vos traductions .xcstrings.
Corriger la localisation iOS qui ne fonctionne pas
La cause la plus courante est que le fichier de localisation n'est pas inclus dans la target de l'application. Cliquez sur Localizable.xcstrings dans le Navigator, ouvrez le File Inspector, et vérifiez que la target de votre application est cochée sous Target Membership. Confirmez également que la langue est répertoriée dans la section Localizations de votre projet sous l'onglet Info. Si les deux semblent corrects, nettoyez le dossier de build avec Shift+Cmd+K et recompilez.
Formats de fichiers de localisation iOS : .xcstrings, .strings, .stringsdict, .xliff
.xcstrings (String Catalog) est la valeur par défaut actuelle depuis Xcode 15. Un seul fichier basé sur JSON consolidant toutes les chaînes, les règles de pluriel et les variantes spécifiques aux appareils. .strings est le format clé-valeur hérité, toujours valide dans les anciennes bases de code, associé à .stringsdict pour les pluriels. .xliff et .xcloc sont des formats d'exportation pour la transmission aux traducteurs. Ce ne sont pas des formats de stockage.
Localiser le nom de votre application avec InfoPlist.strings
Créez un fichier InfoPlist.strings et localisez-le pour chaque langue prise en charge. Dans chaque version linguistique, ajoutez CFBundleDisplayName = "Your Translated App Name";. Sélectionnez le fichier dans le Navigator, ouvrez le File Inspector, et cliquez sur Localize pour ajouter des variantes linguistiques. iOS affiche le nom correct de l'application en fonction de la langue de l'appareil.
Changer la langue de l'application iOS sans redémarrer
iOS ne fournit pas d'API native pour cela. L'approche standard consiste à définir AppleLanguages dans UserDefaults et à demander à l'utilisateur de redémarrer :
UserDefaults.standard.set(["es"], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
Le changement prend effet au prochain lancement de l'application. Si vous avez besoin d'un changement en cours de session sans redémarrage, vous devez gérer la localisation manuellement en chargeant le bundle approprié pour la langue sélectionnée.
Pourquoi iOS se replie sur l'anglais pour les langues non prises en charge
iOS utilise votre langue de base comme repli lorsqu'une traduction n'est pas disponible. C'est le comportement attendu. Pour minimiser les replis, assurez-vous que votre String Catalog ne montre aucune chaîne manquante ou obsolète avant chaque version.
Quelle est la précision de la localisation par IA pour une application iOS entière
PTC utilise l'IA pour traduire les fichiers .xcstrings, .strings et .stringsdict en quelques minutes, en préservant automatiquement les règles de pluriel et les espaces réservés. La majorité des chaînes traduites passent en production sans modification. Pour de meilleurs résultats, parlez de votre application à PTC lors de la configuration afin que les traductions reflètent le bon ton et la bonne terminologie.
Dans quelles langues iOS localiser en premier
L'espagnol, le français, l'allemand, le japonais et le chinois simplifié sont des points de départ courants au-delà de l'anglais. Si votre application a déjà des utilisateurs dans une région spécifique, donnez la priorité à leur langue en premier. Pour le coût d'adaptation le plus bas, commencez par des langues géographiquement ou culturellement proches de votre marché de base.
Localiser votre propre application iOS
Commencez avec l'essai de 30 jours de PTC - l'essai couvre 20 000 mots, sans carte bancaire. Téléversez votre Localizable.xcstrings, traduisez-le en quelques minutes, puis téléversez des captures d'écran et laissez PTC vérifier l'application rendue.
Articles liés :
- Traduire des applications iOS et Android avec l'IA - vue d'ensemble du service multiplateforme.
- Comment localiser votre application Android - le guide équivalent pour Android Studio.
- Référence de l'API PTC - points de terminaison REST pour l'intégration CI.