i18next + Polylens

Translation health for i18next, caught in CI

Score your i18next locale files on every push and fail the build when a language regresses.

i18next powers translation in React, Vue, Angular, Svelte and plain Node, and in every one of them a missing key falls back to the key or a default value, never an error. The build stays green while a real user reads a raw string.

Polylens scans i18next JSON and YAML locale files, scores each language, and lists every missing key, broken {{interpolation}}, malformed plural and stale string, then fails CI on regression. One curl call, no SDK, strings stay in your repo.

Locale format: JSON or YAML namespaces (locales/{lng}/{ns}.json). Point the gate at your locales directory.

i18next bugs that ship with a green build

Missing keys fall back silently

i18next returns the key or a default when a translation is absent. Polylens flags every key missing from any language.

Broken {{interpolation}}

Altered {{placeholders}} break interpolation with no warning. Polylens diffs every placeholder between source and target.

Plural suffix mismatch

i18next plural suffixes that exist in one language but not another render wrong for most counts. Polylens validates completeness.

Stale translations

A reworded source leaves old translations live. Polylens detects staleness from scan history alone.

GitHub Actions: gate i18next locales on every PR

name: i18n health
on:
  pull_request:
    paths: ['locales/**']
jobs:
  polylens:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: curl -fsSO https://polylens.sh/polylens-ci.mjs
      - run: node polylens-ci.mjs ./locales
        env:
          POLYLENS_TOKEN: ${{ secrets.POLYLENS_TOKEN }}
          FAIL_ON: error
          NO_REGRESSION: 'true'

Add your project token as the POLYLENS_TOKEN repository secret. A failing gate returns HTTP 422, so the build goes red like any other test.

FAQ

How do I check i18next translations in CI?

Add one step to your pipeline that posts your locale files to Polylens. The gate returns HTTP 422 when a language regresses, so the build fails like any other test. No SDK, one curl call, and your strings never leave your repo.

Will it catch missing keys that i18next renders as raw strings?

Yes. Missing keys are the first of 13 issue classes Polylens detects, alongside broken placeholders, untranslated copy, malformed plurals, and stale strings. Every missing key is listed per language in the dashboard.

Is Polylens a replacement for i18next?

No. i18next renders your translations at runtime; Polylens is the quality gate that scores the locale files before they ship. They sit on opposite ends of the pipeline and work together.

Wire i18next into a CI gate in ten minutes. Free for one project, no card, strings stay in your repo.