Salta ai contenuti

Traduzioni

Ogni stringa renderizzata dal pannello di amministrazione proviene da una chiave. Sono incluse sette lingue — inglese, spagnolo, tedesco, francese, italiano, portoghese e hindi — e un progetto può sovrascrivere qualsiasi chiave, aggiungere una propria lingua o tradurre i propri componenti utilizzando la stessa tabella.

Il funzionamento si basa su tre elementi:

<Rebase locale> con quale lingua iniziare
<Rebase translations> il testo associato a ciascuna chiave, per lingua
useTranslation() per leggere una chiave dal tuo componente
<Rebase client={client} authController={authController} locale="es">
<RebaseCMS collections={collections}/>
<RebaseShell title="My App"/>
</Rebase>

locale è la lingua iniziale. Se un utente ne seleziona una dal menu delle lingue, tale scelta viene memorizzata nel suo browser e avrà la priorità rispetto alla prop alla visita successiva — modificare locale nel codice non sovrascrive l’impostazione dell’utente. Tutto ciò per cui Rebase non ha una stringa ricade sull’inglese (fallback) anziché renderizzare la chiave grezza.

translations è indicizzato per lingua, poi per chiave. È parziale: basta indicare le poche chiavi che desideri modificare e tutto il resto rimarrà invariato.

<Rebase
client={client}
authController={authController}
translations={{
en: { save: "Publish", delete_confirmation_title: "Unpublish?" },
es: { save: "Publicar", delete_confirmation_title: "¿Despublicar?" }
}}
>
<RebaseCMS collections={collections}/>
<RebaseShell title="My App"/>
</Rebase>

La stessa struttura permette di aggiungere una lingua non inclusa di default in Rebase. Fornisci un set completo di chiavi e imposta locale su di essa:

<Rebase
client={client}
authController={authController}
locale="nl"
translations={{ nl: { save: "Opslaan", cancel: "Annuleren" } }}
>
<RebaseCMS collections={collections}/>
<RebaseShell title="My App"/>
</Rebase>

Le chiavi omesse adotteranno l’inglese come fallback, quindi un set parziale risulterà comunque in una traduzione funzionante, senza causare errori.

L’intera tabella è definita da RebaseTranslations — un’unica interfaccia contenente ogni chiave, in modo che il tuo editor possa completarle automaticamente e un errore di battitura diventi un errore di tipo. I valori in inglese si trovano in packages/app/src/locales/en.ts, che rappresenta il riferimento per il testo effettivo di ciascuna chiave.

I nomi seguono l’area di appartenenza: save, cancel, delete_confirmation_title per il pannello, studio_* per gli strumenti di sviluppo (studio_tool_sql, studio_group_database, studio_backups_denied_title).

useTranslation() ti mette a disposizione la stessa tabella da cui le tue viste, campi e azioni personalizzate possono leggere:

import { useTranslation } from "@rebasepro/app";
function PublishButton() {
const { t } = useTranslation();
return <Button>{t("save")}</Button>;
}

L’interpolazione usa la stessa sintassi {{name}} delle stringhe integrate:

t("add_to_field", { fieldName: "Tags" });

Le tue chiavi personalizzate passano attraverso translations come tutte le altre — una chiave non dichiarata da Rebase viene comunque risolta, permettendoti di inserire le stringhe del tuo componente nella stessa tabella anziché gestire un secondo stack di i18n separato.

Inoltre, t restituisce la chiave stessa quando non viene trovata alcuna corrispondenza: una risposta trasparente che rende visibile nell’interfaccia utente una chiave mancante anziché lasciare uno spazio vuoto.

La proprietà group di una AppView è un identificatore: il drawer la usa per comprimersi, la home page di Studio per ordinare gli elementi, e navigationGroupMappings per associarvi le icone. Tradurre questo valore nel punto in cui viene dichiarato compromette tutte e tre le funzionalità in ogni lingua diversa da quella utilizzata per la traduzione.

Dichiara il gruppo in inglese e lascia che sia l’intestazione a tradursi da sola — i gruppi integrati di Rebase hanno chiavi studio_group_* e vengono risolti per nome; un gruppo personalizzato verrà invece renderizzato esattamente così come scritto.

// Right: the name is stable, the heading is localized for the built-in groups.
{ slug: "queues", name: "Queues", group: "Compute", view: <QueuesView/> }