--- createdAt: 2025-09-22 updatedAt: 2025-09-23 title: Новый Intlayer v7 - Что нового? description: Узнайте, что нового в Intlayer v7. Значительные улучшения производительности, опыта разработчика и новые функции для улучшения вашего процесса интернационализации. keywords: - Intlayer - Локализация - Разработка - Производительность - Опыт разработчика - Функции - React - Next.js - JavaScript - TypeScript slugs: - doc - releases - v7 --- # Новый Intlayer v7 - Что нового? Добро пожаловать в Intlayer v7! Этот крупный релиз представляет значительные улучшения в производительности, безопасности типов и опыте разработчика. Ниже приведены основные моменты, а также заметки по миграции и практические примеры. ## Основные моменты - Стратегия кэширования для ускорения сборок - Улучшенная генерация типов TypeScript с типами, специфичными для локали - Оптимизация бандла: локали как строки вместо enum - Новые режимы маршрутизации: `prefix-no-default`, `prefix-all`, `no-prefix`, `search-params` - Хранение локали в соответствии с GDPR с использованием localStorage по умолчанию - Гибкая конфигурация хранения: cookies, localStorage, sessionStorage или несколько одновременно - Размер пакета Visual Editor уменьшен на 30% - Расширенные опции конфигурации middleware - Обновленное поведение команды fill для лучшего управления контентом - Повышенная стабильность с полным обновлением файлов деклараций контента - Интеллектуальное управление повторными попытками для точности перевода - Параллелизация для ускорения обработки переводов - Умное разбиение на чанки для работы с большими файлами в пределах ограничений AI контекста --- ## Производительность: Кэширование для ускорения сборок Вместо повторной сборки деклараций контента с помощью esbuild при каждой сборке, в версии 7 реализована стратегия кэширования, которая ускоряет процесс сборки. ```bash npx intlayer build ``` Новая система кэширования: - Сохраняет скомпилированные декларации контента, чтобы избежать повторной обработки - Обнаруживает изменения и перестраивает только изменённые файлы - Значительно сокращает время сборки для крупных проектов --- ## TypeScript: Генерация типов, специфичных для локали Типы TypeScript теперь генерируются для каждой локали отдельно, обеспечивая более строгую типизацию и устраняя объединённые типы для всех локалей. **Поведение в v6:** ```tsx const content = getIntlayer("my-title-content", "en"); // typeof content = { title: "My title" } | { title: "Mon titre" } | { title: "Mi título" } ``` **Поведение в v7:** ```tsx const content = getIntlayer("my-title-content", "en"); // typeof content = { title: "My title" } ``` Преимущества: - Более точное автозаполнение в вашей IDE - Лучшая типобезопасность без смешения типов между локалями - Повышенная производительность за счёт уменьшения сложности типов --- ## Оптимизация бандла: Локали как строки Тип `Locales` больше не является перечислением (enum), что означает, что он теперь полностью поддаётся tree-shaking и не будет раздувать ваш бандл тысячами неиспользуемых записей локалей. **v6:** ```typescript import { Locales } from "intlayer"; // Перечисление, включающее все локали -> не поддаётся tree-shaking const locale: Locales = Locales.ENGLISH; ``` **v7:** ```typescript import { Locales, Locale } from "intlayer"; // Тип строки -> полностью поддаётся tree-shaking const locale: Locale = Locales.ENGLISH; ``` > Поскольку `Locales` больше не является перечислением (enum), вам нужно будет изменить тип с `Locales` на `Locale`, чтобы получить локаль в виде типа. Подробнее смотрите в [реализации](https://github.com/aymericzip/intlayer/blob/main/packages/%40intlayer/types/src/index.ts). --- ## Новые режимы маршрутизации для большей гибкости В версии 7 введена единая конфигурация `routing.mode`, которая заменяет предыдущие опции `prefixDefault` и `noPrefix`, предоставляя более детальный контроль над структурой URL. ### Доступные режимы маршрутизации - **`prefix-no-default`** (по умолчанию): у локали по умолчанию нет префикса, у остальных локалей префикс есть - `/dashboard` (en) или `/fr/dashboard` (fr) - **`prefix-all`**: у всех локалей есть префикс - `/en/dashboard` (en) или `/fr/dashboard` (fr) - **`no-prefix`**: Нет префиксов локали в URL (локаль обрабатывается через хранилище/заголовки) - `/dashboard` для всех локалей - **`search-params`**: Локаль передается как параметр запроса - `/dashboard?locale=en` или `/dashboard?locale=fr` ### Базовая конфигурация ```typescript // intlayer.config.ts export default { internationalization: { locales: ["en", "fr", "es"], defaultLocale: "en", }, routing: { mode: "prefix-no-default", // по умолчанию }, }; ``` --- ## Соответствие GDPR: хранение в localStorage / cookies v7 уделяет приоритетное внимание конфиденциальности пользователей, используя `localStorage` в качестве механизма хранения по умолчанию вместо cookies. Это изменение помогает соблюдать требования GDPR, избегая необходимости получать согласие на использование cookies для предпочтений локали. ### Опции конфигурации хранения Новое поле `routing.storage` также доступно в дополнение к предыдущим опциям `middleware.cookieName` и `middleware.serverSetCookie`, предлагая гибкие конфигурации хранения: ```typescript // Отключить хранение storage: false // Простые типы хранения storage: 'cookie' storage: 'localStorage' storage: 'sessionStorage' // Cookie с пользовательскими атрибутами storage: { type: 'cookie', name: 'custom-locale', domain: '.example.com', secure: true, sameSite: 'strict' } // localStorage с пользовательским ключом storage: { type: 'localStorage', name: 'custom-locale' } // Несколько типов хранения для резервирования storage: ['cookie', 'localStorage'] ``` ### Пример конфигурации, соответствующей GDPR Для производственных приложений, которым нужно сбалансировать функциональность и соответствие GDPR: ```typescript // intlayer.config.ts export default { internationalization: { locales: ["en", "fr", "es"], defaultLocale: "en", }, routing: { mode: "prefix-no-default", storage: [ { type: "localStorage", // Основное хранилище (не требует согласия) name: "user-locale", }, { type: "cookie", // Дополнительное хранение в cookie (требуется согласие) name: "user-locale", secure: true, sameSite: "strict", httpOnly: false, }, ], }, }; ``` ### Включение / отключение хранения cookie Пример с использованием React / Next.js: Можно определить глобально: ```typescript ``` Можно переопределить локально для каждого хука: ```ts const { setLocale } = useLocale({ isCookieEnabled: false }); setLocale("en"); ``` **Примечание:** По умолчанию куки включены. **Примечание:** Ознакомьтесь с [требованиями GDPR к куки](https://gdpr.eu/cookies/) для вашего конкретного случая. --- ## Визуальный редактор: пакет стал на 30% меньше Пакет Визуального редактора был оптимизирован и стал на 30% меньше по сравнению с предыдущей версией благодаря: - Улучшению производительности редактора кода - Удалению ненужных зависимостей от основных пакетов Intlayer - Лучшей tree-shaking и упаковке модулей Это приводит к более быстрой загрузке и улучшенной производительности приложения во время выполнения. --- ## Команда fill: обновленное поведение для лучшего управления контентом v7 вводит улучшенное поведение команды `fill`, обеспечивая более предсказуемое и гибкое управление контентом: ### Новое поведение fill - **`fill: true`** — Перезаписывает текущий файл заполненным контентом для всех локалей - **`fill: "path/to/file"`** — Заполняет указанный файл без изменения текущего файла - **`fill: false`** — Полностью отключает авто-заполнение ### Расширенная поддержка сложных структур контента Команда fill теперь поддерживает сложные структуры деклараций контента, включая: - **Составные объекты**: декларации контента, которые ссылаются на другие объекты - **Деструктурированный контент**: контент, использующий паттерны деструктуризации - **Вложенные ссылки**: объекты, которые вызывают друг друга в сложных иерархиях - **Динамические структуры контента**: контент с условными или вычисляемыми свойствами ### Преимущества - **Более ясное намерение**: поведение теперь более явно указывает, что именно изменяется - **Лучшее разделение**: Файлы с контентом могут храниться отдельно от заполненных переводов - **Улучшенный рабочий процесс**: Разработчики получают больше контроля над тем, где хранятся переводы - **Поддержка сложных структур**: Обработка сложных архитектур контента с множеством взаимосвязанных объектов ### Пример использования ```typescript // Перезаписать текущий файл со всеми локалями const content = { key: "example", fill: true, // Перезаписывает этот файл content: { title: "Hello World", }, }; // Заполнить отдельный файл без изменения текущего файла const content = { key: "example", fill: "./translations.json", // Создаёт/обновляет translations.json content: { title: "Hello World", }, }; // Отключить авто-заполнение const content = { key: "example", fill: false, // Авто-заполнение отключено content: { title: "Hello World", }, }; // Сложная структура контента с составными объектами const sharedContent = { buttons: { save: "Сохранить", // Кнопка сохранить cancel: "Отмена", // Кнопка отмены }, }; const content = { key: "complex-example", fill: true, content: { // Ссылки на другие объекты sharedContent, // Деструктурированный контент ...sharedContent, // Вложенные ссылки sections: [ { ...sharedContent.buttons, header: "Раздел 1", }, ], }, }; ``` --- ## Повышенная стабильность и управление переводами v7 вводит несколько улучшений, чтобы сделать перевод контента более надежным и эффективным: ### Полные обновления файлов декларации контента Система теперь обновляет файлы `.content.{ts,js,cjs,mjs}`, а не частично, обеспечивая: - **Целостность данных**: Полная перезапись файла предотвращает частичные обновления, которые могут повредить содержимое - **Согласованность**: Все локали обновляются атомарно, поддерживая синхронизацию - **Надежность**: Снижает риск неполных или поврежденных файлов содержимого ### Интеллектуальное управление повторными попытками Новые механизмы повторных попыток предотвращают отправку содержимого в неправильных форматах и избегают срыва всего процесса заполнения, если один из запросов не удался. ### Параллелизация для ускорения обработки Операции перевода теперь выполняются в очереди с параллельным запуском, что значительно ускоряет процесс. ### Умное разбиение на части для больших файлов Продвинутые стратегии разбиения обрабатывают большие файлы содержимого, не превышая контекстные окна ИИ: ### Пример рабочего процесса ```typescript // Большой файл содержимого автоматически разбивается на части const content = { key: "large-documentation", fill: true, content: { // Большое содержимое автоматически разбивается на части для обработки ИИ introduction: "..." // более 5000 символов sections: [ // Несколько больших разделов ] } }; ``` Система автоматически: 1. Анализирует размер и структуру содержимого 2. Соответствующим образом разбивает содержимое на части 3. Обрабатывает части параллельно 4. Проверяет и при необходимости повторяет попытки 5. Восстанавливает полный файл --- ## Заметки по миграции с версии v6 ### Удалённые конфигурации - **`middleware.cookieName`**: заменён на `routing.storage` - **`middleware.serverSetCookie`**: заменён на `routing.storage` - **`middleware.prefixDefault`**: заменён на `routing.mode` - **`middleware.noPrefix`**: заменён на `routing.mode` ### Сопоставление миграции #### Сопоставление конфигураций | Конфигурация v6 | Конфигурация v7 | | -------------------------- | ------------------------------------------------------- | | `autoFill: xxx` | `fill: xxx` | | `prefixDefault: false` | `mode: 'prefix-no-default'` | | `prefixDefault: true` | `mode: 'prefix-all'` | | `noPrefix: true` | `mode: 'no-prefix'` | | `cookieName: 'my-locale'` | `storage: { type: 'cookie', name: 'my-locale' }` | | `serverSetCookie: 'never'` | `storage: false` или удалите cookie из массива storage` | #### Пример миграции **До (v6):** ```typescript export default { middleware: { headerName: "x-intlayer-locale", cookieName: "intlayer-locale", prefixDefault: false, basePath: "", serverSetCookie: "always", noPrefix: false, }, }; ``` **После (v7):** ```typescript export default { routing: { mode: "prefix-no-default", storage: "localStorage", // или 'cookie', если требуется хранение в cookie headerName: "x-intlayer-locale", basePath: "", }, }; ``` #### Соответствие содержимого словаря | Содержимое словаря v6 | Содержимое словаря v7 | | --------------------- | --------------------- | | `autoFill: xxx` | `fill: xxx` | #### Пример миграции **До (v6):** ```typescript const content = { key: "example", autoFill: true, // Перезаписывает этот файл content: { title: "Привет, мир", }, }; ``` **После (v7):** ```typescript const content = { key: "example", fill: true, // Перезаписывает этот файл content: { title: "Привет, мир", }, }; ``` --- ## Заметки по миграции с v5 на v6 Подробнее смотрите в [заметках по миграции с v5 на v6](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/releases/v6.md). --- ## Полезные ссылки - [Справочник по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md) - [Документация по Middleware](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/next-intlayer/index.md) - [Типы TypeScript](https://github.com/aymericzip/intlayer/blob/main/packages/%40intlayer/types/src/index.ts) - [Руководство по cookie в соответствии с GDPR](https://gdpr.eu/cookies/)