Lingo.dev CLI は翻訳キーのリネームを検出し、既存の翻訳を自動で保持します。キー名だけが変わり、ソース内容が同じままであれば、CLI は既存の翻訳を新しいキーにそのまま適用するため、再翻訳は発生しません。
仕組み#
CLI が比較するのはキー名ではなく、コンテンツのフィンガープリントです。別のキーで同じフィンガープリントが見つかると、CLI はそれをリネームとして認識します。
json
// 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"
}ソースファイル内でキーをリネームした後:
json
// locales/en.json (after refactoring)
{
"homepage.welcome": "Welcome to our platform",
"button.save": "Save"
}npx lingo.dev@latest run を実行すると、翻訳はそのまま保持されます:
json
// locales/es.json (translations carried forward)
{
"homepage.welcome": "Bienvenido a nuestra plataforma",
"button.save": "Guardar"
}検出ルール#
次の条件を満たすと、キーのリネームとして検出されます:
- キー名が変更されている
- ソース内容が完全に同一である
- キーが同じバケット内に存在する
次の場合、キーのリネームとしては検出されません:
- キーと内容の両方が同時に変更される(新しいキーとして扱われる)
- 内容だけが変更される(内容の更新として扱われ、再翻訳が行われる)
大規模なリファクタリング#
リネーム検出は、どんな規模でも機能します。フラットなキーからネストされた名前空間まで、キー構造全体を再編成しても、CLI は一致する翻訳を 1 回の実行ですべて引き継ぎます。
