Locales

Romanian typography rules · ro

Română

Romanian 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; no single range convention is verified, so none is substituted. Numbers bind to units such as km kg cm with U+00A0.

Updated · spec 1.12.0

Run polytypo with Romanian rules

Edit the text and polytypo typesets it with the ro 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.

Romanian typography at a glance #

Tagro
NameRomanian
Primary quotes„ U+201E double low-9 quotation mark … ” U+201D right double quotation mark
Secondary quotes« U+00AB left-pointing double angle quotation mark … » U+00BB right-pointing double angle quotation mark
Parenthetical dashspaced en dash
Range dashno dash substitution
Rules with citationsquotes, dashes, ranges, ellipsis, hyphen, nbsp
Conformance cases27

Which locale tags resolve to Romanian? #

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

TagHow it resolves

Which quotation marks does Romanian use? #

Primary„ U+201E double low-9 quotation mark … ” U+201D right double quotation mark — no space inside the marks
Secondary« U+00AB left-pointing double angle quotation mark … » U+00BB right-pointing double angle quotation mark — no space inside the marks

quotes

ro-quotes-primary
A spus "salut".
A spus „salut”.
ro-quotes-not-german
„salut“
„salut”
ro-quotes-nested
"Ea a zis 'bine' acolo"
„Ea a zis «bine» acolo”

How are apostrophes set in Romanian? #

apostrophe

ro-apostrophe-foreign-name
A mers la McDonald's și înapoi
A mers la McDonald’s și înapoi

Which dashes does Romanian 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)no substitution: the locale has no verified convention, so the rule writes nothing

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

dashes

ro-dashes-parenthetical
Nu avem încă - firește - rezultate.
Nu avem încă – firește – rezultate.
ro-dashes-existing-em-dash
Nu avem încă — firește — rezultate.
Nu avem încă – firește – rezultate.

How is the ellipsis set in Romanian? #

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

ellipsis

ro-ellipsis-three-dots
Stai... ce?
Stai… ce?
ro-ellipsis-not-abbreviated
Serios?.. da
Serios?… da

How are hyphens handled in Romanian? #

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

Where does Romanian 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)none
Units and signs bound to the preceding number with U+00A0 (nbsp.beforeUnits)km kg cm mm km/h °C
Abbreviations bound to the following number with U+00A0 (nbsp.beforeNumber)art. nr.
Abbreviations bound to the following word with U+00A0 (nbsp.beforeWord)none
Symbols bound to the following number with U+00A0 (nbsp.afterSymbols)none
Initials (nbsp.initialBinding)single — a lone initial is bound to the following word as well as a chain of initials

spaces

ro-spaces-brackets-and-final-stop
Text ( obișnuit ) rămâne .
Text (obișnuit) rămâne.

nbsp

ro-nbsp-before-number
conform art. 3 și nr. 5
conform art. 3 și nr. 5
ro-nbsp-units
10 km, 5 kg, 20 cm, 3 mm și 90 km/h
10 km, 5 kg, 20 cm, 3 mm și 90 km/h
ro-nbsp-celsius
19 °C
19 °C

How are symbols set in Romanian? #

symbols

ro-symbols-copyright
Copyright (c) 2026
Copyright © 2026

How does Romanian 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
Ea a întrebat: "Nu e acesta magazinul pe care îl numesc 'de la colț'?" ... Am mers -- aproape 3 km -- și era închis. Copyright (c) 2026, format 40x60 cm. say("a -- b ...")
Ea a întrebat: „Nu e acesta magazinul pe care îl numesc «de la colț»?” … Am mers – aproape 3 km – și era închis. Copyright © 2026, format 40×60 cm. say(„a – b …”)
html
<p>Ea a întrebat: "Nu e acesta magazinul pe care îl numesc 'de la colț'?" ... Am mers -- aproape 3 km -- și era închis. Copyright (c) 2026, format 40x60 cm.</p> <pre><code>say("a -- b ...")</code></pre>
<p>Ea a întrebat: „Nu e acesta magazinul pe care îl numesc «de la colț»?” … Am mers – aproape 3 km – și era închis. Copyright © 2026, format 40×60 cm.</p> <pre><code>say("a -- b ...")</code></pre>
markdown
Ea a întrebat: "Nu e acesta magazinul pe care îl numesc 'de la colț'?" ... Am mers -- aproape 3 km -- și era închis. Copyright (c) 2026, format 40x60 cm. `say("a -- b ...")`
Ea a întrebat: „Nu e acesta magazinul pe care îl numesc «de la colț»?” … Am mers – aproape 3 km – și era închis. Copyright © 2026, format 40×60 cm. `say("a -- b ...")`

Which sources define Romanian typography? #

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

ellipsis

  • Academia Română, ÎOOP6 (2024), §III.1.2, pp. 49–50, «Punctele de suspensie [...]»: «Nu sunt precedate, dar sunt urmate obligatoriu de blanc.»; «După punctele de suspensie plasate la sfârșitul unui enunț nu se pune punct final.»; exemple cu punctele de suspensie între cuvinte și la sfârșit de enunț («Ai putea să citești cărți de aventuri sau polițiste, de călătorie sau de istorie, jurnale...»); Îndreptar ortografic, ortoepic și de punctuație, ed. a V-a (1995), §298 (transcriere dexonline wiki): «Continental!...» doom.lingv.ro

    abbreviatedAfterTerminal = false: după «!» stau trei puncte, iar forma cu două puncte nu apare în nicio sursă; nu există o frază explicită despre punctul final după «?» sau «!», deci ÎNCREDERE MEDIE. ÎOOP6 tipărește punctele de suspensie și ca trei puncte, și ca «…» (U+2026) în exemple, fără a distinge funcțional; un singur caracter e forma de stocare a spec-ului. Verificat 20.10.2026.

ranges

  • Academia Română, ÎOOP6 (2024), §III.1.2, «Cratima»: «perioada 1-13 mai = de la… până la…; distanța Sibiu-Brașov = dintre… și…»; «sunt greșite exprimările hibride: între 1-5 ianuarie, o persoană între 22-25 de ani, distanța dintre Sibiu-Brașov»; «Linia de pauză [–]», funcția (iv): se folosește «între cifre care exprimă un raport…, date calendaristice (noaptea de 30 – 31 decembrie)»; DOOM3 (2021), Studiu introductiv, 1.2.4: «Ca semn de punctuație, cratima se folosește, facultativ, între: … cuvinte sau numere care indică limite ale unor distanțe în spațiu sau ale unor intervale de timp» (anii 2020-2021, orele 8-16); DOOM3, «Bara oblică», II.3 b: linia de pauză «nu este încadrată de blancuri» (perioada 1–31 ianuarie, intervalul orar 9–18); «Cratima trebuie preferată liniei de pauză, deoarece oferă economie de spațiu»; cratima «nu este precedată, nici urmată de blanc» doom.lingv.ro

    dash.range = «none» NU înseamnă lipsă de convenție: ambele surse admit două forme, cratima U+002D fără blanc (preferată, 1-13 mai) și linia de pauză cu blancuri (30 – 31 decembrie, funcția (iv) din ÎOOP6; paginile 1 – 22 în DOOM3 1.2.5). Un text scris în oricare dintre ele e corect, deci nu e nimic de substituit, iar «none» le păstrează pe toate. DOOM3 mai atestă o a treia formă, linia de pauză fără blancuri (secțiunea «Bara oblică», II.3 b: «perioada 1–31 ianuarie», «intervalul orar 9–18»), adică exact «en-tight»; formele sunt trei și nicio sursă nu le ierarhizează fără rest, iar «none» nu alege între ele. Pe ranges, valoarea nu poate exprima «preferat»: alegerea e decizie înregistrată, nu citare. Regula ranges e implicit dezactivată. Verificat 20.10.2026.

dashes

  • Academia Română, ÎOOP6 (2024), §III.1.2, pp. 45–46, «Linia de pauză [–]»: «Linia de pauză izolează cuvinte, construcții și propoziții intercalate într-un enunț»; «Înainte și după linia de pauză, blancul este obligatoriu, cu excepția cazului când, după a doua linie de pauză, urmează o virgulă.»; exemplu: «Materialele – pensule, acuarele, pânze – erau toate pe bănci.»; Institutul de Lingvistică «Iorgu Iordan – Al. Rosetti», DOOM3 (Univers Enciclopedic, 2021), Studiu introductiv, 1.2.5: «Este mai lungă decât cratima»; Ordinul MCTI nr. 414/2006, anexă: «linia de dialog și/sau pauză (En-Dash) 2013» doom.lingv.ro

    Justifică dash.parenthetical = «en-spaced»: blancul de ambele părți e obligatoriu în ÎOOP6. Lungimea (U+2013) e dată de anexa Ordinului 414/2006 (En-Dash), nu dedusă din glif. Excepția «urmează o virgulă» privește blancul de după a doua linie și nu schimbă forma. Verificat 20.10.2026.

hyphen

  • Institutul de Lingvistică «Iorgu Iordan – Al. Rosetti», DOOM3 (Univers Enciclopedic, 2021), Studiu introductiv, 5.1.5: «se recomandă evitarea despărțirii la capăt de rând atunci când locul acesteia ar coincide cu poziția semnelor respective»; «dacă nu poate fi evitată (de ex. în texte dispuse pe coloane), despărțirea se admite totuși»; despărțirea «nu se face când la sfârșitul primului rând sau/și la începutul rândului următor ar rezulta o singură literă» doom.lingv.ro

    Cele trei liste rămân goale: regula e generală (o recomandare, cu admitere în caz de necesitate) și nu dă o listă închisă de forme. Regula literei izolate ar acoperi s-a, l-am, n-am, luat-o, dar o listă ar fi o derivare, nu o citare; mulțimea e deschisă și foarte frecventă. DECIZIE înregistrată: nu se adaugă nimic nedocumentat. Verificat 20.10.2026.

quotes

  • Academia Română, Îndreptar ortografic, ortoepic, morfologic și de punctuație (ÎOOP6, 2024), §III.1.2 «Semne ortografice și de punctuație», pp. 43–44, «Ghilimelele»: «Există mai multe tipuri de ghilimele, folosite numai în pereche: românești „ ” (cele mai frecvent folosite și care au forma apostrofului sau a cifrei 9); franțuzești « », numite și ghilimele ascuțite/unghiulare, cu rolul de a marca un citat inclus în alt citat (situația de „ghilimele în ghilimele”)»; «În textele scrise în limba română, citatele, ca și vorbirea directă, se recomandă să fie încadrate în ghilimele românești»; «Între ghilimele și elementul pe care îl încadrează nu se lasă blanc.»; Ordinul MCTI nr. 414/25.09.2006 (M.Of. I nr. 842/12.10.2006), anexă: «ghilimele stânga jos (dublu 9 jos) 201E», «ghilimele dreapta sus (dublu 9 sus) 201D», «ghilimele ascuțite stânga 00AB», «ghilimele ascuțite dreapta 00BB» doom.lingv.ro

    Nivelul întâi: U+201E deschidere, U+201D închidere (forma «99…99», ca în pl; NU U+201C ca în cs/sk/de). Nivelul al doilea: U+00AB deschidere, U+00BB închidere, în direcția «…», nu »…« ca în pl; ÎOOP6 le atribuie rolul citatului inclus în alt citat, iar ‚…’ nu apare în nicio sursă (ghilimelele unice ʼ ʼ sunt rezervate glosării în stilul științific). Codurile provin din anexa Ordinului 414/2006 (copie neoficială: https://www.secarica.ro/std/ordin_codare_caractere_2006.09.25.pdf; textul oficial și vigoarea nu au fost verificate), nu din glifele randate; ÎOOP6 dă doar glifele, iar anexa le leagă de coduri. ÎOOP6 a fost citit din PDF-ul publicat la doom.lingv.ro (vizualizatorul paginii; adresa directă a fișierului răspunde 403), pagina tipărită corespunde paginii PDF. innerSpace = «none»: ÎOOP6 interzice blancul între ghilimele și elementul încadrat. Cele trei niveluri (nivelul al treilea, «„…”», în ghidul Cancelariei de Stat a R. Moldova 9.8.3, nenormativ) depășesc ce poate exprima schema. Q-W: ambele perechi sunt WIDE. elisionIdioms și elisionClitics sunt goale: cliticele se leagă cu cratima U+002D (s-a, l-am, într-un), nu cu apostrof, deci niciun apostrof nu e ghilimea de închidere; apostroful din ÎOOP6 §1.2.1 e rar și colocvial, mulțime deschisă. Verificat 20.10.2026.

nbsp

  • DOOM3 (2021), Studiu introductiv, 5.2: «nu Ion // Popescu, I. // Popescu;» «nu 10 // km, art. // 3.»; «Se tolerează plasarea pe rânduri diferite a abrevierilor pentru denumiri generice»; 1.2.6: abrevierile complexe se scriu cu punct interior fără blanc (I.L. Caragiale, ș.a.m.d.); Preambul: «Nu face obiectul unor norme propriu-zis ortografice scrierea unor termeni și mai ales a unor abrevieri și simboluri»; BIPM, The International System of Units (SI), 9th ed. (2019), concise summary (www.bipm.org): «A single space is always left between the number and the unit»; Cancelariei de Stat a R. Moldova, Ghid de redactare lingvistică și tehnoredactare a actelor normative (2026; «nu are caracter normativ»), 9.15.1.6 și 9.16.3: «Legea●nr.●100/2017» doom.lingv.ro

    (1) initialBinding = «single»: DOOM3 5.2 interzice «I. // Popescu» (o inițială izolată urmată de nume). (2) beforeNumber = [«art.», «nr.»]: «art.» citat direct; «nr.» din aceeași clasă «notațiile cifrice care includ abrevieri» (5.2) și ghidul moldovean (nenormativ); «alin.» și «pct.» au doar ghidul moldovean și sunt omise. (3) beforeUnits: «km» citat direct din 5.2; kg, cm, mm, km/h, °C aparțin aceleiași clase, iar identitatea simbolurilor SI vine de la BIPM (DOOM3 deleagă simbolurile standardelor), strat inferior ca în cs/sk. «%» e omis: se sprijină numai pe ghidul moldovean (stil de casă). Simbolurile dintr-o literă (s, m, h, l, W) sunt excluse. (4) abbreviations goală: DOOM3 scrie abrevierile compuse fără blanc interior, iar pentru cele cu blanc (nr. crt.) nicio sursă nu interzice despărțirea. (5) beforePunctuation și narrowBeforePunctuation goale: nu se pune blanc înaintea lui : ; ! ? (doar ghidul moldovean, 9.14, nenormativ; ÎOOP6 spune «nu este precedat de blanc» numai despre punct și despre punctele de suspensie); lista goală e un no-op oricum. (6) afterShortWords, beforeWord, afterSymbols goale: nicio sursă; § nu e menționat. Verificat 20.10.2026.

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.