diff --git a/src/ro-RO.js b/src/ro-RO.js index 953ae86f..89981f02 100644 --- a/src/ro-RO.js +++ b/src/ro-RO.js @@ -452,7 +452,14 @@ function toCurrency(value) { } else { const leuWord = integerToWords(dollars, 'masculine') - parts.push(leuWord + ' ' + LEU_PLURAL) + // Romanian inserts "de" before the noun for the CLDR `other` category: + // count >= 20 whose last two digits are 00 or 20-99 — "douăzeci de lei", + // "o sută de lei", but "o sută unu lei" (101) and no "de" below 20. The + // bani path below applies the same rule; buildScalePhrase uses a related + // per-segment predicate for scale words. + const m = dollars % 100n + const needsDe = dollars >= 20n && (m === 0n || m >= 20n) + parts.push(leuWord + (needsDe ? ' de ' : ' ') + LEU_PLURAL) } } diff --git a/test/fixtures/ro-RO.js b/test/fixtures/ro-RO.js index 0dc48ae0..33b8b9ea 100644 --- a/test/fixtures/ro-RO.js +++ b/test/fixtures/ro-RO.js @@ -212,10 +212,12 @@ export const currency = [ [2, 'doi lei'], [5, 'cinci lei'], [10, 'zece lei'], - [21, 'douăzeci și unu lei'], - [42, 'patruzeci și doi lei'], - [100, 'o sută lei'], - [1000, 'o mie lei'], + [19, 'nouăsprezece lei'], + [20, 'douăzeci de lei'], + [21, 'douăzeci și unu de lei'], + [42, 'patruzeci și doi de lei'], + [100, 'o sută de lei'], + [1000, 'o mie de lei'], // Bani only [0.01, 'un ban'], @@ -229,12 +231,12 @@ export const currency = [ [1.01, 'un leu un ban'], [1.50, 'un leu cincizeci de bani'], [2.02, 'doi lei doi bani'], - [42.50, 'patruzeci și doi lei cincizeci de bani'], - [100.99, 'o sută lei nouăzeci și nouă de bani'], + [42.50, 'patruzeci și doi de lei cincizeci de bani'], + [100.99, 'o sută de lei nouăzeci și nouă de bani'], // Negative amounts [-1, 'minus un leu'], - [-42.50, 'minus patruzeci și doi lei cincizeci de bani'], + [-42.50, 'minus patruzeci și doi de lei cincizeci de bani'], // Edge cases ['5.00', 'cinci lei'],