piapia123
en

Translate Structured Files

Convert

This tool queries the network: your input goes to third-party services, never through this site’s servers

Drop a file here, or click to choose — or just paste the contents below

File extensions: JSON · JSONL · YAML · CSV · TSV · SRT · WebVTT

Translated file

Drop in a language file, a config or a subtitle file, pick the languages and hit Translate. Only the string values are translated — keys, field order, CSV headers and subtitle timings stay exactly where they were. Translating the whole file would turn a key like `"Save"` into Chinese, after which the program can never find that key again; that is the classic way this kind of tool ruins your data. Your text is sent to a third-party translation service — the note under the page title says so. Preview before you translate. The preview sends nothing; it just reports “48 strings, 1234 characters, 12 skipped” and lists exactly which strings will go out. The free quota is counted in characters, so it pays to look first — and it is also your chance to confirm that no key names slipped in. Each distinct string is sent once. In a language file, `"Save"` may appear dozens of times; translating every occurrence would burn several times the quota and let the same word come back worded differently in different places. On formatting: the output is structurally equivalent but not identical character for character — comments are lost (JSON and CSV have none to begin with; YAML does), quoting style may change, and JSON is re-indented with the indent you chose. The FAQ below says this again, because it is worth knowing.

Features

  • Seven formats: JSON, JSONL, YAML, CSV, TSV, SRT and WebVTT, with automatic detection
  • Only string values are translated: keys, field order, CSV headers and subtitle timings stay untouched
  • Each distinct string is sent once — de-duplicated first, which saves quota and keeps a term consistent
  • Skips URLs, emails and site paths, plus values that are nothing but a variable or placeholder ({name}, %s, $1); both switches can be turned off
  • Values with nothing to translate (digits, bare punctuation) are skipped
  • Preview first: reports how many strings and characters will be sent and which are skipped, without sending anything
  • Progress while strings are translated one by one (12 of 48), so a long run does not look stuck
  • Drop a file or paste the contents; copy the result or download it with the matching extension
  • Free MyMemory engine by default, or bring your own Azure key (kept in this browser only)
  • The result reports the format it detected, how many strings were translated, and how many characters and requests went out

How to use

  1. Drop the language, config or subtitle file above, or paste the contents on the left
  2. Pick the source and target languages; the format is detected automatically
  3. Press Preview to see how many strings will be sent, and which
  4. Press Translate and watch the progress
  5. The translated file appears on the right — copy it or download it

FAQ

Who sees my file?
The translation service you picked (MyMemory or Azure). It does not pass through this site — there is no server here to see it. But the contents do leave your device, so please do not use an online tool for anything confidential.
Are the keys translated?
No, and that is the whole point of the tool. Given `{"Save": "Save the file"}`, only the value on the right is replaced; the key `"Save"` is left exactly as it was. A translated key means the program can never find it again — and that fails at runtime, with nothing to see at build time. The first row of a CSV is treated as headers and left alone too.
Why does the output not look like my original file?
Because the values are written back into a freshly serialised file: structurally equivalent and correct, but formatted by each format’s own deterministic writer — YAML comments are lost and quoting style may change, JSON is re-indented with the indent you chose, and CSV always comes back with CRLF line endings and quoting. JSON and CSV have no comments to lose, so they change the least. Preserving your exact original layout is not possible, and this tool will not pretend otherwise.
Why were some values left untranslated?
Three kinds are skipped: values that look like a URL, an email or a site path; values that are nothing but a variable or placeholder (`{count}`, `%s`, `$1`); and values with no letters at all (`123`, `---`). The first two can be turned back on with the switches above. They are skipped by default because a service that turns `{count}` into something else breaks the program, and that is very hard to trace back.
Why no TOML or INI?
Because the values in those files are mostly paths, switches and identifiers, so very few of them need translating — and every extra format is another chance for the re-serialised file to look unlike the original. If you really need it, convert it to JSON with the TOML converter first; that path is safer.
Do the subtitle timings change?
No. For SRT and WebVTT only the cue text is translated — cue numbers, timestamps and cue settings are all kept as they are. To shift a whole timeline by seconds or scale it by a factor, use the subtitle converter.
How is the free quota counted?
MyMemory counts its anonymous quota in characters, reset daily. This tool de-duplicates and skips before sending, so only the distinct strings count — a file where `"Save"` appears fifty times counts once. Press Preview to see exactly how many characters this run will use.
How is this different from the translate tool?
That one translates a passage of text — whatever you paste is what gets translated. This one translates a file: it parses first, picks out only the values that should be translated, and writes them back into the original structure. Use this for language files, configs and subtitles; use Translate for a paragraph or an email.

Related tools