Nachrichtendeklaration
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
Obwohl Sie Nachrichten nur mit ids deklarieren können, empfehlen wir dringend, defaultMessages direkt an der Verwendungsstelle zu deklarieren, und zwar aus folgenden Gründen:
-
Mit ihrem Kontext platzierte Nachrichten werden selbstverwaltet: Wenn ihre Verwendung geändert oder entfernt wird, gilt das auch für die Nachrichten.
-
Nachrichten sind stark kontextabhängig. Wir haben viele Fälle gesehen, in denen Entwickler beim Verfassen von Nachrichten von bestimmten grammatikalischen Strukturen ausgehen. Schaltflächen/Call-To-Actions und Beschriftungen werden zudem unterschiedlich übersetzt.
-
Die Textformatierung hängt ebenfalls von der Nachricht selbst ab. Aspekte wie Kürzung, Großschreibung... beeinflussen die Nachrichten entscheidend.
-
Bessere Integration in Toolchains. Die meisten Toolchains können dateiübergreifende Referenzen nicht überprüfen, um Syntax/Verwendung zu validieren.
Grundsätzlich nutzen formatjs-Nachrichten die ICU-Syntax mit einigen Erweiterungen, die auch in anderen Nachrichtenformaten wie Fluent üblich sind. Dieser Abschnitt konzentriert sich auf die tatsächlich unterstützten Methoden zum Aufruf der formatjs-APIs für die Nachrichtenextraktion.
Verwendung der imperativen API 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
)
Verwendung der React-API <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
}
/>
Verwendung der Vue-API & Template-Methoden wie $formatMessage
<template>
<p>{{ $formatNumber(3, {style: 'currency', currency: 'USD'}) }}</p>
</template>
Vorab-Deklaration mit defineMessage für spätere Verwendung (weniger empfohlen)
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
Wir nutzen AST zur Nachrichtenextraktion aus dem Codebase. Stellen Sie daher sicher, dass Sie entweder intl.formatMessage() aufrufen, unsere React-Komponenten nutzen, Vue-Methoden verwenden oder --additionalFunctionNames/--additionalComponentNames in unserer CLI korrekt konfigurieren.
Sie können Nachrichten mit defineMessage deklarieren, ohne sie sofort zu formatieren – unser Extrahierer wird sie trotzdem erfassen. Allerdings kann unsere enforce-placeholders-Linterregel sie dann nicht analysieren.