Skip to main content

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

Shipi18nLokalise
What it isA linter for locale files: checks every translation against the source, locally or in CIHosted platform to store, translate, review and sync localization content
Dropped or renamed placeholderError, per language — {x}, {{x}}, %{x}, %(x)s, %1$s, %@, ICU arguments“Inconsistent placeholders” QA check in its editor (off / warning / error)
Plural formsChecked against each language’s CLDR categories — ICU plurals, i18next _one/_few/_many keys, Rails YAML, Android and .xcstringsNo plural or ICU check in its QA-check list
Locale formatsJSON, YAML (incl. Rails), Flutter ARB, Apple .xcstrings, Android strings.xml, gettext PO, XLIFFJSON, YAML, ARB, .xcstrings, Android XML, PO, XLIFF and more
In CIGitHub Action with SARIF annotations; CLI, Docker image, pre-commit hook, single-file downloadCLI and push/pull GitHub Actions that sync files
Account or API keyNone (an optional LLM review uses your own key)Account required
PriceFreeFrom $149/mo (Explorer); usage-based, unlimited translator seats on paid plans; free for open source on request
LicenseApache-2.0Proprietary

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.