Переименование ключей

Lingo.dev CLI автоматически определяет, когда вы переименовываете ключи переводов, и сохраняет существующие переводы, чтобы избежать ненужного повторного перевода при изменении только идентификатора ключа.

Когда вы рефакторите код и переименовываете ключи для лучшей организации, CLI понимает, что содержимое осталось прежним, и применяет существующие переводы к новым именам ключей.

Как работает переименование ключей

Lingo.dev CLI сравнивает отпечатки содержимого, а не имена ключей, чтобы отслеживать переводы. Если вы переименовываете ключ, но оставляете содержимое тем же, CLI распознаёт это и сохраняет ваши переводы.

Пример сценария:

// locales/en.json (before refactoring)
{
  "welcome_msg": "Welcome to our platform",
  "btn_save": "Save"
}

// locales/es.json (existing translations)
{
  "welcome_msg": "Bienvenido a nuestra plataforma",
  "btn_save": "Guardar"
}

После рефакторинга имён ключей:

// locales/en.json (after refactoring)
{
  "homepage.welcome": "Welcome to our platform",
  "button.save": "Save"
}

Запуск npx lingo.dev@latest run сохраняет существующие переводы:

// locales/es.json (translations preserved)
{
  "homepage.welcome": "Bienvenido a nuestra plataforma",
  "button.save": "Guardar"
}

CLI определяет, что содержимое идентично, и применяет существующие переводы к новой структуре ключей.

Когда определяется переименование ключа

Lingo.dev CLI определяет переименование ключей, когда:

  • Имя ключа меняется (welcome_msghomepage.welcome)
  • Исходное содержимое остаётся прежним ("Welcome to our platform")
  • Ключ находится в той же конфигурации bucket

Когда переименование ключа не определяется

CLI рассматривает такие случаи как новое содержимое, требующее перевода:

Изменения содержимого:

// Before
{
  "welcome": "Welcome to our app"
}

// After
{
  "welcome": "Welcome to our platform"
}

Меняются и ключ, и содержимое:

// Before
{
  "old_key": "Old content"
}

// After
{
  "new_key": "New content"
}

Массовый рефакторинг ключей

Обнаружение переименования ключей работает и при крупном рефакторинге. Вы можете полностью реорганизовать структуру ключей, и CLI сохранит все совпадающие переводы.

До рефакторинга:

{
  "welcome_text": "Welcome",
  "save_btn": "Save",
  "cancel_btn": "Cancel",
  "error_network": "Network error"
}

После рефакторинга с использованием пространств имён:

{
  "homepage.welcome": "Welcome",
  "buttons.save": "Save",
  "buttons.cancel": "Cancel",
  "errors.network": "Network error"
}

Все переводы сохраняются, потому что отпечатки содержимого совпадают.

Принудительный повторный перевод

Если вы хотите перевести контент заново, даже если отпечатки совпадают, используйте флаг --force:

npx lingo.dev@latest run --force

Это обходит обнаружение переименования ключей и переводит всё содержимое заново — удобно, если вы хотите получить свежий перевод после смены AI-модели или промпта.

Подробнее о повторном переводе читайте в разделе Повторный перевод.