Translate a large JSON file without breaking keys, IDs or placeholders
Upload a JSON file of any shape, from a CMS export to a content dump, and get it back with the same keys, nesting, key order and indentation, and only the readable text values translated. Fields such as id, url, slug, sku, type and status are left alone, and every {placeholder} is checked. A job of up to 300 values is free in full; a bigger file, up to 50,000 values, is $5, paid once.
- Keys are never sent for translation; nesting, key order and indentation stay as in your file
- Numbers, booleans and null stay as they are; only string values with readable text are translated
- Values under identifier keys (id, url, slug, sku, type, status, code, email and similar) are skipped
- Up to 50,000 values and 3,000,000 characters for $5; Unlimited up to 200,000 values
- en.json comes back as es.json; other names get the language code added
A chatbot and this tool on a big JSON file
For a short snippet a chatbot is a fine choice. The difference shows when the file is large and a program has to read the result.
| Your situation | A chatbot | This tool |
|---|---|---|
| A 30-line snippet | Usually translates it correctly | Translates it too |
| A file of several megabytes | The reply has to contain the whole file, so it tends to be cut off and no longer parses | Translates the values in blocks and rebuilds the file from your original |
| "status": "published", "type": "faq" | Often translates them, which breaks the code that reads the file | Leaves them alone because of their keys |
| A value like "Hello, {name}" | Usually keeps {name}, but nothing checks | Checks every value; a broken one is asked again, then kept in the source |
What is translated and what is not
The tool walks through the whole file, object by object and array by array. A string value is translated when it contains readable words. It is skipped when its key, or the nearest key above it in an array, is an identifier such as id, uuid, url, href, slug, sku, type, status, code, email, locale or a key ending in _id or _at. It is also skipped when the value itself looks like an identifier rather than a sentence, such as order_shipped, user.profile.title or ORDER_STATUS_PAID.
If your data has its own codes, list extra keys to skip, separated by commas, for example internal_note or *_code; the asterisk matches any characters. Keys you list are added to the built-in list.
Why the file still parses
The model never writes JSON. It receives the text values with their key paths as context and returns one translation per value, under the same number. The file is then written from your original structure, with the same spacing after colons, the same escaping of slashes and Unicode, and the same final line break. Placeholders such as {name}, {{count}} and %{count}, and HTML tags inside values, are checked in every answer.
For app string files where every value is meant to be translated and plural forms matter, such as i18next JSON or ARB, use Translate Localization Files instead. This tool is for data and content files, where text sits next to IDs, links and codes.
How the tool works, what it costs and how your files are handled is on the Translate JSON, XML and YAML page; prices for every tool are on the pricing page.
Last updated
Questions and answers
Can I translate a large JSON file without the keys being translated?
Yes. Keys are never sent for translation. Only readable string values are, and values under identifier keys such as id, url, slug, sku, type and status are skipped.
How big a JSON file fits in one payment?
Up to 50,000 translated values and 3,000,000 characters for $5. Unlimited, at $19 a week, covers up to 200,000 values.
Will the order and indentation stay the same?
Yes. The file is written from your original: same key order, same indentation, same spacing and escaping style.
Is it free?
A job of up to 300 values is free in full. For bigger files the first values are translated free on screen, with no account; the whole file is $5, paid once.
Is my file private?
Only you can open your job. The text values are sent to an AI model provider for the sole purpose of translating them, through routes that do not use your data for training. Jobs uploaded without an account are deleted after 7 days.