Aller au contenu principal

Formatage

Variables​

Une variable s'écrit entre deux %. Sa valeur est passée dans le second argument de t() :

locales/en-US.json
{
"greeting": "Hello, %name%!"
}
ctx.t('greeting', {name: 'Alice'}); // "Hello, Alice!"

Pour écrire un % littéral, échappez-le : \%. En JSON, la barre oblique inverse s'écrit elle-même doublée :

{
"discount": "%value%\\% de réduction"
}
Valeurs obligatoires

Une chaîne qui contient des variables exige un objet de valeurs, et chaque variable utilisée doit y figurer. Sinon, t() lève une erreur.

Expressions​

Une expression s'écrit %variable:expression(paramètres)%. Les paramètres multiples sont séparés par |.

if : texte conditionnel​

%variable:if(texte)% affiche le texte si la variable vaut true, rien sinon. La variable doit être un booléen.

{
"weather": "It is %temp% degrees outside. %isHot:if(Wow, that's hot...)%"
}
ctx.t('weather', {temp: 30, isHot: true});
// "It is 30 degrees outside. Wow, that's hot..."

either : l'un ou l'autre​

%variable:either(si vrai|si faux)% choisit entre deux textes selon un booléen. Il faut exactement deux paramètres.

{
"status": "The raid mode is %enabled:either(on|off)%."
}

plural : pluriels​

%variable:plural(singulier|pluriel|zéro)% choisit selon un nombre :

  • 1 donne le singulier ;
  • 0 donne le troisième paramètre s'il est fourni, sinon le pluriel ;
  • toute autre valeur donne le pluriel.
{
"inbox": "You have %count% %count:plural(message|messages|no messages)%"
}
ctx.t('inbox', {count: 1}); // "You have 1 message"
ctx.t('inbox', {count: 5}); // "You have 5 messages"

La variable doit être un nombre.

date : dates​

%variable:date(format)% met en forme un objet Date. Jetons disponibles :

  • YYYY : année sur 4 chiffres ;
  • YY : année sur 2 chiffres ;
  • MM : mois sur 2 chiffres ;
  • DD : jour sur 2 chiffres ;
  • hh : heure sur 2 chiffres ;
  • mm : minutes sur 2 chiffres ;
  • ss : secondes sur 2 chiffres.
{
"joined": "Member since %date:date(DD/MM/YYYY)%"
}
ctx.t('joined', {date: new Date(2026, 8, 24)}); // "Member since 24/09/2026"

Chaque jeton n'est remplacé qu'une fois par format.

switch : cas multiples​

%variable:switch(cas:texte|cas:texte)% renvoie le texte du premier cas qui correspond. Un cas peut être :

  • un texte exact : %role:switch(admin:Administrator|mod:Moderator)% ;
  • un nombre exact : %level:switch(1:Beginner|2:Advanced)% ;
  • un intervalle min-max, bornes exclues par défaut. Ajoutez ! après une borne pour l'inclure, et utilisez -inf ou inf pour un intervalle ouvert.
{
"size": "%members:switch(-inf-50:A small server|50!-1000:A growing server|1000!-inf:A large server)%"
}
ctx.t('size', {members: 50}); // "A growing server"

Si aucun cas ne correspond, t() lève une erreur : prévoyez des intervalles qui couvrent toutes les valeurs possibles. Ne mélangez pas cas texte et valeur numérique : un cas texte comparé à un nombre lève aussi une erreur. Enfin, le texte d'un cas ne peut pas contenir de deux-points (:).