JSON, XML and YAML translator
Translate a large JSON, XML or YAML file: values translated, keys untouched
Upload a JSON, XML, .resx or YAML file, from a CMS export to a product feed or a Rails en.yml, and get the same structure back with the text values translated. Keys, element and attribute names never change, identifier fields such as id, url, slug, sku and status are left alone, and every placeholder is checked. Up to 50,000 values are $5 as one payment; the first values are free with no sign-up.
- JSON, XML, .resx, YAML and XLIFF, up to 20 files per job
- Whole job $5, one payment: up to 50,000 values and 3,000,000 characters
- Keys, element names, order, indentation and comments stay the same
- IDs, URLs, slugs, codes and status values are never translated
- Placeholders like {name}, %{count} and {{price}} checked in every value
- Add your own keys to skip, with * as a wildcard
What you get back
The same files, valid and in the same format, named for the new language where the format has a convention: en.json becomes de.json, en.yml becomes de.yml, Strings.resx becomes Strings.de.resx. The first values are shown on screen next to the source before you pay.
- JSON: the same keys, nesting, key order and indentation. Numbers, booleans and null stay as they are; only string values with readable text are translated.
- XML and .resx: text inside elements and readable attributes such as title, alt, label and placeholder. Element names, other attributes, comments and CDATA sections stay; script, style, code and pre are skipped, and so is anything marked translate="no".
- YAML: values only, with comments, quoting style, block text and anchors kept. A Rails file with en: at the root comes back with de: at the root.
- A warnings list of any value where a placeholder or tag did not survive two tries; those values keep the original text, so the file never breaks.
Translating a structured file with a chatbot, and with this tool
A chatbot handles a short JSON snippet well. A big file has to come back complete and valid, with thousands of keys in the right place, and that is where long replies break down.
| Your situation | A chatbot | This tool |
|---|---|---|
| A 30-line JSON snippet | Usually translates it correctly | Translates it too |
| A 3 MB JSON export | Cannot return it in one reply; output is cut and no longer parses | Translates every value in blocks and rebuilds the file from your original |
| "status": "active", "type": "product" | Translates them, which breaks the program that reads the file | Leaves identifier keys and values alone |
| Keys and element names | Sometimes translates them too | Never sends them for translation |
| Placeholders like {count} | Usually keeps them, but nothing checks | Checks every value; a broken one is asked again, then kept in the source |
| Comments and formatting in YAML | Lost when the file is rewritten | Kept; only the values change |
How to translate a JSON, XML or YAML file
-
1
Upload the files
Drop up to 20 .json, .xml, .resx, .yml, .yaml or .xliff files and choose the language. List extra keys to skip if your data has its own codes.
-
2
Check the first values free
The first values appear translated next to the source, with their key paths. Edit any value. No account is needed.
-
3
Unlock and download
Unlock the whole job for $5 and download the translated files, a ZIP when there are several.
Why big structured files trip up general AI assistants
Translating JSON or XML in a chat means asking the model to write the file again, every brace, key and quote included. A large file is longer than one reply, so the output stops partway and no longer parses. And because the model sees keys and values alike, it tends to translate a little too much: an enum value, a slug or a key.
This tool reads the file itself and sends only the readable text values, in blocks, with their key paths as context. Keys, element and attribute names are never sent. Values under identifier keys (id, url, slug, sku, type, status, code, email and similar) and values that look like identifiers, such as order_shipped or user.profile.title, are left alone. Every translation is checked for its placeholders and tags, and the file is rebuilt from your original, so everything else stays byte for byte the same.
What people translate
- CMS and help-center exports in JSON or XML
- Rails, Symfony and Hugo YAML files
- .NET .resx resource files
- Product feeds and catalogs in XML or JSON
- Game and app content files that are not standard i18n formats
- Data files where only some fields are text, such as titles and descriptions
Which tool to use
For app string files, where every value is meant to be translated (i18next JSON, ARB, PO, Android strings.xml, iOS .strings and .xcstrings), use Translate Localization Files: it also handles plural forms. Use this tool for data and content files, where text sits next to IDs, links and codes. Android strings.xml and XLIFF files uploaded here are handled the same way as there.
One job takes up to 20 files of up to 50 MB each. One payment covers up to 50,000 values and 3,000,000 characters; Unlimited covers up to 200,000 values. Values beyond the limit stay in the source language, and the screen tells you how many before you pay. YAML flow style ([a, b]), aliases and values that run over several lines without a block marker are left as they are.
By language and situation
Translate a large JSON file
Upload a JSON file of any shape, from a CMS export to a content dump, and get it back with the same keys, nest...
Read more →Translate an XML file or product feed
Upload an XML file, such as a product feed, a content export or a configuration with user-facing text, and get...
Read more →Translate a YAML file or Rails en.yml
Upload a YAML file, such as a Rails en.yml, a Symfony messages file or a Hugo data file, and get it back with...
Read more →Translate a .NET .resx resource file
Upload one or several .resx files and get each one back as a satellite file for the new language, such as Stri...
Read more →What it costs
Small files, first values
Free
A job of up to 300 values is free in full, downloads included. Bigger jobs: the first values on screen, no account.
Whole job
$5
One payment: up to 50,000 values and 3,000,000 characters across up to 20 files. No subscription.
Unlimited
$19 / week
Every tool on the site, with jobs of up to 200,000 values.
Questions and answers
Can ChatGPT translate a large JSON file?
A small one, yes. A large file has to come back in one reply, so the output tends to be cut off and invalid, and keys or codes can get translated. This tool translates only the text values, checks each one and rebuilds the file from your original.
Are keys ever translated?
No. Keys, element names and attribute names are never sent for translation. Only readable text values are, and values under identifier keys such as id, url, slug, sku, type and status are skipped.
Can I skip my own fields?
Yes. Type the keys to skip, separated by commas, such as sku, internal_note or *_code. They are added to the built-in list.
Does it keep placeholders?
Yes. Placeholders such as {name}, {{count}}, %{count} and ${price} and HTML tags inside values are checked in every translation; a value that loses one is translated again and otherwise keeps the source text.
How many values fit in one payment?
Up to 50,000 values and 3,000,000 characters across up to 20 files, for $5. Unlimited covers up to 200,000 values.
Which languages can it translate into?
81 languages, including Spanish, French, German, Portuguese, Italian, Dutch, Polish, Japanese, Korean, Chinese, Arabic and Hebrew.
Is it free?
A job of up to 300 values is free in full. For bigger jobs the first values are translated free on screen, with no account. The whole job is $5 paid once.
Are my files 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, and you can delete any job yourself at any time.
Updated October 25, 2026 · APPFACT STUDIO LTD