ManuceTranslate a fileTranslate a JSON i18n file into Turkish, placeholders intact

Translate a JSON i18n file into Turkish, placeholders intact

Upload your JSON locale file (i18next, react-intl, vue-i18n, next-intl, ngx-translate) and Manuce translates the values into Turkish, leaves every key untouched and checks each placeholder string by string. You get the same file back, ready to drop in as your tr.json, with a report listing what was translated and what was left as is.

Upload my file See pricing

What it costs

For a JSON i18n file with about 2,000 words of values, into Turkish:

Essentiel
€15

To understand, internal use.

Professional
€45

Ready to send, by the technical specialist.

Premium
€88

Cross-checked. For documents that commit you.

Price for one language, original layout included. VAT not applicable — article 293 B of the French General Tax Code (CGI). The exact quote, based on your file's word count, is shown before you pay.

What Turkish does to your UI strings

Turkish is agglutinative: where English adds words, Turkish stacks suffixes onto one word. A short label can become a single long word such as Kaydedilemedi ("Could not be saved"). Long words like this do not wrap gracefully, so a button or tab sized to fit the source language may overflow.

Word order changes too: the verb comes last. Placeholders therefore move around:

  • source: "Delete {count} files?"
  • Turkish: "{count} dosya silinsin mi?"

That is expected. What matters is that {count} is present, exactly once, as in the source, and that is what Manuce checks.

The trap specific to Turkish is a suffix attached to a placeholder. After a proper noun the suffix follows an apostrophe and depends on the vowels and final letter of the word: Mehmet’e but Ali’ye. A string such as "{name}'e mesaj gönderildi" will be right for some values and wrong for others. A translation cannot know what {name} will hold at runtime, so flag these strings and favour wording that keeps the placeholder free of suffixes.

Finally, register. Turkish interfaces either use the formal siz (Emin misiniz?, "Are you sure?") or the informal sen (Emin misin?). Check which one appears in the free sample before you order.

Dotted and dotless i, plurals and symbols

Dotted and dotless i. Turkish has four letters where English has two: i/İ and ı/I. The translation spells them correctly, but case conversion in your code can break them. In JavaScript, "istanbul".toUpperCase() returns ISTANBUL instead of İSTANBUL, and "KAYIT".toLowerCase() returns kayit instead of kayıt. Use toLocaleUpperCase('tr'), or a CSS text transform with lang="tr" set on the page.

Plurals. Turkish has just two CLDR categories, one and other, and nouns stay singular after a number: 3 dosya, not 3 dosyalar. An ICU message therefore often carries the same text in both branches:

  • {count, plural, one {# dosya silindi} other {# dosya silindi}}

This is correct, not a mistake. For i18next, the source’s _one and _other keys are all Turkish needs; no extra categories are required.

The percent sign. Turkish puts it before the number: %20 indirim ("20% off"). In files using %s or %d placeholders, make sure your library does not read that leading % as a format specifier.

Fonts. ğ, ş, ı and İ are missing from some web font subsets. If you only load the basic "latin" subset, these letters will fall back to another typeface.

What Manuce returns, and what it does not do

You receive the same file in the same format: indentation, key order, quotes, comments, line endings, encoding and BOM are all preserved. Only the values change. Flat or nested JSON and arrays of strings are supported.

  • Keys are never translated: "checkout.button.pay" stays exactly as it is.
  • Placeholders such as {name}, {{count}}, %s and ICU messages (plural, select) are checked string by string: same placeholders, same number of times.
  • Any ICU plural categories the target language requires are added; for Turkish these are one and other.
  • Left untranslated: empty values, URLs, email addresses, numbers, colours, date formats, identifiers and anything marked as non-translatable. A pattern like MM/DD/YYYY therefore stays as it is; adapt it in your code if needed.

Each translated value is compared with its source (placeholders, tags). If a mismatch persists, the source value is kept and the report says so, so you know exactly which strings still need attention.

What Manuce does not do: it does not see your interface or know your runtime values. It will not shorten a label to fit a button, and it cannot fix case conversion performed by your code. Those checks happen in the running app.

Preparing the file and checking the result

Before uploading:

  • Start from the complete, up-to-date source file, saved as UTF-8.
  • Look for strings where a suffix is glued to a placeholder, such as {name}'e or {{city}}'de in an existing Turkish draft; where possible, reword the source so the placeholder stands alone.
  • Mark product or brand names that must stay unchanged as non-translatable, if your format allows it.

The quote counts only the words in values; keys and tags are excluded. Before paying, the free sample shows one translated paragraph at the level you choose: check the register (siz or sen) and how any brand term is handled.

Once you have the file:

  1. Read the report: which strings were left in the source language, and why.
  2. Load the file under the tr locale and go through the densest screens: buttons, menus, error messages.
  3. Test placeholder strings with a name ending in a vowel and one ending in a consonant.
  4. Check uppercase text: İ must keep its dot.
  5. Display a counter at 1 and at 5 to see both plural branches.

In practice

  1. Export your complete source JSON file as UTF-8.
  2. Upload it to Manuce: the quote appears instantly, based on the words in values.
  3. Review the free sample (register, placeholders), choose a level and pay.
  4. Download the Turkish file and read the report of strings left unchanged.
  5. Test the app under the tr locale: uppercase, long words, plurals, placeholders followed by suffixes.

Frequently asked questions

Will the keys in my file be translated?

No. Only values are translated; keys, order, indentation and comments stay identical. You can add the file to your project as the new tr locale.

Do I need extra plural forms for Turkish?

Turkish uses only the one and other categories, like English. Nouns stay singular after a number, so both branches often contain the same text. That is expected and correct.

What happens to a placeholder followed by a Turkish suffix?

The suffix depends on the last syllable of the inserted word, which the translation cannot know: Ali’ye but Mehmet’e. Manuce ensures the placeholder appears as many times as in the source, not that the suffix suits every value. Test these strings with several names, or reword the source to avoid the suffix.

Why does my Turkish uppercase text look wrong?

It is almost always the code rather than the translation: locale-unaware uppercasing turns i into I instead of İ. Use toLocaleUpperCase('tr') or set lang="tr" so CSS applies the right rule.

Does Turkish cost more?

Yes, Turkish carries a ×1.25 coefficient on the per-word rate. The quote counts only the words in values, excluding keys and tags, and appears as soon as you upload the file.

The specialist in charge

This subject goes to Dédale, the technical specialist. See how it works.

Try it on your own file, free

A sample of your file translated at the level you choose, before any payment. You judge, then you decide.

Upload my file