
Le guide complet de la localisation des applications iOS
De Localizable.strings aux métadonnées App Store : localisez votre application iOS avec Xcode, SwiftUI, Fastlane et la traduction automatisée par IA.
Activer la localisation dans Xcode
Ouvrez les paramètres de votre projet Xcode, accédez à Info > Localizations, puis ajoutez les langues que vous souhaitez prendre en charge. Xcode crée automatiquement des répertoires .lproj pour chaque langue.
// In Xcode:
// 1. Select your project in the navigator
// 2. Go to Info tab > Localizations
// 3. Click + to add languages (e.g., German, Japanese)
// 4. Select which files to localize
//
// Xcode creates .lproj directories automatically:
// en.lproj/Localizable.strings
// de.lproj/Localizable.strings
// ja.lproj/Localizable.stringsCréer Localizable.strings
Le fichier de localisation iOS standard utilise des paires clé-valeur séparées par des signes égal, chaque ligne se terminant par un point-virgule. Placez-le dans votre dossier Base.lproj pour la langue source.
// Base.lproj/Localizable.strings
"welcome_title" = "Welcome to MyApp";
"login_button" = "Sign In";
"settings_label" = "Settings";
"greeting" = "Hello, %@!"; // %@ = string placeholder
"item_count" = "%d items"; // %d = integer placeholder// ❌ Common mistakes in .strings files:
// Missing semicolon — file loads but translations are empty
"welcome_title" = "Welcome"
// Unescaped quotes — causes parse error
"message" = "Click "here" to continue";
// ✅ Correct versions:
"welcome_title" = "Welcome";
"message" = "Click \"here\" to continue";Migrer vers les String Catalogs (Xcode 15 et versions ultérieures)
Les String Catalogs (.xcstrings) sont le remplacement moderne d'Apple pour les fichiers .strings. Ils proposent un éditeur visuel dans Xcode, une extraction automatique des chaînes depuis vos vues SwiftUI, ainsi qu'une prise en charge native des pluriels.
// Xcode 15+ String Catalog (Localizable.xcstrings)
// Xcode automatically extracts strings from your code
// and manages translations in a visual editor.
// In SwiftUI, strings are automatically localizable:
Text("Welcome to MyApp")
Text("Hello, \(userName)!")
// Mark strings explicitly:
let title = String(localized: "welcome_title")Utiliser les chaînes localisées dans SwiftUI et UIKit
La vue Text de SwiftUI localise automatiquement les littéraux de chaîne. UIKit utilise NSLocalizedString. À partir d'iOS 16, l'API moderne String(localized:comment:) offre une syntaxe plus claire avec une prise en charge intégrée du compilateur.
import SwiftUI
struct ContentView: View {
let userName: String
var body: some View {
VStack {
// ✅ SwiftUI auto-localizes string literals
Text("welcome_title")
// ⚠️ This does NOT localize (String interpolation)
// Text("Hello, \(userName)")
// ✅ Use String(localized:) for dynamic strings
Text(String(localized: "greeting \(userName)"))
// ✅ UIKit style (works everywhere)
let title = NSLocalizedString(
"settings_label",
comment: "Settings screen title"
)
// ✅ Modern API (iOS 16+)
let modern = String(
localized: "welcome_title",
comment: "Main screen title"
)
}
}
}Gérer les pluriels
iOS utilise des fichiers .stringsdict pour les règles de pluriel, en prenant en charge toutes les catégories plurielles CLDR : zero, one, two, few, many, other. Les String Catalogs gèrent les pluriels avec un éditeur visuel dans Xcode — bien plus simple que d'écrire du XML stringsdict à la main.
<!-- Localizable.stringsdict -->
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>items_count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>zero</key>
<string>No items</string>
<key>one</key>
<string>%d item</string>
<key>other</key>
<string>%d items</string>
</dict>
</dict>
</dict>
</plist>
// Usage in Swift:
String(format: NSLocalizedString("items_count", comment: ""),
itemCount)Localiser les métadonnées App Store avec Fastlane
Utilisez l'outil deliver de Fastlane pour conserver les métadonnées App Store — nom de l'application, sous-titre, description, mots-clés, notes de version — sous contrôle de version dans votre dépôt, sous forme de fichiers texte organisés par locale.
# Install Fastlane
$ gem install fastlane
# Initialize deliver for App Store metadata
$ fastlane deliver init
# Directory structure created:
# fastlane/metadata/
# ├── en-US/
# │ ├── name.txt # App name (30 chars)
# │ ├── subtitle.txt # Subtitle (30 chars)
# │ ├── description.txt # Full description
# │ ├── keywords.txt # Search keywords (100 chars)
# │ ├── release_notes.txt # What's New
# │ └── promotional_text.txt
# ├── de-DE/
# │ └── ...
# └── ja/
# └── ...
# Push metadata to App Store Connect:
$ fastlane deliverTester votre localisation
Testez le contenu localisé sans changer la langue de votre appareil. Utilisez les surcharges de schéma Xcode pour exécuter l'application dans n'importe quelle langue, les aperçus SwiftUI avec un environnement de locale, et XCUITest avec des arguments de lancement pour les tests automatisés.
// 1. Xcode Scheme Override:
// Edit Scheme > Run > Options > App Language > Choose language
// 2. SwiftUI Preview with locale:
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environment(\.locale, Locale(identifier: "de"))
ContentView()
.environment(\.locale, Locale(identifier: "ja"))
ContentView()
.environment(\.locale, Locale(identifier: "ar"))
}
}
// 3. XCUITest with language override:
let app = XCUIApplication()
app.launchArguments += ["-AppleLanguages", "(de)"]
app.launchArguments += ["-AppleLocale", "de_DE"]
app.launch()Automatiser la qualité des traductions
Automatiser les traductions
Traduisez vos fichiers .strings, .xcstrings et de métadonnées Fastlane grâce à l'IA. Automatisez la traduction des chaînes intégrées à l'application comme des métadonnées App Store pour une présence entièrement localisée.
# Translate .strings files
> Translate Base.lproj/Localizable.strings
to Japanese, German, and Spanish
# Translate App Store metadata too
> Translate fastlane/metadata/en-US/
to de-DE, ja, es-MX
✓ 6 files translated in 3.2sBonus : repli de locale intelligent avec LocaleChain
Par défaut, iOS revient à votre langue de développement lorsque la locale exacte d'un utilisateur n'est pas disponible. Un utilisateur pt-BR ne disposant que de traductions pt-PT verra s'afficher l'anglais au lieu du portugais. LocaleChain corrige ce problème grâce à des chaînes de repli configurables.
LocaleChain est un package Swift open source. Voir sur GitHub
// Swift Package Manager
// File > Add Package Dependencies >
// https://github.com/i18n-agent/ios-localechain.gitimport LocaleChain
// In your App init or AppDelegate:
LocaleChain.configure() // Activates all default chains
// pt-BR user with only pt-PT translations?
// → Shows Portuguese instead of falling back to English
// Custom overrides for your specific locales:
LocaleChain.configure(
overrides: ["es-MX": ["es-419", "es"]]
)Pièges courants
Erreurs de syntaxe dans les fichiers .strings
L'interpolation de texte SwiftUI ne se localise pas
Les widgets/extensions affichent des clés brutes
Les traductions manquantes affichent des clés en production
Structure de fichiers recommandée
MyApp/
├── MyApp.xcodeproj
├── MyApp/
│ ├── Base.lproj/
│ │ ├── Localizable.strings # Source strings
│ │ └── Localizable.stringsdict # Plural rules
│ ├── en.lproj/
│ │ └── Localizable.strings
│ ├── de.lproj/
│ │ └── Localizable.strings
│ ├── ja.lproj/
│ │ └── Localizable.strings
│ ├── Localizable.xcstrings # OR String Catalog
│ └── Info.plist
├── MyAppTests/
├── fastlane/
│ ├── Fastfile
│ └── metadata/
│ ├── en-US/
│ │ ├── name.txt
│ │ ├── description.txt
│ │ └── keywords.txt
│ ├── de-DE/
│ └── ja/
└── Package.swiftTraduisez également :
Essayez i18n Agent maintenant
Déposez votre fichier de traduction ici
JSON, YAML, PO, XML, CSV, Markdown, Properties
ou cliquez pour parcourir
Langues cibles
Repli de locale avec ios-localechain
Lorsqu'une clé de traduction est manquante dans une locale régionale comme de-AT, iOS bascule directement vers la langue de développement au lieu de vérifier d'abord la locale parente de.
// Swift Package Manager
// https://github.com/i18n-agent/ios-localechainimport LocaleChain
LocaleChain.configure(overrides: [
"de": ["en-GB", "en"],
"pt-BR": ["pt", "en"],
"zh-Hant-HK": ["zh-Hant", "zh", "en"],
])Consultez notre guide de repli de locale pour découvrir la liste complète des frameworks pris en charge et les 75 chaînes intégrées. Learn more →