键重命名

Lingo.dev CLI 会自动检测您重命名翻译键的操作,并保留现有翻译。当仅更改键标识符时,无需重新翻译。

当您为更好地组织代码而重构并重命名键时,CLI 能识别内容未变,并将现有翻译应用到新键名。

键重命名的工作原理

Lingo.dev CLI 通过比较内容指纹(fingerprint),而不是键名,来跟踪翻译。当您重命名键但内容保持不变时,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 模型或提示词后需要全新翻译的场景。

有关重新翻译的更多信息,请参见 重新翻译