Назад

gt-sanity@2.0.0

Brian Lou avatarBrian Lou
gt-sanityv2.0.0sanitycmstranslationmajor

Обзор

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 больше не добавляет представление вкладки «Переводы» автоматически. Вместо этого моделью взаимодействия по умолчанию стал диалог перевода. Если вам по-прежнему нужна отдельная вкладка, вы можете добавить её вручную — см. быстрый старт.


Ссылки