Translate a PO (gettext) file into German
Upload your .po or .pot file and Manuce translates the msgstr values into German, sets two plural forms and checks every printf variable. You get the same file back, ready to compile, with a report of translated strings and those left unchanged.
What it costs
For a PO file (gettext) with about 2,500 words of values, 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 .po file
German has two CLDR plural categories, one and other, so each plural entry needs msgstr[0] and msgstr[1]. The expected header is Plural-Forms: nplurals=2; plural=(n != 1);. Coming from English this looks familiar, and zero is plural in both: "0 files", 0 Dateien. The trap is source languages such as French, where zero is singular: any hand-written n > 1 test in your code will produce wrong German for zero. Use ngettext() throughout.
msgid "%d file"/msgid_plural "%d files"becomesmsgstr[0] "%d Datei"andmsgstr[1] "%d Dateien".- Every noun is capitalised, but there is no English-style title case: "Save As" becomes
Speichern unter. - Compounds lengthen labels: "Account settings" becomes
Kontoeinstellungen, one word that cannot wrap without hyphenation. Expect German text to run 20 to 35% longer than English. - Professional software addresses users with formal Sie, with a capitalised possessive:
Speichern Sie Ihre Änderungen.
Variables, word order and context
German puts the infinitive verb at the end of a short label: "Delete %s?" becomes "%s löschen?". With one variable that is harmless. With two, German sentence order may reverse them, so strings written with positional arguments, %1$s and %2$s, let the translation reorder values safely, for example "%1$s hat %2$s eingeladen".
Manuce checks that every variable in the source (%s, %d, %1$s) is present in the German value. msgctxt resolves ambiguities that English hides and German does not: "Open" with context status gives Offen, with context action gives Öffnen. Extracted comments #. and references #: are read and kept.
German typography uses „…“ quotation marks. Inside a .po they need no escaping, unlike the straight quote \", but they do not exist in ISO-8859-1: UTF-8 is the only safe encoding.
What Manuce returns, and what it does not do
You receive the same file in the same format:
- A
.potcomes back as a German.po, withLanguage: deandPlural-Formsheaders set. - The number of
msgstr[n]entries matches German: two. msgctxt,msgid_pluraland#.,#:,#,comments are kept, as are entry order, quoting, line endings, encoding and BOM. Only the values change.- Each translated value is compared with the source (variables, tags). If a mismatch persists, the source value is kept and the report says so.
- The report lists translated strings and those left unchanged, with the reason.
Not translated: keys, empty values, URLs, email addresses, numbers, colours, date formats, identifiers and anything marked as non-translatable. In practice a msgid "m/d/Y" stays as it is; if you want the German d.m.Y, set it yourself. Manuce does not compile the .mo, does not adjust your layout for longer labels and does not take glossaries or terminology instructions. The target is German (de): for Switzerland, where ß is written ss, review it yourself.
Preparing the file and checking the result
Before uploading:
- Save the file as UTF-8 and declare
charset=UTF-8in the header, for umlauts,ßand German quotation marks. - Add
msgctxtto short ambiguous words ("Open", "Post", "Share") and#.comments saying where the string appears. - Switch strings with several variables to positional arguments.
The quote counts the words in the values, keys and tags excluded. The free excerpt, one paragraph translated at your chosen level, lets you check the Sie register and how product names are handled before paying; for a published interface, the Professional level is the sensible choice.
After delivery:
- Run
msgfmt --check -o de.mo de.po: it validates the header and printf format consistency. - Look for entries still flagged
#, fuzzy: msgfmt skips them by default, so they would display in the source language. - Open the interface in German and look for clipped buttons; CSS
hyphens: autowithlang="de"helps with long compounds.
In practice
- Save your .po or .pot as UTF-8, with msgctxt and #. comments on ambiguous strings.
- Upload the file: the quote appears at once, based on the words in the values.
- Read the free excerpt to check the Sie register and terms that must stay unchanged.
- Download the de.po and the report, then run msgfmt --check before testing the interface.
Frequently asked questions
Will my .pot template come back as a usable de.po?
Yes. The template is returned as a German .po with the Language and Plural-Forms headers set. You still compile it to .mo with your usual tools.
How many plural forms will the German file have?
Two: msgstr[0] for singular and msgstr[1] for plural, with the rule plural=(n != 1). Zero therefore takes the plural form, as in English.
Will the translation use Sie or du?
Formal Sie is the norm in professional software. Manuce does not take register instructions, so check the free excerpt and then the translation if your product addresses users informally.
What happens to entries flagged fuzzy?
Comments and #, flags are kept as they are. Review those entries and remove the fuzzy flag, otherwise msgfmt leaves them out of the compiled file by default.
Could my product name be translated?
Identifiers, URLs, numbers and anything marked non-translatable are left alone. For a product name written in plain text inside a sentence, check the free excerpt and then the delivered translation.
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.