jed-orphan: JS translation string no longer in the .po
warning — advisory, exit 0
A string in the JED JSON has no counterpart in the .po — usually a source string that was renamed or removed, leaving the generated JSON still shipping the old entry. Reported by `shipi18n wp-sync`.
What triggers it
// .po no longer has "Old label"
// but the JED JSON still carries it:
{ "locale_data": { "messages": { "Old label": ["Etiqueta antigua"] } } }Fixed
// regenerate the JSON so it only holds strings the .po still hasWhy it matters
Orphaned JS strings are dead weight the build still ships, and they hint the JSON was generated from a different .po than the one in the repo now. A .po-only string is not flagged — the JED is legitimately a JS-only subset.
How to fix it
Re-run `wp i18n make-json`; if the string is genuinely gone, the fresh JSON drops it.
How to silence it
--severity jed-orphan=off, or --ignore-keys for a specific string.
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.sarifThe structural checks need no API key. Findings of this rule link back to this page from the SARIF helpUri.
Related rules
- jed-drift — WordPress JS translations out of sync with the .po
- orphan-key — translation keys that no longer exist in the source