legal-markdown-js
Version:
Node.js implementation of LegalMarkdown for processing legal documents with markdown and YAML - Complete feature parity with Ruby version
120 lines (86 loc) • 5.62 kB
Markdown
---
title: Locale Explorer
locale: en
amount: 125750.50
contractDate: 2026-07-16
level-1: '%n.'
level-2: '%l1.%n'
---
_Change the \`locale\` field in the YAML frontmatter to see how the **Current** column changes._\
_Try: **en**, **es**, **fr**, **de**, **pt**, **it**_
**Current locale:** {{locale}}
---
l. Date Formatting
ll. Month and Day Names
The **Current** column reflects the \`locale\` frontmatter field. The other columns use an explicit locale argument.
| Format | Current | EN | ES | FR | DE |
| --- | --- | --- | --- | --- | --- |
| Full month | {{formatDate contractDate "MMMM"}} | {{formatDate contractDate "MMMM" "en"}} | {{formatDate contractDate "MMMM" "es"}} | {{formatDate contractDate "MMMM" "fr"}} | {{formatDate contractDate "MMMM" "de"}} |
| Short month | {{formatDate contractDate "MMM"}} | {{formatDate contractDate "MMM" "en"}} | {{formatDate contractDate "MMM" "es"}} | {{formatDate contractDate "MMM" "fr"}} | {{formatDate contractDate "MMM" "de"}} |
| Full date | {{formatDate contractDate "MMMM D, YYYY"}} | {{formatDate contractDate "MMMM D, YYYY" "en"}} | {{formatDate contractDate "MMMM D, YYYY" "es"}} | {{formatDate contractDate "MMMM D, YYYY" "fr"}} | {{formatDate contractDate "MMMM D, YYYY" "de"}} |
| Formal | {{formatDate contractDate "dddd, MMMM Do, YYYY"}} | {{formatDate contractDate "dddd, MMMM Do, YYYY" "en"}} | {{formatDate contractDate "dddd, MMMM Do, YYYY" "es"}} | {{formatDate contractDate "dddd, MMMM Do, YYYY" "fr"}} | {{formatDate contractDate "dddd, MMMM Do, YYYY" "de"}} |
| Day + Month | {{formatDate contractDate "Do MMMM YYYY"}} | {{formatDate contractDate "Do MMMM YYYY" "en"}} | {{formatDate contractDate "Do MMMM YYYY" "es"}} | {{formatDate contractDate "Do MMMM YYYY" "fr"}} | {{formatDate contractDate "Do MMMM YYYY" "de"}} |
ll. Locale-Independent Format Styles
These numeric formats are not affected by locale:
| Style | Output |
| --- | --- |
| ISO | {{formatDate contractDate "YYYY-MM-DD"}} |
| US | {{formatDate contractDate "MM/DD/YYYY"}} |
| EU | {{formatDate contractDate "DD/MM/YYYY"}} |
| Long | {{formatDate contractDate "MMMM D, YYYY"}} |
| Month-Year | {{formatDate contractDate "MMMM YYYY"}} |
ll. Today with Formats
| Syntax | Output |
| --- | --- |
| `\{{@today}}` | {{@today}} |
| `\{{@today[long]}}` | {{@today[long]}} |
| `\{{@today[legal]}}` | {{@today[legal]}} |
| `\{{@today+1y[long]}}` | {{@today+1y[long]}} |
l. Ordinal Numbers
Ordinal suffixes change by locale:
| Number | Current | EN | ES | FR | DE |
| --- | --- | --- | --- | --- | --- |
| 1 | {{ordinal 1}} | {{ordinal 1 "en"}} | {{ordinal 1 "es"}} | {{ordinal 1 "fr"}} | {{ordinal 1 "de"}} |
| 2 | {{ordinal 2}} | {{ordinal 2 "en"}} | {{ordinal 2 "es"}} | {{ordinal 2 "fr"}} | {{ordinal 2 "de"}} |
| 3 | {{ordinal 3}} | {{ordinal 3 "en"}} | {{ordinal 3 "es"}} | {{ordinal 3 "fr"}} | {{ordinal 3 "de"}} |
| 11 | {{ordinal 11}} | {{ordinal 11 "en"}} | {{ordinal 11 "es"}} | {{ordinal 11 "fr"}} | {{ordinal 11 "de"}} |
| 21 | {{ordinal 21}} | {{ordinal 21 "en"}} | {{ordinal 21 "es"}} | {{ordinal 21 "fr"}} | {{ordinal 21 "de"}} |
l. Currency Formatting
Number separators change by locale (`1,234.56` in EN vs `1.234,56` in ES/DE):
| Currency | Current | EN | ES | FR | DE |
| --- | --- | --- | --- | --- | --- |
| EUR | {{formatCurrency amount "EUR"}} | {{formatCurrency amount "EUR" 2 "en"}} | {{formatCurrency amount "EUR" 2 "es"}} | {{formatCurrency amount "EUR" 2 "fr"}} | {{formatCurrency amount "EUR" 2 "de"}} |
| USD | {{formatCurrency amount "USD"}} | {{formatCurrency amount "USD" 2 "en"}} | {{formatCurrency amount "USD" 2 "es"}} | {{formatCurrency amount "USD" 2 "fr"}} | {{formatCurrency amount "USD" 2 "de"}} |
| GBP | {{formatCurrency amount "GBP"}} | {{formatCurrency amount "GBP" 2 "en"}} | {{formatCurrency amount "GBP" 2 "es"}} | {{formatCurrency amount "GBP" 2 "fr"}} | {{formatCurrency amount "GBP" 2 "de"}} |
ll. Fixed-Format Shorthands
These ignore locale completely:
| Syntax | Output |
| --- | --- |
| `\{{formatEuro amount}}` | {{formatEuro amount}} |
| `\{{formatDollar amount}}` | {{formatDollar amount}} |
| `\{{formatPound amount}}` | {{formatPound amount}} |
l. Locale-Aware vs Fixed Helpers
ll. Locale-Aware Helpers
These helpers respond to the \`locale\` frontmatter field:
- **formatDate** - month names, day names (MMMM, MMM, dddd, ddd)
- **ordinal** - suffix conventions (1st / 1.o / 1er / 1.)
- **formatCurrency** - number formatting via Intl (for non-en locales)
To override globally, set \`locale:\` in the YAML frontmatter.\
To override per-expression, pass locale as the last argument: \`\{{formatDate date "MMMM" "es"}}\`.
ll. Fixed Helpers (locale-independent)
These helpers produce the same output regardless of locale:
- **numberToWords** - always English: {{numberToWords 42}}
- **formatDollar / formatEuro / formatPound** - fixed format
- **formatPercent** - fixed format: {{formatPercent 0.085 1}}
- **formatInteger** - fixed separator: {{formatInteger 1234567}}
- **All string helpers** - capitalize, upper, lower, etc.
- **All math helpers** - add, multiply, etc.
l. Sample Legal Clause
This is how a formatted legal clause looks in the current locale:
This Agreement is entered into on the {{ordinal (formatDate contractDate "D")}}
day of {{formatDate contractDate "MMMM"}}, {{formatDate contractDate "YYYY"}},
by and between the parties identified herein. The initial retainer of
{{formatCurrency amount "EUR"}} shall be payable within {{ordinal 30}} days of
the Effective Date. This Agreement shall remain in effect until
{{formatDate (addYears contractDate 2) "MMMM D, YYYY"}}.