Indietro

gt-next@6.13.0

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

Panoramica

msg() ora accetta gli array.

In precedenza, per registrare un elenco di stringhe correlate, bisognava racchiudere ciascuna stringa singolarmente:

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

Questo comporta due problemi. Primo, ogni riga richiede una chiamata a msg(). Secondo, le stringhe correlate spesso richiedono gli stessi metadati — $context, $id, ecc. — e tali metadati devono essere specificati inline, perché la CLI li risolve in fase di build. Per stringhe come "Right" o "Exactly", che prese singolarmente sono ambigue, finisci per ripetere $context in ogni voce:

const confirmations = [
  msg("Yes"),
  msg("Yup"),
  msg("Right", { $context: "Come in una conferma" }),
  msg("Absolutely", { $context: "Come in una conferma" }),
  msg("Exactly", { $context: "Come in una conferma" }),
];

Ora puoi fare così:

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

Architettura

Generazione degli ID

Quando viene specificato $id, a ogni elemento dell'array viene assegnato un ID basato sull'indice: ${id}.0, ${id}.1, ecc.

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

Perché non usare gli oggetti?

Eravamo tentati di estendere questo approccio agli oggetti, ma abbiamo deciso di non farlo. In genere, gli oggetti combinano campi traducibili e non traducibili:

{
  id: 'planning.v1',           // non tradurre
  message: 'Not yet enabled',  // traduci
}

Non c'è un modo semplice e pulito per indicare quali campi vadano registrati senza introdurre ulteriore sintassi. Gli array non hanno questo problema: ogni elemento è una stringa da tradurre.

Futuro

Il supporto agli array in gt() è un naturale passo successivo. Sia gt() sia msg() sono funzioni di registrazione, quindi è logico mantenere la parità tra le due. Questo vale anche per m(), dato che msg() e m() vengono spesso usati insieme: il fatto che m() accetti array garantisce che il passaggio dell'output di msg() a m() non causi problemi.