Locales

German (Germany) typography rules · de-DE

Deutsch (Deutschland)

German (Germany) sets primary quotation marks as „…“ and secondary quotation marks as ‚…‘. A break in a sentence is written with an en dash (U+2013) with a space on each side; number and date ranges take an en dash (U+2013) with no surrounding spaces. Numbers bind to units such as % ‰ € with U+00A0.

Updated · spec 1.12.0

Run polytypo with German (Germany) rules

Edit the text and polytypo typesets it with the de-DE locale, in your browser. The code under the form is the call that produces the result.

Runs in your browser. Nothing you paste is sent anywhere.

The call the form above is making, right now

Other locales, and all the options, are in the full playground.

German (Germany) typography at a glance #

Tagde-DE
NameGerman (Germany)
Primary quotes„ U+201E double low-9 quotation mark … “ U+201C left double quotation mark
Secondary quotes‚ U+201A single low-9 quotation mark … ‘ U+2018 left single quotation mark
Parenthetical dashspaced en dash
Range dashunspaced en dash
Rules with citationsquotes, dashes, nbsp, hyphen
Conformance cases90

Which locale tags resolve to German (Germany)? #

The locale option is resolved exactly, then by declared alias, then by dropping the region once; anything else throws POLYTYPO_UNKNOWN_LOCALE.

Declared alias: de → de-DE.

TagHow it resolves
de-DEregistered locale
dedeclared alias
de-ATregion removed, then a declared alias
DEdeclared alias, after case and separator normalisation

Which quotation marks does German (Germany) use? #

Primary„ U+201E double low-9 quotation mark … “ U+201C left double quotation mark — no space inside the marks
Secondary‚ U+201A single low-9 quotation mark … ‘ U+2018 left single quotation mark — no space inside the marks

quotes

de-de-quotes-primary
Er sagte "hallo" zweimal.
Er sagte „hallo“ zweimal.
de-de-quotes-nested
"Er sagte 'nein' zu mir", notierte sie.
„Er sagte ‚nein‘ zu mir“, notierte sie.
de-de-quotes-030-foreign-guillemets
Er sagte «Wort» leise.
Er sagte „Wort“ leise.

How are apostrophes set in German (Germany)? #

apostrophe

de-de-apostrophe-medial
Ich hab's gesehen
Ich hab’s gesehen
de-de-apostrophe-possessive-before-closing-quote
Er sagte „Hans'“ und ging.
Er sagte „Hans’“ und ging.
de-de-apostrophe-closing-single-before-closing-double-not-elision
"Er sagte 'Hans'" und ging.
„Er sagte ‚Hans‘“ und ging.

Which dashes does German (Germany) use for breaks and ranges? #

Parenthetical break (dash.parenthetical)an en dash (U+2013) with a space on each side
Between numbers and dates (dash.range)an en dash (U+2013) with no surrounding spaces

The dashes rule reads the parenthetical convention. The ranges rule reads the range convention and is off by default.

dashes

de-de-dashes-parenthetical-tight-input
Der Plan--falls es einen gibt--scheitert.
Der Plan – falls es einen gibt – scheitert.
de-de-dashes-authored-em-dash-converts
Der Plan—falls es einen gibt—fällt.
Der Plan – falls es einen gibt – fällt.
de-de-dashes-mixed-run-converts
a-–b
a – b

ranges

The ranges rule is off by default; these cases enable it with rules: { ranges: true }.

de-de-ranges
Seiten 34-36
Seiten 34⁠–⁠36

options: rules: {"ranges": true}

de-de-ranges-years
Die Jahre 1939-1945
Die Jahre 1939⁠–⁠1945

options: rules: {"ranges": true}

de-de-ranges-closed-up-currency
€15-€20
€15⁠–⁠€20

options: rules: {"ranges": true}

How is the ellipsis set in German (Germany)? #

An ellipsis keeps its full form after ! and ?; this locale does not abbreviate it there.

ellipsis

de-de-ellipsis-three-dots
Warte... was?
Warte… was?
de-de-ellipsis-many-dots
Hmm.....
Hmm…
de-de-ellipsis-two-dots-after-terminal
Wirklich?..
Wirklich?…

How are hyphens handled in German (Germany)? #

The hyphen lists are empty for this locale, so the hyphen rule changes nothing.

Where does German (Germany) use no-break spaces? #

Characters that take U+00A0 before them (nbsp.beforePunctuation)none
Characters that take U+202F before them (nbsp.narrowBeforePunctuation)none
Short words after which the space becomes U+00A0, so the word is not left at the end of a line (nbsp.afterShortWords)none
Multi-token abbreviations whose internal spaces become U+00A0 (nbsp.abbreviations)z. B. d. h. u. a. u. Ä. z. T. i. d. R.
Units and signs bound to the preceding number with U+00A0 (nbsp.beforeUnits)% ‰ € °C km cm mm kg km/h kWh
Abbreviations bound to the following number with U+00A0 (nbsp.beforeNumber)Nr. S.
Abbreviations bound to the following word with U+00A0 (nbsp.beforeWord)St.
Symbols bound to the following number with U+00A0 (nbsp.afterSymbols)§ §§
Initials (nbsp.initialBinding)chain — a sequence of two or more adjacent initials is bound; a lone initial next to an ordinary capitalised word is left alone

spaces

de-de-spaces-collapse-run
Hallo Welt.
Hallo Welt.
de-de-spaces-before-punctuation
Hallo , Welt !
Hallo, Welt!
de-de-spaces-empty-bracket-guard
( )
( )

nbsp

de-de-nbsp-abbreviation-zb
z. B. so
z. B. so
de-de-nbsp-abbreviation-zb-berlin
z. B. Berlin
z. B. Berlin
de-de-nbsp-abbreviation-dh
d. h. genau so
d. h. genau so

How are symbols set in German (Germany)? #

symbols

de-de-symbols-copyright
Copyright (c) 2026 Iurii Rogulia
Copyright © 2026 Iurii Rogulia
de-de-symbols-trademark
Acme(tm) und Acme (R)
Acme™ und Acme ®
de-de-symbols-multiplication
Auflösung 1920x1080
Auflösung 1920×1080

How does German (Germany) text behave in text, HTML and Markdown modes? #

Each input is the locale's sample sentence followed by a code run, say("a -- b ..."). text mode sets the whole string as prose, code run included. In html and markdown mode the code run comes back byte for byte; only the prose is set.

text
Sie fragte: "Ist das nicht der Laden namens 'an der Ecke'?" ... Wir liefen -- fast 3 km -- und fanden ihn leider geschlossen. Copyright (c) 2026, Format 40x60 cm, z. B. für Poster. say("a -- b ...")
Sie fragte: „Ist das nicht der Laden namens ‚an der Ecke‘?“ … Wir liefen – fast 3 km – und fanden ihn leider geschlossen. Copyright © 2026, Format 40×60 cm, z. B. für Poster. say(„a – b …“)
html
<p>Sie fragte: "Ist das nicht der Laden namens 'an der Ecke'?" ... Wir liefen -- fast 3 km -- und fanden ihn leider geschlossen. Copyright (c) 2026, Format 40x60 cm, z. B. für Poster.</p> <pre><code>say("a -- b ...")</code></pre>
<p>Sie fragte: „Ist das nicht der Laden namens ‚an der Ecke‘?“ … Wir liefen – fast 3 km – und fanden ihn leider geschlossen. Copyright © 2026, Format 40×60 cm, z. B. für Poster.</p> <pre><code>say("a -- b ...")</code></pre>
markdown
Sie fragte: "Ist das nicht der Laden namens 'an der Ecke'?" ... Wir liefen -- fast 3 km -- und fanden ihn leider geschlossen. Copyright (c) 2026, Format 40x60 cm, z. B. für Poster. `say("a -- b ...")`
Sie fragte: „Ist das nicht der Laden namens ‚an der Ecke‘?“ … Wir liefen – fast 3 km – und fanden ihn leider geschlossen. Copyright © 2026, Format 40×60 cm, z. B. für Poster. `say("a -- b ...")`

How does German (Germany) differ from German (Switzerland)? #

de-DE and de-CH are separate locales. Fields whose values differ:

Fieldde-DEde-CH
quotes.primary.open„«
quotes.primary.close“»
quotes.secondary.open‚‹
quotes.secondary.close‘›
nbsp.abbreviations (entries only in one)u. Ä. z. T. i. d. R.u. U. m. a. W. m. w. H.
nbsp.beforeUnits (entries only in one)€—
nbsp.beforeNumber (entries only in one)Nr.Art. Abs. Ziff. Kap.

The same input through both:

input
Sie fragte: "Ist das nicht der Laden namens 'an der Ecke'?" ... Wir liefen -- fast 3 km -- und fanden ihn leider geschlossen. Copyright (c) 2026, Format 40x60 cm, z. B. für Poster.
de-DE
Sie fragte: „Ist das nicht der Laden namens ‚an der Ecke‘?“ … Wir liefen – fast 3 km – und fanden ihn leider geschlossen. Copyright © 2026, Format 40×60 cm, z. B. für Poster.
de-CH
Sie fragte: «Ist das nicht der Laden namens ‹an der Ecke›?» … Wir liefen – fast 3 km – und fanden ihn leider geschlossen. Copyright © 2026, Format 40×60 cm, z. B. für Poster.

Which sources define German (Germany) typography? #

7 citations in spec/locales/de-DE.json, grouped by the rule each one supports. A citation names the authority; the note records what the source does and does not settle.

dashes

  • Duden, Rechtschreibregeln, „Gedankenstrich“, Regel D 45: der Gedankenstrich (Halbgeviertstrich) steht mit Leerzeichen auf beiden Seiten beim Einschieben eines Zusatzes www.duden.de
  • Schweizerische Bundeskanzlei, Schreibweisungen (Ausgabe 2013, aktualisiert), Rz. 234: der Gedankenstrich als Begriffszeichen für „bis“ steht ohne Leerzeichen — „die Jahre 1939–1945“ www.bk.admin.ch

    Für den Bis-Strich konnte keine gleichwertig präzise Duden-Onlineregel gefunden werden; die schweizerische Weisung formuliert dieselbe im gesamten deutschen Sprachraum übliche Regel und wird hier als überprüfbare Quelle angegeben.

hyphen

  • Schweizerische Bundeskanzlei, Schreibweisungen, Rz. 223 und 224: der Bindestrich wird als Ergänzungsstrich für einen eingesparten Wortteil verwendet („Papierproduktion und -handel“); mit dem geschützten Ergänzungsstrich wird verhindert, dass der Ergänzungsstrich am Zeilenende auf der oberen Zeile bleibt, während der zugehörige zweite Wortbestandteil auf die nächste Zeile rutscht www.bk.admin.ch

    Beleg dafür, dass die drei Listen leer bleiben. Das Deutsche kennt keine geschlossene Liste von Morphemen mit unteilbarem Bindestrich; die Trennung am Bindestrich ist zulässig. Der einzige belegte Fall eines geschützten Bindestrichs ist der Ergänzungsstrich (Rz. 224), und der ist offen: er betrifft jedes beliebige Zweitglied nach „und -“ und lässt sich als literale Wortliste nicht abbilden.

quotes

  • Duden, Rechtschreibregeln, „Anführungszeichen“, Regeln D 5 und D 12: Gänsefüßchen „…“ als Anführungszeichen, halbe Anführungszeichen ‚…‘ für eine Anführung innerhalb einer Anführung www.duden.de

    Deckungsgleich mit dem Amtlichen Regelwerk der deutschen Rechtschreibung, § 79 E2 (Anführung innerhalb einer Anführung durch halbe Anführungszeichen).

nbsp

  • DIN 5008 (Schreib- und Gestaltungsregeln für die Text- und Informationsverarbeitung): geschütztes Leerzeichen zwischen den Teilen mehrgliedriger Abkürzungen („z. B.“, „d. h.“), bei Initialen („J. K. Rowling“) sowie zwischen Zahl und Einheit, Prozentzeichen und Paragrafenzeichen

    Die Norm selbst ist kostenpflichtig; die Regelinhalte wurden über die Duden-Regeln zu Abkürzungen (D 1) und über die von Duden selbst verwendete Schreibung „z. B.“ mit geschütztem Leerzeichen gegengeprüft. Der Einheitenliste liegt keine Normliste zugrunde: sie ist bewusst kurz gehalten und enthält keine einbuchstabigen Einheitenzeichen (m, g, l, s), weil diese ohne Kontextprüfung zu Falschtreffern führen.

  • Schweizerische Bundeskanzlei, Schreibweisungen, Rz. 251: der Festabstand verhindert, dass Zusammengehöriges beim Zeilensprung auseinandergerissen wird — Beispiele „20 km“, „St. Gallen“, „Artikel 35“, „S. 17 f.“, „20. November“; Rz. 438: Entsprechendes gilt für die eingliedrige Abkürzung „St.“ für „Sankt“ in Ortsnamen („St. Gallen“, „St. Moritz“); Rz. 439: abschliessende Aufzählung der Begriffszeichen (Ziffern, %, ‰, Gedankenstrich, Schrägstrich, §, Währungszeichen, mathematische Zeichen, Einheitenzeichen) www.bk.admin.ch

    Wortlaut im PDF selbst geprüft. Für Deutschland regelt dieselbe Konstruktion die DIN 5008 (Schreib- und Gestaltungsregeln), die kostenpflichtig ist und deren Wortlaut hier nicht geprüft werden konnte; deshalb steht die schweizerische Weisung als überprüfbarer Beleg — dasselbe Vorgehen wie bei der Quelle zu Rz. 234 in diesem File. Die Übertragung auf de-DE ist insofern eine Ableitung, keine deutschlandspezifische Weisung. „S.“ ist mit „S. 17 f.“ wörtlich belegt und deckt die von docs/PLAN.md §7 geforderte Schreibung „S.“ + Zahl. „Nr.“ gehört nicht hierher, sondern zu den Abkürzungen: die Aufzählung der Begriffszeichen in Rz. 439 ist abschliessend und enthält „Nr.“ nicht (im Sachregister unter N stehen nur „NGO“, „Normen“, „Null“). Aus afterSymbols ist es deshalb ersatzlos gestrichen. In beforeNumber steht es seit Spec 1.3.0 — nicht als Zitat, sondern als vereinheitlichte Schreibung; die Begründung steht im nächsten Eintrag.

  • Keine frei prüfbare Normquelle für „Nr.“ + Zahl: DIN 5008:2020-03 ist kostenpflichtig und wurde nicht gelesen; Duden und das Amtliche Regelwerk 2024 sprechen keine Abstandsregel aus. Vereinheitlicht nach vorherrschendem Gebrauch (Operatorentscheid, 18.09.2026)

    Diese Zeile ist ausdrücklich kein Beleg, sondern eine Festlegung, und wird als solche geführt. Geprüft und ergebnislos: Duden, Rechtschreibregeln „Abkürzungen“ (D 1–D 4, nur der Abkürzungspunkt); Duden, Sprachratgeber „Worttrennung am Zeilenende“; Amtliches Regelwerk 2024, Kapitel F (§§ 84–90, nur Worttrennung) und der Kasten „Sonderzeichen“ auf S. 153, der Typografie ausdrücklich den Konventionen bzw. den DIN-, ÖNORM- und SNV-Normen zuweist, also ausserhalb des Regelwerks. Entscheiden könnte nur DIN 5008:2020-03. Der Projektentscheid dazu: liegt eine Regel hinter einer Bezahlschranke, formuliert polytypo sie nach dem verbreitetsten Gebrauch und hält sie in allen Runtimes gleich — Einheitlichkeit geht hier vor Kanontreue, und die Festlegung wird offen als solche gekennzeichnet statt als Zitat ausgegeben. Der verbreitetste Gebrauch bindet „Nr.“ an die folgende Zahl; die Sekundärquellen, die DIN 5008 referieren, sagen dasselbe. Fällt die Schranke, tritt der Wortlaut der Norm an die Stelle dieser Zeile — auch wenn er ihr widerspricht.

Already using polytypo? Add our badge

Two lines: a script tag and a span. No per-embed network call. Pick a language and a theme, then copy the code into your footer or credits. Embedding notes cover Content Security Policy. Sites with the badge are listed on Sites using polytypo.

<script async src="https://polytypo.dev/badge.js"></script>
<span data-polytypo-lang="en" data-polytypo-theme="light"></span>

Search runs in your browser. Nothing is sent anywhere.