---
createdAt: 2025-03-13
updatedAt: 2025-09-20
title: Автозаповнення
description: Дізнайтеся, як використовувати функцію автозаповнення в Intlayer для автоматичного заповнення контенту на основі заздалегідь визначених шаблонів. Дотримуйтесь цієї документації, щоб ефективно реалізувати можливості автозаповнення у вашому проєкті.
keywords:
  - Автозаповнення
  - Автоматизація контенту
  - Динамічний контент
  - Intlayer
  - Next.js
  - JavaScript
  - React
slugs:
  - doc
  - concept
  - auto-fill
history:
  - version: 7.0.0
    date: 2025-10-23
    changes: Перейменовано `autoFill` на `fill` та оновлено поведінку
  - version: 6.0.0
    date: 2025-09-20
    changes: Додано глобальну конфігурацію
  - version: 6.0.0
    date: 2025-09-17
    changes: Додано змінну `{{fileName}}`
  - version: 5.5.10
    date: 2025-06-29
    changes: Ініціалізовано історію
---

# Заповнення файлів декларації контенту

**Файли декларації контенту з автозаповненням** у вашому CI, це спосіб прискорити робочий процес розробки.

## Розуміння поведінки

Команда `fill` має два режими:

- **Complete**: Автоматично заповнює весь відсутній контент для кожної локалі та редагує поточний файл або інший файл, якщо вказано. Тобто режим Complete пропускає переклад наявного контенту, якщо він уже перекладений.
- **Review**: Автоматично заповнює **весь** контент для кожної локалі та генерує файл для поточного або вказаного іншого файлу.

Команда `fill` обробляє лише ваші локальні файли декларації контенту. Тобто вона не обробляє віддалений контент із CMS. CMS має власну систему керування перекладами.
Якщо ви використовуєте плагіни, такі як `@intlayer/sync-json-plugin`, Intlayer перетворить JSON-файли на файли декларацій локалізованого контенту. Тобто вони будуть оброблятися командою `fill`.

У новостворених файлах міститься інструкція `filled` як метадані словника. Ця інструкція використовується Intlayer, щоб визначити, чи файл був автозаповнений, і, якщо так, пропустити цей файл при наступному перекладі.

Intlayer також враховуватиме такі інструкції для автозаповнення:

- Із вашого файлу `.content.{ts|js|json}` → інструкція `fill`
- Із конфігураційного файлу `.intlayer.config.ts` → інструкція `dictionary.fill`
- Якщо ніде не вказано, за замовчуванням буде встановлено `true`

Для деклараційних файлів вмісту, що призначені для окремої локалі (per-locale), інструкція `true` буде замінена на `./{{fileName}}.fill.content.json`. Це відбувається тому, що такий per-locale деклараційний файл вмісту не може отримувати додатковий локалізований вміст. Отже, буде згенеровано новий файл, щоб не перезаписувати існуючий файл.

## Поведінка за замовчуванням

За замовчуванням глобальний параметр `fill` встановлено в `true`, що означає, що Intlayer автоматично заповнюватиме всі файли вмісту та редагуватиме сам файл. Цю поведінку можна налаштувати кількома способами:

### Глобальні параметри конфігурації

1. **`fill: true` (default)** - Автоматично заповнювати всі локалі та редагувати поточний файл
2. **`fill: false`** - Вимкнути автоматичне заповнення для цього файлу вмісту
3. **`fill: "./relative/path/to/file"`** - Створює/оновлює вказаний файл без редагування поточного, вказуючи на відносний шлях, який резольвується на основі розташування поточного файлу
4. **`fill: "/absolute/path/to/file"`** - Створює/оновлює вказаний файл без редагування поточного, вказуючи шлях, що резольвується відносно базового каталогу (поле `baseDir` у файлі конфігурації `.intlayer.config.ts`)
5. **`fill: "C:\\absolute\path\to\file"`** - Створює/оновлює вказаний файл без редагування поточного, вказуючи на абсолютний шлях, який резольвується на основі вашої операційної системи
6. **`fill: { [key in Locales]?: string }`** - Створює/оновлює вказаний файл для кожної локалі

### Зміни поведінки у v7

У версії v7 поведінка команди `fill` була оновлена:

- **`fill: true`** - Перезаписує поточний файл із заповненим вмістом для всіх локалей
- **`fill: "path/to/file"`** - Заповнює вказаний файл, не змінюючи поточний файл
- **`fill: false`** - Повністю відключає автоматичне заповнення

При використанні опції шляху для запису в інший файл механізм fill працює через _master-slave_ зв'язок між файлами декларацій вмісту. Основний (master) файл є джерелом істини, і коли він оновлюється, Intlayer автоматично застосовує ці зміни до похідних (filled) файлів декларацій, вказаних у шляху.

### Налаштування для кожної локалі

Ви також можете налаштувати поведінку для кожної локалі, використовуючи об'єкт:

```ts fileName="intlayer.config.ts"
const config: IntlayerConfig = {
  content: {
    internationalization: {
      locales: [Locales.ENGLISH, Locales.FRENCH, Locales.POLISH],
      defaultLocale: Locales.ENGLISH,
      requiredLocales: [Locales.ENGLISH], // Рекомендовано, щоб уникнути помилки Property 'pl' is missing in type '{ en: string; xxx } on your t function if
    },
  },
  dictionary: {
    fill: {
      en: true, // Заповнює та редагує поточний файл для англійської
      fr: "./translations/fr.json", // Створює окремий файл для французької
      es: false, // Вимикає заповнення для іспанської
    },
  },
};
```

Це дозволяє мати різну поведінку заповнення для різних локалей у межах одного проєкту.

```ts fileName="src/components/example/example.content.ts"
import { Locales, type Dictionary } from "intlayer";

const exampleContent = {
  key: "example",
  locale: Locales.ENGLISH,
  fill: "./example.content.json",
  content: {
    contentExample: "Це приклад вмісту",
  },
} satisfies Dictionary;

export default exampleContent;
```

Ось [файл декларації вмісту на рівні локалі](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/per_locale_file.md), який використовує інструкцію `fill`.

Потім, коли ви виконаєте наступну команду:

```bash
npx intlayer fill --file 'src/components/example/example.content.ts'
```

Intlayer автоматично згенерує похідний файл декларації за адресою `src/components/example/example.content.json`, заповнивши всі локалі, які ще не оголошені в основному файлі.

```json5 fileName="src/components/example/example.content.json"
{
  "key": "example",
  "content": {
    "contentExample": {
      "nodeType": "translation",
      "translation": {
        "uk": "Це приклад вмісту",
        "fr": "Ceci est un exemple de contenu",
        "es": "Este es un ejemplo de contenido",
      },
    },
  },
}
```

Після цього обидва файли декларацій будуть об'єднані в один словник, доступний за допомогою стандартного хука `useIntlayer("example")` (React) / composable (Vue).

## Глобальна конфігурація

Ви можете налаштувати глобальну конфігурацію автоматичного заповнення у файлі `intlayer.config.ts`.

```ts fileName="intlayer.config.ts"
import { type IntlayerConfig, Locales } from "intlayer";

const config: IntlayerConfig = {
  internationalization: {
    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
    defaultLocale: Locales.ENGLISH,
    requiredLocales: [Locales.ENGLISH, Locales.FRENCH],
  },
  dictionary: {
    // Автоматично згенерувати відсутні переклади для всіх словників
    fill: "./{{fileName}}Filled.content.ts",
    //
    // fill: "/messages/{{locale}}/{{key}}/{{fileName}}.content.json",
    //
    // fill: true, // автоматично згенерувати відсутні переклади для всіх словників, як при використанні "./{{fileName}}.content.json"
    //
    // fill: {
    //   en: "./{{fileName}}.en.content.json",
    //   fr: "./{{fileName}}.fr.content.json",
    //   es: "./{{fileName}}.es.content.json",
    // },
  },
};

export default config;
```

Ви все ще можете тонко налаштувати для кожного словника, використовуючи поле `fill` у файлах контенту. Intlayer спочатку врахує конфігурацію для конкретного словника, а потім відкотиться до глобальної конфігурації.

## Формат автозаповнених файлів

Рекомендований формат для автозаповнених файлів декларацій, **JSON**, оскільки це допомагає уникнути обмежень форматування. Однак Intlayer також підтримує `.ts`, `.js`, `.mjs`, `.cjs` та інші формати.

```ts fileName="src/components/example/example.content.ts"
const exampleContent = {
  key: "example",
  fill: "./example.filled.content.ts",
  content: {
    // Ваш контент
  },
};
```

Це згенерує файл за шляхом:

```
src/components/example/example.filled.content.ts
```

> Генерація `.js`, `.ts` та схожих файлів працює таким чином:
>
> - Якщо файл вже існує, Intlayer розпарсить його, використовуючи AST (Abstract Syntax Tree), щоб знайти кожне поле та вставити будь-які відсутні переклади.
> - Якщо файл не існує, Intlayer згенерує його, використовуючи шаблон файлу декларації контенту за замовчуванням.

## Абсолютні шляхи

Поле `fill` також підтримує абсолютні шляхи.

```ts fileName="src/components/example/example.content.ts"
const exampleContent = {
  key: "example",
  fill: "/messages/example.content.json",
  content: {
    // Ваш контент
  },
};
```

Це згенерує файл за шляхом:

```
/messages/example.content.json
```

## Автогенерація файлів декларацій контенту для кожної локалі

Поле `fill` також підтримує генерацію **файлів декларацій контенту для кожної локалі**.

```ts fileName="src/components/example/example.content.ts"
const exampleContent = {
  key: "example",
  fill: {
    fr: "./example.fr.content.json",
    es: "./example.es.content.json",
  },
  content: {
    // Ваш контент
  },
};
```

Це згенерує два окремі файли:

- `src/components/example/example.fr.content.json`
- `src/components/example/example.es.content.json`

> У цьому випадку, якщо об'єкт не містить усіх локалей, Intlayer пропустить генерацію решти локалей.

## Фільтрація автозаповнення для певної локалі

Використання об'єкта у полі `fill` дозволяє застосовувати фільтри та генерувати лише файли для певних локалей.

```ts fileName="src/components/example/example.content.ts"
const exampleContent = {
  key: "example",
  fill: {
    fr: "./example.fr.content.json",
  },
  content: {
    // Ваш контент
  },
};
```

Це згенерує лише файл перекладу французькою.

## Змінні шляху

Ви можете використовувати змінні всередині шляху `fill`, щоб динамічно формувати цільові шляхи для згенерованих файлів.

**Доступні змінні:**

- `{{locale}}` – код локалі (наприклад `fr`, `es`)
- `{{fileName}}` – ім'я файлу (наприклад `index`)
- `{{key}}` – ключ словника (наприклад `example`)

```ts fileName="src/components/example/index.content.ts"
const exampleContent = {
  key: "example",
  fill: "/messages/{{locale}}/{{key}}.content.json",
  content: {
    // Ваш вміст
  },
};
```

Це згенерує:

- `/messages/fr/example.content.json`
- `/messages/es/example.content.json`

```ts fileName="src/components/example/index.content.ts"
const exampleContent = {
  key: "example",
  fill: "./{{fileName}}.content.json",
  content: {
    // Ваш вміст
  },
};
```

Це згенерує:

/// `./index.content.json`
/// `./index.content.json`
