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):
CURRENCY_FORMS = {
'EUR': (('euro', 'euro'), ('cent', 'cents')),
}
GIGA_SUFFIX = "iljard"
MEGA_SUFFIX = "iljoen"
@@ -31,19 +35,19 @@ class Num2Word_NL(Num2Word_EU):
self.pointword = "komma"
# "Cannot treat float %s as ordinal."
self.errmsg_floatord = (
"Het zwevende puntnummer %s kan niet omgezet worden " +
"naar een ordernummer."
)
"Het zwevende puntnummer %s kan niet omgezet worden " +
"naar een ordernummer."
)
# "type(((type(%s)) ) not in [long, int, float]"
self.errmsg_nonnum = (
"Alleen nummers (type (%s)) kunnen naar " +
"woorden omgezet worden."
)
"Alleen nummers (type (%s)) kunnen naar " +
"woorden omgezet worden."
)
# "Cannot treat negative num %s as ordinal."
self.errmsg_negord = (
"Het negatieve getal %s kan niet omgezet " +
"worden naar een ordernummer."
)
"Het negatieve getal %s kan niet omgezet " +
"worden naar een ordernummer."
)
# "abs(%s) must be less than %s."
self.errmsg_toobig = "Het getal %s moet minder zijn dan %s."
self.exclude_title = []
@@ -55,13 +59,14 @@ class Num2Word_NL(Num2Word_EU):
"sexagint", "septuagint", "oktogint", "nonagint"]
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"),
(90, "negentig"), (80, "tachtig"),
(70, "zeventig"), (60, "zestig"),
(50, "vijftig"), (40, "veertig"),
(30, "dertig")]
self.low_numwords = ["twintig", "negentien", "achttien", "zeventien",
"zestien", "vijftien", "veertien", "dertien",
"twaalf", "elf", "tien", "negen", "acht", "zeven",
@@ -129,12 +134,17 @@ class Num2Word_NL(Num2Word_EU):
self.verify_ordinal(value)
return str(value) + "."
def to_currency(self, val, longval=True, old=False):
if old:
return self.to_splitnum(val, hightxt="euro/s", lowtxt="cent/s",
jointxt="en", longval=longval)
return super(Num2Word_NL, self).to_currency(val, jointxt="en",
longval=longval)
def pluralize(self, n, forms):
"""
:param n:
:param forms:
:return:
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):
if not (val // 100) % 10:

View File

@@ -64,3 +64,26 @@ class Num2WordsNLTest(TestCase):
def test_ordinal_for_floating_numbers(self):
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')