Переименование ключей
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_msg→homepage.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-модели или промпта.
Подробнее о повторном переводе читайте в разделе Повторный перевод.