Syntaxe des messages
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Lorsque vous traduisez du texte, vous avez besoin d'un moyen pour vos traducteurs d'exprimer les subtilités d'orthographe, de grammaire et de conjuguation propres à chaque langue. Nous utilisons la syntaxe ICU Message également employée dans Java et PHP.
La bibliothèque intl-messageformat prend le message et les données d'entrée pour générer une chaîne formatée correctement. Cette fonctionnalité est incluse dans toutes les intégrations que nous proposons.
Les sections suivantes décrivent la syntaxe ICU Message et montrent comment utiliser ces fonctionnalités via les bibliothèques FormatJS :
Principes de base
La transformation la plus simple pour un message est une chaîne littérale.
Hello everyone
Toutes les autres transformations s'effectuent via des remplacements appelés "arguments". Ils sont encadrés par des accolades ({ et }) et font référence à une valeur dans les données d'entrée.
Argument simple
Vous pouvez utiliser un argument {key} pour insérer une valeur dans le message. La clé est recherchée dans les données d'entrée, et la chaîne est interpolée avec sa valeur.
Argument formaté
Les valeurs peuvent également être formatées selon leur type. Pour cela, utilisez un argument {key, type, format}.
Les éléments de l'argument sont :
-
key: emplacement des données dans les données d'entrée -
type: optionnel, définit comment interpréter la valeur (voir ci-dessous) -
format: optionnel, précise davantage la manière d'afficher ce type de données
Type number
Ce type sert à formater les nombres selon les conventions locales. Il comprend les valeurs suivantes pour l'élément optionnel format de l'argument :
En interne, il utilise l'API Intl.NumberFormat. Vous pouvez définir des valeurs personnalisées pour l'élément format, qui sont transmises au constructeur Intl.NumberFormat.
L'intégration du formatage numérique fournit un contexte précieux aux traducteurs. Nous prenons également en charge les squelettes numériques ICU avec la même syntaxe :
Vous pouvez en savoir plus ici.
Pour un contrôle précis de la précision décimale, utilisez les symboles # et 0 de précision fractionnaire, qui spécifient le nombre de décimales à afficher :
Notez que le symbole # n'affiche pas les zéros de fin, comme illustré dans cet exemple :
Pour afficher les zéros de fin, utilisez le symbole 0 :
Pour plus de détails, consultez Précision fractionnaire.
Type date
Ce type sert à formater les dates selon les conventions locales. Il comprend les valeurs suivantes pour l'élément optionnel format de l'argument :
-
short: formatage des dates de la manière la plus concise possible -
medium: formatage des dates avec une représentation textuelle courte du mois -
long: formatage des dates avec une représentation textuelle longue du mois -
full: formatage des dates avec le plus de détails
En interne, il utilise l'API Intl.DateTimeFormat. Vous pouvez définir des valeurs personnalisées pour l'élément de format, qui sont transmises au constructeur Intl.DateTimeFormat.
Type time
Ce type sert à formater les heures selon les conventions locales. Il comprend les valeurs suivantes pour l'élément optionnel format de l'argument :
-
short: utilisé pour formater l'heure en affichant uniquement les heures et les minutes -
medium: utilisé pour formater l'heure en affichant les heures, les minutes et les secondes -
long: utilisé pour formater l'heure en affichant les heures, les minutes, les secondes et le fuseau horaire -
fullest identique à long
En interne, il utilise l'API Intl.DateTimeFormat. Vous pouvez définir des valeurs personnalisées pour l'élément de format, qui sont transmises au constructeur Intl.DateTimeFormat.
Squelettes DateTime pris en charge
Comme pour le type number, nous prenons également en charge les squelettes DateTime d'ICU. ICU propose un large éventail de motifs pour personnaliser le format date-heure. Cependant, tous ne sont pas disponibles via l'API Intl d'ECMA402. Par conséquent, nous ne prenons en charge que les motifs suivants :
| Symbol | Meaning | Notes |
|---|---|---|
| G | Era designator | |
| y | year | |
| M | month in year | |
| L | stand-alone month in year | |
| d | day in month | |
| E | day of week | |
| e | local day of week | e..eee is not supported |
| c | stand-alone local day of week | c..ccc is not supported |
| a | AM/PM marker | |
| h | Hour [1-12] | |
| H | Hour [0-23] | |
| K | Hour [0-11] | |
| k | Hour [1-24] | |
| m | Minute | |
| s | Second | |
| z | Time Zone |
Format {select}
Le format {key, select, matches} permet de choisir une sortie en faisant correspondre une valeur à une option parmi plusieurs. (Cela ressemble à l'instruction switch présente dans certains langages de programmation.) La clé est recherchée dans les données d'entrée. La valeur correspondante est comparée aux options de matches, et la sortie associée est renvoyée. L'argument key doit respecter la syntaxe des motifs Unicode (Pattern_Syntax). matches est une liste d'options séparées par des espaces.
Le format d'une option est match {output}. (Une option est similaire à l'instruction case d'un switch.) match est une valeur littérale. Si elle correspond à la valeur de key, la sortie output associée sera utilisée.
output est lui-même un message, il peut donc être une chaîne littérale ou contenir des arguments imbriqués.
L'option other est spéciale et est utilisée si aucune autre correspondance n'est trouvée. (Cela équivaut au cas default d'un switch.)
other est obligatoire selon l'implémentation d'icu4j. Une erreur sera levée si select est utilisé sans other.
Voici un exemple d'arguments imbriqués :
Format {plural}
Le format {key, plural, matches} permet de choisir une sortie basée sur les règles de pluralisation de la locale actuelle. Il est très similaire au format {select} ci-dessus, sauf que la valeur doit être un nombre et est mappée à une catégorie de pluriel.
La correspondance est une valeur littérale qui correspond à l'une de ces catégories plurielles. Toutes les langues n'utilisent pas toutes les catégories plurielles.
-
zero: Cette catégorie est utilisée pour les langues ayant une grammaire spécialisée pour zéro élément (exemples : arabe et letton). -
one: Utilisé pour les langues ayant une grammaire dédiée spécifiquement à un élément (singulier). Beaucoup de langues utilisent cette catégorie, mais pas toutes (ex. : chinois, japonais ne l'utilisent pas). -
two: Utilisé pour les langues ayant une grammaire dédiée spécifiquement à deux éléments (duel) (ex. : arabe, gallois). -
few: Utilisé pour les langues ayant une grammaire dédiée à un petit nombre d'éléments (paucal). Pour certaines langues, cela couvre 2-4 éléments, pour d'autres 3-10, avec des règles parfois complexes. -
many: Cette catégorie est utilisée pour les langues ayant une grammaire spécialisée pour un grand nombre d'éléments (exemples : arabe, polonais, russe). -
other: Cette catégorie est utilisée quand la valeur ne correspond à aucune autre catégorie. Elle sert de pluriel pour les langues (comme l'anglais) ayant une simple dichotomie singulier/pluriel. -
=value: Permet de correspondre à une valeur spécifique, indépendamment des catégories plurielles de la locale.
N'utilisez pas =1 à la place de one. one ne signifie pas toujours 1 mais plutôt singular, ce qui peut correspondre à d'autres nombres que 1 dans certaines locales.
Certaines locales considèrent que tous les nombres se terminant par 1 (comme 1, 11, 111) sont au singular.
other est requis selon l'implémentation de icu4j. Nous générerons une erreur si plural est utilisé sans other.
Dans la output de la correspondance, vous pouvez utiliser le jeton spécial # comme espace réservé pour la valeur numérique, et il sera formaté comme s'il s'agissait de {key, number}. C'est le style que nous préférons utiliser.
Format {selectordinal}
Le format {key, selectordinal, matches} permet de choisir une sortie basée sur les règles de pluralisation ordinale (1er, 2e, 3e, etc.) de la locale actuelle. Il est très similaire au format {plural} ci-dessus, sauf que la valeur est mappée à une catégorie plurielle ordinale.
La correspondance est une valeur littérale qui correspond à l'une de ces catégories plurielles. Toutes les langues n'utilisent pas toutes les catégories plurielles.
-
zero: Cette catégorie est utilisée pour les langues ayant une grammaire spécialis ée pour zéro élément (exemples : arabe et letton). -
one: Cette catégorie est utilisée pour les langues ayant une grammaire spécialisée pour un élément. De nombreuses langues (mais pas toutes) utilisent cette catégorie (exemples : l'anglais et le français, mais pas le chinois ou le japonais). -
two: Cette catégorie est utilisée pour les langues ayant une grammaire spécialisée pour deux éléments (exemples : arabe et gallois). -
few: Cette catégorie est utilisée pour les langues ayant une grammaire spécialisée pour un petit nombre d'éléments. Pour certaines langues, cela correspond à 2-4 éléments, pour d'autres 3-10 éléments, avec des règles parfois complexes. -
many: Cette catégorie est utilisée pour les langues ayant une grammaire spécialisée pour un grand nombre d'éléments (exemples : arabe, polonais, russe). -
other: Cette catégorie est utilisée quand la valeur ne correspond à aucune autre catégorie. Elle sert de pluriel pour les langues (comme l'anglais) ayant une simple dichotomie singulier/pluriel. -
=value: Permet de correspondre à une valeur spécifique, indépendamment des catégories plurielles de la locale.
other est requis selon l'implémentation de icu4j. Nous générerons une erreur si selectordinal est utilisé sans other.
Dans la output de la correspondance, le jeton spécial # peut être utilisé comme espace réservé pour la valeur numérique et sera formaté comme s'il s'agissait de {key, number}.
Formatage de texte enrichi
Nous prenons également en charge le formatage de texte enrichi intégré dans nos messages via des balises. Cela permet aux développeurs d'intégrer davantage de texte sans fragmenter les phrases. REMARQUE : Ce ne sont pas des balises XML/HTML
Les systèmes utilisant ce formatage doivent implémenter des méthodes externes pour gérer ces espaces réservés. Les balises feront partie de la sortie générée et peuvent être post-traitées par vos outils ou via la configuration defaultRichTextElements.
Guillemets / Échappement
L'apostrophe ASCII ' (U+0027) peut être utilisée pour échapper les caractères syntaxiques dans la partie texte du message, reproduisant le comportement de citation/échappement d'ICU.
Deux apostrophes ASCII consécutives représentent une seule apostrophe ASCII, similairement à %% dans printf qui représente un %.
Cependant, nous recommandons d'utiliser l'apostrophe courbe ’ (U+2019) pour les chaînes destinées à être lues par des humains, et de réserver l'apostrophe ASCII ' (U+0027) à la syntaxe des messages ICU.