---
title: "Localisation d’application iOS : le guide .xcstrings"
description: "Localisation d’application iOS avec les String Catalogs (.xcstrings) : pluriels, autorisations, formats, droite à gauche, tests et fiche App Store traduite."
url: https://develak.com/fr/blog/localiser-application-ios-xcstrings/
language: fr
updated: 2026-09-24
source: Develak
translations:
  en: https://develak.com/blog/localize-ios-app-xcstrings.md
---

Page canonique : <https://develak.com/fr/blog/localiser-application-ios-xcstrings/>

[Guides](https://develak.com/fr/blog/) 10 min de lecture

# Localiser une application iOS en plus de 40 langues avec les String Catalogs (.xcstrings)

Guide pratique de la localisation d’application iOS avec les catalogues de chaînes de Xcode : pluriels, textes d’autorisation, dates et unités, langues de droite à gauche, pseudolangues, fiche App Store et traduction.

Studio Develak

Publié le 24 septembre 2026

[Read in English](https://develak.com/blog/localize-ios-app-xcstrings/)

Pour localiser une application iOS en plus de 40 langues, regroupez tous les textes visibles dans des catalogues de chaînes Xcode (`Localizable.xcstrings` et `InfoPlist.xcstrings`), laissez Xcode les extraire automatiquement, gérez les pluriels dans le catalogue et les formats avec `FormatStyle`, testez avec les pseudolangues et les mises en page de droite à gauche, puis traduisez : traduction automatique pour la vitesse, relecture humaine là où elle compte. Terminez par la fiche App Store, qui se localise à part dans App Store Connect. C’est ainsi que Develak publie ses propres apps dans jusqu’à 44 langues.

## Points clés

- Les catalogues de chaînes (`.xcstrings`, Xcode 15 et ultérieur) remplacent `.strings` et `.stringsdict` : un fichier par table, pluriels et variantes par appareil compris.
- Ne construisez jamais une phrase par concaténation et ne formatez jamais une date ou un nombre à la main.
- Localisez aussi `InfoPlist.xcstrings` : les demandes d’autorisation et le nom de l’app font partie de la première impression.
- Testez avec les pseudolangues avant de payer la moindre traduction.
- Localisez la fiche App Store (nom, sous-titre, mots-clés, description, captures) pour chaque marché.
- La traduction automatique, LLM compris, fait un bon premier jet ; faites relire les textes qui vendent, qui facturent ou qui avertissent.

## Pourquoi localiser une app iOS ?

L’App Store est disponible dans 175 pays et régions, et chacun y cherche, lit les avis et décide dans sa langue. Une app localisée, avec une fiche localisée, se positionne sur les mots-clés locaux et inspire confiance sur des marchés que la plupart des apps en anglais seul délaissent. iOS permet aussi de choisir la langue de chaque app dans Réglages : chaque langue ajoutée sert donc des utilisateurs qui la veulent explicitement.

Une fois la méthode en place, chaque langue supplémentaire coûte bien moins cher que la première. Nos apps les plus récentes sont disponibles en 44 langues, dont l’arabe, l’hébreu et l’ourdou (écrits de droite à gauche) et des langues indiennes comme le hindi, le bengali, le tamoul et le télougou. Ce n’est tenable que parce que les étapes ci-dessous sont devenues une routine.

## Les catalogues de chaînes en cinq minutes

Un catalogue de chaînes (String Catalog) est un fichier JSON à l’extension `.xcstrings`, apparu avec Xcode 15, qui stocke toutes les chaînes d’une table et toutes leurs traductions. Ajoutez-en un nommé `Localizable` à votre cible et compilez : Xcode extrait les chaînes des vues SwiftUI, de `String(localized:)`, de `LocalizedStringResource` et de `NSLocalizedString`. Chaque entrée affiche un état (New, Needs Review, Translated, Stale) et un commentaire pour les traducteurs. Les fichiers `.strings` et `.stringsdict` existants se migrent depuis le menu contextuel du fichier.

```swift
// Extrait automatiquement dans Localizable.xcstrings
Text("Take your medication")

// Le commentaire donne au traducteur le contexte nécessaire
Text("Open", comment: "Button: opens the selected bottle's details")

// En dehors des vues SwiftUI
let title = String(localized: "Cellar", comment: "Tab title for the list of bottles")
```

Les commentaires sont l’amélioration de qualité la moins chère en localisation : « Open » peut être un verbe ou un adjectif, « Archive » un nom ou une action. Xcode 26 sait aussi rédiger des commentaires pour les traducteurs grâce à un modèle exécuté sur l’appareil, et générer des symboles Swift typés pour les chaînes ajoutées à la main au catalogue. Dans un package Swift, définissez `defaultLocalization` dans `Package.swift` et cherchez les chaînes dans `Bundle.module`.

## Pluriels et variantes par appareil

Écrivez la phrase une seule fois avec interpolation, puis choisissez **Vary by Plural** sur cette clé dans le catalogue. Xcode affiche exactement les catégories de pluriel dont chaque langue a besoin :

```swift
// Clé du catalogue : "%lld reminders" → Vary by Plural
Text("\(count) reminders")
```

| Langues | Catégories de pluriel | Ce que casse « count == 1 » |
| --- | --- | --- |
| Anglais, allemand | one, other | Rien, c’est pourquoi le bug passe inaperçu |
| Japonais, chinois, coréen, thaï, vietnamien | other | Une forme au singulier inutile apparaît |
| Russe, ukrainien, polonais | one, few, many, other | « 5 » prend la mauvaise terminaison |
| Arabe | zero, one, two, few, many, other | Quatre formes sur six sont fausses |

*Catégories de pluriel (Unicode CLDR) gérées par les catalogues de chaînes*

Une chaîne contenant deux nombres (« %lld photos dans %lld albums ») peut varier sur chacun indépendamment. **Vary by Device** gère les formulations qui dépendent de l’appareil, comme « Touchez pour commencer » sur iPhone et « Cliquez pour commencer » sur Mac.

## InfoPlist.xcstrings : demandes d’autorisation et nom de l’app

Ajoutez à la cible un second catalogue nommé `InfoPlist` : Xcode y place les clés localisables d’`Info.plist`, du nom affiché sur l’écran d’accueil (`CFBundleDisplayName`) à chaque texte d’autorisation, de `NSCameraUsageDescription` et `NSMicrophoneUsageDescription` à `NSHealthShareUsageDescription`. Une demande d’autorisation est le moment où vous sollicitez la confiance, et une demande en anglais dans une app en français paraît inachevée précisément à ce moment-là. App Review lit aussi ces textes au titre de la règle 5.1.1 : leurs traductions doivent rester précises.

Deux autres emplacements s’oublient facilement : les phrases des App Shortcuts vivent dans `AppShortcuts.xcstrings`, et les extensions de widget doivent disposer de leurs chaînes dans la cible de l’extension.

## Dates, nombres et unités : laissez faire FormatStyle

L’ordre des dates, l’horloge sur 12 ou 24 heures, le séparateur décimal, la place du symbole monétaire, le premier jour de la semaine et le système de mesure changent tous selon la région de l’utilisateur. Ne codez jamais en dur `"MM/dd/yyyy"` ni un symbole de devise :

```swift
// Jour et heure, dans la langue et le format horaire de l'utilisateur
Text(dose.scheduledAt, format: .dateTime.weekday(.wide).hour().minute())

// Devise avec le bon symbole et les bons séparateurs
Text(price, format: .currency(code: "EUR"))

// Kilomètres ou miles selon la région de l'utilisateur
Text(distance, format: .measurement(width: .abbreviated, usage: .road))

// "Pillio, Seizly, and ApexLap" ou "Pillio, Seizly et ApexLap"
Text(appNames.formatted(.list(type: .and)))
```

Triez les listes visibles avec `localizedStandardCompare` et cherchez avec `localizedStandardContains`, pour que les accents et la casse se comportent comme on s’y attend.

## Langues de droite à gauche : arabe, hébreu, ourdou

SwiftUI inverse automatiquement la mise en page quand vous utilisez leading et trailing plutôt que left et right. Les SF Symbols directionnels s’inversent d’eux-mêmes ; pour vos propres images directionnelles, activez l’inversion explicitement. N’inversez pas ce qui n’est pas directionnel : logos, photos, coches. Vérifiez le résultat dans une prévisualisation :

```swift
Image("swipe-hint")
    .flipsForRightToLeftLayoutDirection(true)

#Preview("Arabe, droite à gauche") {
    ContentView()
        .environment(\.locale, Locale(identifier: "ar"))
        .environment(\.layoutDirection, .rightToLeft)
}
```

## Tester avant de traduire : les pseudolangues

Dans l’éditeur de schéma (Run › Options › App Language), Xcode propose des pseudolangues qui révèlent les bugs de localisation sans aucune traduction. Activez dans le même panneau « Show non-localized strings » pour repérer le texte codé en dur.

| Pseudolangue | Ce qu’elle révèle |
| --- | --- |
| Double-Length | Libellés tronqués et boutons rognés, comme avec les longues chaînes allemandes ou finnoises |
| Accented | Diacritiques coupés, interlignes trop serrés ; les chaînes codées en dur restent sans accents |
| Bounded String | Chaînes concaténées ou tronquées, puisqu’on voit où chacune commence et finit |
| Right-to-Left | Mises en page qui ne s’inversent pas, avec un texte lisible |
| Right-to-Left with Right-to-Left Strings | L’expérience complète de droite à gauche, texte compris |

*Les pseudolangues de Xcode et les bugs qu’elles révèlent*

Les tests d’interface peuvent lancer l’app dans n’importe quelle langue, ce qui permet aussi d’automatiser les captures App Store localisées :

```swift
let app = XCUIApplication()
app.launchArguments += ["-AppleLanguages", "(fr)", "-AppleLocale", "fr_FR"]
app.launch()
```

## Localiser aussi la fiche App Store

Le binaire et la fiche se localisent séparément. La ligne « Langues » de votre fiche provient du bundle de l’app ; tout le reste se règle par localisation dans App Store Connect, qui accepte des métadonnées dans une quarantaine de langues et variantes régionales :

- Nom et sous-titre (30 caractères chacun), texte promotionnel, description et nouveautés.
- Mots-clés (100 caractères par localisation), à rechercher dans chaque langue plutôt qu’à traduire : un utilisateur français qui cherche un rappel de médicaments peut taper « pilulier », un mot qu’aucune traduction de « pill reminder » ne produit.
- Captures et aperçus vidéo avec légendes traduites ; à défaut, ceux de la langue principale s’affichent. Les captures en arabe et en hébreu doivent montrer l’interface inversée.
- Noms et descriptions des achats intégrés, et noms des groupes d’abonnements.

Mots-clés et captures localisés relèvent pleinement de l’optimisation App Store : notre service d’[optimisation App Store (ASO)](https://develak.com/fr/services/optimisation-app-store-aso/) traite chaque marché séparément.

## Traduction humaine, automatique, ou les deux ?

Les grands modèles de langage traduisent désormais bien les chaînes d’interface quand on leur donne du contexte : le commentaire pour le traducteur, l’écran concerné, un glossaire des termes du produit. Ils trébuchent encore sur le registre (tutoiement ou vouvoiement en français, « du » ou « Sie » en allemand), les accords, la longueur et les placeholders qui doivent rester intacts. Notre règle : traduction automatique pour un premier jet sur tout, puis relecture humaine de l’accueil, du paywall et des conditions d’abonnement, des demandes d’autorisation, des métadonnées App Store et de tout ce qui touche au médical, au juridique ou à la sécurité. Les noms de marque comme Pillio ou Seizly sont marqués « Don’t translate », et les builds TestFlight passent entre les mains de locuteurs natifs avant la publication.

## Notre outil : Xlocalize pour les fichiers .xcstrings

Localiser un catalogue de 34 apps nous a conduits à créer notre propre app Mac. [Xlocalize](https://develak.com/fr/applications/xlocalize/) ouvre un fichier `.xcstrings`, vous laisse choisir les langues cibles et traduit avec OpenAI, Anthropic Claude ou Google Gemini, avec votre propre clé d’API stockée dans le trousseau macOS. Elle préserve pluriels, variantes par appareil et substitutions, transmet le commentaire de chaque clé comme contexte, et signale les placeholders incohérents et les traductions manquantes avant qu’ils n’atteignent un build.

## Checklist du processus de localisation

1. Internationalisez le code : aucun texte en dur, `FormatStyle` partout, mises en page leading et trailing, tailles flexibles et Dynamic Type.
2. Créez les catalogues `Localizable`, `InfoPlist` et, si besoin, `AppShortcuts`, puis compilez pour extraire les chaînes.
3. Commentez les chaînes ambiguës et marquez les noms de marque « Don’t translate ».
4. Configurez les pluriels et les variantes par appareil.
5. Testez avec les pseudolangues et en droite à gauche.
6. Traduisez : premier jet automatique, relecture humaine des chaînes critiques.
7. Vérifiez placeholders et troncatures dans chaque langue, sur le plus petit iPhone pris en charge.
8. Localisez métadonnées App Store, mots-clés, captures et noms des achats intégrés.
9. Diffusez la version via TestFlight à des locuteurs natifs.
10. À chaque version, traduisez les chaînes nouvelles ou périmées avant de soumettre.

## Les pièges courants

- **La concaténation.** `"Hello " + name` casse l’ordre des mots ; utilisez une seule chaîne localisée avec interpolation.
- **Une clé, deux sens.** Réutiliser « Open » comme verbe et comme adjectif impose une mauvaise traduction dans la moitié des langues.
- **L’ordre des arguments.** Le traducteur peut devoir réordonner les valeurs ; les spécificateurs positionnels comme `%1$@` et `%2$lld` le permettent.
- **Le texte dans les images**, qu’aucun catalogue ne peut traduire.
- **Les largeurs fixes** et les libellés sur une ligne qui débordent en allemand.
- **Les libellés d’accessibilité.** VoiceOver lit à voix haute le texte de `.accessibilityLabel` ; il est extrait comme les autres chaînes, vérifiez qu’il est bien traduit.
- **Les textes côté serveur :** notifications push et e-mails se localisent aussi, par exemple avec `loc-key` dans la charge utile de la notification.
- **Les chaînes périmées** restées non traduites après une refonte.

Si vous préférez confier tout le processus à une équipe qui le pratique chaque semaine, notre service de [localisation d’application](https://develak.com/fr/services/localisation-application/) couvre le code, les traductions, la relecture et la fiche App Store.

## Questions fréquentes

### Qu’est-ce qu’un fichier .xcstrings ?

Un fichier `.xcstrings` est un catalogue de chaînes Xcode : un fichier JSON, apparu avec Xcode 15, qui stocke toutes les chaînes localisables d’une table avec leurs traductions, formes plurielles, variantes par appareil, commentaires et états de traduction. Il remplace les anciens fichiers `.strings` et `.stringsdict`.

### Les catalogues de chaînes fonctionnent-ils sur les anciennes versions d’iOS ?

Oui. Les catalogues de chaînes sont un format de compilation : Xcode les transforme en ressources `.strings` et `.stringsdict` classiques dans l’app. Il faut Xcode 15 ou ultérieur pour compiler, mais la version minimale d’iOS de l’app n’est pas concernée.

### Par combien de langues commencer ?

Commencez par les langues des marchés que vous voyez déjà dans les statistiques d’App Store Connect, puis par celles que vos concurrents négligent. Une fois le code internationalisé et la méthode en place, ajouter une langue revient surtout à traduire et relire, ce qui permet à un studio comme le nôtre de publier des apps en plus de 40 langues.

### Peut-on traduire une app iOS avec ChatGPT, Claude ou Gemini ?

Oui, pour un premier jet. Donnez du contexte au modèle (commentaires, glossaire, écran où apparaît la chaîne), utilisez un outil qui modifie le fichier `.xcstrings` sans casser pluriels ni placeholders, comme Xlocalize, et faites relire par des locuteurs natifs l’accueil, le paywall, les demandes d’autorisation et les métadonnées App Store.

### Comment localiser le nom de mon app ?

Il y a deux noms. Celui qui s’affiche sous l’icône, sur l’écran d’accueil, est `CFBundleDisplayName`, traduit dans `InfoPlist.xcstrings`. Celui de l’App Store se règle par localisation dans App Store Connect, dans la limite de 30 caractères. Beaucoup d’apps gardent la marque identique partout et ne localisent que la partie descriptive, comme le sous-titre.

### Comment tester une interface en arabe sans parler arabe ?

Lancez l’app avec la pseudolangue Right-to-Left de Xcode, qui inverse l’interface tout en gardant un texte lisible, et ajoutez des prévisualisations SwiftUI en mise en page de droite à gauche. Vérifiez que la navigation, les indicateurs de progression et les icônes directionnelles s’inversent, et que les logos et les photos restent en place.

Écrit par

## Le studio Develak

Develak est un studio indépendant d’applications iOS. Nous avons publié 34 apps sur l’App Store depuis 2025, traduites jusqu’en 44 langues, et nous écrivons ces guides à partir de cette expérience de terrain.

[Voir nos 34 apps](https://develak.com/fr/applications/) [Découvrir le studio](https://develak.com/fr/a-propos/)

## D’autres guides iOS

[Tous les guides](https://develak.com/fr/blog/)

Guides 10 min de lecture

### [SwiftUI, Flutter ou React Native en 2026 : que choisir pour une app iPhone ?](https://develak.com/fr/blog/swiftui-flutter-ou-react-native/)

Comparatif honnête de SwiftUI, Flutter et React Native pour une app iPhone en 2026 : performances, frameworks Apple, fidélité de l’interface, délais, recrutement, maintenance et Android, avec une checklist de décision.

17 septembre 2026

Guides 11 min de lecture

### [Checklist de soumission App Store (2026) : tout ce qu’Apple vérifie avant de valider votre app](https://develak.com/fr/blog/checklist-soumission-app-store/)

La checklist complète pour soumettre une app iPhone sur l’App Store en 2026 : App Store Connect, URL de confidentialité et d’assistance, manifeste de confidentialité, suppression de compte, abonnements, captures d’écran, classification par âge, TestFlight et refus à éviter.

10 septembre 2026

## De ce guide à votre app publiée

Develak conçoit, développe et publie des apps iOS natives pour des fondateurs et des équipes du monde entier, en français comme en anglais.

[Démarrer un projet](https://develak.com/fr/contact/) [contact@develak.com](mailto:contact@develak.com)

---

*Version Markdown de <https://develak.com/fr/blog/localiser-application-ios-xcstrings/> pour les assistants IA, publiée par Develak. Les liens mènent aux pages web ; ajoutez .md à l’URL d’une page pour obtenir sa version Markdown. Index du site : <https://develak.com/fr/llms.txt>.*
