# General Translation Integrations: Добавление контекста из исходного кода
URL: https://generaltranslation.com/ru/docs/integrations/paraglide/guides/adding-source-context.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Как передавать на перевод код вокруг каждого сообщения Paraglide JS в качестве контекста.

`@generaltranslation/paraglide-js` находит в вашем приложении каждое использование сообщения Paraglide JS и сохраняет окружающий его код. Благодаря этому сообщение вроде «Order» поступает на перевод вместе с кодом, по которому видно, что это: кнопка, заголовок, существительное или глагол.

Пакет читает ваши исходные файлы. Он не изменяет Paraglide JS и никогда не запускает ваш сборщик, поэтому работает при любом способе сборки приложения.

## Перед началом работы [#before-start]

Вам понадобится:

* Node.js 20 или новее.
* Paraglide JS 1, 2 или 3, скомпилированный хотя бы один раз, чтобы его выходной каталог уже существовал.
* Сообщения в формате сообщений inlang (`plugin.inlang.messageFormat`), например `messages/en.json`.
* Файлы сообщений, которые вы переводите с помощью CLI (см. [Быстрый старт](/docs/integrations/paraglide/quickstart)).
* Для компонентов, написанных не на JavaScript, TypeScript или JSX, — установленный в приложении языковой инструмент фреймворка (см. [Поддерживаемые форматы файлов](/docs/integrations/paraglide/reference/file-formats)).

<Callout type="info">
  Сейчас контекст источника не прикрепляется, если используется правило `jsonSchema` из раздела [Быстрый старт](/docs/integrations/paraglide/quickstart#quickstart). CLI выводит предупреждение о том, что метаданные не были прикреплены, и переводит сообщения без контекста источника. Не удаляйте это правило ради контекста источника: оно защищает объявления вариантов и селекторы.
</Callout>

## Добавление контекста [#add-context]

Установите пакет, соберите контекст и затем выполните перевод как обычно.

### 1. Установите `@generaltranslation/paraglide-js`

<Tabs items={['npm', 'yarn', 'bun', 'pnpm']}>
  <Tab value="npm">
    ```bash
    npm install --save-dev @generaltranslation/paraglide-js
    ```
  </Tab>

  <Tab value="yarn">
    ```bash
    yarn add --dev @generaltranslation/paraglide-js
    ```
  </Tab>

  <Tab value="bun">
    ```bash
    bun add --dev @generaltranslation/paraglide-js
    ```
  </Tab>

  <Tab value="pnpm">
    ```bash
    pnpm add --save-dev @generaltranslation/paraglide-js
    ```
  </Tab>
</Tabs>

### 2. Соберите контекст

Запустите [`paraglide-context`](/docs/integrations/paraglide/reference/paraglide-context) из каталога вашего приложения. С флагом `--verbose` команда выводит количество найденных использований и выходные каталоги Paraglide JS, с которыми она работала.

```bash
npx paraglide-context --verbose
```

Рядом с каждым файлом сообщений базовой локали создаётся файл метаданных. Для каждого используемого сообщения в нём приводится код вокруг мест его использования с разбивкой по исходным файлам:

```json title="messages/en.metadata.json"
{
  "greeting": {
    "sourceCode": {
      "src/Header.tsx": [
        {
          "before": "import { m } from './paraglide/messages.js';\n…",
          "target": "  return <h1>{m.greeting({ username })}</h1>;",
          "after": "}\n…"
        }
      ]
    }
  }
}
```

<Callout type="info">
  В предупреждениях указано, что было пропущено и как это исправить: неразрешённый алиас импорта, отсутствующий языковой инструмент или каталог, не распознанный как выходные данные Paraglide JS. (См. [Разрешение импортов](/docs/integrations/paraglide/guides/resolving-imports)).
</Callout>

### 3. Переведите сообщения

Выполните [`gt translate`](/docs/cli/reference/commands/translate). CLI находит каждый файл метаданных рядом с соответствующим файлом сообщений и отправляет его вместе с сообщениями в виде [метаданных, привязанных к ключам](/docs/cli/reference/keyed-metadata).

```bash
npx gt translate
```

Чтобы контекст оставался актуальным, собирайте его перед каждым переводом:

```json title="package.json"
{
  "scripts": {
    "translate": "paraglide-context && gt translate"
  }
}
```

<Callout type="info">
  Одно лишь добавление нового контекста не запускает повторный перевод сообщения. Сообщение переводится заново, только когда меняется его исходный текст.
</Callout>

## Next steps

- /docs/integrations/paraglide/guides/resolving-imports
- /docs/integrations/paraglide/guides/adding-file-formats

## Sitemap

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