mirror of
https://github.com/bblaz/num2words.git
synced 2025-12-06 06:42:25 +00:00
Improve lv (#132)
* Add legal form. * Fix fractions (comma) * Fix edge case, improve test coverage. * Add most popular currencies * PEP8 line length * Fix some forms.
This commit is contained in:
committed by
Ernesto Rodriguez Ortiz
parent
c326d59b2d
commit
a1a3c53b39
@@ -101,66 +101,99 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
from .currency import parse_currency_parts
|
from .currency import parse_currency_parts
|
||||||
|
|
||||||
ZERO = (u'nulle',)
|
ZERO = ('nulle',)
|
||||||
|
|
||||||
ONES = {
|
ONES = {
|
||||||
1: (u'viens',),
|
1: ('viens',),
|
||||||
2: (u'divi',),
|
2: ('divi',),
|
||||||
3: (u'trīs',),
|
3: ('trīs',),
|
||||||
4: (u'četri',),
|
4: ('četri',),
|
||||||
5: (u'pieci',),
|
5: ('pieci',),
|
||||||
6: (u'seši',),
|
6: ('seši',),
|
||||||
7: (u'septiņi',),
|
7: ('septiņi',),
|
||||||
8: (u'astoņi',),
|
8: ('astoņi',),
|
||||||
9: (u'deviņi',),
|
9: ('deviņi',),
|
||||||
}
|
}
|
||||||
|
|
||||||
TENS = {
|
TENS = {
|
||||||
0: (u'desmit',),
|
0: ('desmit',),
|
||||||
1: (u'vienpadsmit',),
|
1: ('vienpadsmit',),
|
||||||
2: (u'divpadsmit',),
|
2: ('divpadsmit',),
|
||||||
3: (u'trīspadsmit',),
|
3: ('trīspadsmit',),
|
||||||
4: (u'četrpadsmit',),
|
4: ('četrpadsmit',),
|
||||||
5: (u'piecpadsmit',),
|
5: ('piecpadsmit',),
|
||||||
6: (u'sešpadsmit',),
|
6: ('sešpadsmit',),
|
||||||
7: (u'septiņpadsmit',),
|
7: ('septiņpadsmit',),
|
||||||
8: (u'astoņpadsmit',),
|
8: ('astoņpadsmit',),
|
||||||
9: (u'deviņpadsmit',),
|
9: ('deviņpadsmit',),
|
||||||
}
|
}
|
||||||
|
|
||||||
TWENTIES = {
|
TWENTIES = {
|
||||||
2: (u'divdesmit',),
|
2: ('divdesmit',),
|
||||||
3: (u'trīsdesmit',),
|
3: ('trīsdesmit',),
|
||||||
4: (u'četrdesmit',),
|
4: ('četrdesmit',),
|
||||||
5: (u'piecdesmit',),
|
5: ('piecdesmit',),
|
||||||
6: (u'sešdesmit',),
|
6: ('sešdesmit',),
|
||||||
7: (u'septiņdesmit',),
|
7: ('septiņdesmit',),
|
||||||
8: (u'astoņdesmit',),
|
8: ('astoņdesmit',),
|
||||||
9: (u'deviņdesmit',),
|
9: ('deviņdesmit',),
|
||||||
}
|
}
|
||||||
|
|
||||||
HUNDRED = (u'simts', u'simti', u'simtu')
|
HUNDRED = ('simts', 'simti', 'simtu')
|
||||||
|
|
||||||
THOUSANDS = {
|
THOUSANDS = {
|
||||||
1: (u'tūkstotis', u'tūkstoši', u'tūkstošu'),
|
1: ('tūkstotis', 'tūkstoši', 'tūkstošu'),
|
||||||
2: (u'miljons', u'miljoni', u'miljonu'),
|
2: ('miljons', 'miljoni', 'miljonu'),
|
||||||
3: (u'miljards', u'miljardi', u'miljardu'),
|
3: ('miljards', 'miljardi', 'miljardu'),
|
||||||
4: (u'triljons', u'triljoni', u'triljonu'),
|
4: ('triljons', 'triljoni', 'triljonu'),
|
||||||
5: (u'kvadriljons', u'kvadriljoni', u'kvadriljonu'),
|
5: ('kvadriljons', 'kvadriljoni', 'kvadriljonu'),
|
||||||
6: (u'kvintiljons', u'kvintiljoni', u'kvintiljonu'),
|
6: ('kvintiljons', 'kvintiljoni', 'kvintiljonu'),
|
||||||
7: (u'sikstiljons', u'sikstiljoni', u'sikstiljonu'),
|
7: ('sikstiljons', 'sikstiljoni', 'sikstiljonu'),
|
||||||
8: (u'septiljons', u'septiljoni', u'septiljonu'),
|
8: ('septiljons', 'septiljoni', 'septiljonu'),
|
||||||
9: (u'oktiljons', u'oktiljoni', u'oktiljonu'),
|
9: ('oktiljons', 'oktiljoni', 'oktiljonu'),
|
||||||
10: (u'nontiljons', u'nontiljoni', u'nontiljonu'),
|
10: ('nontiljons', 'nontiljoni', 'nontiljonu'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GENERIC_DOLLARS = ('dolārs', 'dolāri', 'dolāru')
|
||||||
|
GENERIC_CENTS = ('cents', 'centi', 'centu')
|
||||||
|
|
||||||
|
GENERIC_POUND = ('mārciņa', 'mārciņas', 'mārciņu')
|
||||||
|
GENERIC_PENCE = ('penss', 'pensi', 'pensu')
|
||||||
|
|
||||||
|
GENERIC_KRONA = ('krona', 'kronas', 'kronu')
|
||||||
|
GENERIC_ERA = ('ēre', 'ēras', 'ēru')
|
||||||
|
|
||||||
|
|
||||||
|
def prefix_currency(prefix, base):
|
||||||
|
return tuple("%s %s" % (prefix, i) for i in base)
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
Sadly we have a legal form (used in legal and finance documents):
|
||||||
|
http://www.eiro.lv/files/upload/files/Eiro_rakstiba-1.pdf
|
||||||
|
https://likumi.lv/doc.php?id=254741
|
||||||
|
http://eur-lex.europa.eu/legal-content/LV/TXT/HTML/?uri=CELEX:31998R0974&from=LV
|
||||||
|
|
||||||
|
Source: http://publications.europa.eu/code/lv/lv-5000500.htm
|
||||||
|
"""
|
||||||
CURRENCIES = {
|
CURRENCIES = {
|
||||||
'LVL': (
|
'AUD': (prefix_currency('Austrālijas', GENERIC_DOLLARS), GENERIC_CENTS),
|
||||||
(u'lats', u'lati', u'latu'), (u'santīms', u'santīmi', u'santīmu')
|
'CAD': (prefix_currency('Kanādas', GENERIC_DOLLARS), GENERIC_CENTS),
|
||||||
),
|
# repalced by EUR
|
||||||
'EUR': (
|
'EEK': (prefix_currency('Igaunijas', GENERIC_KRONA), GENERIC_CENTS),
|
||||||
(u'eiro', u'eiro', u'eiro'), (u'cents', u'centi', u'centu')
|
'EUR': (('eiro', 'eiro', 'eiro'), GENERIC_CENTS),
|
||||||
),
|
'EUR_LEGAL': (('euro', 'euro', 'euro'), GENERIC_CENTS),
|
||||||
|
'GBP': (prefix_currency('sterliņu', GENERIC_POUND), GENERIC_PENCE),
|
||||||
|
# replaced by EUR
|
||||||
|
'LTL': ('lits', 'liti', 'litu', GENERIC_CENTS),
|
||||||
|
# replaced by EUR
|
||||||
|
'LVL': (('lats', 'lati', 'latu'), ('santīms', 'santīmi', 'santīmu')),
|
||||||
|
'USD': (prefix_currency('ASV', GENERIC_DOLLARS), GENERIC_CENTS),
|
||||||
|
'RUB': (prefix_currency('Krievijas', ('rublis', 'rubļi', 'rubļu')),
|
||||||
|
('kapeika', 'kapeikas', 'kapeiku')),
|
||||||
|
'SEK': (prefix_currency('Zviedrijas', GENERIC_KRONA), GENERIC_ERA),
|
||||||
|
'NOK': (prefix_currency('Norvēģijas', GENERIC_KRONA), GENERIC_ERA),
|
||||||
|
'PLN': (('zlots', 'zloti', 'zlotu'), ('grasis', 'graši', 'grašu')),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -181,11 +214,7 @@ def get_digits(n):
|
|||||||
|
|
||||||
|
|
||||||
def pluralize(n, forms):
|
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 = 0 if (n % 10 == 1 and n % 100 != 11) else 1 if n != 0 else 2
|
||||||
|
|
||||||
return forms[form]
|
return forms[form]
|
||||||
|
|
||||||
|
|
||||||
@@ -200,8 +229,6 @@ def int2word(n):
|
|||||||
i -= 1
|
i -= 1
|
||||||
n1, n2, n3 = get_digits(x)
|
n1, n2, n3 = get_digits(x)
|
||||||
|
|
||||||
# print str(n3) + str(n2) + str(n1)
|
|
||||||
|
|
||||||
if n3 > 0:
|
if n3 > 0:
|
||||||
if n3 == 1 and n2 == 0 and n1 > 0:
|
if n3 == 1 and n2 == 0 and n1 > 0:
|
||||||
words.append(HUNDRED[2])
|
words.append(HUNDRED[2])
|
||||||
@@ -219,7 +246,7 @@ def int2word(n):
|
|||||||
elif n1 > 0 and not (i > 0 and x == 1):
|
elif n1 > 0 and not (i > 0 and x == 1):
|
||||||
words.append(ONES[n1][0])
|
words.append(ONES[n1][0])
|
||||||
|
|
||||||
if i > 0:
|
if i > 0 and x != 0:
|
||||||
words.append(pluralize(x, THOUSANDS[i]))
|
words.append(pluralize(x, THOUSANDS[i]))
|
||||||
|
|
||||||
return ' '.join(words)
|
return ' '.join(words)
|
||||||
@@ -229,7 +256,7 @@ def n2w(n):
|
|||||||
n = str(n).replace(',', '.')
|
n = str(n).replace(',', '.')
|
||||||
if '.' in n:
|
if '.' in n:
|
||||||
left, right = n.split('.')
|
left, right = n.split('.')
|
||||||
return u'%s kablelis %s' % (int2word(int(left)), int2word(int(right)))
|
return u'%s komats %s' % (int2word(int(left)), int2word(int(right)))
|
||||||
else:
|
else:
|
||||||
return int2word(int(n))
|
return int2word(int(n))
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,47 @@ from num2words import num2words
|
|||||||
|
|
||||||
|
|
||||||
class Num2WordsLVTest(TestCase):
|
class Num2WordsLVTest(TestCase):
|
||||||
|
def test_to_cardinal(self):
|
||||||
|
self.assertEqual(num2words(0, lang='lv'), 'nulle')
|
||||||
|
self.assertEqual(num2words(5, lang='lv'), "pieci")
|
||||||
|
self.assertEqual(num2words(15, lang='lv'), "piecpadsmit")
|
||||||
|
self.assertEqual(num2words(154, lang='lv'), "simts piecdesmit četri")
|
||||||
|
self.assertEqual(num2words(101, lang='lv'), "simtu viens")
|
||||||
|
self.assertEqual(
|
||||||
|
num2words(1135, lang='lv'), "tūkstotis simts trīsdesmit pieci"
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
num2words(418531, lang='lv'),
|
||||||
|
"četri simti astoņpadsmit tūkstoši pieci simti trīsdesmit viens"
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
num2words(1000139, lang='lv'),
|
||||||
|
"miljons simts trīsdesmit deviņi"
|
||||||
|
)
|
||||||
|
|
||||||
def test_to_currency(self):
|
def test_to_currency(self):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
num2words('38.4', lang='lv', to='currency', seperator=' un',
|
num2words('38.4', lang='lv', to='currency', seperator=' un',
|
||||||
cents=False, currency='EUR'),
|
cents=False, currency='EUR'),
|
||||||
"trīsdesmit astoņi eiro un 40 centi"
|
"trīsdesmit astoņi eiro un 40 centi"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# EUR legal form
|
||||||
|
self.assertEqual(
|
||||||
|
num2words('38.4', lang='lv', to='currency', seperator=' un',
|
||||||
|
cents=False, currency='EUR_LEGAL'),
|
||||||
|
"trīsdesmit astoņi euro un 40 centi"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
num2words('38.4', lang='lv', to='currency', seperator=' un',
|
||||||
|
cents=False, currency='USD'),
|
||||||
|
"trīsdesmit astoņi ASV dolāri un 40 centi"
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_fractions(self):
|
||||||
|
self.assertEqual(num2words(5.2, lang='lv'), "pieci komats divi")
|
||||||
|
self.assertEqual(
|
||||||
|
num2words(561.42, lang='lv'),
|
||||||
|
"pieci simti sešdesmit viens komats četrdesmit divi"
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user