← ClaudeAtlas

find-unwrapped-stringslisted

Audit a Lingui project for hardcoded user-facing strings that were never wrapped in macros. Use when asked to find untranslated, unwrapped, or hardcoded strings, to check i18n coverage, to audit what an i18n setup or migration missed, or when text renders in the source language after everything was supposedly translated.
lingui/skills · ★ 9 · AI & Automation · score 79
Install: claude install-skill lingui/skills
# Find Unwrapped Strings ## When to run this - After a Lingui setup or a migration onto Lingui — both wrap what they touch, and neither proves the rest of the codebase was touched. - When the report is "the build is green and the catalogs are full, but this screen still shows English in every locale." - As a periodic coverage audit on a project where i18n is already established. The misses are systematic, not random. Strings in JSX get wrapped because they look like UI; what survives is display copy that doesn't — inside data modules (`export const products = [{ name: "AeroPress Go" }]`), message maps in toast and error helpers, labels in config objects. **The scan is over-inclusive by design.** Precision comes from judging each hit against the skip-list, never from tuning the scanner until it goes quiet. A quiet scanner is indistinguishable from a clean codebase, and only one of those is worth having. Judge by role, never by language. The scanner flags string literals structurally and the skip-list decides which are user-facing — what natural language a string appears to be written in is not an input to that decision, and working it out is pure overhead. ## Step 1 — Ensure the guardrail Install `eslint-plugin-lingui` and enable `no-unlocalized-strings` at `warn` with the tuned options from [references/eslint-config.md](references/eslint-config.md): ```bash npm install --save-dev eslint-plugin-lingui ``` Take the current release — it's a lint-only dev dependency, so