1068 lines
40 KiB
Python
1068 lines
40 KiB
Python
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
# Copyright (c) 2003, Taro Ogawa. All Rights Reserved.
|
|||
|
|
# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved.
|
|||
|
|
|
|||
|
|
# This library is free software; you can redistribute it and/or
|
|||
|
|
# modify it under the terms of the GNU Lesser General Public
|
|||
|
|
# License as published by the Free Software Foundation; either
|
|||
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|||
|
|
# This library is distributed in the hope that it will be useful,
|
|||
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|||
|
|
# Lesser General Public License for more details.
|
|||
|
|
# You should have received a copy of the GNU Lesser General Public
|
|||
|
|
# License along with this library; if not, write to the Free Software
|
|||
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|||
|
|
# MA 02110-1301 USA
|
|||
|
|
|
|||
|
|
from __future__ import unicode_literals
|
|||
|
|
|
|||
|
|
from .base import Num2Word_Base
|
|||
|
|
from .utils import get_digits, splitbyx
|
|||
|
|
|
|||
|
|
ZERO = ('нуль',)
|
|||
|
|
|
|||
|
|
ONES_FEMININE = {
|
|||
|
|
1: ('одна', "однієї", "одній", "одну", "однією", "одній"),
|
|||
|
|
2: ('дві', "двох", "двом", "дві", "двома", "двох"),
|
|||
|
|
3: ('три', "трьох", "трьом", "три", "трьома", "трьох"),
|
|||
|
|
4: ('чотири', "чотирьох", "чотирьом", "чотири", "чотирма", "чотирьох"),
|
|||
|
|
5: ('п\'ять', "п'яти", "п'яти", "п'ять", "п'ятьма", "п'яти"),
|
|||
|
|
6: ('шість', "шести", "шести", "шість", "шістьма", "шести"),
|
|||
|
|
7: ('сім', "семи", "семи", "сім", "сьома", "семи"),
|
|||
|
|
8: ('вісім', "восьми", "восьми", "вісім", "вісьма", "восьми"),
|
|||
|
|
9: ("дев'ять", "дев'яти", "дев'яти", "дев'ять", "дев'ятьма", "дев'яти"),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ONES = {
|
|||
|
|
1: ('один', 'одного', "одному", "один", "одним", "одному"),
|
|||
|
|
2: ('два', 'двох', "двом", "два", "двома", "двох"),
|
|||
|
|
3: ('три', 'трьох', "трьом", "три", "трьома", "трьох"),
|
|||
|
|
4: ('чотири', 'чотирьох', "чотирьом", "чотири", "чотирма", "чотирьох"),
|
|||
|
|
5: ('п\'ять', "п'яти", "п'яти", "п'ять", "п'ятьма", "п'яти"),
|
|||
|
|
6: ('шість', 'шести', "шести", "шість", "шістьма", "шести"),
|
|||
|
|
7: ('сім', 'семи', "семи", "сім", "сьома", "семи"),
|
|||
|
|
8: ('вісім', 'восьми', "восьми", "вісім", "вісьма", "восьми"),
|
|||
|
|
9: ("дев'ять", "дев'яти", "дев'яти", "дев'ять", "дев'ятьма", "дев'яти"),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ONES_ORDINALS = {
|
|||
|
|
1: ("перший", "одно"),
|
|||
|
|
2: ("другий", "двох"),
|
|||
|
|
3: ("третій", "трьох"),
|
|||
|
|
4: ("четвертий", "чотирьох"),
|
|||
|
|
5: ("п'ятий", "п'яти"),
|
|||
|
|
6: ("шостий", "шести"),
|
|||
|
|
7: ("сьомий", "семи"),
|
|||
|
|
8: ("восьмий", "восьми"),
|
|||
|
|
9: ("дев'ятий", "дев'яти"),
|
|||
|
|
10: ("десятий", "десяти"),
|
|||
|
|
11: ("одинадцятий", "одинадцяти"),
|
|||
|
|
12: ("дванадцятий", "дванадцяти"),
|
|||
|
|
13: ("тринадцятий", "тринадцяти"),
|
|||
|
|
14: ("чотирнадцятий", "чотирнадцяти"),
|
|||
|
|
15: ("п'ятнадцятий", "п'ятнадцяти"),
|
|||
|
|
16: ("шістнадцятий", "шістнадцяти"),
|
|||
|
|
17: ("сімнадцятий", "сімнадцяти"),
|
|||
|
|
18: ("вісімнадцятий", "вісімнадцяти"),
|
|||
|
|
19: ("дев'ятнадцятий", "дев'ятнадцяти"),
|
|||
|
|
}
|
|||
|
|
TENS = {
|
|||
|
|
0: ('десять',
|
|||
|
|
'десяти',
|
|||
|
|
"десяти",
|
|||
|
|
"десять",
|
|||
|
|
"десятьма",
|
|||
|
|
"десяти"),
|
|||
|
|
1: ('одинадцять',
|
|||
|
|
'одинадцяти',
|
|||
|
|
"одинадцяти",
|
|||
|
|
"одинадцять",
|
|||
|
|
"одинадцятьма",
|
|||
|
|
"одинадцяти"),
|
|||
|
|
2: ('дванадцять',
|
|||
|
|
'дванадцяти',
|
|||
|
|
"дванадцяти",
|
|||
|
|
"дванадцять",
|
|||
|
|
"дванадцятьма",
|
|||
|
|
"дванадцяти"),
|
|||
|
|
3: ('тринадцять',
|
|||
|
|
'тринадцяти',
|
|||
|
|
"тринадцяти",
|
|||
|
|
"тринадцять",
|
|||
|
|
"тринадцятьма",
|
|||
|
|
"тринадцяти"),
|
|||
|
|
4: ('чотирнадцять',
|
|||
|
|
'чотирнадцяти',
|
|||
|
|
"чотирнадцяти",
|
|||
|
|
"чотирнадцять",
|
|||
|
|
"чотирнадцятьма",
|
|||
|
|
"чотирнадцяти"),
|
|||
|
|
5: ("п'ятнадцять",
|
|||
|
|
"п'ятнадцяти",
|
|||
|
|
"п'ятнадцяти",
|
|||
|
|
"п'ятнадцять",
|
|||
|
|
"п'ятнадцятьма",
|
|||
|
|
"п'ятнадцяти"),
|
|||
|
|
6: ('шістнадцять',
|
|||
|
|
'шістнадцяти',
|
|||
|
|
"шістнадцяти",
|
|||
|
|
"шістнадцять",
|
|||
|
|
"шістнадцятьма",
|
|||
|
|
"шістнадцяти"),
|
|||
|
|
7: ('сімнадцять',
|
|||
|
|
'сімнадцяти',
|
|||
|
|
"сімнадцяти",
|
|||
|
|
"сімнадцять",
|
|||
|
|
"сімнадцятьма",
|
|||
|
|
"сімнадцяти"),
|
|||
|
|
8: ('вісімнадцять',
|
|||
|
|
'вісімнадцяти',
|
|||
|
|
"вісімнадцяти",
|
|||
|
|
"вісімнадцять",
|
|||
|
|
"вісімнадцятьма",
|
|||
|
|
"вісімнадцяти"),
|
|||
|
|
9: ("дев'ятнадцять",
|
|||
|
|
"дев'ятнадцяти",
|
|||
|
|
"дев'ятнадцяти",
|
|||
|
|
"дев'ятнадцять",
|
|||
|
|
"дев'ятнадцятьма",
|
|||
|
|
"дев'ятнадцяти"),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TWENTIES = {
|
|||
|
|
2: ('двадцять',
|
|||
|
|
"двадцяти",
|
|||
|
|
"двадцяти",
|
|||
|
|
"двадцять",
|
|||
|
|
"двадцятьма",
|
|||
|
|
"двадцяти"),
|
|||
|
|
3: ('тридцять',
|
|||
|
|
"тридцяти",
|
|||
|
|
"тридцяти",
|
|||
|
|
"тридцять",
|
|||
|
|
"тридцятьма",
|
|||
|
|
"тридцяти"),
|
|||
|
|
4: ('сорок',
|
|||
|
|
"сорока",
|
|||
|
|
"сорока",
|
|||
|
|
"сорок",
|
|||
|
|
"сорока",
|
|||
|
|
"сорока"),
|
|||
|
|
5: ('п\'ятдесят',
|
|||
|
|
"п'ятдесяти",
|
|||
|
|
"п'ятдесяти",
|
|||
|
|
"п'ятдесят",
|
|||
|
|
"п'ятдесятьма",
|
|||
|
|
"п'ятдесяти"),
|
|||
|
|
6: ('шістдесят',
|
|||
|
|
"шістдесяти",
|
|||
|
|
"шістдесяти",
|
|||
|
|
"шістдесят",
|
|||
|
|
"шістдесятьма",
|
|||
|
|
"шістдесяти"),
|
|||
|
|
7: ('сімдесят',
|
|||
|
|
"сімдесяти",
|
|||
|
|
"сімдесяти",
|
|||
|
|
"сімдесят",
|
|||
|
|
"сімдесятьма",
|
|||
|
|
"сімдесяти"),
|
|||
|
|
8: ('вісімдесят',
|
|||
|
|
"вісімдесяти",
|
|||
|
|
"вісімдесяти",
|
|||
|
|
"вісімдесят",
|
|||
|
|
"вісімдесятьма",
|
|||
|
|
"вісімдесяти"),
|
|||
|
|
9: ('дев\'яносто',
|
|||
|
|
"дев'яноста",
|
|||
|
|
"дев'яноста",
|
|||
|
|
"дев'яносто",
|
|||
|
|
"дев'яностами",
|
|||
|
|
"дев'яноста"),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TWENTIES_ORDINALS = {
|
|||
|
|
2: ("двадцятий", "двадцяти"),
|
|||
|
|
3: ("тридцятий", "тридцяти"),
|
|||
|
|
4: ("сороковий", "сорока"),
|
|||
|
|
5: ("п'ятдесятий", "п'ятдесяти"),
|
|||
|
|
6: ("шістдесятий", "шістдесяти"),
|
|||
|
|
7: ("сімдесятий", "сімдесяти"),
|
|||
|
|
8: ("вісімдесятий", "вісімдесяти"),
|
|||
|
|
9: ("дев'яностий", "дев'яности"),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
HUNDREDS = {
|
|||
|
|
1: ('сто',
|
|||
|
|
"ста",
|
|||
|
|
"ста",
|
|||
|
|
"сто",
|
|||
|
|
"стами",
|
|||
|
|
"стах"),
|
|||
|
|
2: ('двісті',
|
|||
|
|
"двохста",
|
|||
|
|
"двомстам",
|
|||
|
|
"двісті",
|
|||
|
|
"двомастами",
|
|||
|
|
"двохстах"),
|
|||
|
|
3: ('триста',
|
|||
|
|
"трьохста",
|
|||
|
|
"трьомстам",
|
|||
|
|
"триста",
|
|||
|
|
"трьомастами",
|
|||
|
|
"трьохстах"),
|
|||
|
|
4: ('чотириста',
|
|||
|
|
"чотирьохста",
|
|||
|
|
"чотирьомстам",
|
|||
|
|
"чотириста",
|
|||
|
|
"чотирмастами",
|
|||
|
|
"чотирьохстах"),
|
|||
|
|
5: ('п\'ятсот',
|
|||
|
|
"п'ятиста",
|
|||
|
|
"п'ятистам",
|
|||
|
|
"п'ятсот",
|
|||
|
|
"п'ятьмастами",
|
|||
|
|
"п'ятистах"),
|
|||
|
|
6: ('шістсот',
|
|||
|
|
"шестиста",
|
|||
|
|
"шестистам",
|
|||
|
|
"шістсот",
|
|||
|
|
"шістьмастами",
|
|||
|
|
"шестистах"),
|
|||
|
|
7: ('сімсот',
|
|||
|
|
"семиста",
|
|||
|
|
"семистам",
|
|||
|
|
"сімсот",
|
|||
|
|
"сьомастами",
|
|||
|
|
"семистах"),
|
|||
|
|
8: ('вісімсот',
|
|||
|
|
"восьмиста",
|
|||
|
|
"восьмистам",
|
|||
|
|
"вісімсот",
|
|||
|
|
"восьмастами",
|
|||
|
|
"восьмистах"),
|
|||
|
|
9: ("дев'ятсот",
|
|||
|
|
"дев'ятиста",
|
|||
|
|
"дев'ятистам",
|
|||
|
|
"дев'ятсот",
|
|||
|
|
"дев'ятьмастами",
|
|||
|
|
"дев'ятистах"),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
HUNDREDS_ORDINALS = {
|
|||
|
|
1: ("сотий", "сто"),
|
|||
|
|
2: ("двохсотий", "двохсот"),
|
|||
|
|
3: ("трьохсотий", "трьохсот"),
|
|||
|
|
4: ("чотирьохсотий", "чотирьохсот"),
|
|||
|
|
5: ("п'ятисотий", "п'ятсот"),
|
|||
|
|
6: ("шестисотий", "шістсот"),
|
|||
|
|
7: ("семисотий", "сімсот"),
|
|||
|
|
8: ("восьмисотий", "вісімсот"),
|
|||
|
|
9: ("дев'ятисотий", "дев'ятсот"),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
THOUSANDS = {
|
|||
|
|
# 10^3
|
|||
|
|
1: (('тисяча', 'тисячі', 'тисяч'),
|
|||
|
|
('тисячи', 'тисяч', 'тисяч'),
|
|||
|
|
('тисячі', 'тисячам', 'тисячам'),
|
|||
|
|
('тисячу', 'тисячі', 'тисяч'),
|
|||
|
|
('тисячею', 'тисячами', 'тисячами'),
|
|||
|
|
('тисячі', 'тисячах', 'тисячах'),),
|
|||
|
|
# 10^6
|
|||
|
|
2: (('мільйон', 'мільйони', 'мільйонів'),
|
|||
|
|
('мільйона', 'мільйонів', 'мільйонів'),
|
|||
|
|
('мільйону', 'мільйонам', 'мільйонам'),
|
|||
|
|
('мільйон', 'мільйони', 'мільйонів'),
|
|||
|
|
('мільйоном', 'мільйонами', 'мільйонів'),
|
|||
|
|
('мільйоні', 'мільйонах', 'мільйонах'),),
|
|||
|
|
# 10^9
|
|||
|
|
3: (('мільярд', 'мільярди', 'мільярдів'),
|
|||
|
|
('мільярда', 'мільярдів', 'мільярдів'),
|
|||
|
|
('мільярду', 'мільярдам', 'мільярдам'),
|
|||
|
|
('мільярд', 'мільярди', 'мільярдів'),
|
|||
|
|
('мільярдом', 'мільярдами', 'мільярдів'),
|
|||
|
|
('мільярді', 'мільярдах', 'мільярдах'),),
|
|||
|
|
# 10^12
|
|||
|
|
4: (('трильйон', 'трильйони', 'трильйонів'),
|
|||
|
|
('трильйона', 'трильйонів', 'трильйонів'),
|
|||
|
|
('трильйону', 'трильйонам', 'трильйонам'),
|
|||
|
|
('трильйон', 'трильйони', 'трильйонів'),
|
|||
|
|
('трильйоном', 'трильйонами', 'трильйонів'),
|
|||
|
|
('трильйоні', 'трильйонах', 'трильйонах'),),
|
|||
|
|
# 10^15
|
|||
|
|
5: (('квадрильйон', 'квадрильйони', 'квадрильйонів'),
|
|||
|
|
('квадрильйона', 'квадрильйонів', 'квадрильйонів'),
|
|||
|
|
('квадрильйону', 'квадрильйонам', 'квадрильйонам'),
|
|||
|
|
('квадрильйон', 'квадрильйони', 'квадрильйонів'),
|
|||
|
|
('квадрильйоном', 'квадрильйонами', 'квадрильйонів'),
|
|||
|
|
('квадрильйоні', 'квадрильйонах', 'квадрильйонах'),),
|
|||
|
|
# 10^18
|
|||
|
|
6: (('квінтильйон', 'квінтильйони', 'квінтильйонів'),
|
|||
|
|
('квінтильйона', 'квінтильйонів', 'квінтильйонів'),
|
|||
|
|
('квінтильйону', 'квінтильйонам', 'квінтильйонам'),
|
|||
|
|
('квінтильйон', 'квінтильйони', 'квінтильйонів'),
|
|||
|
|
('квінтильйоном', 'квінтильйонами', 'квінтильйонів'),
|
|||
|
|
('квінтильйоні', 'квінтильйонах', 'квінтильйонах'),),
|
|||
|
|
# 10^21
|
|||
|
|
7: (('секстильйон', 'секстильйони', 'секстильйонів'),
|
|||
|
|
('секстильйона', 'секстильйонів', 'секстильйонів'),
|
|||
|
|
('секстильйону', 'секстильйонам', 'секстильйонам'),
|
|||
|
|
('секстильйон', 'секстильйони', 'секстильйонів'),
|
|||
|
|
('секстильйоном', 'секстильйонами', 'секстильйонів'),
|
|||
|
|
('секстильйоні', 'секстильйонах', 'секстильйонах'),),
|
|||
|
|
# 10^24
|
|||
|
|
8: (('септильйон', 'септильйони', 'септильйонів'),
|
|||
|
|
('септильйона', 'септильйонів', 'септильйонів'),
|
|||
|
|
('септильйону', 'септильйонам', 'септильйонам'),
|
|||
|
|
('септильйон', 'септильйони', 'септильйонів'),
|
|||
|
|
('септильйоном', 'септильйонами', 'септильйонів'),
|
|||
|
|
('септильйоні', 'септильйонах', 'септильйонах'),),
|
|||
|
|
# 10^27
|
|||
|
|
9: (('октильйон', 'октильйони', 'октильйонів'),
|
|||
|
|
('октильйона', 'октильйонів', 'октильйонів'),
|
|||
|
|
('октильйону', 'октильйонам', 'октильйонам'),
|
|||
|
|
('октильйон', 'октильйони', 'октильйонів'),
|
|||
|
|
('октильйоном', 'октильйонами', 'октильйонів'),
|
|||
|
|
('октильйоні', 'октильйонах', 'октильйонах'),),
|
|||
|
|
# 10^30
|
|||
|
|
10: (('нонільйон', 'нонільйони', 'нонільйонів'),
|
|||
|
|
('нонільйона', 'нонільйонів', 'нонільйонів'),
|
|||
|
|
('нонільйону', 'нонільйонам', 'нонільйонам'),
|
|||
|
|
('нонільйон', 'нонільйони', 'нонільйонів'),
|
|||
|
|
('нонільйоном', 'нонільйонами', 'нонільйонів'),
|
|||
|
|
('нонільйоні', 'нонільйонах', 'нонільйонах'),),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
prefixes_ordinal = {
|
|||
|
|
1: "тисячний",
|
|||
|
|
2: "мільйонний",
|
|||
|
|
3: "мільярдний",
|
|||
|
|
4: "трильйонний",
|
|||
|
|
5: "квадрильйонний",
|
|||
|
|
6: "квінтильйонний",
|
|||
|
|
7: "секстильйонний",
|
|||
|
|
8: "септильйонний",
|
|||
|
|
9: "октильйонний",
|
|||
|
|
10: "нонільйонний",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
FEMININE_MONEY = ('AOA', 'BAM', 'BDT', 'BWP', 'CZK', 'DKK',
|
|||
|
|
'ERN', 'HNL', 'HRK', 'IDR', 'INR', 'ISK',
|
|||
|
|
'JPY', 'KPW', 'KRW', 'LKR', 'MOP', 'MRU',
|
|||
|
|
'MUR', 'MVR', 'MWK', 'NGN', 'NIO', 'NOK',
|
|||
|
|
'NPR', 'PKR', 'SCR', 'SEK', 'STN', 'TRY',
|
|||
|
|
'WST', 'UAH', 'ZMW')
|
|||
|
|
FEMININE_CENTS = ('ALL', 'BDT', 'BGN', 'BYN', 'GHS', 'HRK',
|
|||
|
|
'ILS', 'INR', 'NPR', 'OMR', 'OMR', 'PKR',
|
|||
|
|
'RSD', 'RUB', 'UAH')
|
|||
|
|
|
|||
|
|
GENERIC_DOLLARS = ('долар', 'долари', 'доларів')
|
|||
|
|
GENERIC_CENTS = ('цент', 'центи', 'центів')
|
|||
|
|
|
|||
|
|
|
|||
|
|
class Num2Word_UK(Num2Word_Base):
|
|||
|
|
CURRENCY_FORMS = {
|
|||
|
|
'AED': (
|
|||
|
|
('дирхам', 'дирхами', 'дирхамів'),
|
|||
|
|
('філс', 'філси', 'філсів')
|
|||
|
|
),
|
|||
|
|
'AFN': (
|
|||
|
|
('афгані', 'афгані', 'афгані'),
|
|||
|
|
('пул', 'пули', 'пулів')
|
|||
|
|
),
|
|||
|
|
'ALL': (
|
|||
|
|
('лек', 'леки', 'леків'),
|
|||
|
|
('кіндарка', 'кіндарки', 'кіндарок')
|
|||
|
|
),
|
|||
|
|
'AMD': (
|
|||
|
|
('драм', 'драми', 'драмів'),
|
|||
|
|
('лум', 'лум', 'лум')
|
|||
|
|
),
|
|||
|
|
'ANG': (
|
|||
|
|
('гульден', 'гульдени', 'гульденів'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'AOA': (
|
|||
|
|
('кванза', 'кванзи', 'кванз'),
|
|||
|
|
('сентимо', 'сентимо', 'сентимо')
|
|||
|
|
),
|
|||
|
|
'ARS': (
|
|||
|
|
('песо', 'песо', 'песо'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'AUD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'AWG': (
|
|||
|
|
('флорин', 'флорини', 'флоринів'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'AZN': (
|
|||
|
|
('манат', 'манати', 'манатів'),
|
|||
|
|
('гяпік', 'гяпіки', 'гяпіків')
|
|||
|
|
),
|
|||
|
|
'BAM': (
|
|||
|
|
('марка', 'марки', 'марок'),
|
|||
|
|
('фенінг', 'фенінги', 'фенінгів')
|
|||
|
|
),
|
|||
|
|
'BBD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'BDT': (
|
|||
|
|
('така', 'таки', 'так'),
|
|||
|
|
('пойша', 'пойші', 'пойш')
|
|||
|
|
),
|
|||
|
|
'BGN': (
|
|||
|
|
('лев', 'леви', 'левів'),
|
|||
|
|
('стотинка', 'стотинки', 'стотинок')
|
|||
|
|
),
|
|||
|
|
'BHD': (
|
|||
|
|
('динар', 'динари', 'динарів'),
|
|||
|
|
('філс', 'філси', 'філсів')
|
|||
|
|
),
|
|||
|
|
'BIF': (
|
|||
|
|
('франк', 'франки', 'франків'),
|
|||
|
|
('сантим', 'сантими', 'сантимів')
|
|||
|
|
),
|
|||
|
|
'BMD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'BND': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'BOB': (
|
|||
|
|
('болівіано', 'болівіано', 'болівіано'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'BRL': (
|
|||
|
|
('реал', 'реали', 'реалів'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'BSD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'BTN': (
|
|||
|
|
('нгултрум', 'нгултруми', 'нгултрумів'),
|
|||
|
|
('четрум', 'четруми', 'четрумів')
|
|||
|
|
),
|
|||
|
|
'BWP': (
|
|||
|
|
('пула', 'пули', 'пул'),
|
|||
|
|
('тхебе', 'тхебе', 'тхебе')
|
|||
|
|
),
|
|||
|
|
'BYN': (
|
|||
|
|
('рубель', 'рублі', 'рублів'),
|
|||
|
|
('копійка', 'копійки', 'копійок')
|
|||
|
|
),
|
|||
|
|
'BZD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'CAD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'CDF': (
|
|||
|
|
('франк', 'франки', 'франків'),
|
|||
|
|
('сантим', 'сантими', 'сантимів')
|
|||
|
|
),
|
|||
|
|
'CHF': (
|
|||
|
|
('франк', 'франки', 'франків'),
|
|||
|
|
('сантим', 'сантими', 'сантимів')
|
|||
|
|
),
|
|||
|
|
'CLP': (
|
|||
|
|
('песо', 'песо', 'песо'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'CNY': (
|
|||
|
|
('юань', 'юані', 'юанів'),
|
|||
|
|
('финь', 'фині', 'финів')
|
|||
|
|
),
|
|||
|
|
'COP': (
|
|||
|
|
('песо', 'песо', 'песо'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'CRC': (
|
|||
|
|
('колон', 'колони', 'колонів'),
|
|||
|
|
('сентімо', 'сентімо', 'сентімо')
|
|||
|
|
),
|
|||
|
|
'CUC': (
|
|||
|
|
('песо', 'песо', 'песо'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'CUP': (
|
|||
|
|
('песо', 'песо', 'песо'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'CVE': (
|
|||
|
|
('ескудо', 'ескудо', 'ескудо'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'CZK': (
|
|||
|
|
('крона', 'крони', 'крон'),
|
|||
|
|
('гелер', 'гелери', 'гелерів')
|
|||
|
|
),
|
|||
|
|
'DJF': (
|
|||
|
|
('франк', 'франки', 'франків'),
|
|||
|
|
('сантим', 'сантими', 'сантимів')
|
|||
|
|
),
|
|||
|
|
'DKK': (
|
|||
|
|
('крона', 'крони', 'крон'),
|
|||
|
|
('ере', 'ере', 'ере')
|
|||
|
|
),
|
|||
|
|
'DOP': (
|
|||
|
|
('песо', 'песо', 'песо'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'DZD': (
|
|||
|
|
('динар', 'динари', 'динарів'),
|
|||
|
|
('сантим', 'сантими', 'сантимів')
|
|||
|
|
),
|
|||
|
|
'EGP': (
|
|||
|
|
('фунт', 'фунти', 'фунтів'),
|
|||
|
|
('піастр', 'піастри', 'піастрів')
|
|||
|
|
),
|
|||
|
|
'ERN': (
|
|||
|
|
('накфа', 'накфи', 'накф'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'ETB': (
|
|||
|
|
('бир', 'бири', 'бирів'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'EUR': (
|
|||
|
|
('євро', 'євро', 'євро'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'FJD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'FKP': (
|
|||
|
|
('фунт', 'фунти', 'фунтів'),
|
|||
|
|
('пенс', 'пенси', 'пенсів')
|
|||
|
|
),
|
|||
|
|
'GBP': (
|
|||
|
|
('фунт', 'фунти', 'фунтів'),
|
|||
|
|
('пенс', 'пенси', 'пенсів')
|
|||
|
|
),
|
|||
|
|
'GEL': (
|
|||
|
|
('ларі', 'ларі', 'ларі'),
|
|||
|
|
('тетрі', 'тетрі', 'тетрі')
|
|||
|
|
),
|
|||
|
|
'GHS': (
|
|||
|
|
('седі', 'седі', 'седі'),
|
|||
|
|
('песева', 'песеви', 'песев')
|
|||
|
|
),
|
|||
|
|
'GIP': (
|
|||
|
|
('фунт', 'фунти', 'фунтів'),
|
|||
|
|
('пенс', 'пенси', 'пенсів')
|
|||
|
|
),
|
|||
|
|
'GMD': (
|
|||
|
|
('даласі', 'даласі', 'даласі'),
|
|||
|
|
('бутут', 'бутути', 'бутутів')
|
|||
|
|
),
|
|||
|
|
'GNF': (
|
|||
|
|
('франк', 'франки', 'франків'),
|
|||
|
|
('сантим', 'сантими', 'сантимів')
|
|||
|
|
),
|
|||
|
|
'GTQ': (
|
|||
|
|
('кетсаль', 'кетсалі', 'кетсалів'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'GYD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'HKD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'HNL': (
|
|||
|
|
('лемпіра', 'лемпіри', 'лемпір'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'HRK': (
|
|||
|
|
('куна', 'куни', 'кун'),
|
|||
|
|
('ліпа', 'ліпи', 'ліп')
|
|||
|
|
),
|
|||
|
|
'HTG': (
|
|||
|
|
('гурд', 'гурди', 'гурдів'),
|
|||
|
|
('сантим', 'сантими', 'сантимів')
|
|||
|
|
),
|
|||
|
|
'HUF': (
|
|||
|
|
('форинт', 'форинти', 'форинтів'),
|
|||
|
|
('філлер', 'філлери', 'філлерів')
|
|||
|
|
),
|
|||
|
|
'IDR': (
|
|||
|
|
('рупія', 'рупії', 'рупій'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'ILS': (
|
|||
|
|
('шекель', 'шекелі', 'шекелів'),
|
|||
|
|
('агора', 'агори', 'агор')
|
|||
|
|
),
|
|||
|
|
'INR': (
|
|||
|
|
('рупія', 'рупії', 'рупій'),
|
|||
|
|
('пайса', 'пайси', 'пайс')
|
|||
|
|
),
|
|||
|
|
'IQD': (
|
|||
|
|
('динар', 'динари', 'динарів'),
|
|||
|
|
('філс', 'філси', 'філсів')
|
|||
|
|
),
|
|||
|
|
'IRR': (
|
|||
|
|
('ріал', 'ріали', 'ріалів'),
|
|||
|
|
('динар', 'динари', 'динарів')
|
|||
|
|
),
|
|||
|
|
'ISK': (
|
|||
|
|
('крона', 'крони', 'крон'),
|
|||
|
|
('ейре', 'ейре', 'ейре')
|
|||
|
|
),
|
|||
|
|
'JMD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'JOD': (
|
|||
|
|
('динар', 'динари', 'динарів'),
|
|||
|
|
('філс', 'філси', 'філсів')
|
|||
|
|
),
|
|||
|
|
'JPY': (
|
|||
|
|
('єна', 'єни', 'єн'),
|
|||
|
|
('сен', 'сен', 'сен')
|
|||
|
|
),
|
|||
|
|
'KES': (
|
|||
|
|
('шилінг', 'шилінги', 'шилінгів'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'KGS': (
|
|||
|
|
('сом', 'соми', 'сомів'),
|
|||
|
|
('тиїн', 'тиїни', 'тиїнів')
|
|||
|
|
),
|
|||
|
|
'KHR': (
|
|||
|
|
('рієль', 'рієлі', 'рієлів'),
|
|||
|
|
('су', 'су', 'су')
|
|||
|
|
),
|
|||
|
|
'KMF': (
|
|||
|
|
('франк', 'франки', 'франків'),
|
|||
|
|
('сантим', 'сантими', 'сантимів')
|
|||
|
|
),
|
|||
|
|
'KPW': (
|
|||
|
|
('вона', 'вони', 'вон'),
|
|||
|
|
('чон', 'чони', 'чонів')
|
|||
|
|
),
|
|||
|
|
'KRW': (
|
|||
|
|
('вона', 'вони', 'вон'),
|
|||
|
|
('джеон', 'джеони', 'джеонів')
|
|||
|
|
),
|
|||
|
|
'KWD': (
|
|||
|
|
('динар', 'динари', 'динарів'),
|
|||
|
|
('філс', 'філси', 'філсів')
|
|||
|
|
),
|
|||
|
|
'KYD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'KZT': (
|
|||
|
|
('теньге', 'теньге', 'теньге'),
|
|||
|
|
('тиїн', 'тиїни', 'тиїнів')),
|
|||
|
|
'LAK': (
|
|||
|
|
('кіп', 'кіпи', 'кіпів'),
|
|||
|
|
('ат', 'ати', 'атів')
|
|||
|
|
),
|
|||
|
|
'LBP': (
|
|||
|
|
('фунт', 'фунти', 'фунтів'),
|
|||
|
|
('піастр', 'піастри', 'піастрів')
|
|||
|
|
),
|
|||
|
|
'LKR': (
|
|||
|
|
('рупія', 'рупії', 'рупій'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'LRD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'LSL': (
|
|||
|
|
('лоті', 'малоті', 'малоті'),
|
|||
|
|
('сенте', 'лісенте', 'лісенте')
|
|||
|
|
),
|
|||
|
|
'LYD': (
|
|||
|
|
('динар', 'динари', 'динарів'),
|
|||
|
|
('дирхам', 'дирхами', 'дирхамів')
|
|||
|
|
),
|
|||
|
|
'MAD': (
|
|||
|
|
('дирхам', 'дирхами', 'дирхамів'),
|
|||
|
|
('сантим', 'сантими', 'сантимів')
|
|||
|
|
),
|
|||
|
|
'MDL': (
|
|||
|
|
('лей', 'леї', 'леї'),
|
|||
|
|
('бан', 'бані', 'бані')
|
|||
|
|
),
|
|||
|
|
'MGA': (
|
|||
|
|
('аріарі', 'аріарі', 'аріарі'),
|
|||
|
|
('іраймбіланья', 'іраймбіланья', 'іраймбіланья')
|
|||
|
|
),
|
|||
|
|
'MKD': (
|
|||
|
|
('денар', 'денари', 'денарів'),
|
|||
|
|
('дені', 'дені', 'дені')
|
|||
|
|
),
|
|||
|
|
'MMK': (
|
|||
|
|
('к\'ят', 'к\'ят', 'к\'ят'),
|
|||
|
|
('п\'я', 'п\'я', 'п\'я')
|
|||
|
|
),
|
|||
|
|
'MNT': (
|
|||
|
|
('тугрик', 'тугрики', 'тугриків'),
|
|||
|
|
('мунгу', 'мунгу', 'мунгу')
|
|||
|
|
),
|
|||
|
|
'MOP': (
|
|||
|
|
('патака', 'патакі', 'патак'),
|
|||
|
|
('аво', 'аво', 'аво')
|
|||
|
|
),
|
|||
|
|
'MRU': (
|
|||
|
|
('угія', 'угії', 'угій'),
|
|||
|
|
('хумс', 'хумс', 'хумс')
|
|||
|
|
),
|
|||
|
|
'MUR': (
|
|||
|
|
('рупія', 'рупії', 'рупій'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'MVR': (
|
|||
|
|
('руфія', 'руфії', 'руфій'),
|
|||
|
|
('ларі', 'ларі', 'ларі')
|
|||
|
|
),
|
|||
|
|
'MWK': (
|
|||
|
|
('квача', 'квачі', 'квач'),
|
|||
|
|
('тамбала', 'тамбала', 'тамбала')
|
|||
|
|
),
|
|||
|
|
'MXN': (
|
|||
|
|
('песо', 'песо', 'песо'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'MYR': (
|
|||
|
|
('рингіт', 'рингіти', 'рингітів'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'MZN': (
|
|||
|
|
('метікал', 'метікали', 'метікалів'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'NAD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'NGN': (
|
|||
|
|
('найра', 'найри', 'найр'),
|
|||
|
|
('кобо', 'кобо', 'кобо')
|
|||
|
|
),
|
|||
|
|
'NIO': (
|
|||
|
|
('кордоба', 'кордоби', 'кордоб'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'NOK': (
|
|||
|
|
('крона', 'крони', 'крон'),
|
|||
|
|
('ере', 'ере', 'ере')
|
|||
|
|
),
|
|||
|
|
'NPR': (
|
|||
|
|
('рупія', 'рупії', 'рупій'),
|
|||
|
|
('пайса', 'пайси', 'пайс')
|
|||
|
|
),
|
|||
|
|
'NZD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'OMR': (
|
|||
|
|
('ріал', 'ріали', 'ріалів'),
|
|||
|
|
('байза', 'байзи', 'байз')
|
|||
|
|
),
|
|||
|
|
'PAB': (
|
|||
|
|
('бальбоа', 'бальбоа', 'бальбоа'),
|
|||
|
|
('сентесімо', 'сентесімо', 'сентесімо')
|
|||
|
|
),
|
|||
|
|
'PEN': (
|
|||
|
|
('соль', 'соль', 'соль'),
|
|||
|
|
('сентімо', 'сентімо', 'сентімо')
|
|||
|
|
),
|
|||
|
|
'PGK': (
|
|||
|
|
('кіна', 'кіна', 'кіна'),
|
|||
|
|
('тойя', 'тойя', 'тойя')
|
|||
|
|
),
|
|||
|
|
'PHP': (
|
|||
|
|
('песо', 'песо', 'песо'),
|
|||
|
|
('сентаво', 'сентаво', 'сентаво')
|
|||
|
|
),
|
|||
|
|
'PKR': (
|
|||
|
|
('рупія', 'рупії', 'рупій'),
|
|||
|
|
('пайса', 'пайси', 'пайс')
|
|||
|
|
),
|
|||
|
|
'PLN': (
|
|||
|
|
('злотий', 'злоті', 'злотих'),
|
|||
|
|
('грош', 'гроші', 'грошів')
|
|||
|
|
),
|
|||
|
|
'PYG': (
|
|||
|
|
('гуарані', 'гуарані', 'гуарані'),
|
|||
|
|
('сентімо', 'сентімо', 'сентімо')
|
|||
|
|
),
|
|||
|
|
'QAR': (
|
|||
|
|
('ріал', 'ріали', 'ріалів'),
|
|||
|
|
('дирхам', 'дирхами', 'дирхамів')
|
|||
|
|
),
|
|||
|
|
'RON': (
|
|||
|
|
('лей', 'леї', 'леї'),
|
|||
|
|
('бан', 'бані', 'бані')
|
|||
|
|
),
|
|||
|
|
'RSD': (
|
|||
|
|
('динар', 'динари', 'динарів'),
|
|||
|
|
('пара', 'пари', 'пар')
|
|||
|
|
),
|
|||
|
|
'RUB': (
|
|||
|
|
('рубль', 'рублі', 'рублів'),
|
|||
|
|
('копійка', 'копійки', 'копійок')
|
|||
|
|
),
|
|||
|
|
'RWF': (
|
|||
|
|
('франк', 'франки', 'франків'),
|
|||
|
|
('сантим', 'сантими', 'сантимів')
|
|||
|
|
),
|
|||
|
|
'SAR': (
|
|||
|
|
('ріал', 'ріали', 'ріалів'),
|
|||
|
|
('халал', 'халали', 'халалів')
|
|||
|
|
),
|
|||
|
|
'SBD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'SCR': (
|
|||
|
|
('рупія', 'рупії', 'рупій'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'SDG': (
|
|||
|
|
('фунт', 'фунти', 'фунтів'),
|
|||
|
|
('піастр', 'піастри', 'піастрів')
|
|||
|
|
),
|
|||
|
|
'SEK': (
|
|||
|
|
('крона', 'крони', 'крон'),
|
|||
|
|
('ере', 'ере', 'ере')
|
|||
|
|
),
|
|||
|
|
'SGD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'SHP': (
|
|||
|
|
('фунт', 'фунти', 'фунтів'),
|
|||
|
|
('пенс', 'пенси', 'пенсів')
|
|||
|
|
),
|
|||
|
|
'SLL': (
|
|||
|
|
('леоне', 'леоне', 'леоне'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'SOS': (
|
|||
|
|
('шилінг', 'шилінги', 'шилінгів'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'SRD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'SSP': (
|
|||
|
|
('фунт', 'фунти', 'фунтів'),
|
|||
|
|
('піастр', 'піастри', 'піастрів')
|
|||
|
|
),
|
|||
|
|
'STN': (
|
|||
|
|
('добра', 'добри', 'добр'),
|
|||
|
|
('сентімо', 'сентімо', 'сентімо')
|
|||
|
|
),
|
|||
|
|
'SYP': (
|
|||
|
|
('фунт', 'фунти', 'фунтів'),
|
|||
|
|
('піастр', 'піастри', 'піастрів')
|
|||
|
|
),
|
|||
|
|
'SZL': (
|
|||
|
|
('ліланґені', 'ліланґені', 'ліланґені'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'THB': (
|
|||
|
|
('бат', 'бати', 'батів'),
|
|||
|
|
('сатанг', 'сатанги', 'сатангів')
|
|||
|
|
),
|
|||
|
|
'TJS': (
|
|||
|
|
('сомоні', 'сомоні', 'сомоні'),
|
|||
|
|
('дірам', 'дірами', 'дірамів')
|
|||
|
|
),
|
|||
|
|
'TMT': (
|
|||
|
|
('манат', 'манати', 'манатів'),
|
|||
|
|
('тенге', 'тенге', 'тенге')
|
|||
|
|
),
|
|||
|
|
'TND': (
|
|||
|
|
('динар', 'динари', 'динарів'),
|
|||
|
|
('міллім', 'мілліми', 'міллімів')
|
|||
|
|
),
|
|||
|
|
'TOP': (
|
|||
|
|
('паанга', 'паанга', 'паанга'),
|
|||
|
|
('сеніті', 'сеніті', 'сеніті')
|
|||
|
|
),
|
|||
|
|
'TRY': (
|
|||
|
|
('ліра', 'ліри', 'лір'),
|
|||
|
|
('куруш', 'куруші', 'курушів')
|
|||
|
|
),
|
|||
|
|
'TTD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'TWD': (
|
|||
|
|
('новий долар', 'нові долари', 'нових доларів'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'TZS': (
|
|||
|
|
('шилінг', 'шилінги', 'шилінгів'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'UAH': (
|
|||
|
|
('гривня', 'гривні', 'гривень'),
|
|||
|
|
('копійка', 'копійки', 'копійок')
|
|||
|
|
),
|
|||
|
|
'UGX': (
|
|||
|
|
('шилінг', 'шилінги', 'шилінгів'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'USD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'UYU': (
|
|||
|
|
('песо', 'песо', 'песо'),
|
|||
|
|
('сентесімо', 'сентесімо', 'сентесімо')
|
|||
|
|
),
|
|||
|
|
'UZS': (
|
|||
|
|
('сум', 'суми', 'сумів'),
|
|||
|
|
('тиїн', 'тиїни', 'тиїнів')
|
|||
|
|
),
|
|||
|
|
'VND': (
|
|||
|
|
('донг', 'донги', 'донгів'),
|
|||
|
|
('су', 'су', 'су')
|
|||
|
|
),
|
|||
|
|
'WST': (
|
|||
|
|
('тала', 'тали', 'тал'),
|
|||
|
|
('сене', 'сене', 'сене')
|
|||
|
|
),
|
|||
|
|
'XCD': (GENERIC_DOLLARS, GENERIC_CENTS),
|
|||
|
|
'YER': (
|
|||
|
|
('ріал', 'ріали', 'ріалів'),
|
|||
|
|
('філс', 'філси', 'філсів')
|
|||
|
|
),
|
|||
|
|
'ZAR': (
|
|||
|
|
('ранд', 'ранди', 'рандів'),
|
|||
|
|
GENERIC_CENTS
|
|||
|
|
),
|
|||
|
|
'ZMW': (
|
|||
|
|
('квача', 'квачі', 'квач'),
|
|||
|
|
('нгве', 'нгве', 'нгве')
|
|||
|
|
),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
def setup(self):
|
|||
|
|
self.negword = "мінус"
|
|||
|
|
self.pointword = "кома"
|
|||
|
|
|
|||
|
|
def to_cardinal(self, number, **kwargs):
|
|||
|
|
if 'case' in kwargs:
|
|||
|
|
case = kwargs['case']
|
|||
|
|
morphological_case = [
|
|||
|
|
"nominative",
|
|||
|
|
"genitive",
|
|||
|
|
"dative",
|
|||
|
|
"accusative",
|
|||
|
|
"instrumental",
|
|||
|
|
"locative"].index(case)
|
|||
|
|
else:
|
|||
|
|
morphological_case = 0
|
|||
|
|
|
|||
|
|
if 'gender' in kwargs:
|
|||
|
|
gender = kwargs['gender'] == 'feminine'
|
|||
|
|
else:
|
|||
|
|
gender = False
|
|||
|
|
|
|||
|
|
n = str(number).replace(',', '.')
|
|||
|
|
if '.' in n:
|
|||
|
|
left, right = n.split('.')
|
|||
|
|
leading_zero_count = len(right) - len(right.lstrip('0'))
|
|||
|
|
right_side = self._int2word(int(right), gender, morphological_case)
|
|||
|
|
decimal_part = ((ZERO[0] + ' ') * leading_zero_count +
|
|||
|
|
right_side)
|
|||
|
|
return u'%s %s %s' % (
|
|||
|
|
self._int2word(int(left), gender, morphological_case),
|
|||
|
|
self.pointword,
|
|||
|
|
decimal_part
|
|||
|
|
)
|
|||
|
|
else:
|
|||
|
|
return self._int2word(int(n), gender, morphological_case)
|
|||
|
|
|
|||
|
|
def pluralize(self, n, forms):
|
|||
|
|
if n % 100 < 10 or n % 100 > 20:
|
|||
|
|
if n % 10 == 1:
|
|||
|
|
form = 0
|
|||
|
|
elif 5 > n % 10 > 1:
|
|||
|
|
form = 1
|
|||
|
|
else:
|
|||
|
|
form = 2
|
|||
|
|
else:
|
|||
|
|
form = 2
|
|||
|
|
|
|||
|
|
return forms[form]
|
|||
|
|
|
|||
|
|
def _int2word(self, n, feminine=False, morphological_case=0):
|
|||
|
|
if n < 0:
|
|||
|
|
n_value = self._int2word(abs(n), feminine, morphological_case)
|
|||
|
|
return ' '.join([self.negword,
|
|||
|
|
n_value])
|
|||
|
|
|
|||
|
|
if n == 0:
|
|||
|
|
return ZERO[0]
|
|||
|
|
|
|||
|
|
words = []
|
|||
|
|
chunks = list(splitbyx(str(n), 3))
|
|||
|
|
i = len(chunks)
|
|||
|
|
for x in chunks:
|
|||
|
|
i -= 1
|
|||
|
|
|
|||
|
|
if x == 0:
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
n1, n2, n3 = get_digits(x)
|
|||
|
|
|
|||
|
|
if n3 > 0:
|
|||
|
|
words.append(HUNDREDS[n3][morphological_case])
|
|||
|
|
|
|||
|
|
if n2 > 1:
|
|||
|
|
words.append(TWENTIES[n2][morphological_case])
|
|||
|
|
|
|||
|
|
if n2 == 1:
|
|||
|
|
words.append(TENS[n1][morphological_case])
|
|||
|
|
# elif n1 > 0 and not (i > 0 and x == 1):
|
|||
|
|
elif n1 > 0:
|
|||
|
|
ones = ONES_FEMININE if i == 1 or feminine and i == 0 else ONES
|
|||
|
|
words.append(ones[n1][morphological_case])
|
|||
|
|
|
|||
|
|
if i > 0:
|
|||
|
|
thousands_val = THOUSANDS[i][morphological_case]
|
|||
|
|
words.append(self.pluralize(x, thousands_val))
|
|||
|
|
|
|||
|
|
return ' '.join(words)
|
|||
|
|
|
|||
|
|
def _money_verbose(self, number, currency):
|
|||
|
|
return self._int2word(number, currency in FEMININE_MONEY)
|
|||
|
|
|
|||
|
|
def _cents_verbose(self, number, currency):
|
|||
|
|
return self._int2word(number, currency in FEMININE_CENTS)
|
|||
|
|
|
|||
|
|
@staticmethod
|
|||
|
|
def last_fragment_to_ordinal(last, words, level):
|
|||
|
|
n1, n2, n3 = get_digits(last)
|
|||
|
|
last_two = n2*10+n1
|
|||
|
|
if last_two == 0:
|
|||
|
|
words.append(HUNDREDS_ORDINALS[n3][level])
|
|||
|
|
elif level == 1 and last == 1:
|
|||
|
|
return
|
|||
|
|
elif last_two < 20:
|
|||
|
|
if level == 0:
|
|||
|
|
if n3 > 0:
|
|||
|
|
words.append(HUNDREDS[n3][0])
|
|||
|
|
words.append(ONES_ORDINALS[last_two][0])
|
|||
|
|
else:
|
|||
|
|
last_fragment_string = ''
|
|||
|
|
if n3 > 0:
|
|||
|
|
last_fragment_string += HUNDREDS_ORDINALS[n3][1]
|
|||
|
|
last_fragment_string += ONES_ORDINALS[last_two][1]
|
|||
|
|
words.append(last_fragment_string)
|
|||
|
|
elif last_two % 10 == 0:
|
|||
|
|
if level == 0:
|
|||
|
|
if n3 > 0:
|
|||
|
|
words.append(HUNDREDS[n3][0])
|
|||
|
|
words.append(TWENTIES_ORDINALS[n2][0])
|
|||
|
|
else:
|
|||
|
|
last_fragment_string = ''
|
|||
|
|
if n3 > 0:
|
|||
|
|
last_fragment_string += HUNDREDS_ORDINALS[n3][1]
|
|||
|
|
last_fragment_string += TWENTIES_ORDINALS[n2][1]
|
|||
|
|
words.append(last_fragment_string)
|
|||
|
|
else:
|
|||
|
|
if level == 0:
|
|||
|
|
if n3 > 0:
|
|||
|
|
words.append(HUNDREDS[n3][0])
|
|||
|
|
words.append(TWENTIES[n2][0])
|
|||
|
|
words.append(ONES_ORDINALS[n1][0])
|
|||
|
|
else:
|
|||
|
|
last_fragment_string = ''
|
|||
|
|
if n3 > 0:
|
|||
|
|
last_fragment_string += HUNDREDS_ORDINALS[n3][1]
|
|||
|
|
last_fragment_string += TWENTIES_ORDINALS[n2][1]
|
|||
|
|
last_fragment_string += ONES_ORDINALS[n1][1]
|
|||
|
|
words.append(last_fragment_string)
|
|||
|
|
|
|||
|
|
def to_ordinal(self, number):
|
|||
|
|
self.verify_ordinal(number)
|
|||
|
|
|
|||
|
|
words = []
|
|||
|
|
fragments = list(splitbyx(str(number), 3))
|
|||
|
|
level = 0
|
|||
|
|
last = fragments[-1]
|
|||
|
|
while last == 0:
|
|||
|
|
level = level + 1
|
|||
|
|
fragments.pop()
|
|||
|
|
last = fragments[-1]
|
|||
|
|
if len(fragments) > 1:
|
|||
|
|
pre_part = self._int2word(number - (last * 1000 ** level))
|
|||
|
|
words.append(pre_part)
|
|||
|
|
Num2Word_UK.last_fragment_to_ordinal(
|
|||
|
|
last,
|
|||
|
|
words,
|
|||
|
|
0 if level == 0 else 1
|
|||
|
|
)
|
|||
|
|
output = " ".join(words)
|
|||
|
|
if last == 1 and level > 0 and output != "":
|
|||
|
|
output = output + " "
|
|||
|
|
if level > 0:
|
|||
|
|
output = output + prefixes_ordinal[level]
|
|||
|
|
return output
|