Pour compléter un libellé pluriel dans une app Mac, ajoutez des variantes plurielles dans Xcode, fournissez toutes les catégories nécessaires à chaque localisation prise en charge et testez les résultats affichés. Ce guide utilise un message fictif de sélection d’éléments.
La tâche consiste à terminer un libellé dépendant d’un nombre dans une app Mac SwiftUI. Le message indique combien d’éléments sont sélectionnés, accepte un entier non négatif et conserve ce sens dans toutes les traductions. Le processus associe la couverture des catégories, la vérification des espaces réservés et des tests à l’exécution afin de définir clairement les critères d’acceptation d’une entrée de catalogue complète.
Que faut-il pour une couverture complète des pluriels ?
Apple recommande les catalogues de chaînes pour la localisation des pluriels dans Xcode 15 et versions ultérieures. Sa documentation sur les pluriels distingue une forme de repli obligatoire de l’exhaustivité grammaticale : other est obligatoire dans un dictionnaire de chaînes, mais l’omission de catégories supplémentaires propres à la langue peut produire une grammaire incorrecte. L’anglais exige one et other ; sa catégorie zero est facultative. Localisation des chaînes contenant des pluriels.
Les noms de catégories possibles sont zero, one, two, few, many et other. Ils décrivent des regroupements grammaticaux qui dépendent de la langue, et non six plages numériques communes à toutes les langues. Une catégorie nommée one ne doit pas devenir une règle universelle de l’application qui vérifie uniquement si le nombre est égal à un. Unicode définit les catégories selon les changements qu’imposent les nombres dans une phrase, y compris des changements qui ne concernent pas seulement le nom. Règles de pluriel.
Pour cette tâche, utilisez le contrat de message suivant. Il s’agit d’exigences illustratives pour l’application, et non d’exigences imposées par Apple.
| Champ du contrat | Exigence pour cet exemple |
|---|---|
| Clé du message | selection.count |
| Valeur par défaut en anglais | \(count) items selected |
| Entrée | Un entier Swift Int non négatif nommé count |
| Signification | Nombre d’éléments actuellement sélectionnés |
| Sortie | Un libellé localisé complet contenant le nombre |
| Couverture | Chaque localisation prise en charge, y compris la localisation source |
| Critères d’acceptation | Catégories requises fournies, substitution numérique préservée, résultats représentatifs vérifiés |
Exiger l’affichage du nombre est un choix délibéré pour ce libellé. Apple autorise des variantes plurielles qui écrivent un nombre en toutes lettres ou omettent le spécificateur de format numérique. Un autre contrat de message pourrait le permettre. Ici, conserver le nombre visible facilite la comparaison entre le libellé et la sélection décrite. Localisation des chaînes contenant des pluriels.
Relier le message Swift au catalogue
String.LocalizationValue de Swift prend en charge le texte localisable avec interpolation à l’exécution. Lorsqu’un identifiant stable doit différer du texte source en anglais, Apple recommande un initialiseur String avec un defaultValue distinct. Cela convient à selection.count : l’identifiant nomme le message, tandis que sa valeur par défaut fournit le texte anglais. String.LocalizationValue.
Pour une petite app de test, créez dans Xcode 15 ou une version ultérieure un projet d’app macOS utilisant SwiftUI, avec une cible de déploiement macOS 12 ou ultérieure. Remplacez le fichier d’entrée d’app généré par le programme complet ci-dessous ; ne conservez qu’une seule déclaration @main dans la cible. Ajoutez Localizable.xcstrings à la cible de l’app avant de suivre les étapes relatives au catalogue. Le programme nécessite Xcode et le SDK macOS ; il n’a pas été compilé dans cet environnement de recherche.
import Foundation
import SwiftUI
@main
struct PluralSampleApp: App {
var body: some Scene {
WindowGroup {
PluralSampleView()
}
}
}
struct PluralSampleView: View {
@State private var count: Int = 1
private let samples: [Int] = [
0, 1, 2, 3, 4, 5, 10, 11, 12,
20, 21, 22, 100, 101, 102, 1_000_000
]
private var selectionLabel: String {
String(
localized: "selection.count",
defaultValue: "\(count) items selected",
comment: "Selection summary. The integer is the number of selected items. Keep the count visible in every plural variant."
)
}
var body: some View {
VStack(alignment: .leading, spacing: 16) {
Picker("Sample count", selection: $count) {
ForEach(samples, id: \.self) { value in
Text(verbatim: String(value)).tag(value)
}
}
Text(verbatim: selectionLabel)
}
.padding(24)
.frame(minWidth: 360)
}
}
Les options numériques du sélecteur sont des entrées de test. Le résumé localisé est résolu par String(localized:defaultValue:comment:), puis affiché sous forme de chaîne obtenue. Apple indique que le premier argument de l’initialiseur fournit la clé de recherche, que sa valeur par défaut fournit le texte source et que les commentaires donnent du contexte aux traducteurs. Lors d’une compilation, Xcode extrait les chaînes transmises aux API localisables. Préparer le texte de votre app pour la traduction.
Conservez l’entier dans l’interpolation localisable. Pour ce contrat, ne précomposez pas des phrases anglaises distinctes au singulier et au pluriel dans des branches de l’application. Un seul message confie au catalogue une responsabilité claire : sélectionner la formulation localisée appropriée au nombre fourni.
Fournir les catégories pour chaque localisation prise en charge
Utilisez l’éditeur de Xcode pour créer la structure des variantes :
- Choisissez
Product > Buildpour remplir le catalogue. - Ouvrez
Localizable.xcstringset sélectionnez la localisation source. - Faites un clic droit avec la touche Contrôle sur
selection.countet choisissezVary by Plural. - Remplissez chaque variante de la langue source.
- Ajoutez les localisations prises en charge à l’aide du bouton
Addde la barre latérale, puis remplissez leurs variantes.
Xcode ajoute les formes plurielles propres à chaque langue et détermine le spécificateur de format de l’interpolation. Appliquer la variation plurielle à la localisation source maintient la structure des variantes synchronisée entre les langues ; l’appliquer uniquement à une autre localisation ne concerne que celle-ci. Localiser et faire varier le texte avec un catalogue de chaînes.
Pour cette interpolation d’entier, les entrées anglaises peuvent être les suivantes :
| Catégorie anglaise | Valeur du catalogue |
|---|---|
one |
%lld item selected |
other |
%lld items selected |
Utilisez le spécificateur généré par Xcode pour le type réel de l’interpolation. L’exemple d’entier documenté par Apple utilise %lld ; copier un autre espace réservé dans une traduction peut rompre le contrat des arguments. Xcode préremplit initialement les champs des variantes avec la valeur de la clé : vérifiez donc la formulation de chaque champ. Localiser et faire varier le texte avec un catalogue de chaînes.
Créez une feuille de suivi de couverture comportant une ligne pour chaque identifiant de localisation réel. Consignez les catégories générées par Xcode pour ce message, indiquez si chacune contient un texte finalisé et notez les entrées à tester. L’utilisation des identifiants réels du projet évite qu’un nom générique de langue masque une localisation non vérifiée.
Ne copiez pas le jeu de catégories anglaises dans chaque ligne. De même, n’exigez pas les six catégories partout. Laissez le catalogue fournir la structure de travail, puis consultez les règles de pluriel cardinal de la langue pour choisir les entrées de test. Les règles cardinales concernent les quantités ; les règles ordinales concernent les positions et répondent à une autre question. Unicode les documente comme des types de règles distincts. Norme technique Unicode nº 35 : nombres.
Valider séparément la structure, les espaces réservés et le texte affiché
Effectuez trois vérifications, car chacune répond à une question différente. Une catégorie manquante est un problème de couverture ; un espace réservé incorrect est un problème de formatage ; une phrase maladroite est un problème de formulation. Les consigner séparément permet de déterminer clairement la correction à apporter.
Vérifier la couverture des catégories
Pour chaque ligne de la feuille de suivi, comparez les catégories attendues aux entrées renseignées dans le catalogue. Vérifiez que other existe et qu’aucune catégorie attendue ne contient une valeur vide ou une copie non finalisée du texte source.
Pour une vérification simple de complétude, définissez l’ensemble attendu comme les catégories générées pour cette localisation, auxquelles s’ajoutent les éventuelles dérogations prises en charge intentionnellement. L’ensemble des catégories manquantes correspond aux catégories attendues qui ne contiennent pas de texte finalisé. Toute catégorie manquante signifie que le message est incomplet selon les critères d’acceptation de cet article. Il s’agit d’une méthode de vérification pratique dérivée du processus de variation documenté, et non d’une affirmation selon laquelle Xcode impose exactement cette liste de contrôle.
Si deux catégories ont légitimement la même formulation, conservez-la là où c’est nécessaire et vérifiez les deux entrées. L’objectif est de préserver le sens du message dans les catégories requises ; il n’est pas nécessaire que chaque chaîne soit visiblement différente des autres.
Vérifier la substitution numérique
Compilez le projet et examinez les diagnostics du catalogue. Apple documente la validation des catalogues de chaînes pour repérer les problèmes courants, tels que les spécificateurs de format incompatibles. Corrigez ces diagnostics, puis vérifiez si chaque variante satisfait toujours l’exigence du message : afficher le nombre. Créer des apps prêtes pour plusieurs langues.
Pour cet exemple à un seul argument, vérifiez que l’espace réservé numérique est présent, qu’il est toujours numérique et qu’il apparaît une fois à l’endroit prévu. Une compilation réussie constitue un indice utile, mais la décision d’acceptation doit aussi tenir compte de la couverture des catégories et du texte réellement affiché.
Tester des nombres représentatifs dans l’app Mac
Choisissez Product > Scheme > Edit Scheme, sélectionnez Run, puis ouvrez Options. Définissez App Language et la valeur App Region applicable, fermez la boîte de dialogue et lancez l’app Mac. Répétez l’opération pour chaque localisation prise en charge. Apple documente cette procédure fondée sur le schéma pour tester le texte localisé. Tester les localisations lors de l’exécution de votre app.
Le sélecteur fourni donne un ensemble de départ de nombres à tester, et non une couverture universelle des catégories. Ajoutez des valeurs adaptées à chaque localisation avant de considérer sa ligne de test comme complète.
| Choix de test | Ce qu’il vérifie |
|---|---|
0, 1 et 2 |
Sélections vides, d’un seul élément et de quelques éléments |
| Au moins une entrée représentative par catégorie requise | Couverture des distinctions grammaticales de la localisation |
| Valeurs de part et d’autre des limites pertinentes des règles | Changements de catégorie au-delà des plus petits nombres |
| Un nombre élevé valide | Substitution numérique et espace disponible pour le libellé |
| Chaque entrée testée | Sens, formulation complète et visibilité du nombre |
Les règles Unicode associent des catégories à des conditions et à des exemples de valeurs ; des détails numériques, notamment les décimales, peuvent avoir leur importance. Ce contrat n’accepte que des entiers. Si l’application accepte ultérieurement des quantités décimales, révisez ensemble l’interpolation, le texte source et les tests au lieu de supposer que les résultats obtenus avec des entiers suffisent toujours à démontrer la couverture. Norme technique Unicode nº 35 : nombres.
Diagnostiquer un résultat inattendu
Choisissez la prochaine vérification en fonction du symptôme observé :
| Symptôme | Action suivante |
|---|---|
selection.count est absent du catalogue |
Relancez la compilation et vérifiez l’appel localisable ainsi que la table sélectionnée |
| Une seule localisation comporte des variantes plurielles | Vérifiez où Vary by Plural a été appliqué |
| Une variante contient encore la formulation plurielle anglaise | Vérifiez le champ prérempli et fournissez sa traduction finalisée |
| Le nombre affiché est absent ou mal formé | Comparez l’espace réservé de la variante au spécificateur généré par Xcode et au contrat du message |
| Un nombre plus élevé produit une formulation inattendue | Vérifiez la règle de catégorie de cette localisation et ajoutez un test représentatif |
| La formulation correcte ne tient pas à l’écran | Ajustez la vue et testez à nouveau le libellé complet |
Pour un ancien projet utilisant une version de Xcode antérieure à la version 15, Apple recommande les ressources .strings et .stringsdict. Le dictionnaire de pluriels fournit des variantes propres à chaque langue et exige other ; cela ne dispense pas de fournir les autres catégories nécessaires à une grammaire correcte. Localisation des chaînes contenant des pluriels.
Terminez le message lorsque chaque localisation prise en charge dispose d’une ligne de suivi complétée, que ses espaces réservés respectent le contrat et que des nombres représentatifs produisent le libellé attendu dans l’app en cours d’exécution. Mettez ces lignes à jour chaque fois que les localisations prises en charge, le type d’entrée numérique ou le sens du message change.
Sources
- Localiser et faire varier le texte avec un catalogue de chaînes — Apple
- Localisation des chaînes contenant des pluriels — Apple
- String.LocalizationValue — Apple
- Préparer le texte de votre app pour la traduction — Apple
- Tester les localisations lors de l’exécution de votre app — Apple
- Créer des apps prêtes pour plusieurs langues — Apple
- Règles de pluriel — Consortium Unicode
- Norme technique Unicode nº 35 : données de paramètres régionaux Unicode (CLDR), partie 3 : nombres — Consortium Unicode