gt-sanity@3.0.0
Panoramica
gt-sanity v3 punta ancora di più sul comportamento nativo di Sanity. La localizzazione a livello di campo è ora basata su sanity-plugin-internationalized-array — il plugin Sanity di riferimento — invece che su una UI di Studio sviluppata da GT, e ora i campi possono essere esclusi dalla traduzione direttamente nello schema usando lo stesso pattern basato su options adottato dai plugin standard di localizzazione di Sanity.
L'obiettivo: gt-sanity orchestra i plugin già mantenuti dall'ecosistema Sanity (@sanity/document-internationalization per il livello documento, sanity-plugin-internationalized-array per il livello campo) e vi aggiunge sopra il workflow di traduzione. Il tuo Studio non si comporta mai in modo diverso solo perché è installato GT.
Novità
La localizzazione a livello di campo si appoggia al plugin di riferimento
Abilitando fieldLevelLocalization (o il relativo alias internationalizedArray), sanity-plugin-internationalized-array viene ora configurato automaticamente in base a sourceLocale e locales. Il plugin nativo gestisce i tipi di schema internationalizedArray* e la UI di modifica di Studio — pulsanti di aggiunta per lingua, etichette delle lingue, azioni sui campi — quindi il comportamento di Studio corrisponde sempre a quello che gli utenti di Sanity già conoscono e gli aggiornamenti del plugin arrivano non appena vengono rilasciati upstream.
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'fr', 'ja'],
translateDocuments: [{ type: 'post' }],
fieldLevelLocalization: { enabled: true },
translationLevel: 'internationalizedArray',
});Non è cambiato nulla nei dati archiviati: gli elementi sono ancora { _key, _type, language, value }, quindi i contenuti esistenti non richiedono alcuna migrazione. Anche il config ora include opzioni native di passthrough: defaultLanguages, buttonLocations, buttonAddAll, languageDisplay e apiVersion.
Usa la tua istanza del plugin
Se registri già sanity-plugin-internationalized-array per conto tuo, mantieni la configurazione attuale. Il rilevamento delle traduzioni si basa sulla struttura: legge e scrive i dati archiviati, indipendentemente da chi ha registrato i tipi di schema. Lascia fieldLevelLocalization disabilitato, così i tipi vengono registrati una sola volta, e abilita la traduzione a livello di campo per i documenti con translationLevel:
plugins: [
internationalizedArray({
languages: [
{ id: 'en', title: 'English' },
{ id: 'es', title: 'Spanish' },
],
fieldTypes: ['string'],
}),
gtPlugin({
sourceLocale: 'en',
locales: ['es'],
translateDocuments: [{ type: 'post' }],
translationLevel: 'internationalizedArray',
}),
],gt-sanity riesporta internationalizedArray, internationalizedArrayLanguageFilter e isInternationalizedArrayItemType per l'utilizzo diretto.
Escludi i campi dalla traduzione nello schema
Contrassegna un campo — o un intero tipo — invece di mantenere un elenco separato nella config del plugin:
defineField({
name: 'internalNotes',
type: 'string',
options: { gt: { exclude: true } },
});Il serializer rispetta anche le opzioni di esclusione dei plugin standard di localizzazione di Sanity, quindi un unico pattern copre tutto:
options.gt.exclude— il namespace di GToptions.documentInternationalization.exclude—@sanity/document-internationalizationoptions.aiAssist.exclude—@sanity/assist
L'esclusione si applica a qualsiasi livello di annidamento e, se viene impostata nelle options della definizione di un tipo personalizzato, esclude ogni occorrenza di quel tipo, in linea con la semantica nativa dei plugin "campo o tipo". options.gt è completamente tipizzato tramite declaration merging, e le opzioni del plugin basate su id ignoreFields / skipFields / dedupeFields restano disponibili per regole tra documenti, come la deduplicazione degli slug.
Modifiche non retrocompatibili
L'interfaccia utente a livello di campo di GT in Studio è stata rimossa
L'export createInternationalizedArrayTypes e il tipo FieldLevelUIComponents non esistono più, insieme alle opzioni typePrefix, includeCompatibilityTypes e components di GTFieldLevelLocalizationConfig — nessuna di esse ha un equivalente nativo. Se si passa un'opzione rimossa, viene registrato un avviso e l'opzione viene ignorata. I dati creati con un typePrefix personalizzato non vengono più rilevati; i dati internationalizedArray* standard non sono interessati.
Applicazione più rigorosa di localize: false
L'esclusione (le options dello schema e il localize: false legacy) ora si applica anche ai campi contenuti nei campi oggetto di primo livello, che in precedenza non venivano filtrati. I contenuti che prima venivano inviati erroneamente per la traduzione non vengono più inviati: se dopo l'aggiornamento un campo sembra "scomparire" dalle traduzioni, verifica che sia contrassegnato per l'esclusione.