Very naive to_currency implementation for NL

This commit is contained in:
Mārtiņš Šulcs
2018-09-18 10:46:36 +03:00
parent 23902ab7c5
commit 03d44f4bc3
2 changed files with 50 additions and 17 deletions

View File

@@ -21,6 +21,10 @@ from .lang_EU import Num2Word_EU
class Num2Word_NL(Num2Word_EU): class Num2Word_NL(Num2Word_EU):
CURRENCY_FORMS = {
'EUR': (('euro', 'euro'), ('cent', 'cents')),
}
GIGA_SUFFIX = "iljard" GIGA_SUFFIX = "iljard"
MEGA_SUFFIX = "iljoen" MEGA_SUFFIX = "iljoen"
@@ -55,13 +59,14 @@ class Num2Word_NL(Num2Word_EU):
"sexagint", "septuagint", "oktogint", "nonagint"] "sexagint", "septuagint", "oktogint", "nonagint"]
self.high_numwords = ( self.high_numwords = (
["zend"] + self.gen_high_numwords(units, tens, lows) ["zend"] + self.gen_high_numwords(units, tens, lows))
)
self.mid_numwords = [(1000, "duizend"), (100, "honderd"), self.mid_numwords = [(1000, "duizend"), (100, "honderd"),
(90, "negentig"), (80, "tachtig"), (90, "negentig"), (80, "tachtig"),
(70, "zeventig"), (60, "zestig"), (70, "zeventig"), (60, "zestig"),
(50, "vijftig"), (40, "veertig"), (50, "vijftig"), (40, "veertig"),
(30, "dertig")] (30, "dertig")]
self.low_numwords = ["twintig", "negentien", "achttien", "zeventien", self.low_numwords = ["twintig", "negentien", "achttien", "zeventien",
"zestien", "vijftien", "veertien", "dertien", "zestien", "vijftien", "veertien", "dertien",
"twaalf", "elf", "tien", "negen", "acht", "zeven", "twaalf", "elf", "tien", "negen", "acht", "zeven",
@@ -129,12 +134,17 @@ class Num2Word_NL(Num2Word_EU):
self.verify_ordinal(value) self.verify_ordinal(value)
return str(value) + "." return str(value) + "."
def to_currency(self, val, longval=True, old=False): def pluralize(self, n, forms):
if old: """
return self.to_splitnum(val, hightxt="euro/s", lowtxt="cent/s", :param n:
jointxt="en", longval=longval) :param forms:
return super(Num2Word_NL, self).to_currency(val, jointxt="en", :return:
longval=longval)
gettext form is nplurals=2; plural=(n != 1);
but this claims https://onzetaal.nl/taaladvies/euro-euros/
not sure if it's applied only to euro
"""
return forms[0]
def to_year(self, val, longval=True): def to_year(self, val, longval=True):
if not (val // 100) % 10: if not (val // 100) % 10:

View File

@@ -64,3 +64,26 @@ class Num2WordsNLTest(TestCase):
def test_ordinal_for_floating_numbers(self): def test_ordinal_for_floating_numbers(self):
self.assertRaises(TypeError, num2words, 2.453, ordinal=True, lang='nl') self.assertRaises(TypeError, num2words, 2.453, ordinal=True, lang='nl')
def test_to_currency(self):
self.assertEqual(
num2words('38.4', lang='nl', to='currency', seperator=' en',
cents=False, currency='EUR'),
"achtendertig euro en 40 cent"
)
self.assertEqual(
num2words('0', lang='nl', to='currency', seperator=' en',
cents=False, currency='EUR'),
"nul euro en 00 cent"
)
self.assertEqual(
num2words('1.01', lang='nl', to='currency', seperator=' en',
cents=True, currency='EUR'),
"één euro en één cent"
)
self.assertEqual(
num2words('4778.00', lang='nl', to='currency', seperator=' en',
cents=True, currency='EUR'),
'vierduizendzevenhonderdachtenzeventig euro en nul cent')