# Оновлення статусу дрейфу i18n

> Як оновити поле drifted_from_default у front matter для локалізованого контенту та за потреби відкрити PR з результатами.

---

LLMS index: [llms.txt](/llms.txt)

---

Виконайте ці кроки, щоб оновити поле `drifted_from_default` у front matter для локалізованого контенту, запустивши `npm run fix:i18n:status` для кожної мови, фіксуючи зміни для кожної мови та за потреби відкриваючи PR.

## Аргументи {#arguments}

Ця навичка приймає необовʼязкові аргументи:

- **`--locale locale,...`** (опціонально): розділений комами список ідентифікаторів мов для обробки, наприклад `--locale pt,es,fr`. Якщо не вказано, обробляються всі неанглійські мови.
- **`--create-pr`** (опціонально): автоматично створює PR після обробки. Якщо не вказано, запитайте користувача за допомогою `AskUserQuestion`, чи створювати PR.

## Підготовка {#preparation}

Ці кроки передбачають, що у вас є локальна копія репозиторію з налаштованим віддаленим репозиторієм `upstream`, який вказує на основний репозиторій. Виконуйте ці кроки локально з кореня репозиторію.

1. Переконайтеся, що ваша робоча тека чиста (немає незафіксованих змін).
2. Перейдіть на гілку `main` та отримайте останні зміни:

   ```sh
   git checkout main
   git pull upstream main
   ```

3. Створіть робочу гілку:

   ```sh
   git checkout -b i18n_update-drift-status
   ```

## Виявлення мов {#discover-locales}

Якщо `--locale` не було передано, виявляйте всі неанглійські мови з каталогу контенту:

```sh
find content -maxdepth 1 -mindepth 1 -type d ! -name 'en' -exec basename {} \;
```

Це повертає один ідентифікатор мови на рядок (наприклад, `bn`, `es`, `fr`, …).

Якщо `--locale` було передано, використовуйте цей список замість цього.

> [!NOTE] Ніколи не включайте `en`
>
> Англійська є стандартною мовою і не може дрейфувати, тому її ніколи не слід включати до списку мов або обробляти цією навичкою. Якщо `en` включено до аргументу `--locale`, ігноруйте його або повідомте про помилку.

## Оновлення статусу дрейфу для кожної мови {#update-per-locale}

Для кожного `{LANG_ID}` у визначеному списку мов:

1. Виконайте команду оновлення статусу дрейфу:

   ```sh
   npm run fix:i18n:status -- content/{LANG_ID}
   ```

2. Зберіть статистику для таблиці опису PR:

   ```sh
   # Файли з дрейфом
   grep -rl "drifted_from_default: true" content/{LANG_ID} | wc -l
   # Загальна кількість файлів для перекладу
   grep -rl "default_lang_commit" content/{LANG_ID} | wc -l
   ```

3. Якщо команда внесла зміни, додайте їх до індексу та зафіксуйте:

   ```sh
   git add content/{LANG_ID}
   git commit -m "chore({LANG_ID}): update drift status"
   ```

   Якщо для мови немає змін, пропустіть коміт, але все одно зафіксуйте статистику.

## Створення PR {#create-the-pr}

Після обробки всіх мов:

- Якщо `--create-pr` не було передано, використовуйте `AskUserQuestion`, щоб запитати користувача, чи створювати PR перед продовженням.
- Якщо користувач відмовляється (або якщо `--create-pr` не було передано і вони кажуть "ні"), зупиніться тут і повідомте статистику.

Щоб створити PR, відправте гілку:

```sh
git push -u origin i18n_update-drift-status
```

Потім запустіть `gh pr create` з такими параметрами:

- **Title**: `[i18n] Update drift status for localized content`
- **Description**: заповніть таблицю нижче зібраною статистикою, включаючи лише оброблені мови.

```md
Updates the drift status for localized content.

Status per locale after this PR:

| Locale | Drifted files | Total files |
| ------ | ------------- | ----------- |
| {ID}   | {drifted}     | {total}     |
```
