mirror of
https://github.com/bblaz/num2words.git
synced 2025-12-06 06:42:25 +00:00
Merge pull request #330 from gs202/master
Fix Hebrew pluralize and implement to_currency
This commit is contained in:
@@ -81,11 +81,7 @@ AND = u'ו'
|
||||
|
||||
|
||||
def pluralize(n, forms):
|
||||
# gettext implementation:
|
||||
# (n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2)
|
||||
|
||||
form = 0 if (n % 10 == 1 and n % 100 != 11) else 1 if n != 0 else 2
|
||||
|
||||
form = 1 if n == 0 else 0 if n == 1 else 1
|
||||
return forms[form]
|
||||
|
||||
|
||||
@@ -140,17 +136,30 @@ def n2w(n):
|
||||
return int2word(int(n))
|
||||
|
||||
|
||||
def to_currency(n, currency='EUR', cents=True, separator=','):
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
class Num2Word_HE(Num2Word_Base):
|
||||
CURRENCY_FORMS = {
|
||||
'NIS': (('שקל', 'שקלים'), ('אגורה', 'אגורות')),
|
||||
'EUR': (('אירו', 'אירו'), ('סנט', 'סנט')),
|
||||
'USD': (('דולר', 'דולרים'), ('סנט', 'סנט')),
|
||||
}
|
||||
|
||||
def to_cardinal(self, number):
|
||||
return n2w(number)
|
||||
|
||||
def to_ordinal(self, number):
|
||||
raise NotImplementedError()
|
||||
|
||||
def pluralize(self, n, forms):
|
||||
return pluralize(n, forms)
|
||||
|
||||
def to_currency(self, val, currency='NIS', cents=True, separator=' ו',
|
||||
adjective=False):
|
||||
result = super(Num2Word_HE, self).to_currency(
|
||||
val, currency=currency, cents=cents, separator=separator,
|
||||
adjective=adjective)
|
||||
# In Hebrew the separator is along with the following word
|
||||
return result.replace(" ו ", " ו")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
yo = Num2Word_HE()
|
||||
|
||||
@@ -20,6 +20,7 @@ from __future__ import unicode_literals
|
||||
from unittest import TestCase
|
||||
|
||||
from num2words import num2words
|
||||
from num2words.lang_HE import Num2Word_HE
|
||||
|
||||
|
||||
class Num2WordsHETest(TestCase):
|
||||
@@ -71,3 +72,45 @@ class Num2WordsHETest(TestCase):
|
||||
self.assertEqual(
|
||||
num2words(6870, lang="he"), u'ששת אלפים שמונה מאות ושבעים'
|
||||
)
|
||||
|
||||
def test_pluralize(self):
|
||||
n = Num2Word_HE()
|
||||
cr1, cr2 = n.CURRENCY_FORMS['NIS']
|
||||
self.assertEqual(n.pluralize(1, cr1), 'שקל')
|
||||
self.assertEqual(n.pluralize(2, cr1), 'שקלים')
|
||||
self.assertEqual(n.pluralize(1, cr2), 'אגורה')
|
||||
self.assertEqual(n.pluralize(2, cr2), 'אגורות')
|
||||
|
||||
cr1, cr2 = n.CURRENCY_FORMS['USD']
|
||||
self.assertEqual(n.pluralize(1, cr1), 'דולר')
|
||||
self.assertEqual(n.pluralize(2, cr1), 'דולרים')
|
||||
self.assertEqual(n.pluralize(1, cr2), 'סנט')
|
||||
self.assertEqual(n.pluralize(2, cr2), 'סנט')
|
||||
|
||||
def test_to_currency(self):
|
||||
n = Num2Word_HE()
|
||||
self.assertEqual(
|
||||
n.to_currency(20.0, currency='NIS'), 'עשרים שקלים ואפס אגורות'
|
||||
)
|
||||
self.assertEqual(
|
||||
n.to_currency(100.0, currency='NIS'), 'מאה שקלים ואפס אגורות'
|
||||
)
|
||||
self.assertEqual(
|
||||
n.to_currency(100.50, currency='NIS'), 'מאה שקלים וחמישים אגורות'
|
||||
)
|
||||
|
||||
def test_to_cardinal(self):
|
||||
n = Num2Word_HE()
|
||||
self.assertEqual(n.to_cardinal(1500), u'אלף וחמש מאות')
|
||||
|
||||
|
||||
class Num2WordsHETestNotImplementedMethofs(TestCase):
|
||||
n = Num2Word_HE()
|
||||
|
||||
def test_to_ordinal(self):
|
||||
with self.assertRaises(NotImplementedError):
|
||||
self.n.to_ordinal('1')
|
||||
|
||||
def test_large_number(self):
|
||||
with self.assertRaises(NotImplementedError):
|
||||
num2words(2000000, lang="he")
|
||||
|
||||
Reference in New Issue
Block a user