Translate a Flutter app into German
To translate a Flutter app into German, upload your .arb file: Manuce translates the values, sets @@locale to de, checks every placeholder and ICU message, and returns the same file ready to drop back into your project. Most of the remaining work is on your side: making sure the UI copes with German labels that run much longer.
What it costs
For the language files of a Flutter app totalling about 2,000 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 changes in a Flutter UI
German text is often 20 to 35% longer than English, and a short label can double in width. In Flutter this shows up quickly: a Row that fitted in English throws the yellow-and-black stripes and a RenderFlex overflowed error in German.
- Compound nouns: “Notification settings” becomes Benachrichtigungseinstellungen, one word with no space. It will not break at a sensible syllable on its own, so plan for
Flexible,maxLinesandTextOverflow.ellipsiswhere space is tight. - Capitalised nouns: every noun takes a capital (Konto, Passwort, Warenkorb). A lower-case German label looks like a mistake.
- Sie or du: formal Sie (“Geben Sie Ihr Passwort ein”) is standard in business software; many consumer apps use informal du (“Gib dein Passwort ein”). Decide before translating and keep it consistent.
- Buttons: German UIs typically use the infinitive (Speichern, Abbrechen, Weiter), which keeps buttons short.
Plurals, placeholders and formats: German-specific traps
German has only two CLDR plural categories, one and other, much like English, so zero takes the plural: 0 Nachrichten. If your source is French, note that French treats 0 as singular, which German does not. A sound ICU message looks like this:
{count, plural, =0{Keine Nachrichten} =1{1 Nachricht} other{{count} Nachrichten}}
select messages need care too: German inflects articles and adjectives by gender and case, so sentences built by concatenation (“Welcome, ” + name + “!”) translate badly. Use a full string with a placeholder instead: "welcome": "Willkommen, {name}".
Do not hard-code dates or numbers in values. German writes 31.12.2025 and uses a decimal comma (1.234,56); a placeholder typed as DateTime or double, with its format declared in the @ metadata, lets the intl package render the right form for the de locale.
What Manuce returns, and what it does not do
You get back the same file in the same format: indentation, key order, quotes, comments, line endings, encoding and BOM are preserved; only the values change, and @@locale becomes de.
@keys are not translated; theirdescriptionfields are used as context. Writing “button, max 12 characters” in a description helps get Weiter rather than a long phrase.{name}placeholders and ICUpluralandselectmessages are checked, and German plural categories are added.- Each translated value is compared with the source (variables, tags); if a mismatch persists, the source value is kept and the report says so.
- Left as they are: keys, empty values, URLs, email addresses, numbers, colours, date formats, identifiers and anything marked as non-translatable.
Manuce does not edit your Dart code, does not test layouts and cannot see strings hard-coded outside your .arb files. Nor does it provide certified (sworn) translation, should your terms of use ever require one. Pricing covers only the words in values, keys and tags excluded, and German is charged at the base rate.
Preparing your .arb files
- Send an up-to-date template file (for example
app_en.arb): every visible string must be in it, as text left inText('…')widgets will not be translated. - Fill in
descriptionfor ambiguous strings: “Archive” may be a button verb (Archivieren) or a tab name (Archiv). - State whether the app uses Sie or du, and which brand names stay untranslated.
- Replace concatenations with placeholder strings, and “1 item(s)” patterns with a proper
pluralmessage.
Checking the German build
- Put the returned file in your localisation folder, add
Locale('de')tosupportedLocalesif needed, and runflutter gen-l10n. - Read the report: a string left in the source language often points to a malformed placeholder in the original.
- Switch the device to German and go through narrow screens: tab bars, buttons,
AppBartitles, dialogs. Test with a larger system font size as well, which makes overflow worse. - For iOS, check that German is declared in
CFBundleLocalizationsinInfo.plist, otherwise the language may not be offered. - Check plurals with 0, 1 and 2 items, and how dates display.
In practice
- Export your up-to-date template .arb file, with descriptions on ambiguous strings.
- Upload it to Manuce, choose German and a level, and review the free sample.
- Download the translated file and the report of strings left unchanged.
- Drop the file into your project, run flutter gen-l10n and test narrow screens in German.
Frequently asked questions
Do I need to send every .arb file or just the source one?
The source-language file is enough: it holds the values to translate and the metadata used as context. You get the same file back with German values and @@locale set to de.
Are @ keys and descriptions translated?
No. @ keys are metadata, so they are skipped for translation, but their descriptions are read as context. They stay identical in the returned file.
What happens if a placeholder might break?
Every translated value is compared with the source, including variables and tags. If a mismatch persists, the source value is kept and flagged in the report, so code generation does not fail and you can fix that string yourself.
How do I stop German text overflowing?
Manuce does not touch layout, so widgets need adapting in code with Flexible, maxLines or an ellipsis. Stating a maximum length in a string's description does help produce a shorter label.
How many words will I be charged for?
Only words in values are counted; keys, tags, URLs and identifiers are excluded. The quote appears as soon as you upload the file, and German is at the base rate.
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.