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,jaOr 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
Xcode String CatalogFlutter ARBYAML (Rails i18n)Apple .stringsApple .stringsdictAndroid strings.xmlGettext PO/POTXLIFF 1.2 / 2.0Java .properties.NET RESXCSV / TSV (multi-locale)
Moving from Crowdin? Read the comparison.