---
createdAt: 2024-08-12
updatedAt: 2025-06-29
title: Как работает Intlayer
description: Узнайте, как Intlayer работает внутри. Поймите архитектуру и компоненты, которые делают Intlayer мощным.
keywords:
  - Intlayer
  - Как работает
  - Архитектура
  - Компоненты
  - Внутренние процессы
slugs:
  - doc
  - concept
  - how-works-intlayer
history:
  - version: 5.5.10
    date: 2025-06-29
    changes: Инициализация истории
---

# Как работает Intlayer

## Обзор

Основная идея Intlayer заключается в использовании управления контентом на уровне компонентов. Идея Intlayer состоит в том, чтобы позволить вам объявлять ваш контент в любом месте вашего кода, например, в той же директории, что и ваш компонент.

```bash
.
└── Components
    └── MyComponent
        ├── index.content.ts
        └── index.tsx
```

Для этого роль Intlayer заключается в том, чтобы находить все ваши `файлы с объявлением контента` во всех различных форматах, присутствующих в вашем проекте, а затем генерировать из них `словари`.

Таким образом, есть два основных этапа:

- Этап сборки
- Этап интерпретации

### Этап сборки словарей

Этап сборки может быть выполнен тремя способами:

- с использованием CLI с помощью `npx intlayer build`
- с использованием [расширения vscode](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/vs_code_extension.md)
- с использованием плагинов приложения, таких как пакет [`vite-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/vite-intlayer/index.md), или их эквивалентов для [Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/next-intlayer/index.md). При использовании одного из этих плагинов Intlayer автоматически создаст ваши словари при запуске (dev) или сборке (prod) вашего приложения.

1. Объявление файлов контента
   - Файлы контента могут быть определены в различных форматах, таких как TypeScript, ECMAScript, CommonJS или JSON.
   - Файлы контента могут быть определены в любом месте проекта, что позволяет улучшить обслуживание и масштабируемость. Важно соблюдать соглашения о расширениях файлов для файлов контента. По умолчанию это расширение `*.content.{js|cjs|mjs|ts|tsx|json}`, но его можно изменить в [файле конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md).

2. Генерация `словарей`
   - Словари генерируются из файлов контента. По умолчанию словари Intlayer генерируются в директории `.intlayer/dictionaries` проекта.
   - Эти словари генерируются в различных форматах, чтобы удовлетворить все потребности и оптимизировать производительность приложения.

3. Генерация типов словарей
   На основе ваших `словарей` Intlayer будет генерировать типы, чтобы сделать их пригодными для использования в вашем приложении.

- Типы словарей генерируются из `файлов декларации контента` Intlayer. По умолчанию типы словарей Intlayer генерируются в директории `.intlayer/types` проекта.

- [Расширение модулей](https://www.typescriptlang.org/docs/handbook/declaration-merging.html) Intlayer - это функция TypeScript, которая позволяет вам определять дополнительные типы для Intlayer. Это упрощает процесс разработки, предлагая доступные или обязательные аргументы.
  Среди сгенерированных типов добавляются типы словарей Intlayer или даже типы конфигурации языка в файл `types/intlayer.d.ts` и используются другими пакетами. Для этого необходимо, чтобы файл `tsconfig.json` был настроен на включение директории `types` проекта.

### Этап интерпретации словарей

С помощью Intlayer вы получите доступ к вашему контенту в приложении, используя хук `useIntlayer`.

```tsx
const MyComponent = () => {
  const content = useIntlayer("my-component");
  return <div>{content.title}</div>;
};
```

Этот хук будет управлять обнаружением локали за вас и возвращать контент для текущей локали. Используя этот хук, вы также сможете интерпретировать markdown, управлять множественным числом и многое другое.

> Чтобы увидеть все возможности Intlayer, вы можете прочитать [документацию по словарям](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/content_file.md).

## Удалённый контент

Intlayer позволяет объявлять контент локально, а затем экспортировать его в CMS, чтобы ваша нетехническая команда могла редактировать его.

Таким образом, вы сможете отправлять и получать контент из CMS в ваше приложение, аналогично тому, как вы работаете с Git для вашего кода.

Для внешних словарей, использующих CMS, Intlayer выполняет базовую операцию fetch для получения удалённых словарей и объединяет их с вашими локальными. Если это настроено в вашем проекте, Intlayer будет автоматически управлять загрузкой контента из CMS при запуске приложения (dev) / сборке (prod).

## Визуальный редактор

Intlayer также предоставляет визуальный редактор, позволяющий редактировать ваш контент визуально. Этот [визуальный редактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md) доступен в отдельном пакете `intlayer-editor`.

![визуальный редактор](https://github.com/aymericzip/intlayer/blob/main/docs/assets/visual_editor.gif?raw=true)

- Сервер - это простое приложение на Express, которое прослушивает запросы от клиента и получает контент вашего приложения, такой как `dictionaries` и конфигурация, чтобы сделать его доступным на стороне клиента.
- С другой стороны, клиент - это приложение на React, которое используется для взаимодействия с вашим контентом через визуальный интерфейс.
  Когда вы вызываете ваш контент с помощью `useIntlayer` и редактор включен, строки автоматически оборачиваются в объект Proxy с именем `IntlayerNode`. Этот узел использует `window.postMessage` для связи с обернутым iframe, содержащим интерфейс визуального редактора.  
  Со стороны редактора, редактор прослушивает эти сообщения и имитирует реальное взаимодействие с вашим контентом, позволяя редактировать текст напрямую в контексте вашего приложения.

## Оптимизация сборки приложения

Для оптимизации размера сборки вашего приложения Intlayer предоставляет два плагина для оптимизации сборки: плагины `@intlayer/babel` и `@intlayer/swc`.
Плагины Babel и SWC работают, анализируя абстрактное синтаксическое дерево (AST) вашего приложения, чтобы заменить вызовы функций Intlayer на оптимизированный код. Этот процесс делает финальный бандл легче в продакшене, гарантируя, что импортируются только действительно используемые словари, оптимизируя разбиение на чанки и уменьшая размер сборки.

В режиме разработки Intlayer использует централизованный статический импорт для словарей, чтобы упростить процесс разработки.

Активировав опцию `importMode = "dynamic"` в [конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md), Intlayer будет использовать динамический импорт для загрузки словарей. Эта опция отключена по умолчанию, чтобы избежать асинхронной обработки при рендеринге приложения.

> `@intlayer/babel` доступен по умолчанию в пакете `vite-intlayer`,

> `@intlayer/swc` не установлен по умолчанию в пакете `next-intlayer`, так как плагины SWC все еще являются экспериментальными в Next.js.

Чтобы узнать, как настроить сборку вашего приложения, вы можете прочитать [документацию по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md).

## Пакеты

Intlayer состоит из нескольких пакетов, каждый из которых выполняет определенную роль в процессе перевода. Вот графическое представление структуры этого пакета:

![пакеты intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/assets/packages_dependency_graph.svg)

### intlayer

Пакет `intlayer` используется в приложениях для объявления контента в файлах контента.

### react-intlayer

Пакет `react-intlayer` используется для интерпретации словарей Intlayer и их использования в React-приложениях.

### next-intlayer

Пакет `next-intlayer` используется как слой поверх `react-intlayer`, чтобы сделать словари Intlayer пригодными для использования в приложениях Next.js. Он интегрирует основные функции для работы Intlayer в среде Next.js, такие как промежуточное ПО для перевода, маршрутизация или конфигурация файла `next.config.js`.

### vue-intlayer

Пакет `vue-intlayer` используется для интерпретации словарей Intlayer и их использования в приложениях Vue.

### nuxt-intlayer

Пакет `nuxt-intlayer` используется как модуль Nuxt для использования словарей Intlayer в приложениях Nuxt. Он интегрирует необходимые функции для работы Intlayer в среде Nuxt, такие как промежуточное ПО для перевода, маршрутизация и конфигурация файла `nuxt.config.js`.

### svelte-intlayer (в разработке)

Пакет `svelte-intlayer` используется для интерпретации словарей Intlayer и их использования в приложениях Svelte.

### solid-intlayer (в разработке)

Пакет `solid-intlayer` используется для интерпретации словарей Intlayer и их использования в приложениях Solid.js.

### preact-intlayer

Пакет `preact-intlayer` используется для интерпретации словарей Intlayer и их использования в приложениях Preact.

### angular-intlayer (в разработке)

Пакет `angular-intlayer` используется для интерпретации словарей Intlayer и их использования в приложениях Angular.

### express-intlayer

Пакет `express-intlayer` используется для работы с Intlayer на серверной стороне Express.js.

### react-native-intlayer

Пакет `react-native-intlayer` предоставляет инструменты, которые интегрируют плагины для работы Intlayer с Metro bundler.

### lynx-intlayer

Пакет `lynx-intlayer` предоставляет инструменты, которые интегрируют плагины для работы Intlayer с Lynx bundler.

### vite-intlayer

Включает плагин Vite для интеграции Intlayer с [Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production), а также промежуточное ПО для определения предпочтительной локали пользователя, управления cookies и обработки перенаправления URL.

### react-scripts-intlayer

Включает команды и плагины `react-scripts-intlayer` для интеграции Intlayer с приложением на основе Create React App. Эти плагины основаны на [craco](https://craco.js.org/) и включают дополнительную конфигурацию для сборщика [Webpack](https://webpack.js.org/).

### intlayer-editor

Пакет `intlayer-editor` используется для обеспечения работы визуального редактора. Этот пакет, опциональный, может быть установлен в приложениях и будет использоваться пакетом `react-intlayer`.
Он состоит из двух частей: сервера и клиента.

Клиент содержит элементы пользовательского интерфейса, которые будут использоваться `react-intlayer`.

Сервер, основанный на Express, используется для получения запросов визуального редактора и управления или изменения файлов контента.

### intlayer-cli

Пакет `intlayer-cli` может быть использован для генерации словарей с помощью команды `npx intlayer dictionaries build`. Если `intlayer` уже установлен, CLI автоматически устанавливается, и этот пакет не требуется.

### @intlayer/core

Пакет `@intlayer/core` является основным пакетом Intlayer. Он содержит функции управления переводами и словарями. `@intlayer/core` является мультиплатформенным и используется другими пакетами для интерпретации словарей.

### @intlayer/config

Пакет `@intlayer/config` используется для настройки параметров Intlayer, таких как доступные языки, параметры промежуточного программного обеспечения Next.js или настройки интегрированного редактора.

### @intlayer/webpack

Пакет `@intlayer/webpack` используется для предоставления конфигурации Webpack, чтобы приложение на основе Webpack работало с Intlayer. Пакет также предоставляет плагин для добавления в существующее приложение Webpack.

### @intlayer/cli

Пакет `@intlayer/cli` является пакетом NPM, который используется для объявления скриптов, связанных с интерфейсами командной строки Intlayer. Он обеспечивает единообразие всех команд CLI Intlayer. Этот пакет, в частности, используется пакетами [intlayer-cli](https://github.com/aymericzip/intlayer/tree/main/docs/ru/packages/intlayer-cli/index.md) и [intlayer](https://github.com/aymericzip/intlayer/tree/main/docs/ru/packages/intlayer/index.md).

### @intlayer/mcp

Пакет `@intlayer/mcp` предоставляет сервер MCP (Model Context Protocol), который обеспечивает поддержку IDE с ИИ, адаптированную для экосистемы Intlayer. Он автоматически загружает документацию и интегрируется с Intlayer CLI.

### @intlayer/dictionaries-entry & @intlayer/unmerged-dictionaries-entry & @intlayer/dynamic-dictionaries-entry

Пакеты `@intlayer/dictionaries-entry`, `@intlayer/unmerged-dictionaries-entry` и `@intlayer/dynamic-dictionaries-entry` возвращают путь к точке входа словарей Intlayer. Поскольку поиск по файловой системе из браузера невозможен, использование сборщиков вроде Webpack или Rollup для получения пути к словарям также невозможно. Эти пакеты предназначены для использования с псевдонимами, что позволяет оптимизировать сборку с различными сборщиками, такими как Vite, Webpack и Turbopack.

### @intlayer/chokidar

Пакет `@intlayer/chokidar` используется для отслеживания файлов контента и повторной генерации изменённого словаря при каждом изменении.

### @intlayer/editor

Пакет `@intlayer/editor` предоставляет утилиты, связанные с редактором словаря. В частности, он включает API для интеграции приложения с редактором Intlayer и утилиты для работы со словарями. Этот пакет является кроссплатформенным.

### @intlayer/editor-react

Пакет `@intlayer/editor-react` предоставляет состояния, контексты, хуки и компоненты для интеграции React-приложения с редактором Intlayer.

### @intlayer/babel

Пакет `@intlayer/babel` предоставляет инструменты, которые оптимизируют сборку словарей для приложений на основе Vite и Webpack.

### @intlayer/swc

Пакет `@intlayer/swc` предоставляет инструменты, которые оптимизируют сборку словарей для приложений Next.js.

### @intlayer/api

Пакет `@intlayer/api` является SDK API для взаимодействия с бэкендом.

### @intlayer/design-system

Пакет `@intlayer/design-system` используется для совместного использования элементов дизайна между CMS и визуальным редактором.

### @intlayer/backend

Пакет `@intlayer/backend` экспортирует типы бэкенда и в будущем предложит бэкенд как автономный пакет.

## Общайтесь с нашей умной документацией

- [Задайте свои вопросы нашей умной документации](https://intlayer.org/doc/chat)
