Skip to content
nocutoff.

Translate a JSON i18n file with every key, placeholder and plural intact

Upload en.json (or several namespace files) and get es.json back with the same nested keys, the same order and the same indentation. Only the values are translated, and every {name}, {{count}} and ICU plural is checked in every string. The first strings are free without an account; the whole job, up to 5,000 strings, is $5, paid once.

Translate string files

Tone
Glossary and names to keep (optional)

Brand and product names, separated by commas. Each one is checked in every translation.

One term per line: term = translation.

No sign-up. The first strings are free. Every file in the job $5, one payment.

By continuing you agree to our Terms of Service and Privacy Policy.

  • Keys and nesting never translated; arrays, numbers and booleans left as they are
  • Placeholders checked: {name}, {{count}}, %s, :attribute, $t(key), @:key
  • ICU plurals keep their structure and get the categories the target language needs
  • Flutter ARB: @metadata kept and used as context, @@locale updated
  • File named for the language: en.json becomes es.json, app_en.arb becomes app_es.arb
Open the demo
85 strings · keys unchanged

{

"home.greeting": "Good morning, {name}Buenos días, {name}",

"home.nearby": "{count, plural, =0 {No trails near you yet} one {# trail near you} other {# trails near you}}{count, plural, =0 {Aún no hay rutas cerca de ti} one {# ruta cerca de ti} other {# rutas cerca de ti}}",

"trail.offline_done": "<b>{name}</b> is saved on this phone. You can use the map without a signal.<b>{name}</b> está guardado en este teléfono. Puedes usar el mapa sin señal.",

"trail.share_text": "I just finished {trail} with Trailbook! {km} km and {meters} m up. 🥾¡Acabo de terminar {trail} con Trailbook! {km} km y {meters} m de subida. 🥾",

"saved.empty": "You have not saved any trails yet.\nTap the heart on a trail to keep it here.Aún no has guardado ninguna ruta.\nToca el corazón en una ruta para guardarla aquí."

}

Yellow: placeholders and ICU plural syntax, checked in every string. Teal: tags, escapes and emoji, kept as written.

Same keys. Same placeholders. New language.

Only the values change. The file comes back with the same nesting and order, named es.json, and any string that loses a placeholder is asked again before it can reach your build.

Demo app made up for this page; the Spanish strings are real output from the tool, from an 85-string file.

What gets translated, and what does not

Every string value is sent for translation with its full key as context, so "settings.save" and "cart.save" can come back as different words. Keys are never sent. Values that are not text, such as a URL, an email address or a value made only of placeholders like "{count}", are left as they are.

Rich-text tags used by react-intl and similar libraries, such as <b>{name}</b> or <link>Undo</link>, are replaced with markers before translation and put back afterwards. Literal \n sequences and emoji must also survive; a string that loses any of them is translated again, and if it fails twice the English stays in place and the key is listed for you.

Plurals

An ICU message such as {count, plural, one {# trail} other {# trails}} is translated as one string. The translator is told which plural categories the target language uses, for example one, few, many and other for Russian or Polish, and the result is checked to keep the variable name and the plural keyword. i18next files that use separate keys such as trail_one and trail_other are translated key by key; keys missing for the target language (trail_few, trail_many) are not added.

How the tool works, what it costs and how your files are handled is on the Translate Localization Files page; prices for every tool are on the pricing page.

Last updated

Questions and answers

Will the output keep my formatting?

Yes. Indentation (two spaces, four spaces or tabs), key order, the space after colons and a final newline are copied from your file. A minified file stays on one line.

Can I upload several namespace files at once?

Yes, up to 20 files in one job, such as common.json, cart.json and errors.json. They download together as one ZIP.

What about strings that should not be translated?

List product and brand names under "Never translate"; each string that contains one is checked to keep it. Values that are only a URL, an email address or placeholders are skipped automatically.

How much does it cost?

The first strings are free. The whole job, up to 5,000 strings, is $5, paid once. Unlimited covers up to 15,000 strings per job.

Related jobs

We use analytics cookies to see which pages help people. Is that OK?