Compiler

Plugin SWC di gt-next, basato su Rust.

Compiler

gt-next include un plugin SWC scritto in Rust che esegue un’analisi in fase di build per intercettare gli errori di traduzione più comuni e ottimizzare le prestazioni.

Caratteristiche

Rilevamento dei contenuti dinamici

Rileva i contenuti dinamici non racchiusi all'interno dei componenti di traduzione:

// ❌ Non valido: contenuto dinamico non racchiuso
<T>Ciao {userName}</T>

// ✅ Valido: contenuto dinamico racchiuso in un componente Variabile  
<T>Ciao <Var>{userName}</Var></T>

Convalida delle chiamate di funzione

Rileva argomenti non letterali passati alle funzioni di traduzione:

const t = useGT();

// ❌ Non valido: template literal e concatenazione
t(`Hello ${name}`)
t("Hello " + name)

// ✅ Valido: stringhe letterali con sostituzione di variabili
t("Hello, {name}!", { name })

Generazione degli hash in fase di compilazione

Precalcola gli hash delle traduzioni per migliorare le prestazioni in fase di esecuzione:

/ Input
<T>Ciao, mondo</T>

// Output (quando abilitato)
<T _hash="a1b2c3d4">Ciao, mondo</T>

Configurazione

Configura il plugin SWC nel file next.config.js:

import { withGTConfig } from 'gt-next/config';

export default withGTConfig(nextConfig, {
  locales: ['en', 'es'],
  swcPluginOptions: {
    logLevel: 'silent',     // Controlla l'output degli avvisi
    compileTimeHash: false, // Abilita la generazione dell’hash
  },
});

Opzioni

  • logLevel: Controlla il livello di segnalazione

    • 'silent' - Nessun avviso (predefinito in produzione)
    • 'error' - Mostra come errori di build
    • 'warn' - Mostra come avvisi (predefinito in sviluppo)
    • 'info' - Mostra messaggi informativi
    • 'debug' - Mostra tutte le informazioni di debug
  • compileTimeHash: Abilita la generazione dell’hash in fase di compilazione

    • false - Disattivato (predefinito)
    • true - Genera hash in fase di build per prestazioni migliori

Limitazioni

Il plugin SWC elabora i file singolarmente e non è in grado di rilevare violazioni nei componenti riesportati:

// File A: export { T as Translate } from 'gt-next'
// File B: import { Translate } from './A'
<Translate>Ciao {name}</Translate> // Non sarà rilevato

Come valuti questa guida?

Compiler