Shipi18n vs Lokalise
Lokalise is a hosted translation management system (TMS): teams store, translate, review and sync strings there. 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 Lokalise fact below links to Lokalise’s own pages, last verified 4 October 2026.
Side by side
| Shipi18n | Lokalise | |
|---|---|---|
| What it is | A linter for locale files: checks every translation against the source, locally or in CI | Hosted platform to store, translate, review and sync localization content |
| Dropped or renamed placeholder | Error, per language — {x}, {{x}}, %{x}, %(x)s, %1$s, %@, ICU arguments | “Inconsistent placeholders” QA check in its editor (off / warning / error) |
| Plural forms | Checked against each language’s CLDR categories — ICU plurals, i18next _one/_few/_many keys, Rails YAML, Android and .xcstrings | No plural or ICU check in its QA-check list |
| Locale formats | JSON, YAML (incl. Rails), Flutter ARB, Apple .xcstrings, Android strings.xml, gettext PO, XLIFF | JSON, YAML, ARB, .xcstrings, Android XML, PO, XLIFF and more |
| In CI | GitHub Action with SARIF annotations; CLI, Docker image, pre-commit hook, single-file download | CLI and push/pull GitHub Actions that sync files |
| Account or API key | None (an optional LLM review uses your own key) | Account required |
| Price | Free | From $149/mo (Explorer); usage-based, unlimited translator seats on paid plans; free for open source on request |
| License | Apache-2.0 | Proprietary |
Where Lokalise is stronger
- Translation memory, in-context editors and over-the-air mobile updates on every plan
- AI/MT translation allowance included in each plan
- 14 configurable QA checks for translators, including placeholders
- Push and pull GitHub Actions maintained by Lokalise
What Lokalise doesn’t cover
- Its QA checks run in its editor; an “error” blocks saving there, while API changes are only marked with warnings
- No plural or ICU syntax check listed
- Doesn’t check files edited in the repo after the sync (by a developer or an AI agent)
Using both
Keep Lokalise 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 Lokalise 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.