キーの名前変更

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モデルやプロンプトを変更した後に新しい翻訳が必要な場合に便利です。

再翻訳の詳細については、再翻訳を参照してください。