Locale-specific punctuation/spacing conventions, applied on top of interpolation - the
things a translator would type by hand if this project asked every catalog to carry
literal U+202F/U+00A0 characters, which no one would ever remember to do consistently.
French (Imprimerie nationale's rules, Lexique des règles typographiques): a narrow
no-break space before ; : ! ? and around « », and an ordinary no-break space between a
numbering word and the number following it ("Chapitre 3"). Also replaces apostrophes
between letters with a curly one, for French, Italian, and Dutch elisions - English and
other locales are left untouched, as a straight apostrophe can be intentional punctuation
there.
German (Duden K 116/117): a no-break space between a number and its unit ("5 kg"), and
after a small set of abbreviations before whatever follows ("Nr. 3", "Dr. Müller").
Deliberately not attempted here: a game's own units ("pièces d'or", "points de vie") -
mwg cannot know a game's vocabulary any more than it knows its item names, so gluing a
value to a game-specific unit is nonBreakingUnit's job, not this function's.
Locale-specific punctuation/spacing conventions, applied on top of interpolation - the things a translator would type by hand if this project asked every catalog to carry literal U+202F/U+00A0 characters, which no one would ever remember to do consistently.
French (Imprimerie nationale's rules,
Lexique des règles typographiques): a narrow no-break space before; : ! ?and around« », and an ordinary no-break space between a numbering word and the number following it ("Chapitre 3"). Also replaces apostrophes between letters with a curly one, for French, Italian, and Dutch elisions - English and other locales are left untouched, as a straight apostrophe can be intentional punctuation there.German (Duden K 116/117): a no-break space between a number and its unit ("5 kg"), and after a small set of abbreviations before whatever follows ("Nr. 3", "Dr. Müller").
Deliberately not attempted here: a game's own units ("pièces d'or", "points de vie") -
mwgcannot know a game's vocabulary any more than it knows its item names, so gluing a value to a game-specific unit isnonBreakingUnit's job, not this function's.