Xcode String Catalogs (.xcstrings) : le guide complet

Les Xcode String Catalogs (.xcstrings) ont remplace les fichiers .strings et .stringsdict en tant que format de localisation recommande par Apple depuis Xcode 15. Un seul fichier JSON contient toutes vos traductions pour chaque langue, avec le support natif des pluriels, des variations par appareil et de l'extraction automatique de chaines. Si vous demarrez un nouveau projet iOS ou macOS, c'est le format a utiliser.

Comment fonctionne .xcstrings

Un String Catalog est un fichier JSON unique qui stocke chaque cle de localisation, sa valeur source et les traductions pour toutes les langues cibles. Xcode l'affiche dans un editeur tabulaire, mais sous le capot c'est du JSON brut que vous pouvez lire, comparer et editer en dehors de Xcode.

Concepts cles

  • Langue source - la langue de base (generalement l'anglais) ou les cles sont definies
  • String unit - une entree traduisible avec une cle, une valeur et un etat par langue
  • Etat - chaque traduction est marquee new, translated, needs_review ou stale
  • Variations - une cle peut avoir des formes plurielles, du texte specifique par appareil ou des variations de largeur
Localizable.xcstringsjson
{
"sourceLanguage": "en",
"version": "1.0",
"strings": {
"welcome_title": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Welcome to MyApp"
}
},
"fr": {
"stringUnit": {
"state": "translated",
"value": "Bienvenue sur MyApp"
}
},
"de": {
"stringUnit": {
"state": "needs_review",
"value": "Willkommen bei MyApp"
}
}
}
}
}
}

Migrer de .strings vers .xcstrings

Si votre projet utilise deja des fichiers .strings ou .stringsdict, vous pouvez migrer vers les String Catalogs sans perdre vos traductions existantes. Xcode gere la majeure partie de la conversion automatiquement.

Migration de .strings vers .xcstrings

1

Exporter les traductions actuelles

Dans Xcode, allez dans Product > Export Localizations. Cela cree des fichiers XLIFF contenant toutes vos chaines et traductions actuelles en guise de sauvegarde.

2

Creer un String Catalog dans Xcode

Faites un clic droit sur votre projet dans le navigateur, selectionnez New File, et choisissez String Catalog. Nommez-le Localizable.xcstrings. Xcode proposera de migrer les fichiers .strings existants.

3

Accepter la migration

Xcode detecte vos fichiers .strings et .stringsdict existants et importe toutes les cles et traductions dans le nouveau catalogue. Verifiez les entrees importees dans l'editeur String Catalog.

4

Verifier et supprimer les anciens fichiers

Compilez votre projet et lancez-le dans chaque langue pour confirmer que les traductions s'affichent correctement. Une fois verifie, supprimez les anciens fichiers .strings et .stringsdict de votre projet.

Detection automatique

Xcode 15+ detecte automatiquement les appels Text() et NSLocalizedString et les ajoute a votre String Catalog lors de la compilation.

Travailler avec les String Catalogs en SwiftUI

SwiftUI rend l'utilisation des String Catalogs particulierement simple. Les vues Text recherchent automatiquement leur argument texte dans votre catalogue. Pas besoin d'appels explicites a NSLocalizedString.

ContentView.swiftswift
import SwiftUI

struct ContentView: View {
var body: some View {
VStack(spacing: 16) {
// Automatically looks up "Welcome" in your String Catalog
Text("Welcome")
.font(.largeTitle)

// String interpolation works with LocalizedStringKey
Text("Hello, \(username)")
.font(.headline)

// Explicit key with default value
Text("settings_title")
.font(.title2)
}
}
}
LocalizedStringKey.swiftswift
import SwiftUI

// String interpolation in String Catalogs
// The key in your .xcstrings becomes: "Hello, %@"
let greeting = LocalizedStringKey("Hello, \(name)")

// Plurals work automatically when you use string interpolation
// The key becomes: "%lld items in your cart"
let cartLabel = LocalizedStringKey("\(itemCount) items in your cart")

// You can also use String(localized:) for non-View contexts
let title = String(localized: "notification_title")
💡

LocaleKit + .xcstrings

LocaleKit lit les fichiers .xcstrings nativement. Lancez localekit scan pour detecter votre String Catalog et localekit translate pour completer les traductions manquantes.

Pluralisation dans les String Catalogs

Les String Catalogs gerent les pluriels via les variations. Au lieu d'un fichier .stringsdict separe, les regles de pluriel vivent directement dans le catalogue. Xcode affiche un menu deroulant pour chaque categorie de pluriel dont la langue a besoin.

Exemple de pluriel dans .xcstringsjson
{
"item_count": {
"localizations": {
"en": {
"variations": {
"plural": {
"one": {
"stringUnit": {
"state": "translated",
"value": "%lld item"
}
},
"other": {
"stringUnit": {
"state": "translated",
"value": "%lld items"
}
}
}
}
},
"ar": {
"variations": {
"plural": {
"zero": { "stringUnit": { "state": "translated", "value": "لا عناصر" } },
"one": { "stringUnit": { "state": "translated", "value": "عنصر واحد" } },
"two": { "stringUnit": { "state": "translated", "value": "عنصران" } },
"few": { "stringUnit": { "state": "translated", "value": "%lld عناصر" } },
"many": { "stringUnit": { "state": "translated", "value": "%lld عنصرًا" } },
"other": { "stringUnit": { "state": "translated", "value": "%lld عنصر" } }
}
}
}
}
}
}

FAQ String Catalog

Les .xcstrings sont-ils retrocompatibles avec les anciennes versions de Xcode ?

Non. Les String Catalogs necessitent Xcode 15 ou plus recent. La cible de deploiement de votre projet peut etre plus ancienne (jusqu'a iOS 13), mais il faut Xcode 15+ pour editer le catalogue. Les anciennes versions de Xcode ne reconnaitront pas le fichier.

Peut-on utiliser .xcstrings dans les pipelines CI/CD ?

Oui. Puisque .xcstrings est un fichier JSON, vous pouvez le parser, le valider et lancer des outils de traduction dans votre CI. Le CLI de LocaleKit lit et ecrit les .xcstrings directement, vous pouvez donc lancer localekit translate et localekit validate dans votre pipeline.

Est-il prudent de modifier .xcstrings a la main ?

Oui, mais attention a la structure JSON. Une virgule ou un crochet manquant cassera le fichier. Utilisez localekit validate apres les modifications manuelles pour detecter les problemes structurels. Pour les modifications en masse, un outil ou un script est plus sur que l'edition manuelle.

Peut-on exporter .xcstrings en XLIFF pour des traducteurs externes ?

Oui. La fonction Export Localizations de Xcode (Product > Export Localizations) lit votre .xcstrings et genere des fichiers XLIFF standards. Les traducteurs externes travaillent avec le XLIFF, et vous l'importez ensuite dans le catalogue.

Les String Catalogs ont reduit notre workflow de localisation d'une journee entiere a moins d'une heure. Avoir tout dans un seul fichier au lieu de fichiers .strings eparpilles dans 14 langues a ete la plus grande amelioration de qualite de vie dans Xcode 15 pour notre equipe.

Camille Chambefort, iOS Engineer chez Lydia

Arrêtez de gérer vos fichiers de traduction manuellement

LocaleKit détecte, traduit et synchronise tous vos fichiers de localisation — iOS, Android, Flutter et plus. Tout tourne localement sur votre machine.

Respect de la vie privée. Aucun cloud requis.