Translate a Laravel App into German
Upload your Laravel app's JSON language file (for example <code>lang/en.json</code>) and Manuce returns the same file with German values, ready to save as <code>lang/de.json</code>, with placeholders such as <code>:name</code> checked against the source. Translation files written as PHP arrays need converting to JSON first.
What it costs
For the language files of a Laravel 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 the strings in a Laravel app
German uses the Latin alphabet and reads left to right, so the difficulties are in layout and grammar rather than script. German text often runs 20 to 35% longer than English, and compound nouns hit short labels hardest: "User management" becomes "Benutzerverwaltung", a single word the browser will not break without help. Buttons, tabs and table headers sized for English can overflow in your Blade views.
- Capitals: every noun takes a capital letter (
"Ihre Bestellung","Neues Passwort"). A string passed throughStr::lower()or styled withtext-transform: lowercasebecomes wrong in German. - Register: business software addresses users formally with Sie (
"Bitte melden Sie sich an."). Some consumer apps use the informal du; decide before translation and keep it consistent across the file. - Punctuation: German puts no space before
?or!, which matters if your source is French. Quotation marks are written „…“. - Plurals: German has only two CLDR categories, one and other, which maps neatly onto Laravel's short form
"Datei|Dateien".
Placeholders, plurals and validation: Laravel-specific traps
In a Laravel JSON file the key is usually the source sentence itself and the value is its translation. Three things need care when the target is German.
- Placeholders and their case. Laravel treats
:name,:Name(first letter capitalised) and:NAMEdifferently. German word order often moves them:"Welcome, :name"becomes"Willkommen, :name", but"Deleted :count files"becomes":count Dateien gelöscht". Manuce compares every value with its source to confirm the same placeholders are present. - Strings used with
trans_choice. A value such as"{0} No files|{1} One file|[2,*] :count files"must keep its segments and ranges:"{0} Keine Dateien|{1} Eine Datei|[2,*] :count Dateien". Check these lines after delivery; a lost segment raises no error, it simply shows the wrong text. - Grammatical gender in validation messages. Messages like
"The :attribute field is required."receive a field name at runtime. In German the article depends on gender (der, die, das); the phrasing"Das Feld :attribute ist erforderlich."avoids the issue because the article belongs to Feld, not to the inserted name.
What Manuce returns, and what it does not do
You get the same file in the same format: indentation, key order, quotes, comments, line endings, encoding and BOM are preserved; only the values change. Save it as lang/de.json and it is ready to go back into the project.
- Keys are never translated, which is essential because
__('Log in')looks up that exact key. - Also left untouched: empty values, URLs, email addresses, numbers, colours, date formats, identifiers and anything you mark as non-translatable.
- Each translated value is checked against the source (placeholders, any HTML tags). If a mismatch persists, the source value is kept and the report says so, alongside the list of translated strings and those left as is, with the reason.
- Pricing is based on the words in the values only; keys and tags are excluded.
Limits worth knowing: PHP array files (lang/en/auth.php, validation.php and so on) are not supported and must be converted to JSON before upload. Manuce does not touch your code, so German date formats (d.m.Y), number formats (1.234,56) and Carbon's locale remain your application's job. Manuce does not produce certified (sworn) translations either, which matters if, say, legal terms must be certified.
Preparing the file and checking the result
Before uploading:
- Start from your most complete language file and make sure every string called with
__()or@langis in it; a missing string will stay in the source language in the German interface. - Convert any PHP translation files you want translated into JSON. For the standard validation messages, community packages already ship a German version, so you only need to pay for your own strings.
- State the register you want (Sie or du) and mark product or module names as non-translatable.
After delivery:
- Read the report and deal with any values kept in the source language.
- Switch the locale to
deand walk through screens with short labels: menus, buttons, table headers. - Check that your layout outputs
<html lang="de">; this is what letshyphens: autobreak"Benutzerverwaltung"correctly. - Test each plural string with 0, 1 and 2 items.
In practice
- Gather your app's strings into one source JSON file, converting PHP array files if needed.
- Upload the file, choose German and the Sie or du register, then review the quote and the free sample.
- Download the translated file and save it as lang/de.json.
- Read the report, then test the interface with the de locale, especially short labels and plurals.
Frequently asked questions
My translations live in lang/en/*.php. Can you translate them?
Not directly: PHP array files are not supported. Convert them to JSON before uploading. After translation you can convert them back to PHP if your project requires it.
Will the keys in my JSON file be translated?
No. Keys stay exactly as they are, because Laravel uses them to find the string requested by __(). Only the values are translated into German.
What happens if a placeholder such as :count goes missing?
Every translated value is compared with its source. If the mismatch persists, the source value is kept and the report flags it, so you can fix that line yourself.
Should my app address German users as Sie or du?
Sie is the norm for business and professional software. Some consumer apps use du. What matters is choosing before translation and keeping the same register throughout the file.
Will dates and amounts appear in German format?
Date formats and numbers are not changed in the file. Displaying 31.12.2025 or 1.234,56 is handled in your code, through the application locale and Carbon.
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.