Indietro

gt-react@10.13.0

Ernest McCarter avatarErnest McCarter
gt-reactmacrotagged-templatedeveloper-experiencei18n

Panoramica

Nell'ambito della nostra continua sperimentazione per allontanarci dal contesto React, gt-react ora supporta l'uso di t come template literal con tag:

import { t } from "gt-react/browser";

const greeting = t`Hello, ${name}!`;

Questa è una sintassi alternativa all’attuale chiamata di funzione t(). Invece di scrivere segnaposto in stile ICU e passare un oggetto di opzioni, si usa un template literal JavaScript standard e l’interpolazione delle variabili viene gestita automaticamente.

Prima e dopo

// Prima — placeholder ICU + oggetto di opzioni
t("Hello, {name}! You have {count} items.", { name, count })

// Dopo — template literal con tag
t`Hello, ${name}! You have ${count} items.`

La forma template literal con tag elimina la necessità di assegnare nomi ai placeholder o di duplicare i riferimenti alle variabili. Scrivi la tua stringa nello stesso modo in cui scriveresti qualsiasi template literal JavaScript.

Nessun contesto React necessario

Come la funzione t() introdotta in gt-react@10.12.0, la forma template literal con tag non dipende dal contesto React. Funziona ovunque nel codice eseguito nel browser:

  • Handler di eventi: onClick={() => alert(t`Saved!`)}
  • Funzioni di utilità: function formatError(code) { return t`Error: ${code}` }
  • Costanti e configurazione: const LABELS = { save: t`Save`, cancel: t`Cancel` }
  • Anche completamente al di fuori dei componenti React

Registrazione globale

Se non vuoi importare t in ogni file, puoi registrarlo a livello globale:

// Nel punto di ingresso della tua app (es., layout.tsx)
import "gt-react/macros";

Questo imposta globalThis.t, rendendo il template literal con tag disponibile ovunque senza doverlo importare esplicitamente.

Esempio

import { t } from "gt-react/browser";

export function Greeting({ name }) {
  return <p>{t`Hello, ${name}!`}</p>;
}

export function SaveButton() {
  return (
    <button onClick={() => alert(t`Changes saved!`)}>
      {t`Save`}
    </button>
  );
}

Oppure con registrazione globale:

// Nessun import necessario — t è su globalThis
const LABELS = {
  save: t`Save`,
  cancel: t`Cancel`,
  delete: t`Delete`,
};