JSON (key/value, i18next) localization with AI

Flat or nested key/value JSON, including i18next with its _one/_other plural suffixes.

.jsonformat: jsonone file per locale

What it is

JSON is the default for JavaScript apps: react-i18next, i18next, next-intl, vue-i18n, FormatJS message files and countless hand-rolled loaders. One file per locale, keys either flat ("home.title") or nested objects.

Example

locales/en.json
{  "home": {    "title": "Welcome back, {{name}}",    "cart_one": "{{count}} item in your cart",    "cart_other": "{{count}} items in your cart"  }}

How Glossa handles it

Plurals
i18next suffixes (_zero, _one, _two, _few, _many, _other) are grouped into one plural entry and written back with the same suffix style.
Comments and context
JSON has no comments. Add context to a key in the dashboard or with update_unit; it reaches every translation prompt.
Placeholders
{{name}}, {name}, %s, ${name}, $t(nesting) and HTML tags are detected and must survive translation unchanged; a translation that drops or alters one is rejected with placeholder_mismatch.
Round trip
Nested objects are read as dot-joined keys and written back nested; flat files with dotted keys stay flat.

Translate it from the command line

Push the source-language file; strings are deduplicated against the rest of your workspace and queued for translation. Pull writes locales/es.json back in the same format.

npx @meterapp/glossa loginnpx @meterapp/glossa push locales/en.json --project appnpx @meterapp/glossa pull --project app --locale es,de,ja

Or ask an agent over MCP: “Push locales/en.json to Glossa and pull Spanish.” It calls push_file and pull_file. See the CLI and MCP guides.

Other formats

Moving from Crowdin? Read the comparison.

Push your first file

Glossa is free for one app. Sign in, push a translation file, and pull it back in every language.