# General Translation Changelog: gt-sanity 3.0.0: Нативные плагины локализации Sanity
URL: https://generaltranslation.com/ru/blog/gt-sanity_v3_0_0.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 
Authors: Brian Lou
Published: 2026-07-22

## Обзор

`gt-sanity` v3 ещё сильнее опирается на нативное поведение Sanity. Локализация на уровне полей теперь реализована через [`sanity-plugin-internationalized-array`](https://github.com/sanity-io/sanity-plugin-internationalized-array) — эталонный плагин Sanity, — а не через UI Studio, созданный GT, и теперь поля можно исключать из перевода прямо в схеме, используя тот же паттерн на основе `options`, что и стандартные плагины локализации Sanity.

Идея проста: `gt-sanity` координирует плагины, которые уже поддерживает экосистема Sanity (`@sanity/document-internationalization` для локализации на уровне документа и `sanity-plugin-internationalized-array` для локализации на уровне полей), и добавляет поверх них процесс перевода. Studio не меняет своё поведение только потому, что у вас установлен GT.

***

## Что нового

### Локализация на уровне полей теперь работает через эталонный плагин

При включении `fieldLevelLocalization` (или его алиаса `internationalizedArray`) `sanity-plugin-internationalized-array` теперь автоматически настраивается на основе ваших `sourceLocale` и `locales`. Нативный плагин отвечает за типы схем `internationalizedArray*` и UI редактирования в Studio — кнопки добавления для отдельных языков, языковые метки, действия с полями — поэтому поведение Studio всегда соответствует привычному для пользователей Sanity, а обновления плагина приходят сразу после их выпуска в upstream.

```ts title="sanity.config.ts"
gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'fr', 'ja'],
  translateDocuments: [{ type: 'post' }],
  fieldLevelLocalization: { enabled: true },
  translationLevel: 'internationalizedArray',
});
```

В хранимых данных ничего не изменилось: элементы по-прежнему имеют вид `{ _key, _type, language, value }`, поэтому существующему контенту не требуется миграция. В config также появились встроенные параметры сквозной передачи: `defaultLanguages`, `buttonLocations`, `buttonAddAll`, `languageDisplay` и `apiVersion`.

### Используйте собственный экземпляр плагина

Если вы уже сами регистрируете `sanity-plugin-internationalized-array`, оставьте текущую настройку. Определение перевода основано на структуре данных — оно читает и записывает сохранённые данные независимо от того, кто зарегистрировал типы схем. Оставьте `fieldLevelLocalization` отключённым, чтобы типы регистрировались только один раз, и включайте для документов перевод на уровне полей с помощью `translationLevel`:

```ts title="sanity.config.ts"
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` реэкспортирует `internationalizedArray`, `internationalizedArrayLanguageFilter` и `isInternationalizedArrayItemType` для непосредственного использования.

### Исключите поля из перевода в своей схеме

Отмечайте поле — или целый тип, — вместо того чтобы вести отдельный список в config плагина:

```ts
defineField({
  name: 'internalNotes',
  type: 'string',
  options: { gt: { exclude: true } },
});
```

Сериализатор также учитывает параметры исключения стандартных плагинов локализации Sanity, поэтому одного шаблона достаточно для всего:

* `options.gt.exclude` — собственное пространство имён GT
* `options.documentInternationalization.exclude` — `@sanity/document-internationalization`
* `options.aiAssist.exclude` — `@sanity/assist`

Исключение действует на любом уровне вложенности, а если задать его в `options` определения пользовательского типа, будут исключены все вхождения этого типа — в соответствии с семантикой нативных плагинов «поле или тип». `options.gt` полностью типизирован через declaration merging, а параметры плагина `ignoreFields` / `skipFields` / `dedupeFields`, основанные на `id`, по-прежнему используются для междокументных правил, таких как устранение дубликатов `slug`.

***

## Несовместимые изменения

### UI Studio GT на уровне полей удалён

Экспорт `createInternationalizedArrayTypes` и тип `FieldLevelUIComponents` удалены, как и параметры `typePrefix`, `includeCompatibilityTypes` и `components` в `GTFieldLevelLocalizationConfig` — нативного эквивалента для них нет. При передаче удалённого параметра в журнал записывается предупреждение, а сам параметр игнорируется. Данные, созданные с пользовательским `typePrefix`, больше не распознаются; стандартные данные `internationalizedArray*` это не затрагивает.

### Более строгое применение `localize: false`

Исключение (параметры схема и устаревший `localize: false`) теперь также применяется к полям объектов верхнего уровня, которые раньше не отфильтровывались. Контент, который ранее по ошибке отправлялся на перевод, больше не отправляется — если после обновления кажется, что какое-то поле «пропало» из переводов, проверьте, не помечено ли оно как исключённое.

***

## Ссылки

* [Быстрый старт](/docs/integrations/sanity/quickstart)
* [Руководство по конфигурации](/docs/integrations/sanity/guides/configuring-sanity)
* [Справочник API](/docs/integrations/sanity/reference/plugin-configuration)

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
