mirror of
https://github.com/bblaz/num2words.git
synced 2025-12-06 06:42:25 +00:00
TR translation
TR translation of num2word reading all cardinals and ordinals up to 10**21-1
This commit is contained in:
@@ -37,6 +37,7 @@ from . import lang_IT
|
||||
from . import lang_ES_VE
|
||||
from . import lang_ES_CO
|
||||
from . import lang_VN
|
||||
from . import lang_TR
|
||||
|
||||
|
||||
CONVERTER_CLASSES = {
|
||||
@@ -60,7 +61,8 @@ CONVERTER_CLASSES = {
|
||||
'pt_BR': lang_PT_BR.Num2Word_PT_BR(),
|
||||
'he': lang_HE.Num2Word_HE(),
|
||||
'it': lang_IT.Num2Word_IT(),
|
||||
'vi_VN': lang_VN.Num2Word_VN()
|
||||
'vi_VN': lang_VN.Num2Word_VN(),
|
||||
'tr': lang_TR.Num2Word_TR()
|
||||
}
|
||||
|
||||
def num2words(number, ordinal=False, lang='en'):
|
||||
|
||||
575
num2words/lang_TR.py
Normal file
575
num2words/lang_TR.py
Normal file
@@ -0,0 +1,575 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2003, Taro Ogawa. All Rights Reserved.
|
||||
# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved.
|
||||
# Copyright (c) 2017, Tufan Kaynak, Framras. 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
|
||||
|
||||
|
||||
class Num2Word_TR(object):
|
||||
def __init__(self):
|
||||
self.precision = 2
|
||||
self.negword = u"eksi "
|
||||
self.pointword = u"virgül"
|
||||
self.CURRENCY_UNIT = (u"lira",)
|
||||
self.CURRENCY_SUBUNIT = (u"kuruş",)
|
||||
# type(%s) not in [long, int, float]
|
||||
self.errmsg_nonnum = u"Sadece sayılar yazıya çevrilebilir."
|
||||
# Cannot treat float %s as ordinal.
|
||||
self.errmsg_floatord = u"Tam sayı olmayan {} sıralamada kullanılamaz."
|
||||
# Cannot treat negative num %s as ordinal.
|
||||
self.errmsg_negord = u"Pozitif olmayan {} sıralamada kullanılamaz."
|
||||
# abs(%s) must be less than %s.
|
||||
self.errmsg_toobig = u"abs({}) sayı yazıya çevirmek için çok büyük. Yazıya çevrilebilecek en büyük rakam {}."
|
||||
self.exclude_title = ["et", "virgule", "moins"]
|
||||
# ordered number tuples in Turkish
|
||||
self.ORDINAL_SIGN = (",",)
|
||||
self.CARDINAL_BIRLER = (
|
||||
u"sıfır", u"bir", u"iki", u"üç", u"dört", u"beş", u"altı", u"yedi", u"sekiz", u"dokuz",)
|
||||
self.ORDINAL_BIRLER = (
|
||||
u"", u"birinci", u"ikinci", u"üçüncü", u"dördüncü", u"beşinci", u"altıncı", u"yedinci", u"sekizinci", u"dokuzuncu",)
|
||||
self.CARDINAL_ONLAR = (
|
||||
u"", u"on", u"yirmi", u"otuz", u"kırk", u"elli", u"altmış", u"yetmiş", u"seksen", u"doksan",)
|
||||
self.ORDINAL_ONLAR = (
|
||||
u"", u"onuncu", u"yirminci", u"otuzuncu", u"kırkıncı", u"ellinci", u"altmışıncı", u"yetmişinci", u"sekseninci",
|
||||
u"doksanıncı",)
|
||||
self.CARDINAL_YUZLER = (u"yüz",)
|
||||
self.ORDINAL_YUZLER = (u"yüzüncü",)
|
||||
self.CARDINAL_UCLU_GRUPLAR = (u"", u"bin", u"milyon", u"milyar", u"trilyon", u"katrilyon", u"kentilyon",)
|
||||
self.ORDINAL_UCLU_GRUPLAR = (
|
||||
u"", u"bininci", u"milyonuncu", u"milyarıncı", u"trilyonuncu", u"katrilyonuncu", u"kentilyon",)
|
||||
self.MAXVAL = (10 ** (len(self.CARDINAL_UCLU_GRUPLAR) * 3)) - 1
|
||||
|
||||
self.okunacak_tam_sayi = []
|
||||
self.okunacak_uclu_grup_sayisi = 0
|
||||
self.okunacak_artik_basamak_sayisi = 0
|
||||
self.son_sifir_basamagi = 0
|
||||
|
||||
# def set_numwords(self):
|
||||
|
||||
# def gen_high_numwords(self, units, tens, lows):
|
||||
|
||||
# def set_mid_numwords(self, mid):
|
||||
|
||||
# def set_low_numwords(self, numwords):
|
||||
|
||||
def splitnum(self, value):
|
||||
return self.to_splitnum(value)
|
||||
|
||||
def to_cardinal(self, value):
|
||||
oku = ""
|
||||
is_cardinal = self.verify_cardinal(value)
|
||||
if is_cardinal:
|
||||
if not int(value) == value:
|
||||
return self.to_cardinal_float(value)
|
||||
self.splitnum(value)
|
||||
|
||||
if self.son_sifir_basamagi >= len(self.okunacak_tam_sayi[0]):
|
||||
# number like 00 and all 0s and even more, raise error
|
||||
return oku
|
||||
|
||||
if self.okunacak_uclu_grup_sayisi == 1:
|
||||
if self.okunacak_artik_basamak_sayisi == 2:
|
||||
if self.son_sifir_basamagi == 1:
|
||||
# number like x0, read cardinal x0 and return
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])]
|
||||
return oku
|
||||
if self.son_sifir_basamagi == 0:
|
||||
# number like xy, read cardinal xy and return
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])]
|
||||
if not self.okunacak_tam_sayi[0][0] == "0":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])]
|
||||
return oku
|
||||
|
||||
if self.okunacak_artik_basamak_sayisi == 1:
|
||||
if self.son_sifir_basamagi == 0:
|
||||
# number like x, read ordinal x and return
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
return oku
|
||||
|
||||
if self.okunacak_artik_basamak_sayisi == 0:
|
||||
if self.son_sifir_basamagi == 2:
|
||||
# number like x00, read cardinal x00 and return
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
return oku
|
||||
if self.son_sifir_basamagi == 1:
|
||||
# number like xy0, read cardinal xy0 and return
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])]
|
||||
return oku
|
||||
if self.son_sifir_basamagi == 0:
|
||||
# number like xyz, read cardinal xyz and return
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])]
|
||||
if not self.okunacak_tam_sayi[0][2] == "0":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])]
|
||||
return oku
|
||||
|
||||
if self.okunacak_uclu_grup_sayisi >= 2:
|
||||
if self.okunacak_artik_basamak_sayisi == 2:
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1:
|
||||
# number like x0 and all 0s, read cardinal x0 0..0 and return
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
return oku
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 2:
|
||||
# number like xy and all 0s, read cardinal xy 0..0 and return
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])]
|
||||
if not self.okunacak_tam_sayi[0][1] == "0":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
return oku
|
||||
if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 2:
|
||||
# number like xy and others, read cardinal xy n..n and return
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])]
|
||||
if not self.okunacak_tam_sayi[0][1] == "0":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
|
||||
if self.okunacak_artik_basamak_sayisi == 1:
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1:
|
||||
# number like x and all 0s, read cardinal x 0..0 and return
|
||||
if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][0] == "1"):
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
return oku
|
||||
if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 1:
|
||||
# number like x and others, read cardinal x n..n and return
|
||||
if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][0] == "1"):
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
|
||||
if self.okunacak_artik_basamak_sayisi == 0:
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1:
|
||||
# number like x00 and all 0s, read cardinal x00 0..0 and return
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
return oku
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 2:
|
||||
# number like xy0 and all 0s, read cardinal xy0 0..0 and return
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
return oku
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 3:
|
||||
# number like xyz and all 0s, read cardinal xyz 0..0 and return
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])]
|
||||
if not self.okunacak_tam_sayi[0][2] == "0":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
return oku
|
||||
if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 3:
|
||||
# number like xyz and all others, read cardinal xyz n..n
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])]
|
||||
if not self.okunacak_tam_sayi[0][2] == "0":
|
||||
if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][2] == "1"):
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
|
||||
for i in list(range(self.okunacak_uclu_grup_sayisi - 1, 0, -1)):
|
||||
okunan_grup_sirasi = self.okunacak_uclu_grup_sayisi - i
|
||||
if self.okunacak_artik_basamak_sayisi == 0:
|
||||
son_okunan_basamak_sirasi = okunan_grup_sirasi * 3
|
||||
else:
|
||||
son_okunan_basamak_sirasi = (okunan_grup_sirasi - 1) * 3 + self.okunacak_artik_basamak_sayisi
|
||||
|
||||
if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 3] == "000":
|
||||
if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi] == "0":
|
||||
if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi] == "1":
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi])]
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - (
|
||||
son_okunan_basamak_sirasi) - 1:
|
||||
if i == 1:
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
return oku
|
||||
elif i > 1:
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[i - 1]
|
||||
return oku
|
||||
else:
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
|
||||
if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1] == "0":
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - (
|
||||
son_okunan_basamak_sirasi) - 2:
|
||||
if i == 1:
|
||||
oku += self.CARDINAL_ONLAR[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])]
|
||||
return oku
|
||||
elif i > 1:
|
||||
oku += self.CARDINAL_ONLAR[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[i - 1]
|
||||
return oku
|
||||
else:
|
||||
oku += self.CARDINAL_ONLAR[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])]
|
||||
|
||||
if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "0":
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - (
|
||||
son_okunan_basamak_sirasi) - 3:
|
||||
if i == 1:
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
return oku
|
||||
if i == 2:
|
||||
if not self.okunacak_tam_sayi[0][
|
||||
son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00":
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
elif not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "1":
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[i - 1]
|
||||
return oku
|
||||
if i > 2:
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[i - 1]
|
||||
return oku
|
||||
else:
|
||||
if not self.okunacak_tam_sayi[0][
|
||||
son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00":
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
else:
|
||||
if i == 2:
|
||||
if not self.okunacak_tam_sayi[0][
|
||||
son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00":
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
elif not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "1":
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[i - 1]
|
||||
|
||||
return oku
|
||||
|
||||
def to_cardinal_float(self, value):
|
||||
self.splitnum(value)
|
||||
oku = ""
|
||||
oku += self.pointword
|
||||
if len(self.okunacak_tam_sayi[1]) >= 1:
|
||||
if not self.okunacak_tam_sayi[1][0] == "0":
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[1][0])]
|
||||
if len(self.okunacak_tam_sayi[1]) == 2:
|
||||
if not self.okunacak_tam_sayi[1][1] == "0":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[1][1])]
|
||||
oku = self.to_cardinal(int(self.okunacak_tam_sayi[0])) + oku
|
||||
return oku
|
||||
|
||||
# def merge(self, curr, next):
|
||||
|
||||
# def clean(self, val):
|
||||
|
||||
# def title(self, value):
|
||||
|
||||
def verify_cardinal(self, value):
|
||||
iscardinal = True
|
||||
try:
|
||||
if not float(value) == value:
|
||||
iscardinal = False
|
||||
except (ValueError, TypeError):
|
||||
iscardinal = False
|
||||
raise TypeError(self.errmsg_nonnum)
|
||||
if abs(value) >= self.MAXVAL:
|
||||
iscardinal = False
|
||||
raise OverflowError(self.errmsg_toobig.format(value, self.MAXVAL))
|
||||
return iscardinal
|
||||
|
||||
def verify_ordinal(self, value):
|
||||
isordinal = True
|
||||
try:
|
||||
if not int(value) == value:
|
||||
isordinal = False
|
||||
if not abs(value) == value:
|
||||
isordinal = False
|
||||
raise TypeError(self.errmsg_negord.format(value))
|
||||
except (ValueError, TypeError):
|
||||
isordinal = False
|
||||
raise TypeError(self.errmsg_nonnum)
|
||||
if abs(value) >= self.MAXVAL:
|
||||
isordinal = False
|
||||
raise OverflowError(self.errmsg_toobig.format(value, self.MAXVAL))
|
||||
return isordinal
|
||||
|
||||
# def verify_num(self, value):
|
||||
|
||||
# def set_wordnums(self):
|
||||
|
||||
def to_ordinal(self, value):
|
||||
oku = ""
|
||||
isordinal = self.verify_ordinal(value)
|
||||
if isordinal:
|
||||
self.splitnum(value)
|
||||
|
||||
if self.son_sifir_basamagi >= len(self.okunacak_tam_sayi[0]):
|
||||
# number like 00 and all 0s and even more, raise error
|
||||
return oku
|
||||
|
||||
if self.okunacak_uclu_grup_sayisi == 1:
|
||||
if self.okunacak_artik_basamak_sayisi == 2:
|
||||
if self.son_sifir_basamagi == 1:
|
||||
# number like x0, read ordinal x0 and return
|
||||
oku += self.ORDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])]
|
||||
return oku
|
||||
if self.son_sifir_basamagi == 0:
|
||||
# number like xy, read ordinal xy and return
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])]
|
||||
if not self.okunacak_tam_sayi[0][0] == "0":
|
||||
oku += self.ORDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])]
|
||||
return oku
|
||||
|
||||
if self.okunacak_artik_basamak_sayisi == 1:
|
||||
if self.son_sifir_basamagi == 0:
|
||||
# number like x, read ordinal x and return
|
||||
oku += self.ORDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
return oku
|
||||
|
||||
if self.okunacak_artik_basamak_sayisi == 0:
|
||||
if self.son_sifir_basamagi == 2:
|
||||
# number like x00, read ordinal x00 and return
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.ORDINAL_YUZLER[0]
|
||||
return oku
|
||||
if self.son_sifir_basamagi == 1:
|
||||
# number like xy0, read ordinal xy0 and return
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.ORDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])]
|
||||
return oku
|
||||
if self.son_sifir_basamagi == 0:
|
||||
# number like xyz, read ordinal xyz and return
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])]
|
||||
if not self.okunacak_tam_sayi[0][2] == "0":
|
||||
oku += self.ORDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])]
|
||||
return oku
|
||||
|
||||
if self.okunacak_uclu_grup_sayisi >= 2:
|
||||
if self.okunacak_artik_basamak_sayisi == 2:
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1:
|
||||
# number like x0 and all 0s, read ordinal x0 0..0 and return
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
return oku
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 2:
|
||||
# number like xy and all 0s, read ordinal xy 0..0 and return
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])]
|
||||
if not self.okunacak_tam_sayi[0][1] == "0":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])]
|
||||
oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
return oku
|
||||
if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 2:
|
||||
# number like xy and others, read cardinal xy n..n and return
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])]
|
||||
if not self.okunacak_tam_sayi[0][1] == "0":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])]
|
||||
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
|
||||
if self.okunacak_artik_basamak_sayisi == 1:
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1:
|
||||
# number like x and all 0s, read ordinal x 0..0 and return
|
||||
if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][0] == "1"):
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
return oku
|
||||
if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 1:
|
||||
# number like x and others, read cardinal x n..n and return
|
||||
if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][0] == "1"):
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
|
||||
if self.okunacak_artik_basamak_sayisi == 0:
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1:
|
||||
# number like x00 and all 0s, read ordinal x00 0..0 and return
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
return oku
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 2:
|
||||
# number like xy0 and all 0s, read ordinal xy0 0..0 and return
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])]
|
||||
oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
return oku
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 3:
|
||||
# number like xyz and all 0s, read ordinal xyz 0..0 and return
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])]
|
||||
if not self.okunacak_tam_sayi[0][2] == "0":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])]
|
||||
oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
return oku
|
||||
if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 3:
|
||||
# number like xyz and all others, read cardinal xyz n..n
|
||||
if not self.okunacak_tam_sayi[0][0] == "1":
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])]
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])]
|
||||
if not self.okunacak_tam_sayi[0][2] == "0":
|
||||
if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][2] == "1"):
|
||||
oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])]
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1]
|
||||
|
||||
for i in list(range(self.okunacak_uclu_grup_sayisi - 1, 0, -1)):
|
||||
okunan_grup_sirasi = self.okunacak_uclu_grup_sayisi - i
|
||||
if self.okunacak_artik_basamak_sayisi == 0:
|
||||
son_okunan_basamak_sirasi = okunan_grup_sirasi * 3
|
||||
else:
|
||||
son_okunan_basamak_sirasi = (okunan_grup_sirasi - 1) * 3 + self.okunacak_artik_basamak_sayisi
|
||||
|
||||
if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 3] == "000":
|
||||
if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi] == "0":
|
||||
if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi] == "1":
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi])]
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - (
|
||||
son_okunan_basamak_sirasi) - 1:
|
||||
if i == 1:
|
||||
oku += self.ORDINAL_YUZLER[0]
|
||||
return oku
|
||||
elif i > 1:
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
oku += self.ORDINAL_UCLU_GRUPLAR[i - 1]
|
||||
return oku
|
||||
else:
|
||||
oku += self.CARDINAL_YUZLER[0]
|
||||
|
||||
if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1] == "0":
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - (
|
||||
son_okunan_basamak_sirasi) - 2:
|
||||
if i == 1:
|
||||
oku += self.ORDINAL_ONLAR[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])]
|
||||
return oku
|
||||
elif i > 1:
|
||||
oku += self.CARDINAL_ONLAR[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])]
|
||||
oku += self.ORDINAL_UCLU_GRUPLAR[i - 1]
|
||||
return oku
|
||||
else:
|
||||
oku += self.CARDINAL_ONLAR[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])]
|
||||
|
||||
if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "0":
|
||||
if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - (
|
||||
son_okunan_basamak_sirasi) - 3:
|
||||
if i == 1:
|
||||
oku += self.ORDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
return oku
|
||||
if i == 2:
|
||||
if not self.okunacak_tam_sayi[0][
|
||||
son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00":
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
elif not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "1":
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
oku += self.ORDINAL_UCLU_GRUPLAR[i - 1]
|
||||
return oku
|
||||
if i > 2:
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
oku += self.ORDINAL_UCLU_GRUPLAR[i - 1]
|
||||
return oku
|
||||
else:
|
||||
if not self.okunacak_tam_sayi[0][
|
||||
son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00":
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
else:
|
||||
if not self.okunacak_tam_sayi[0][
|
||||
son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00":
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
elif not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "1":
|
||||
oku += self.CARDINAL_BIRLER[
|
||||
int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])]
|
||||
|
||||
oku += self.CARDINAL_UCLU_GRUPLAR[i - 1]
|
||||
|
||||
return oku
|
||||
|
||||
def to_ordinal_num(self, value):
|
||||
oku = ""
|
||||
isordinal = self.verify_ordinal(value)
|
||||
if isordinal:
|
||||
self.splitnum(value)
|
||||
oku = self.okunacak_tam_sayi[0] + self.ORDINAL_SIGN[0]
|
||||
|
||||
return oku
|
||||
|
||||
# def inflect(self, value, text):
|
||||
|
||||
def to_splitnum(self, val, hightxt="", lowtxt="", jointxt="", divisor=100, longval=True, cents=True):
|
||||
kesirlibolum = str(int(val * 10**self.precision))
|
||||
self.okunacak_tam_sayi = [str(int(val)), kesirlibolum[len(kesirlibolum)-self.precision:]]
|
||||
if len(self.okunacak_tam_sayi[0]) % 3 > 0:
|
||||
self.okunacak_uclu_grup_sayisi = (len(self.okunacak_tam_sayi[0]) // 3) + 1
|
||||
elif len(self.okunacak_tam_sayi[0]) % 3 == 0:
|
||||
self.okunacak_uclu_grup_sayisi = len(self.okunacak_tam_sayi[0]) // 3
|
||||
self.okunacak_artik_basamak_sayisi = len(self.okunacak_tam_sayi[0]) % 3
|
||||
|
||||
okunacak = list(self.okunacak_tam_sayi[0][::-1])
|
||||
self.son_sifir_basamagi = 0
|
||||
found = 0
|
||||
for i in range(len(okunacak) - 1):
|
||||
if int(okunacak[i]) == 0 and found == 0:
|
||||
self.son_sifir_basamagi = i + 1
|
||||
else:
|
||||
found = 1
|
||||
|
||||
def to_year(self, value, **kwargs):
|
||||
return self.to_cardinal(value)
|
||||
|
||||
def to_currency(self, value, **kwargs):
|
||||
return self.to_cardinal(value)
|
||||
|
||||
# def base_setup(self):
|
||||
|
||||
# def setup(self):
|
||||
|
||||
# def test(self, value):
|
||||
104
tests/test_tr.py
Normal file
104
tests/test_tr.py
Normal file
@@ -0,0 +1,104 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved.
|
||||
# Copyright (c) 2017, Tufan Kaynak, Framras. 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 unittest import TestCase
|
||||
|
||||
from num2words import num2words
|
||||
|
||||
|
||||
class Num2WordsTRTest(TestCase):
|
||||
def test_tr(self):
|
||||
# ref https://github.com/savoirfairelinux/num2words/issues/8
|
||||
|
||||
self.assertEqual(num2words(1, True, "tr"), u"birinci")
|
||||
self.assertEqual(num2words(2, True, "tr"), u"ikinci")
|
||||
self.assertEqual(num2words(9, True, "tr"), u"dokuzuncu")
|
||||
self.assertEqual(num2words(10, True, "tr"), u"onuncu")
|
||||
self.assertEqual(num2words(11, True, "tr"), u"onbirinci")
|
||||
self.assertEqual(num2words(44, True, "tr"), u"kırkdördüncü")
|
||||
self.assertEqual(num2words(100, True, "tr"), u"yüzüncü")
|
||||
self.assertEqual(num2words(101, True, "tr"), u"yüzbirinci")
|
||||
self.assertEqual(num2words(103, True, "tr"), u"yüzüçüncü")
|
||||
self.assertEqual(num2words(110, True, "tr"), u"yüzonuncu")
|
||||
self.assertEqual(num2words(1000, True, "tr"), u"bininci")
|
||||
self.assertEqual(num2words(1001, True, "tr"), u"binbirinci")
|
||||
self.assertEqual(num2words(10000, True, "tr"), u"onbininci")
|
||||
self.assertEqual(num2words(10100, True, "tr"), u"onbinyüzüncü")
|
||||
self.assertEqual(num2words(11000, True, "tr"), u"onbirbininci")
|
||||
self.assertEqual(num2words(35000, True, "tr"), u"otuzbeşbininci")
|
||||
self.assertEqual(num2words(116331, True, "tr"), u"yüzonaltıbinüçyüzotuzbirinci")
|
||||
self.assertEqual(num2words(116330, True, "tr"), u"yüzonaltıbinüçyüzotuzuncu")
|
||||
self.assertEqual(num2words(100000, True, "tr"), u"yüzbininci")
|
||||
self.assertEqual(num2words(501000, True, "tr"), u"beşyüzbirbininci")
|
||||
self.assertEqual(num2words(1000111, True, "tr"), u"birmilyonyüzonbirinci")
|
||||
self.assertEqual(num2words(111000111, True, "tr"), u"yüzonbirmilyonyüzonbirinci")
|
||||
self.assertEqual(num2words(111001111, True, "tr"), u"yüzonbirmilyonbinyüzonbirinci")
|
||||
self.assertEqual(num2words(111111111, True, "tr"), u"yüzonbirmilyonyüzonbirbinyüzonbirinci")
|
||||
self.assertEqual(num2words(100001000, True, "tr"), u"yüzmilyonbininci")
|
||||
self.assertEqual(num2words(100001001, True, "tr"), u"yüzmilyonbinbirinci")
|
||||
self.assertEqual(num2words(100010000, True, "tr"), u"yüzmilyononbininci")
|
||||
self.assertEqual(num2words(100010001, True, "tr"), u"yüzmilyononbinbirinci")
|
||||
self.assertEqual(num2words(100011000, True, "tr"), u"yüzmilyononbirbininci")
|
||||
self.assertEqual(num2words(100011001, True, "tr"), u"yüzmilyononbirbinbirinci")
|
||||
self.assertEqual(num2words(101011001, True, "tr"), u"yüzbirmilyononbirbinbirinci")
|
||||
self.assertEqual(num2words(101011010, True, "tr"), u"yüzbirmilyononbirbinonuncu")
|
||||
self.assertEqual(num2words(1101011010, True, "tr"), u"birmilyaryüzbirmilyononbirbinonuncu")
|
||||
self.assertEqual(num2words(101101011010, True, "tr"), u"yüzbirmilyaryüzbirmilyononbirbinonuncu")
|
||||
self.assertEqual(num2words(1000000000001, True, "tr"), u"birtrilyonbirinci")
|
||||
|
||||
self.assertEqual(num2words(1, False, "tr"), u"bir")
|
||||
self.assertEqual(num2words(2, False, "tr"), u"iki")
|
||||
self.assertEqual(num2words(9, False, "tr"), u"dokuz")
|
||||
self.assertEqual(num2words(10, False, "tr"), u"on")
|
||||
self.assertEqual(num2words(11, False, "tr"), u"onbir")
|
||||
self.assertEqual(num2words(44, False, "tr"), u"kırkdört")
|
||||
self.assertEqual(num2words(100, False, "tr"), u"yüz")
|
||||
self.assertEqual(num2words(101, False, "tr"), u"yüzbir")
|
||||
self.assertEqual(num2words(103, False, "tr"), u"yüzüç")
|
||||
self.assertEqual(num2words(110, False, "tr"), u"yüzon")
|
||||
self.assertEqual(num2words(1000, False, "tr"), u"bin")
|
||||
self.assertEqual(num2words(1001, False, "tr"), u"binbir")
|
||||
self.assertEqual(num2words(10000, False, "tr"), u"onbin")
|
||||
self.assertEqual(num2words(10100, False, "tr"), u"onbinyüz")
|
||||
self.assertEqual(num2words(11000, False, "tr"), u"onbirbin")
|
||||
self.assertEqual(num2words(35000, False, "tr"), u"otuzbeşbin")
|
||||
self.assertEqual(num2words(116331, False, "tr"), u"yüzonaltıbinüçyüzotuzbir")
|
||||
self.assertEqual(num2words(116330, False, "tr"), u"yüzonaltıbinüçyüzotuz")
|
||||
self.assertEqual(num2words(500000, False, "tr"), u"beşyüzbin")
|
||||
self.assertEqual(num2words(501000, False, "tr"), u"beşyüzbirbin")
|
||||
self.assertEqual(num2words(1000111, False, "tr"), u"birmilyonyüzonbir")
|
||||
self.assertEqual(num2words(111000111, False, "tr"), u"yüzonbirmilyonyüzonbir")
|
||||
self.assertEqual(num2words(111001111, False, "tr"), u"yüzonbirmilyonbinyüzonbir")
|
||||
self.assertEqual(num2words(111111111, False, "tr"), u"yüzonbirmilyonyüzonbirbinyüzonbir")
|
||||
self.assertEqual(num2words(100001000, False, "tr"), u"yüzmilyonbin")
|
||||
self.assertEqual(num2words(100001001, False, "tr"), u"yüzmilyonbinbir")
|
||||
self.assertEqual(num2words(100010000, False, "tr"), u"yüzmilyononbin")
|
||||
self.assertEqual(num2words(100010001, False, "tr"), u"yüzmilyononbinbir")
|
||||
self.assertEqual(num2words(100011000, False, "tr"), u"yüzmilyononbirbin")
|
||||
self.assertEqual(num2words(100011001, False, "tr"), u"yüzmilyononbirbinbir")
|
||||
self.assertEqual(num2words(101011001, False, "tr"), u"yüzbirmilyononbirbinbir")
|
||||
self.assertEqual(num2words(101011010, False, "tr"), u"yüzbirmilyononbirbinon")
|
||||
self.assertEqual(num2words(1101011010, False, "tr"), u"birmilyaryüzbirmilyononbirbinon")
|
||||
self.assertEqual(num2words(101101011010, False, "tr"), u"yüzbirmilyaryüzbirmilyononbirbinon")
|
||||
self.assertEqual(num2words(1000000000001, False, "tr"), u"birtrilyonbir")
|
||||
self.assertEqual(num2words(0.1, False, "tr"), u"sıfırvirgülon")
|
||||
self.assertEqual(num2words(0.21, False, "tr"), u"sıfırvirgülyirmibir")
|
||||
self.assertEqual(num2words(1.01, False, "tr"), u"birvirgülbir")
|
||||
self.assertEqual(num2words(1.1, False, "tr"), u"birvirgülon")
|
||||
self.assertEqual(num2words(1.21, False, "tr"), u"birvirgülyirmibir")
|
||||
self.assertEqual(num2words(101101011010.02, False, "tr"), u"yüzbirmilyaryüzbirmilyononbirbinonvirgüliki")
|
||||
self.assertEqual(num2words(101101011010.2, False, "tr"), u"yüzbirmilyaryüzbirmilyononbirbinonvirgülyirmi")
|
||||
Reference in New Issue
Block a user