romanian-issues-259: rough implementation

This commit is contained in:
Maria S
2019-06-09 12:24:01 +03:00
parent 2d1a318359
commit bdf651d1fa
2 changed files with 36 additions and 13 deletions

View File

@@ -48,13 +48,13 @@ class Num2Word_RO(lang_EU.Num2Word_EU):
"unu", "zero"] "unu", "zero"]
self.gen_numwords = ["", "o", "două", "trei", "patru", "cinci", self.gen_numwords = ["", "o", "două", "trei", "patru", "cinci",
"șase", "șapte", "opt", "nouă"] "șase", "șapte", "opt", "nouă"]
self.gen_numwords_m = ["", "un", "două", "trei", "patru", "cinci", self.gen_numwords_n = ["", "un", "două", "trei", "patru", "cinci",
"șase", "șapte", "opt", "nouă"] "șase", "șapte", "opt", "nouă"]
self.numwords_inflections = { self.numwords_inflections = {
100: self.gen_numwords, 100: self.gen_numwords,
1000: self.gen_numwords, 1000: self.gen_numwords,
1000000: self.gen_numwords_m, 1000000: self.gen_numwords_n,
1000000000: self.gen_numwords_m 1000000000: self.gen_numwords_n
} }
self.ords = {"unu": "primul", self.ords = {"unu": "primul",
"doi": "al doilea", "doi": "al doilea",
@@ -67,24 +67,29 @@ class Num2Word_RO(lang_EU.Num2Word_EU):
def merge(self, lpair, rpair): def merge(self, lpair, rpair):
ltext, lnum = lpair ltext, lnum = lpair
rtext, rnum = rpair rtext, rnum = rpair
rtext_i = self.inflect(rnum, rtext) rtext_i = self.inflect(rnum, rtext, lnum)
if lnum > 1 and rtext_i.endswith(self.MEGA_SUFFIX):
rtext_i = rtext_i.replace(self.MEGA_SUFFIX, self.MEGA_SUFFIX_I)
if 1 <= lnum < 10: if 1 <= lnum < 10:
if rnum not in self.numwords_inflections: if rnum not in self.numwords_inflections:
return (rtext, rnum) return (rtext, rnum)
else: else:
rtext_i = self.inflect(lnum * rnum, rtext) rtext_i = self.inflect(lnum * rnum, rtext, lnum)
lresult = (self.numwords_inflections[rnum][lnum], rtext_i) lresult = (self.numwords_inflections[rnum][lnum], rtext_i)
return ("%s %s" % lresult, rnum) return ("%s %s" % lresult, rnum)
elif 10 < lnum < 100: elif 10 < lnum < 100:
if lnum % 10 == 0: if lnum % 10 == 0:
return ("%s și %s" % (ltext, rtext), lnum + rnum) if rnum in self.numwords_inflections:
else: rtext_i = self.inflect(lnum * rnum, rtext, lnum)
return ("%s %s" % (ltext, rtext_i), lnum * rnum) return ("%s %s" % (ltext, rtext_i), lnum * rnum)
else:
return ("%s și %s" % (ltext, rtext), lnum + rnum)
else:
rtext_i = self.inflect(lnum * rnum, rtext, lnum)
ltext_i = ltext if lnum % 10 != 2 \
else ltext.replace("doi", "două")
return ("%s %s" % (ltext_i, rtext_i), lnum * rnum)
else: else:
if rnum in self.numwords_inflections: if rnum in self.numwords_inflections:
rtext_i = self.inflect(lnum * rnum, rtext) rtext_i = self.inflect(lnum * rnum, rtext, lnum)
return ("%s %s" % (ltext, rtext_i), lnum * rnum) return ("%s %s" % (ltext, rtext_i), lnum * rnum)
def to_ordinal(self, value): def to_ordinal(self, value):
@@ -101,21 +106,30 @@ class Num2Word_RO(lang_EU.Num2Word_EU):
return "1-ul" return "1-ul"
return "al %s-lea" % (value) return "al %s-lea" % (value)
def inflect(self, value, text): def inflect(self, value, text, side_effect=-1):
text = text.split("/") text = text.split("/")
if value in (1, 100, 1000, 100000, 1000000000): if value in (1, 100, 1000, 100000, 1000000000):
return text[0] return text[0]
if len(text) > 1 and text[0][-1] in "aăeiou": if len(text) > 1 and text[0][-1] in "aăeiou":
text[0] = text[0][:-1] text[0] = text[0][:-1]
return "".join(text) result = "".join(text)
# mega inflections are with 'oa' inside, use suffixes
if side_effect > 1 and result.endswith(self.MEGA_SUFFIX):
result = result.replace(self.MEGA_SUFFIX, self.MEGA_SUFFIX_I)
return result
def to_currency(self, val, longval=True, old=False): def to_currency(self, val, longval=True, old=False):
cents = int(round(val*100)) cents = int(round(val*100))
# romanian currency has a particularity for numeral: one
self.gen_numwords[1] = "una"
result = self.to_splitnum(cents, hightxt="leu/i", lowtxt="ban/i", result = self.to_splitnum(cents, hightxt="leu/i", lowtxt="ban/i",
divisor=100, jointxt="și", longval=longval) divisor=100, jointxt="și", longval=longval)
self.gen_numwords[1] = "o" # revert numeral
return result.replace( return result.replace(
"unu leu", "un leu" "unu leu", "un leu"
).replace("unu ban", "un ban") ).replace(
"unu ban", "un ban"
)
def to_year(self, val, suffix=None, longval=True): def to_year(self, val, suffix=None, longval=True):
result = super(Num2Word_RO, self).to_year( result = super(Num2Word_RO, self).to_year(

View File

@@ -135,6 +135,15 @@ class Num2WordsROTest(TestCase):
u'patru mii șapte sute șaptezeci și opt lei' u'patru mii șapte sute șaptezeci și opt lei'
u' și treizeci și doi bani') u' și treizeci și doi bani')
self.assertEqual(
num2words(1200, lang='ro', to='currency'),
u'una mie două sute lei')
self.assertEqual(
num2words(22000, lang='ro', to='currency'),
u'douăzeci și două mii lei')
def test_to_year(self): def test_to_year(self):
self.assertEqual(num2words(1989, lang='ro', to='year'), self.assertEqual(num2words(1989, lang='ro', to='year'),
u'o mie nouă sute optzeci și nouă') u'o mie nouă sute optzeci și nouă')