Déclaration 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 →
Bien que vous puissiez déclarer vos messages en utilisant uniquement des id, nous recommandons vivement de déclarer les defaultMessage en ligne avec leurs utilisations pour les raisons suivantes :
-
Les messages colocalisés avec leurs utilisations deviennent auto-gérés : lorsque leurs utilisations changent ou sont supprimées, les messages le sont aussi.
-
Les messages sont fortement contextuels. Nous avons constaté de nombreux cas où les développeurs supposent une certaine grammaire lors de la rédaction. Les boutons/appels à l'action et les étiquettes sont également traduits différemment.
-
Le style du texte dépend aussi du message lui-même. Des éléments comme la troncation, la capitalisation... affectent nécessairement les messages.
-
Meilleure intégration avec les chaînes d'outils. La plupart ne peuvent pas vérifier les références inter-fichiers pour valider la syntaxe/l'usage.
À haut niveau, les messages formatjs utilisent la syntaxe ICU avec quelques améliorations communes à d'autres formats comme Fluent. Cette section se concentre sur les méthodes supportées pour appeler les APIs formatjs afin d'extraire les messages.
Utilisation de l'API impérative intl.formatMessage
// Method must be exactly `intl.formatMessage`
intl.formatMessage(
{
description: 'A message', // Description should be a string literal
defaultMessage: 'My name is {name}', // Message should be a string literal
},
{
name: userName,
} // Values should be an object literal, but not necessarily every value inside
)
Utilisation de l'API React <FormattedMessage/>
import {FormattedMessage} from 'react-intl'
;<FormattedMessage
description="A message" // Description should be a string literal
defaultMessage="My name is {name}" // Message should be a string literal
values={
{
name: userName,
} // Values should be an object literal, but not necessarily every value inside
}
/>
Utilisation de l'API Vue et des méthodes de template comme $formatMessage
<template>
<p>{{ $formatNumber(3, {style: 'currency', currency: 'USD'}) }}</p>
</template>
Pré-déclaration avec defineMessage pour usage ultérieur (déconseillé)
import {defineMessage} from 'react-intl'
const message = defineMessage({
description: 'A message', // Description should be a string literal
defaultMessage: 'My name is {name}', // Message should be a string literal
})
intl.formatMessage(message, {name: 'John'}) // My name is John
<FormattedMessage
{...message}
values={{
name: 'John',
}}
/> // My name is John
Nous utilisons l'AST pour extraire les messages du codebase. Vérifiez donc que vous appelez bien intl.formatMessage(), utilisez nos composants React natifs, nos méthodes Vue ou configurez correctement --additionalFunctionNames/--additionalComponentNames dans notre CLI.
Vous pouvez déclarer un message sans le formater immédiatement avec defineMessage et notre extracteur pourra toujours l'extraire. Cependant, notre règle de linter enforce-placeholders ne pourra pas l'analyser.