键重命名

Lingo.dev CLI 会自动检测您何时重命名翻译键,并保留现有翻译,从而避免仅键标识符更改时的不必要重新翻译。

当您重构代码并重命名键以便更好地组织时,CLI 会识别内容相同,并将现有翻译应用于新的键名。

键重命名的工作原理

Lingo.dev CLI 通过比较内容指纹而非键名来跟踪翻译。当您重命名键但保持内容不变时,CLI 会检测到这种模式并保留现有翻译。

示例场景:

// locales/en.json(重构前)
{
  "welcome_msg": "Welcome to our platform",
  "btn_save": "Save"
}

// locales/es.json(现有翻译)
{
  "welcome_msg": "Bienvenido a nuestra plataforma",
  "btn_save": "Guardar"
}

重构键名后:

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

运行 npx lingo.dev@latest i18n 保留现有翻译:

// locales/es.json(翻译已保留)
{
  "homepage.welcome": "Bienvenido a nuestra plataforma",
  "button.save": "Guardar"
}

CLI 识别内容相同,并将现有翻译应用于新的键结构。

何时检测到键重命名

Lingo.dev CLI 在以下情况下检测到键重命名:

  • 键名发生更改(welcome_msghomepage.welcome
  • 源内容保持不变("Welcome to our platform"
  • 键出现在相同的存储桶配置中

何时未检测到键重命名

CLI 将以下情况视为需要重新翻译的新内容:

内容更改:

// 更改前
{
  "welcome": "Welcome to our app"
}

// 更改后
{
  "welcome": "Welcome to our platform"
}

键和内容同时更改:

// 更改前
{
  "old_key": "Old content"
}

// 更改后
{
  "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 i18n --force

此操作会绕过键重命名检测并重新翻译所有内容,当您更改 AI 模型或提示后需要更新翻译时非常有用。

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