Skip to content

Commit

Permalink
[ADD] lang_LT: new currencies, feminine numerals
Browse files Browse the repository at this point in the history
- Adding feminine numeric forms.
- Implementing new currency forms: USD, GBP, PLN, RUB (with feminine
	numeric forms).
  • Loading branch information
SButko authored and Istvan szalai committed Aug 30, 2018
1 parent 39f522f commit 7639f5a
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 6 deletions.
40 changes: 36 additions & 4 deletions num2words/lang_LT.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,18 @@

ZERO = ('nulis',)

ONES_FEMININE = {
1: ('viena',),
2: ('dvi',),
3: ('trys',),
4: ('keturios',),
5: ('penkios',),
6: ('šešios',),
7: ('septynios',),
8: ('aštuonios',),
9: ('devynios',),
}

ONES = {
1: ('vienas',),
2: ('du',),
Expand Down Expand Up @@ -73,11 +85,25 @@
10: ('naintilijonas', 'naintilijonai', 'naintilijonų'),
}

GENERIC_CENTS = ('centas', 'centai', 'centų')


class Num2Word_LT(Num2Word_Base):
CURRENCY_FORMS = {
'LTL': (('litas', 'litai', 'litų'), ('centas', 'centai', 'centų')),
'EUR': (('euras', 'eurai', 'eurų'), ('centas', 'centai', 'centų')),
'LTL': (('litas', 'litai', 'litų'), GENERIC_CENTS),
'EUR': (('euras', 'eurai', 'eurų'), GENERIC_CENTS),
'USD': (('doleris', 'doleriai', 'dolerių'), GENERIC_CENTS),
'GBP': (
('svaras sterlingų', 'svarai sterlingų', 'svarų sterlingų'),
('pensas', 'pensai', 'pensų')
),
'PLN': (
('zlotas', 'zlotai', 'zlotų'),
('grašis', 'grašiai', 'grašių')),
'RUB': (
('rublis', 'rubliai', 'rublių'),
('kapeika', 'kapeikos', 'kapeikų')
),
}

def setup(self):
Expand Down Expand Up @@ -114,7 +140,10 @@ def to_cardinal(self, number):
def to_ordinal(self, number):
raise NotImplementedError()

def _int2word(self, n):
def _cents_verbose(self, number, currency):
return self._int2word(number, currency == 'RUB')

def _int2word(self, n, feminine=False):
if n == 0:
return ZERO[0]

Expand All @@ -139,7 +168,10 @@ def _int2word(self, n):
if n2 == 1:
words.append(TENS[n1][0])
elif n1 > 0:
words.append(ONES[n1][0])
if (i == 1 or feminine and i == 0) and n < 1000:
words.append(ONES_FEMININE[n1][0])
else:
words.append(ONES[n1][0])

if i > 0:
words.append(self.pluralize(x, THOUSANDS[i]))
Expand Down
81 changes: 79 additions & 2 deletions tests/test_lt.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,20 +62,27 @@ def test_to_ordinal(self):
num2words(1, lang='lt', to='ordinal')

def test_to_currency(self):
# Test all available currency forms.
# LTL
self.assertEqual(
num2words(1.0, lang='lt', to='currency', currency='LTL'),
'vienas litas, nulis centų'
)
self.assertEqual(
num2words(10.01, lang='lt', to='currency', currency='LTL'),
'dešimt litų, vienas centas'
)
self.assertEqual(
num2words(1234.56, lang='lt', to='currency', currency='LTL'),
'vienas tūkstantis du šimtai trisdešimt keturi litai, '
'penkiasdešimt šeši centai'
)
# EUR
self.assertEqual(
num2words(-1251985, lang='lt', to='currency', currency='EUR',
num2words(-1251981, lang='lt', to='currency', currency='EUR',
cents=False),
'minus dvylika tūkstančių penki šimtai devyniolika eurų, '
'85 centai'
'81 centas'
)
self.assertEqual(
num2words(1.0, lang='lt', to='currency', currency='EUR'),
Expand All @@ -86,3 +93,73 @@ def test_to_currency(self):
'vienas tūkstantis du šimtai trisdešimt keturi eurai, '
'penkiasdešimt šeši centai'
)
self.assertEqual(
num2words(1122.22, lang='lt', to='currency', currency='EUR'),
'vienas tūkstantis vienas šimtas dvidešimt du eurai, '
'dvidešimt du centai'
)
# USD
self.assertEqual(
num2words(-1281, lang='lt', to='currency', currency='USD',
cents=False),
'minus dvylika dolerių, 81 centas'
)
self.assertEqual(
num2words(1.0, lang='lt', to='currency', currency='USD'),
'vienas doleris, nulis centų'
)
self.assertEqual(
num2words(5.06, lang='lt', to='currency', currency='USD'),
'penki doleriai, šeši centai'
)
# GBP
self.assertEqual(
num2words(-1281, lang='lt', to='currency', currency='GBP',
cents=False),
'minus dvylika svarų sterlingų, 81 pensas'
)
self.assertEqual(
num2words(1.0, lang='lt', to='currency', currency='GBP'),
'vienas svaras sterlingų, nulis pensų'
)
self.assertEqual(
num2words(5.06, lang='lt', to='currency', currency='GBP'),
'penki svarai sterlingų, šeši pensai'
)
# PLN
self.assertEqual(
num2words(-1281, lang='lt', to='currency', currency='PLN',
cents=False),
'minus dvylika zlotų, 81 grašis'
)
self.assertEqual(
num2words(1.0, lang='lt', to='currency', currency='PLN'),
'vienas zlotas, nulis grašių'
)
self.assertEqual(
num2words(5.06, lang='lt', to='currency', currency='PLN'),
'penki zlotai, šeši grašiai'
)
# RUB
self.assertEqual(
num2words(-1281, lang='lt', to='currency', currency='RUB',
cents=False),
'minus dvylika rublių, 81 kapeika'
)
self.assertEqual(
num2words(1.0, lang='lt', to='currency', currency='RUB'),
'vienas rublis, nulis kapeikų'
)
self.assertEqual(
num2words(5.06, lang='lt', to='currency', currency='RUB'),
'penki rubliai, šešios kapeikos'
)
self.assertEqual(
num2words(-12.01, lang='lt', to='currency', currency='RUB'),
'minus dvylika rublių, viena kapeika'
)
self.assertEqual(
num2words(1122.22, lang='lt', to='currency', currency='RUB'),
'vienas tūkstantis vienas šimtas dvidešimt du rubliai, '
'dvidešimt dvi kapeikos'
)

0 comments on commit 7639f5a

Please sign in to comment.