---
title: "Translate JSON, ARB and JSON Lines files"
description: "Translate .json, .arb, .resjson, .jsonl and .ndjson files up to 8 MB into one or several languages. Keys, nesting and placeholders stay intact. Example instructions included."
canonical: "https://ai-glot.com/docs/formats/json"
updated: "2026-10-12"
---

# Translate JSON, ARB and JSON Lines files

JSON files (`.json`), Flutter ARB (`.arb`), Windows app resources (`.resjson`) and JSON Lines (`.jsonl`, `.ndjson`) are accepted up to **8 MB**. Keys are structure, not words: they are never sent as translatable text, so they cannot come back translated. Only string values change.

> **Tip: Try it free**
>
> Drop a file of up to 2 MB on the free translators for [JSON](https://ai-glot.com/file-formats/json-translation), [Flutter ARB](https://ai-glot.com/file-formats/arb-translation) or [JSON Lines](https://ai-glot.com/file-formats/jsonl-translation) to try them with no account, five files a day. The app, the API and the CLI take files up to 8 MB.

## What is translated, and what is left alone

|               | Translated                                 | Left as it was                                                                     |
| ------------- | ------------------------------------------ | ---------------------------------------------------------------------------------- |
| JSON, resjson | String values at any depth                 | Keys, nesting, array order, numbers, booleans, nulls                               |
| ARB           | Message strings                            | Keys, `@` metadata entries when you say so, `{placeholders}` and ICU plural syntax |
| JSON Lines    | The text fields you name, record by record | Keys and their order, ids, numbers, one record per line                            |

Placeholders such as `{count}`, `{{name}}`, `%s` and `$1`, and ICU syntax such as `{count, plural, one{...} other{...}}`, are kept in the translated string and placed where the target language needs them. Name any unusual convention in your instruction.

## What you can ask

**Several languages at once**

One job instead of one upload per language.

Translate the values into French, German and Spanish. Keep placeholders such as \{\{name}} and \{count} unchanged.

**Fill the gaps**

Adds only what is missing, for the next release.

Translate only the keys that are missing from the French file, and keep the existing French translations.

**Only the changed keys**

Returns just the keys that were written.

Translate into Italian and return only the keys you changed.

**ARB with metadata**

For Flutter: keeps the descriptions that gen-l10n expects.

Translate the messages into Portuguese. Leave the @@locale value and all @ metadata entries as they are, and keep ICU plural syntax intact.

**Text fields of a JSON Lines dataset**

For a dataset or an export: ids and labels are not words.

Translate the title and description fields into French. Leave id, price and category unchanged.

## Good to know

- **Several languages in one job** for JSON, ARB, resjson and JSON Lines. The plan shows where each language will be written: by default a sibling key with a language suffix next to the original, such as `title_fr`. If your project expects one file per language (`en.json`, `fr.json`), translate once per language instead and you get one clean file each time.
- **Output filter.** Available for JSON ("only the keys you changed"). The other formats on this page return the whole file.
- **Formatting.** JSON is written back with two-space indentation, so a source formatted differently can show whitespace changes in a diff. Keys keep their order. JSON Lines is written back compact, one record per line.
- **`@@locale`.** An ARB file keeps its `@@locale` value unless you ask for it to change. Set it to the target locale before you ship.
- **Plurals.** Languages with extra plural forms, such as Russian or Arabic, can need ICU branches the English source does not have. Check them in review.
- **A broken JSON Lines record** is named by line number and the file is refused until it is fixed.
- **Ceiling.** 8 MB, a locale folder at once is possible in a [ZIP](/docs/formats/zip).

## Related

- [YAML and TOML](/docs/formats/yaml-and-toml), [Android and Apple strings](/docs/formats/android-and-apple-strings) and [gettext PO](/docs/formats/gettext-po) for other locale formats.
- [CSV](/docs/formats/csv) for the same content as rows.
- [All file formats](/docs/formats)
