Zurück

gt-next@6.13.0

Ernest McCarter avatarErnest McCarter
gt-nextgt-i18nv6.13.0msgstring-registrationarraysi18n

Übersicht

msg() akzeptiert jetzt Arrays.

Früher mussten Sie, um eine Liste verwandter Strings zu registrieren, jeden Eintrag einzeln „wrappen“:

const confirmations = [
  msg("Yes"),
  msg("Yup"),
  msg("Right"),
  msg("Absolutely"),
  msg("Exactly"),
];

Das hat zwei Probleme. Erstens erfordert jede Zeile einen msg()-Aufruf. Zweitens benötigen verwandte Strings oft dieselben Metadaten – $context, $id usw. – und diese Metadaten müssen inline angegeben werden, weil die CLI (Kommandozeilenoberfläche) sie während des Builds auflöst. Für Strings wie "Right" oder "Exactly", die für sich genommen mehrdeutig sind, wiederholt man schließlich $context in jedem Eintrag:

const confirmations = [
  msg("Yes"),
  msg("Yup"),
  msg("Right", { $context: "As in a confirmation" }),
  msg("Absolutely", { $context: "As in a confirmation" }),
  msg("Exactly", { $context: "As in a confirmation" }),
];

Stattdessen können Sie jetzt Folgendes tun:

const confirmations = msg([
  "Yes",
  "Yup",
  "Right",
  "Absolutely",
  "Exactly",
], { $context: "Confirmation responses" });

Design

ID-Generierung

Wenn $id gesetzt ist, erhält jedes Element im Array eine indexbasierte ID: ${id}.0, ${id}.1 usw.

const greetings = msg([
  "Hi",
  "Hello",
  "Howdy",
], { $id: "greeting" });
// "Hi"    → id: "greeting.0"
// "Hello" → id: "greeting.1"
// "Howdy" → id: "greeting.2"

Warum keine Objekte?

Es war verlockend, dies auch auf Objekte auszuweiten, aber wir haben uns dagegen entschieden. Objekte enthalten in der Regel sowohl übersetzbare als auch nicht übersetzbare Felder:

{
  id: 'planning.v1',           // nicht übersetzen
  message: 'Not yet enabled',  // übersetzen
}

Es gibt keine elegante Möglichkeit auszudrücken, welche Felder registriert werden sollen, ohne zusätzliche Syntax einzuführen. Arrays haben dieses Problem nicht – jedes Element ist ein zu übersetzender String.

Zukunft

Die Unterstützung von Arrays für gt() ist ein naheliegender nächster Schritt. Sowohl gt() als auch msg() sind Registrierungsfunktionen, daher ist Konsistenz zwischen ihnen sinnvoll. Das gilt auch für m(), da msg() und m() häufig zusammen verwendet werden — wenn m() Arrays akzeptiert, ist sichergestellt, dass das Übergeben der Ausgabe von msg() an m() nicht zu Problemen führt.