# General Translation Integrations: Обнаружение использований
URL: https://generaltranslation.com/ru/docs/integrations/paraglide/reference/usage-detection.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Как выбираются исходные файлы, разрешаются инструкции импорта и находятся использования сообщений Paraglide JS. Справочник по обнаружению использований.

При запуске [`paraglide-context`](/docs/integrations/paraglide/reference/paraglide-context) или [`collectContext`](/docs/integrations/paraglide/reference/collect-context) анализируется исходный код приложения, а его сборщик никогда не запускается. Поддерживаются Paraglide JS 1, 2 и 3 на Node.js 20 и новее.

## Как это работает [#how-it-works]

| Шаг                                | Что определяется                                         |
| ---------------------------------- | -------------------------------------------------------- |
| [Файлы](#files)                    | Какие исходные файлы анализируются.                      |
| [Инструкции импорта](#imports)     | Какие инструкции импорта указывают на файл Paraglide JS. |
| [Выходные каталоги](#outdirs)      | В каких каталогах находятся выходные файлы Paraglide JS. |
| [Проекты inlang](#inlang-projects) | Для каких файлов сообщений создаётся файл метаданных.    |
| [Места использования](#usages)     | Где используется каждое сообщение.                       |

## Файлы [#files]

Анализируются файлы из [`include`](/docs/integrations/paraglide/reference/collect-context#include), за исключением [`exclude`](/docs/integrations/paraglide/reference/collect-context#exclude), `node_modules`, результатов сборки и выходных файлов фреймворков, а также всего, что игнорируется в `.gitignore`. Файлы за пределами проекта тоже анализируются, если они указаны в `include` (`../shared`).

Если файл не удаётся разобрать, он пропускается с предупреждением. О форматах, отличных от JavaScript, TypeScript и JSX, см. [Поддерживаемые форматы файлов](/docs/integrations/paraglide/reference/file-formats).

## Инструкции импорта [#imports]

Инструкции импорта никогда не сопоставляются по тексту. Каждая из них разрешается, отслеживается через реэкспорты (ESM и CommonJS) и учитывается, только если в итоге ведёт к файлу Paraglide JS.

Они разрешаются так же, как это сделал бы сборщик приложения, но без его запуска. Алиасы берутся из следующих источников (по порядку):

1. Опция [`alias`](/docs/integrations/paraglide/reference/collect-context#alias).
2. Первый найденный `vite.config.*`, `webpack.config.*` или `rspack.config.*`. Конфигурацию Vite разрешает собственный Vite проекта, поэтому работают алиасы плагинов (`$lib` в SvelteKit) и пути от корневого каталога (`/src/a.js`). Конфигурация webpack или rspack импортируется, поэтому для конфигурации на TypeScript нужна версия Node.js, которая умеет выполнять TypeScript. В ней работают алиасы вида `name$` и алиасы с подстановочными знаками (`"@/*"`).
3. `paths` в `tsconfig.json` и `imports` в `package.json`.

Если не удалось прочитать ни одну конфигурацию сборщика, неразрешённые инструкции импорта выводятся в предупреждении, поскольку они могут оказаться необъявленными алиасами. (См. [Разрешение инструкций импорта](/docs/integrations/paraglide/guides/resolving-imports)).

### Автоимпорт

Имена, используемые без инструкции импорта, считываются из файлов `.d.ts` пакетов unplugin-auto-import, unplugin-vue-components и Nuxt. Остальные имена объявите с помощью [`autoImports`](/docs/integrations/paraglide/reference/collect-context#auto-imports).

## Выходные каталоги [#outdirs]

Выходные каталоги Paraglide JS определяются автоматически, поэтому для нескольких проектов Paraglide JS в одном приложении настройка не требуется. Каталог учитывается, если в нём находится ровно то, что генерирует установленная версия Paraglide JS, — на диске или в виде виртуальных модулей. Для Paraglide JS 1 достаточно, чтобы структура каталога совпадала.

Каталог, который выглядит как выходной, но не проходит проверку, пропускается с предупреждением. Чтобы всё же использовать его, укажите его в [`outdirs`](/docs/integrations/paraglide/reference/collect-context#outdirs). Если не найдено ни одного выходного каталога, выводится предупреждение о том, что зафиксировать использования невозможно.

## Проекты inlang [#inlang-projects]

Каждому выходному каталогу соответствует один проект inlang: метаданные записываются в его файлы сообщений базовой локали. Проект выбирается в следующем порядке:

1. Проект, который указан в `README.md` выходного каталога как исходный проект компиляции.
2. Единственный каталог `*.inlang` между [`root`](/docs/integrations/paraglide/reference/collect-context#root) и корневым каталогом монорепозитория.
3. Если таких каталогов несколько — тот, в котором определено больше всего сообщений выходного каталога.

[`inlangProjects`](/docs/integrations/paraglide/reference/collect-context#inlang-projects) заменяет этот поиск. Если для выходного каталога проект не найден, выводится предупреждение, а файл метаданных для его сообщений не создаётся.

## Использование [#usages]

Значения отслеживаются с помощью анализа областей видимости typescript-eslint в следующих случаях:

* Алиасы (`const t = m`), деструктуризация и переприсваивание
* Spread-операторы для объектов
* Аргументы функций и значения параметров по умолчанию
* Пропсы компонентов — между модулями и из шаблонов
* Вычисляемые ключи (`m["a"]`, `m[c ? "a" : "b"]`)

Сообщение считается используемым везде, где оно:

| Использование                          | Пример            |
| -------------------------------------- | ----------------- |
| Вызывается                             | `m.tos()`         |
| Вызывается через один из своих методов | `m.tos.parts()`   |
| Используется без вызова                | `message={m.tos}` |

Если используются сообщения, отсутствующие в сгенерированном каталоге, они перечисляются в предупреждении.

По умолчанию к файлам Paraglide JS относятся `messages.js`, модули в `messages/`, `runtime.js`, `server.js`, `registry.js`, а также пакеты адаптеров Paraglide для фреймворков. (См. [Цели](/docs/integrations/paraglide/reference/extension-api#targets).)

## Ограничения [#limits]

* **Алиасы:** из конфигурации сборщика берутся только её алиасы и корневой каталог Vite, но не виртуальные модули её плагинов. Конфигурации Next.js, Nuxt и Astro не считываются; их алиасы берутся из `tsconfig.json`.
* **Другие цели:** вызовы функций среды выполнения и компоненты-адаптеры анализируются, но не записываются. Ключ, под которым можно выполнить запись, есть только у сообщений.
* **Поток значений:** отслеживание прерывается на возвращаемых значениях, контексте React, `provide`/`inject`, массивах и объектах, присвоенных позже. Чтение после безусловного переприсваивания видит только новое значение. Циклы не моделируются.
* **Пропсы:** пропсы отслеживаются внутри компонентов Svelte, Vue и Astro, но не внутри компонентов, зарегистрированных через `app.component()` или отрисованных с помощью `<svelte:component this={X}>`.
* **Вычисляемые ключи:** ключ, у которого больше 16 вариантов, превращается в `*` и не соответствует ни одному конкретному сообщению.
* **CommonJS:** экспорты, расположенные не на верхнем уровне модуля, не отслеживаются.
* **Повреждённые файлы Astro:** всё, что следует в элементе после незакрытой `{`, теряется. Если доступен только `@astrojs/compiler` (Astro 6 и более ранние версии), теряется остаток строки.

## Sitemap

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