PTC

Comment localiser votre application iOS : guide d'internationalisation SwiftUI

Préparez votre application Xcode, traduisez les fichiers .xcstrings par IA, puis téléchargez des captures d'écran pour que PTC (Private Translation Cloud) révise l'application iOS rendue dans chaque langue. Ce guide détaille l'intégralité du flux de travail en utilisant SwiftUI et les String Catalogs de Xcode 15+, la méthode moderne recommandée par Apple. Pour un aperçu du service multiplateforme couvrant à la fois iOS et Android, consultez la page sur la traduction d'applications iOS et Android par IA.

Partie 1 : Fonctionnement de la localisation iOS

La localisation iOS est le processus d'adaptation du texte, du formatage et des ressources de votre application pour prendre en charge plusieurs langues et régions. Avec l'introduction des String Catalogs dans Xcode 15, le flux de travail est considérablement plus simple que l'approche héritée des fichiers .strings / .stringsdict.

Internationalisation vs localisation

Il s'agit de deux étapes distinctes qui doivent se dérouler dans cet ordre :

  • L'internationalisation (i18n) constitue le socle technique. 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. Cette étape est réalisée une seule fois, idéalement avant votre première version.
  • La localisation (l10n) est le travail continu qui suit. Elle consiste à rédiger les traductions, ajuster les mises en page et fournir des ressources spécifiques à chaque locale pour chaque nouvelle langue.

L'erreur la plus courante consiste à traiter la localisation comme une tâche post-lancement, pour s'apercevoir ensuite que la base de code n'est pas prête. Revenir en arrière pour corriger les chaînes codées en dur, les mises en page à direction fixe et les formateurs non adaptés aux locales dans une application existante prend beaucoup plus de temps que de construire en pensant à la localisation dès le départ.

Comment Xcode 15+ utilise Localizable.xcstrings comme source unique de vérité

Le modèle de localisation d'Apple dans Xcode 15+ s'articule autour d'un fichier unique par cible : Localizable.xcstrings. Ce fichier est un String Catalog au format JSON qui contient votre langue source ainsi que chaque traduction, y compris les variantes de pluriel, les variantes spécifiques aux appareils et les substitutions.

Xcode extrait automatiquement les chaînes localisables de votre code SwiftUI (tout élément Text("..."), Label("...", systemImage:), Button("...") et toute interpolation de chaîne utilisant LocalizedStringKey). La compilation de votre application remplit le fichier 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 devraient commencer avec .xcstrings. Les projets existants basés sur .strings peuvent être migrés via File > New > File > String Catalog et l'option d'importation de Xcode. La documentation officielle de localisation d'Apple couvre l'ensemble des détails techniques.

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 est déjà répertorié 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. Recherchez String Catalog et ajoutez-le. Conservez le nom par défaut Localizable.xcstrings. Compilez le projet une fois avec Cmd+B. Xcode analyse votre code, trouve chaque chaîne localisable et remplit automatiquement le catalogue.

Étape 3 : Marquer les chaînes pour la localisation. Dans SwiftUI, toute chaîne littérale transmise à Text(_:), Label, aux libellés d'action de Button, aux titres de navigation, etc., est automatiquement une 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 où Xcode ne peut pas extraire les chaînes automatiquement. Les deux échouent silencieusement :

Conseil 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 simple chaîne 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))

Conseil 2 : Utilisez String(localized:) en dehors des vues. Pour les chaînes que vous devez localiser dans un view model, une fonction utilitaire ou n'importe où en dehors d'une vue SwiftUI, utilisez String(localized:) plutôt qu'une simple chaîne :

let errorMessage = String(localized: "error_generic")

Étape 4 : Ajouter des variantes de pluriel et d'appareil. 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 en "%lld book on your shelf". Marquez les deux comme révisés.

Lorsque vous enverrez plus tard le catalogue à PTC, la structure du pluriel sera transmise 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 l'exige. L'espagnol en nécessite deux, comme l'anglais.

Pour les variantes d'appareil (par exemple, « Touchez pour continuer » sur iPhone vs « 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 servira la version correspondant à l'appareil utilisé lors de l'exécution.

Partie 3 : Traduire vos fichiers .xcstrings avec PTC

Pour les petits projets, vous pourriez ouvrir chaque colonne de langue dans le catalogue et saisir 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échargement, la traduction et la synchronisation.

Étape 1 : Exporter votre String Catalog depuis Xcode. Allez dans Product > Export Localizations. Xcode regroupe 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 fichier .xcloc exporté dans le Finder et sélectionnez Afficher le contenu du paquet pour trouver Localizable.xcstrings.

Si vous voyez une notification « Unable to build project for localization string extraction », votre projet utilise des API exclusivement iOS que Xcode ne peut pas compiler par rapport à son SDK macOS interne lors de l'extraction des chaînes. Solution : sélectionnez la cible du projet sous TARGETS, allez dans Build Settings, recherchez « Use Compiler to Extract Swift Strings » et réglez-le sur No. Exportez ensuite à nouveau.

Étape 2 : S'inscrire à PTC. L'essai gratuit couvre 20.000 mots dans 2 langues, ce qui est suffisant pour localiser la plupart des applications. Après l'essai, PTC fonctionne en mode Pay-As-You-Go. Aucun abonnement, les 500 premiers mots de chaque mois sont gratuits.

Étape 3 : Configurer votre projet et traduire. Faites glisser Localizable.xcstrings dans PTC. Laissez le nom du fichier de sortie tel quel : 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échargé. Révisez-la et modifiez-la si nécessaire. Si vous avez des fichiers de traduction existants, téléchargez-les pour que PTC puisse s'adapter à votre style. Sinon, traduisez à partir de zéro. Ajoutez des termes au glossaire. PTC ajoute automatiquement le nom de votre application. Ajoutez toute terminologie spécifique à la marque qui doit être traduite d'une certaine manière ou pas 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 ajoutée au projet peut modifier les traductions directement. Si quelque chose semble incorrect, signalez un problème sur une traduction spécifique et demandez une retraduction gratuite par IA. PTC apprend de vos 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 surbrillance. Vous avez trois options : accepter la traduction plus longue si votre interface peut l'accueillir, demander une retraduction respectant la limite actuelle, ou ajuster la limite dans Settings > Translation lengths.

Partie 4 : Intégrer les fichiers .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 fichier Localizable.xcstrings unique avec vos chaînes sources en anglais et toutes les traductions. Fermez Xcode, remplacez le fichier Localizable.xcstrings existant dans votre dossier de 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 directement PTC. 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 Settings > Merge Requests et cliquez sur Add Git Integration. Fournissez l'URL de votre dépôt, accordez l'accès à PTC, puis choisissez votre branche et vos fichiers sources. PTC enverra une merge request contenant 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 récupérées dans votre pipeline de compilation. Une fois le Pay-As-You-Go activé, allez dans Settings > Manage API tokens, cliquez sur Add access token, puis consultez la référence de l'API PTC pour connaître les points de terminaison.

Un sélecteur de langue intégré à l'application (certaines applications en ont besoin) peut surcharger 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)
    }
}

La modification de AppleLanguages au moment de l'exécution nécessite un redémarrage de l'application pour certaines chaînes système. La surcharge de l'environnement SwiftUI prend effet immédiatement pour les vues situées dans cette portée.

Partie 5 : Tester votre application iOS localisée

Tester avec le réglage de langue du schéma. Le moyen le plus rapide de tester une langue spécifique est via votre schéma Xcode. Allez dans Product > Scheme > Edit Scheme, cliquez sur l'onglet Options, changez App Language et App Region pour la locale souhaitée, puis lancez l'exécution 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 s'écrivant de droite à gauche (RTL). Le réglage de langue du schéma peut être peu fiable dans le Simulator pour le RTL. Utilisez les réglages de langue propres au Simulator :

  1. Lancez l'application avec Cmd+R pour ouvrir le Simulator.
  2. Appuyez sur Cmd+Home pour revenir à l'écran d'accueil.
  3. Ouvrez Settings > General > Language & Region.
  4. Touchez Add Language, sélectionnez l'arabe et définissez-le comme langue principale.
  5. 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 est correctement inversée, avec le titre de navigation et le contenu alignés à droite. Pour un test de prévisualisation sans changer définitivement de langue, Edit Scheme > Options > Application Language > Right-to-Left Pseudolanguage est une vérification plus rapide. Pour tester l'expansion du 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 des longueurs de texte variées. L'allemand est environ 30 % plus long que l'anglais. Le français et l'espagnol environ 20 %. Utilisez le système de mise en page flexible de SwiftUI, laissez les libellés s'étendre et revenir à 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.
  • N'ignorez pas les variantes de pluralisation. Le russe possède cinq 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 la publication.
  • Localisez les images et les ressources. 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 servira l'image correcte en fonction de la locale de l'utilisateur.
  • Maintenez votre langue de base complète. Votre langue de base (généralement l'anglais) sert de solution 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 lors de la compilation.
  • Localisez votre fiche App Store. Une application localisée avec une fiche uniquement en anglais perd des utilisateurs lors de la phase de 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 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 aux locales. Utilisez Date.FormatStyle, Decimal.FormatStyle et les formateurs tenant compte de la Locale. Ne codez jamais en dur "$" ou "MM/DD/YYYY".
  • Utilisez %lld pour les nombres entiers et String(localized: "You have ^[\(count) message](inflect: true)") là où l'accord grammatical automatique d'Apple s'applique.

Relecture visuelle de votre application iOS traduite : publiez sans contrôle qualité manuel par langue

Une fois que PTC a traduit vos fichiers .xcstrings, vous devez encore vérifier l'application en cours d'exécution dans chaque langue. Traditionnellement, cela représente plusieurs jours de contrôle qualité manuel par version. Un libellé traduit peut déborder d'une barre de navigation en allemand. « Send » peut être traduit par un nom en français alors que le bouton nécessitait un verbe. Une chaîne anglaise codée en dur en dehors de Text(_:) restera ostensiblement non traduite dans l'application iOS en cours d'exécution.

AI Visual QA de PTC remplace cette étape. Pour les applications iOS natives (le flux de l'extension de navigateur ne s'applique pas), utilisez le téléchargement de captures d'écran. Capturez les écrans critiques de l'application en cours d'exécution dans chaque langue cible (connexion, onglet principal, réglages, cas limites) et téléchargez-les sur PTC. L'IA visuelle de PTC inspecte chaque écran et :

  • Corrige les problèmes dans les fichiers .xcstrings lorsque PTC les contrôle. Elle retraduit une mauvaise catégorie grammaticale, choisit un synonyme plus court qui tient dans une barre de navigation ou régénère une forme de pluriel avec l'accord grammatical correct.
  • Génère un prompt Cursor / Claude Code lorsque le problème se situe dans votre code Swift. Une LocalizedStringKey manquante, une String codée en dur en dehors du système de localisation ou une phrase construite par concaténation au lieu de substitution.

Le résultat : une application iOS vérifiée à chaque version. Plus besoin de prévoir un contrôle qualité manuel après avoir reçu vos fichiers .xcstrings traduits.

Traduisez votre fiche App Store, vos notes de version et vos notifications push

Votre description App Store, vos notes de version « Nouveautés » et le texte de vos notifications push résident en dehors de Localizable.xcstrings. La fonctionnalité Paste to Translate de PTC gère ces textes dans le même projet. Collez le texte source dans le tableau de bord PTC, choisissez les langues cibles et récupérez des traductions utilisant le même glossaire et la même voix de marque que vos chaînes intégrées à l'application. Apple indexe les mots-clés de plusieurs locales par territoire, ce qui rend les fiches localisées particulièrement précieuses pour la découverte.

Traduisez le contenu utilisateur intégré avec l'API PTC

Le chat intégré, les publications sociales et les avis d'utilisateurs nécessitent une traduction au fur et à mesure de l'arrivée du contenu. L'API REST de 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 une localisation iOS qui ne fonctionne pas

La cause la plus fréquente est que le fichier de localisation n'est pas inclus dans la cible de l'application. Cliquez sur Localizable.xcstrings dans le Navigator, ouvrez le File Inspector et vérifiez que la cible 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 compilation avec Shift+Cmd+K et recompilez.

Formats de fichiers de localisation iOS : .xcstrings, .strings, .stringsdict, .xliff

.xcstrings (String Catalog) est le format par défaut actuel depuis Xcode 15. Un fichier unique basé sur JSON regroupant 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 destinés à être transmis 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 = "Le nom traduit de votre application";. Sélectionnez le fichier dans le Navigator, ouvrez le File Inspector et cliquez sur Localize pour ajouter des variantes linguistiques. iOS affichera le nom d'application correct 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 repasse à l'anglais pour les langues non prises en charge

iOS utilise votre langue de base comme solution de repli lorsqu'une traduction n'est pas disponible. C'est le comportement attendu. Pour minimiser ces cas, assurez-vous que votre String Catalog ne présente aucune chaîne manquante ou obsolète avant chaque version.

Quelle est la précision de la localisation par IA pour une application iOS complète

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 sont publiées sans modification. Pour de meilleurs résultats, décrivez votre application à PTC lors de la configuration afin que les traductions reflètent le ton et la terminologie appropriés.

Dans quelles langues localiser votre application iOS en priorité

L'espagnol, le français, l'allemand, le japonais et le chinois simplifié sont des points de départ courants après l'anglais. Si votre application a déjà des utilisateurs dans une région spécifique, donnez la priorité à leur langue. Pour un coût d'adaptation minimal, commencez par les langues géographiquement ou culturellement proches de votre marché de base.

Localisez votre propre application iOS

Commencez avec l'essai gratuit de 30 jours de PTC : 20.000 mots offerts, sans carte bancaire. Téléchargez votre fichier Localizable.xcstrings, traduisez-le en quelques minutes, puis téléchargez des captures d'écran et laissez PTC vérifier l'application rendue.

Voir aussi :