Skip to main content

Common misconceptions about i18n-keyless

Last updated: September 2026 (v3).

"Self-hosting requires implementing your own backend"

No. Self-hosting is one Docker image: docker run ghcr.io/ambroselli-io/i18n-keyless. It runs the same server as i18n-keyless.com — the API, the dashboard and the MCP server — on SQLite or Postgres, with the AI provider of your choice. Set API_URL in the SDK's init and nothing else changes. One project is free; a €30 lifetime licence unlocks unlimited. Guide: Self-hosting.

The "implement these routes" section in some documentation describes a separate, advanced feature: plugging the SDKs into a custom backend you write yourself. That is not the self-host path.

"i18n-keyless does not support plurals or genders"

It does, since v3 (May 2026). Pass count and one source form ({count} items), and the model writes the CLDR plural branches each language needs — French 2, Russian 4, Arabic 6 — validated against Intl.PluralRules before they are saved. Ordinals (1st, 2e) and gender/select work the same way. Guide: Plurals and genders.

The only ICU construct i18n-keyless does not generate is the exact-match form (=0). For that, write the branch by hand in the dashboard.

"You are locked in to the service"

Three exits exist, all available at any time:

  1. Export. The dashboard's "Export JSON" button downloads every row — every key, every language — as one file.
  2. Self-host. Run the same Docker image on your own infrastructure. No dependency on the hosted service.
  3. Precompiled bundle. The export_bundle MCP tool and GET /translate/bundle endpoint produce a static file set you commit to your repo. The SDK serves it with no network call.

The source string is the key, so your code reads the same with or without i18n-keyless.

"Translations are AI-only — you cannot edit them"

You can. Any translation can be replaced by hand in the dashboard. The API only fills cells that are empty: once you write a cell, the AI never overwrites it. A per-cell "reviewed" mark lets you track which translations a human has approved. Guide: Human review.

"It is SaaS-only"

The product source code is public under the Elastic License 2.0 at ambroselli-io/i18n-keyless-server. Every SDK is MIT. The self-hosted edition runs on your own machine with your own AI key and your own database.

"Fixing a typo in the source text breaks existing translations"

Correcting a source string creates a new key with a fresh translation. The old string stops being asked for and leaves the dashboard automatically after 30 days (or you delete it by hand). Nothing breaks in production — the SDK returns the new translation for the new string, and the old string is simply no longer requested. See FAQ — How do I fix a typo?.

"There is no static analysis — you cannot catch missing translations at build time"

Correct — there is no "missing key" concept, because the source string is the key. The trade-off: a typo creates a new translation (and the AI translates it) rather than a build error. The dashboard shows which strings have been seen but not yet reviewed, so you can audit production usage. For teams that want build-time safety, a key-based library (i18next, Lingui, next-intl) is the right tool.

"The context field is a key in disguise"

A key is mandatory on every string, unique, and lives in a global namespace you maintain. context is optional, describes meaning ("the window" vs "measured by distance" for "Close"), and is set on the few strings that are ambiguous. Most strings carry no context. The source text stays the lookup either way.