[ADD] lang_LT: new currencies, feminine numerals

- Adding feminine numeric forms.
- Implementing new currency forms: USD, GBP, PLN, RUB (with feminine
	numeric forms).
This commit is contained in:
SButko
2018-08-30 11:12:05 +03:00
committed by Istvan szalai
parent 39f522f34a
commit 7639f5a820
2 changed files with 115 additions and 6 deletions

View File

@@ -22,6 +22,18 @@ from .utils import get_digits, splitbyx
ZERO = ('nulis',) 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 = { ONES = {
1: ('vienas',), 1: ('vienas',),
2: ('du',), 2: ('du',),
@@ -73,11 +85,25 @@ THOUSANDS = {
10: ('naintilijonas', 'naintilijonai', 'naintilijonų'), 10: ('naintilijonas', 'naintilijonai', 'naintilijonų'),
} }
GENERIC_CENTS = ('centas', 'centai', 'centų')
class Num2Word_LT(Num2Word_Base): class Num2Word_LT(Num2Word_Base):
CURRENCY_FORMS = { CURRENCY_FORMS = {
'LTL': (('litas', 'litai', 'litų'), ('centas', 'centai', 'centų')), 'LTL': (('litas', 'litai', 'litų'), GENERIC_CENTS),
'EUR': (('euras', 'eurai', 'eurų'), ('centas', 'centai', 'centų')), '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): def setup(self):
@@ -114,7 +140,10 @@ class Num2Word_LT(Num2Word_Base):
def to_ordinal(self, number): def to_ordinal(self, number):
raise NotImplementedError() 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: if n == 0:
return ZERO[0] return ZERO[0]
@@ -139,6 +168,9 @@ class Num2Word_LT(Num2Word_Base):
if n2 == 1: if n2 == 1:
words.append(TENS[n1][0]) words.append(TENS[n1][0])
elif n1 > 0: elif 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]) words.append(ONES[n1][0])
if i > 0: if i > 0:

View File

@@ -62,20 +62,27 @@ class Num2WordsLTTest(TestCase):
num2words(1, lang='lt', to='ordinal') num2words(1, lang='lt', to='ordinal')
def test_to_currency(self): def test_to_currency(self):
# Test all available currency forms.
# LTL
self.assertEqual( self.assertEqual(
num2words(1.0, lang='lt', to='currency', currency='LTL'), num2words(1.0, lang='lt', to='currency', currency='LTL'),
'vienas litas, nulis centų' 'vienas litas, nulis centų'
) )
self.assertEqual(
num2words(10.01, lang='lt', to='currency', currency='LTL'),
'dešimt litų, vienas centas'
)
self.assertEqual( self.assertEqual(
num2words(1234.56, lang='lt', to='currency', currency='LTL'), num2words(1234.56, lang='lt', to='currency', currency='LTL'),
'vienas tūkstantis du šimtai trisdešimt keturi litai, ' 'vienas tūkstantis du šimtai trisdešimt keturi litai, '
'penkiasdešimt šeši centai' 'penkiasdešimt šeši centai'
) )
# EUR
self.assertEqual( self.assertEqual(
num2words(-1251985, lang='lt', to='currency', currency='EUR', num2words(-1251981, lang='lt', to='currency', currency='EUR',
cents=False), cents=False),
'minus dvylika tūkstančių penki šimtai devyniolika eurų, ' 'minus dvylika tūkstančių penki šimtai devyniolika eurų, '
'85 centai' '81 centas'
) )
self.assertEqual( self.assertEqual(
num2words(1.0, lang='lt', to='currency', currency='EUR'), num2words(1.0, lang='lt', to='currency', currency='EUR'),
@@ -86,3 +93,73 @@ class Num2WordsLTTest(TestCase):
'vienas tūkstantis du šimtai trisdešimt keturi eurai, ' 'vienas tūkstantis du šimtai trisdešimt keturi eurai, '
'penkiasdešimt šeši centai' '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'
)