Contenuti dinamici

Come tradurre contenuti in runtime usando le API di traduzione lato server

La traduzione dei contenuti dinamici gestisce testo non disponibile al momento del build: contenuti generati dagli utenti, risposte API o record di database. Usa <Tx> per contenuti JSX e tx per stringhe semplici, entrambi solo lato server per motivi di sicurezza.

Usa con parsimonia: La traduzione dinamica consuma la quota API e aggiunge latenza. Preferisci i componenti <T> con componenti variabili quando possibile.

Quando usare la traduzione dinamica

La traduzione dinamica è pensata per i contenuti che non possono essere determinati in fase di build:

Casi d’uso appropriati

  • Contenuti generati dagli utenti: messaggi in chat, recensioni, post sui social
  • Risposte di API esterne: dati di terze parti, feed RSS, servizi esterni
  • Record di database: contenuti dinamici del CMS, profili utente da API
  • Dati in tempo reale: notifiche in tempo reale, messaggi di stato

Evita in questi casi

Guida rapida

Contenuti JSX con <Tx>

import { Tx } from 'gt-next';

async function UserPost({ postContent }) {
  return (
    <article>
      <Tx>{postContent}</Tx>
    </article>
  );
}

Stringhe semplici con tx

import { tx } from 'gt-next/server';

async function NotificationBanner({ message }) {
  const translatedMessage = await tx(message);
  
  return (
    <div className="banner">
      {translatedMessage}
    </div>
  );
}

Solo lato server

Sia <Tx> sia tx sono esclusivamente lato server per motivi di sicurezza:

// ✅ Server Component
async function ServerComponent() {
  const translated = await tx(dynamicContent);
  return <div>{translated}</div>;
}

// ❌ Client Component - non funziona
'use client';
function ClientComponent() {
  const translated = await tx(dynamicContent); // Errore!
  return <div>{translated}</div>;
}

Esempi

Contenuti generati dagli utenti

import { Tx } from 'gt-next';

async function ChatMessage({ message }) {
  return (
    <div className="chat-message">
      <div className="author">{message.author}</div>
      <Tx>{message.content}</Tx>
    </div>
  );
}

Dati da API esterne

import { tx } from 'gt-next/server';

async function NewsArticle({ article }) {
  const translatedTitle = await tx(article.title);
  
  return (
    <article>
      <h1>{translatedTitle}</h1>
      <p>{article.publishedAt}</p>
    </article>
  );
}

Contenuto misto

import { T, Tx, Var } from 'gt-next';

async function ProductReview({ review }) {
  return (
    <div>
      {/* Contenuto statico con variabili */}
      <T>
        <p><Var>{review.author}</Var> ha dato <Var>{review.rating}</Var> stelle</p>
      </T>
      
      {/* Contenuto dinamico dell'utente */}
      <Tx>{review.content}</Tx>
    </div>
  );
}

Problemi comuni

Evita l’uso eccessivo

Non usare la traduzione dinamica per contenuti che possono essere resi con componenti standard:

// ❌ Non necessario
const content = `Ciao, ${userName}!`;
return <Tx>{content}</Tx>;

// ✅ Usa invece i componenti variabili
return (
  <T>
    <p>Ciao, <Var>{userName}</Var>!</p>
  </T>
);

Impatto sulla quota API

La traduzione dinamica consuma la quota API a ogni richiesta. Usa la cache e una gestione degli errori appropriata nelle applicazioni in produzione.

Prossimi passi

Come valuti questa guida?

Contenuti dinamici