Skip to main content
shipi18n logo|Documentation

orphan-key: translation keys that no longer exist in the source

warning — advisory, exit 0

A key present in a translation file has no counterpart in the source language. Usually it is dead weight left behind after a source key was renamed or deleted — the translation still carries the old key, and nothing will ever read it.

What triggers it

// en.json
{ "title": "Settings" }

// de.json
{ "title": "Einstellungen", "old_title": "Optionen" }   // orphan

Fixed

// de.json
{ "title": "Einstellungen" }

Why it matters

Orphans inflate file size, confuse translators ("do I update this?"), and mask real drift between locales.

How to fix it

Delete the orphaned keys from the translation files.

How to silence it

A warning by default, so it never fails CI unless you set --fail-on warning. Silence specific keys with --ignore-keys.

Check for this in CI

npx @shipi18n/cli check ./locales -s en
# SARIF for inline PR annotations:
npx @shipi18n/cli check ./locales -s en -r sarif -o shipi18n.sarif

The structural checks need no API key. Findings of this rule link back to this page from the SARIF helpUri.

Related rules