# General Translation Integrations: Файлы метаданных
URL: https://generaltranslation.com/ru/docs/integrations/paraglide/reference/metadata-files.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Файлы с контекстом исходного кода для сообщений Paraglide JS. Справочник по файлам метаданных.

Файл метаданных располагается рядом с файлом сообщений базовой локали и повторяет его структуру: для `messages/en.json` создаётся `messages/en.metadata.json`. Он записывается в формате [метаданных, привязанных к ключам](/docs/cli/reference/keyed-metadata), поэтому CLI загружает его вместе с сообщениями.

## Формат [#format]

У каждого используемого сообщения есть поле [`sourceCode`](/docs/cli/reference/keyed-metadata#source-code), в котором для каждого исходного файла приводится код, окружающий места использования сообщения. Пути указываются относительно корневого каталога проекта.

```json title="messages/en.json"
{
  "greeting": "Hello, {username}!",
  "legacy_banner": "Welcome back"
}
```

```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…"
        }
      ]
    }
  }
}
```

`legacy_banner` не используется в приложении, поэтому записи для него нет.

| Поле     | Описание                                                                                                                                         | Тип      |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
| `before` | Строки над местом использования: по умолчанию 10, задаётся параметром [`radius`](/docs/integrations/paraglide/reference/collect-context#radius). | `string` |
| `target` | Строки, в которых находится само место использования.                                                                                            | `string` |
| `after`  | Строки под местом использования.                                                                                                                 | `string` |

## Какие файлы и ключи записываются [#written]

* **Только базовая локаль.** Для файлов других локалей, например `messages/fr.json`, файл метаданных не создаётся: контекст одинаков для любого языка перевода.
* **Только ключи из файла сообщений.** Записываются только те ключи, которые есть в файле сообщений, поскольку CLI отклоняет ключ метаданных, отсутствующий в исходном файле. Вложенные ключи остаются вложенными.
* **Только используемые сообщения.** Для неиспользуемого сообщения запись не создаётся.
* **Динамические имена.** Вычисляемое имя, например ``m[`error_${code}`]``, относится ко всем сообщениям, подходящим под `error_*`. Просто `m[key]` не относится ни к одному из них.
* **Несколько проектов inlang.** Каждое использование относится к тому проекту, из которого был скомпилирован соответствующий выходной каталог Paraglide JS.

Файлы сообщений определяются по `settings.json` каждого проекта inlang: по его `baseLocale` и `pathPattern` из `plugin.inlang.messageFormat`.

## Как обновляются файлы [#updates]

* `sourceCode` перезаписывается при каждом запуске. Поля, которые вы заполняете вручную, — [`context`](/docs/cli/reference/keyed-metadata#context) и [`maxChars`](/docs/cli/reference/keyed-metadata#max-chars) — сохраняются.
* Файл записывается атомарно и только при изменении его содержимого.
* Если файл метаданных не удаётся прочитать или он не является JSON-объектом, он остаётся без изменений, а в консоль выводится предупреждение.
* Если проект больше не импортирует Paraglide JS, его файлы метаданных остаются без изменений: выходной каталог не обнаруживается, а значит, не обнаруживается и проект inlang.

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

* Приложения, использующие один и тот же проект inlang, перезаписывают `sourceCode` друг друга. Сохраняется результат того приложения, которое было проанализировано последним.
* Для сообщений, которые хранятся через другие плагины форматов inlang (например, i18next), файл метаданных не создаётся.
* Сервис перевода считывает из каждого файла ограниченное количество записей, а слишком длинные записи обрезает. (См. [`sourceCode`](/docs/cli/reference/keyed-metadata#source-code)).

## Sitemap

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