Translate a React or Next.js App into German
Upload the JSON message files of your React or Next.js app (i18next, react-intl or next-intl) and get the same file back with German values. Keys, {{name}} placeholders and ICU messages are preserved. What remains is checking what German does to your UI: longer labels, plurals to test and a register to choose.
What it costs
For the language files of a React or Next.js app totalling about 2,500 words, into German:
To understand, internal use.
Ready to send, by the technical specialist.
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 German does to a React interface
German text often runs 20 to 35% longer than English. The growth is worst in short labels: buttons, tabs, column headers. Compound nouns make it harder. "Access rights management" becomes Zugriffsrechteverwaltung, a single word that will not wrap by itself, and "Email notifications" becomes E-Mail-Benachrichtigungen.
- Hyphenation: CSS
hyphens: autoonly breaks German words correctly when the element or page carrieslang="de". In Next.js, make sure thelangattribute on<html>follows the active locale. - Capitals: every noun is capitalised, and nothing else. German has no title case, so it is Neues Projekt erstellen, not Neues Projekt Erstellen.
- Register: formal Sie is standard in business software ("Speichern Sie Ihre Änderungen"). Many consumer apps use informal du ("Speichere deine Änderungen"). Decide first, then check the register in the free sample.
- Punctuation and formats: quotation marks „…“, dates as 31.12.2025, numbers as 1.234,56 and amounts written as "12,90 €".
Plurals, placeholders and word order
German has only two CLDR plural categories, one and other. In i18next that gives:
"files_one": "{{count}} Datei""files_other": "{{count}} Dateien"
In ICU (react-intl, next-intl): {count, plural, one {# Datei} other {# Dateien}}.
Zero takes the plural ("0 Dateien"), as in English. If your source is French, though, it uses the singular there. Your source may also carry _many keys: from French, for instance. These stay in the German file, because the structure is never altered, but they are never selected for German and do no harm.
The real trap is strings assembled in code. t('delete') + ' ' + t('file') yields "Löschen Datei", whereas German puts the verb last: Datei löschen. Likewise, "The {{item}} was deleted" needs der, die or das depending on the gender of the inserted noun. Use one complete sentence per key ("{{item}} wurde gelöscht") or an ICU select.
What Manuce returns, and what it does not do
You get back the same file in the same format, ready to drop into locales/de/ or messages/de.json. Indentation, key order, quotes, comments, line endings, encoding and BOM are preserved. Only the values change.
- Nested keys,
{{name}}interpolations, ICU arguments and tags are kept. This includes the<0>…</0>tags ofTransand<b>in react-intl. - Every translated value is checked against the source, placeholders and tags included. If a mismatch persists, the source value is kept and the report says so.
- The following are left untranslated: keys, empty values, URLs, email addresses, numbers, colours, date formats, identifiers and anything marked as non-translatable. A value of "9.99" stays "9.99". German formatting should come from
Intl.NumberFormat('de-DE')or the next-intl formatter. - The report lists the strings translated, the strings left as they were, and why.
Manuce does not translate text hard-coded in your JSX or TSX components. It does not set up routing for the de locale or adjust your CSS. It does not produce sworn or certified translations either: have legal content such as terms of sale or an Impressum checked by a professional. Pricing counts the words in values only; keys and tags are excluded.
Preparing the files
- Move all copy into the JSON files. Look for strings still hard-coded in components, in Next.js
metadataand in form validation messages. - Remove concatenations like the one above. Each key should hold a full sentence with its placeholders.
- Validate the JSON. A trailing comma or an unescaped quote in
en.jsonwill carry over intode.json. - Let keys give context. Use
button.saverather thansave: "Speichern" and "Gespeichert" are not interchangeable. - Keep one file per namespace (
common.json,checkout.json) to make the report easier to read.
Checking the app after delivery
- Switch to
deand start with dense screens: navigation, tabs, action buttons and table headers, at mobile width. - Look for overflow. A clipped "Abbrechen" or "Einstellungen" points to a fixed width that should become
min-width. - Test plurals with 0, 1 and 2 items.
- Read the report and deal with any values kept in the source language.
- If you chose Sie, search for "du", "dein" and "deine" to catch a stray informal string, and vice versa.
In practice
- Export the source-language JSON files, one per namespace.
- Upload them to Manuce and check the quote and the free sample, including the register.
- Download the German file and the report.
- Place the file in the de locale folder and test dense screens and plurals.
Frequently asked questions
Will my {{name}} placeholders or ICU messages break?
No. Every translated value is checked against the source, placeholders and tags included. If a mismatch persists, the source value is kept and flagged in the report, so the file stays usable.
Do I need extra plural keys for German?
No. German uses one and other, exactly like English. If your source language has more categories, those keys remain in the file but are simply never used for German.
Will the German be formal or informal?
Formal Sie is the norm in a professional context. Check the register in the free sample before paying. If your app should use du, search the delivered file for Sie and Ihr.
Will text written directly in my components be translated?
No. Manuce translates the JSON message files. Extract those strings into your i18next, react-intl or next-intl files first.
How are words counted?
Only words in values are counted; keys and tags are excluded. The quote appears as soon as you upload, based on the exact word count.
The specialist in charge
This subject goes to Dédale, the technical specialist. See how it works.
The same file, into another language
Into German, other files
See also
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.