Shipi18n vs Crowdin
Crowdin is a hosted localization platform: it imports your source files, coordinates human and machine translation, and syncs the results back. Shipi18n is a linter that checks the locale files in your repo. They do different jobs, and many teams would run both.
We make Shipi18n. Every Crowdin fact below links to Crowdin’s own pages, last verified 4 October 2026.
Side by side
| Shipi18n | Crowdin | |
|---|---|---|
| What it is | A linter for locale files: checks every translation against the source, locally or in CI | Hosted platform that imports source files, coordinates translation, syncs results back |
| Dropped or renamed placeholder | Error, per language — {x}, {{x}}, %{x}, %(x)s, %1$s, %@, ICU arguments | “Placeholders mismatch” QA check, runs in the background; error blocks saving |
| Plural forms | Checked against each language’s CLDR categories — ICU plurals, i18next _one/_few/_many keys, Rails YAML, Android and .xcstrings | “ICU syntax” QA check (e.g. flags a missing other form) |
| Locale formats | JSON, YAML (incl. Rails), Flutter ARB, Apple .xcstrings, Android strings.xml, gettext PO, XLIFF | JSON, YAML, ARB, .xcstrings, Android XML, PO, XLIFF — about 50 formats |
| In CI | GitHub Action with SARIF annotations; CLI, Docker image, pre-commit hook, single-file download | Crowdin CLI and GitHub Action that sync files |
| Account or API key | None (an optional LLM review uses your own key) | Account required |
| Price | Free | Free plan; paid plans from $50 (Pro); free open-source license on request |
| License | Apache-2.0 | Proprietary |
Where Crowdin is stronger
- 20 QA checks, the broadest of the three TMSs we compared, including ICU and Android syntax
- Free plan, plus a free license for open-source projects
- Strong community / volunteer translation workflow
- Maintained GitHub Action and CLI
What Crowdin doesn’t cover
- Its checks cover translations made in Crowdin, not files edited in the repo after the sync
- An account and project setup before anything runs
Using both
Keep Crowdin for translators, memory and workflow. Add shipi18n check in CI to catch what reaches the repo broken — a dropped placeholder, a plural missing a language's forms, invalid ICU — whether it came from the Crowdin sync, a developer's hand edit or an AI coding agent.
What the check prints
$ npx @shipi18n/cli check ./locales -s en
🔎 shipi18n check — flat layout, source 'en', 2 target language(s)
✗ de coverage 100.0% 2 error(s), 1 warning(s)
error welcome placeholder-missing — dropped {name}
fix: restore {name} exactly as written in the source
error checkout placeholder-missing — dropped {amount}
fix: rename {betrag} to {amount}
warning checkout placeholder-added — unexpected {betrag}
✓ pl coverage 100.0% 0 error(s), 0 warning(s)
✗ check failed: 2 error(s)No account and no API key. Exit code 1 fails the CI job; the GitHub Action also annotates the PR lines. Quick start
Last verified 4 October 2026 () against these primary sources. Prices and features change; if something here is out of date, open an issue.