Indietro

gt-next@6.13.0

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

Panoramica

msg() ora accetta array.

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

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

Questo presenta due problemi. Primo, ogni riga richiede una chiamata a msg(). Secondo, le stringhe correlate spesso hanno bisogno degli stessi metadati — $context, $id, ecc. — e quei metadati devono essere inseriti in linea perché la CLI (interfaccia a riga di comando) li risolve in fase di build. Per stringhe come "Right" o "Exactly", che sono ambigue se considerate isolatamente, finisci per dover ripetere $context in ogni voce:

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" }),
];

Ora puoi fare invece così:

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

Progettazione

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 gli oggetti?

Era molto allettante estendere questo approccio anche agli oggetti, ma abbiamo deciso di non farlo. Gli oggetti in genere mescolano campi traducibili e campi non traducibili:

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

Non esiste un modo davvero elegante per esprimere quali campi dovrebbero essere registrati senza introdurre altra sintassi. Gli array non hanno questo problema: ogni elemento è una stringa da tradurre.

Futuro

Il supporto degli array in gt() è il naturale passo successivo. Sia gt() che msg() sono funzioni di registrazione, quindi ha senso che ci sia parità tra loro. Questo si estende anche a m(), dato che msg() e m() sono spesso usate insieme — il fatto che m() accetti array garantisce che passare l'output di msg() a m() non provochi errori.