gt-sanity@2.0.0
Обзор
gt-sanity v2 — это крупный релиз: plugin обновлён для поддержки Sanity v5 и React 19, настройка упрощена благодаря диалогу перевода с нулевой конфигурацией, а также добавлены новые параметры для управления тем, какие поля отображаются в переведённых документах.
Что нового
Более простая настройка: диалог перевода
Самое большое изменение в v2 касается того, как разработчики работают с интерфейсом перевода. Раньше, чтобы добавить вкладку «Переводы» в документы, нужно было настроить structureTool, указав пользовательский defaultDocumentNode. Теперь plugin автоматически добавляет к каждому документу действие Перевести — при нажатии открывается диалоговое окно с полным интерфейсом перевода.
Это означает, что минимальная настройка теперь сводится всего к двум шагам: установите plugin и добавьте его в конфигурацию.
import { defineConfig } from 'sanity';
import { gtPlugin } from 'gt-sanity';
export default defineConfig({
plugins: [
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'zh', 'ja'],
}),
],
});Компонент TranslationsTab по-прежнему экспортируется для пользователей, которые предпочитают отдельную вкладку, но теперь его использование необязательно.
Параметр конфигурации defaultLocale
Если у вас уже есть gt.config.json, созданный при использовании gt-next или gt-react, теперь его можно напрямую добавить в конфигурацию plugin через spread. Поле defaultLocale поддерживается как псевдоним для sourceLocale:
import gtConfig from './gt.config.json';
gtPlugin({
...gtConfig, // { defaultLocale: 'en', locales: ['es', 'zh', 'ja'] }
});Если указаны и sourceLocale, и defaultLocale, приоритет отдается sourceLocale.
Опция skipFields
Новая опция конфигурации skipFields полностью удаляет совпадающие поля из переведённых документов. В отличие от ignoreFields, который копирует значение из исходного документа в перевод, skipFields гарантирует, что этого поля вообще не будет в переведённом документе.
Используйте skipFields для таких полей, как уникальные slug документов, канонические URL для SEO или метаданные, нужные только в исходном документе и не подлежащие переносу в переводы:
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'zh', 'ja'],
skipFields: [
{ fields: [{ property: '$.slug', type: 'slug' }] },
{ fields: [{ property: '$.canonicalUrl' }] },
],
});В отличие от ignoreFields, это поле предназначено для полей, которые не нужно переводить, но нужно копировать из источника — например, для категорий, тегов или внутренних метаданных, которые должны иметь одинаковое значение во всех языках.
Как и в случае с ignoreFields, с помощью documentId можно применять правила пропуска только к определённым документам, а для property использовать выражения JSONPath.
Улучшенное поведение ignoreFields
В v1 игнорируемые поля восстанавливались из исходного документа только после перевода, но сам контент всё равно отправлялся в API перевода. В v2 игнорируемые поля теперь удаляются из документа до сериализации, поэтому игнорируемый контент вообще не отправляется в API.
Обратно несовместимые изменения
Sanity v5 и React 19
gt-sanity v2 требует Sanity v5+ и React 19+. Если вы всё ещё используете Sanity v3 или v4, продолжайте использовать gt-sanity v1.
Вкладка «Переводы» больше не регистрируется автоматически
plugin больше не добавляет представление вкладки «Переводы» автоматически. Вместо этого моделью взаимодействия по умолчанию стал диалог перевода. Если вам по-прежнему нужна отдельная вкладка, вы можете добавить её вручную — см. быстрый старт.