diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py index 45add35..fe51b00 100644 --- a/num2words/lang_TR.py +++ b/num2words/lang_TR.py @@ -34,25 +34,84 @@ class Num2Word_TR(object): 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"] + self.exclude_title = [] # ordered number tuples in Turkish - self.ORDINAL_SIGN = (",",) - self.CARDINAL_ONES = ( - u"sıfır", u"bir", u"iki", u"üç", u"dört", u"beş", u"altı", u"yedi", u"sekiz", u"dokuz",) - self.ORDINAL_ONES = ( - 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_TEN = ( - u"", u"on", u"yirmi", u"otuz", u"kırk", u"elli", u"altmış", u"yetmiş", u"seksen", u"doksan",) - self.ORDINAL_TENS = ( - 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_HUNDREDS = (u"yüz",) - self.ORDINAL_HUNDREDS = (u"yüzüncü",) - self.CARDINAL_TRIPLETS = (u"", u"bin", u"milyon", u"milyar", u"trilyon", u"katrilyon", u"kentilyon",) - self.ORDINAL_TRIPLETS = ( - u"", u"bininci", u"milyonuncu", u"milyarıncı", u"trilyonuncu", u"katrilyonuncu", u"kentilyon",) - self.MAXVAL = (10 ** (len(self.CARDINAL_TRIPLETS) * 3)) - 1 + self.DECIMAL_SIGN = (",",) + self.ORDINAL_SIGN = (".",) + self.ZERO = (u"sıfır",) + self.CARDINAL_ONES = { + "1": u"bir", + "2": u"iki", + "3": u"üç", + "4": u"dört", + "5": u"beş", + "6": u"altı", + "7": u"yedi", + "8": u"sekiz", + "9": u"dokuz" + } + self.ORDINAL_ONES = { + "1": u"birinci", + "2": u"ikinci", + "3": u"üçüncü", + "4": u"dördüncü", + "5": u"beşinci", + "6": u"altıncı", + "7": u"yedinci", + "8": u"sekizinci", + "9": u"dokuzuncu", + } + self.CARDINAL_TENS = { + "1": u"on", + "2": u"yirmi", + "3": u"otuz", + "4": u"kırk", + "5": u"elli", + "6": u"altmış", + "7": u"yetmiş", + "8": u"seksen", + "9": u"doksan" + } + self.ORDINAL_TENS = { + "1": u"onuncu", + "2": u"yirminci", + "3": u"otuzuncu", + "4": u"kırkıncı", + "5": u"ellinci", + "6": u"altmışıncı", + "7": u"yetmişinci", + "8": u"sekseninci", + "9": u"doksanıncı" + } + self.HUNDREDS = { + "2": u"iki", + "3": u"üç", + "4": u"dört", + "5": u"beş", + "6": u"altı", + "7": u"yedi", + "8": u"sekiz", + "9": u"dokuz" + } + self.CARDINAL_HUNDRED = (u"yüz",) + self.ORDINAL_HUNDRED = (u"yüzüncü",) + self.CARDINAL_TRIPLETS = { + 1: u"bin", + 2: u"milyon", + 3: u"milyar", + 4: u"trilyon", + 5: u"katrilyon", + 6: u"kentilyon" + } + self.ORDINAL_TRIPLETS = { + 1: u"bininci", + 2: u"milyonuncu", + 3: u"milyarıncı", + 4: u"trilyonuncu", + 5: u"katrilyonuncu", + 6: u"kentilyon" + } + self.MAXVAL = (10 ** ((len(self.CARDINAL_TRIPLETS) + 1) * 3)) - 1 self.integers_to_read = [] self.total_triplets_to_read = 0 @@ -71,7 +130,7 @@ class Num2Word_TR(object): return self.to_splitnum(value) def to_cardinal(self, value): - oku = "" + wrd = "" is_cardinal = self.verify_cardinal(value) if is_cardinal: if not int(value) == value: @@ -80,215 +139,203 @@ class Num2Word_TR(object): if self.order_of_last_zero_digit >= len(self.integers_to_read[0]): # number like 00 and all 0s and even more, raise error - return oku + return wrd if self.total_triplets_to_read == 1: if self.total_digits_outside_triplets == 2: if self.order_of_last_zero_digit == 1: # number like x0, read cardinal x0 and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + return wrd if self.order_of_last_zero_digit == 0: # number like xy, read cardinal xy and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - if not self.integers_to_read[0][0] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "") + return wrd if self.total_digits_outside_triplets == 1: if self.order_of_last_zero_digit == 0: # number like x, read ordinal x and return - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - return oku + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "") + return wrd if self.total_digits_outside_triplets == 0: if self.order_of_last_zero_digit == 2: # number like x00, read cardinal x00 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + return wrd if self.order_of_last_zero_digit == 1: # number like xy0, read cardinal xy0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + return wrd if self.order_of_last_zero_digit == 0: # number like xyz, read cardinal xyz and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - if not self.integers_to_read[0][2] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "") + return wrd if self.total_triplets_to_read >= 2: if self.total_digits_outside_triplets == 2: if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x0 and all 0s, read cardinal x0 0..0 and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2: # number like xy and all 0s, read cardinal xy 0..0 and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - if not self.integers_to_read[0][1] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 2: # number like xy and others, read cardinal xy n..n and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - if not self.integers_to_read[0][1] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] if self.total_digits_outside_triplets == 1: if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x and all 0s, read cardinal x 0..0 and return if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"): - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 1: # number like x and others, read cardinal x n..n and return if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"): - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] if self.total_digits_outside_triplets == 0: if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x00 and all 0s, read cardinal x00 0..0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2: # number like xy0 and all 0s, read cardinal xy0 0..0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 3: # number like xyz and all 0s, read cardinal xyz 0..0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - if not self.integers_to_read[0][2] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 3: # number like xyz and all others, read cardinal xyz n..n - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - if not self.integers_to_read[0][2] == "0": - if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][2] == "1"): - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][2] == "1"): + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] for i in list(range(self.total_triplets_to_read - 1, 0, -1)): - okunan_grup_sirasi = self.total_triplets_to_read - i + reading_triplet_order = self.total_triplets_to_read - i if self.total_digits_outside_triplets == 0: - son_okunan_basamak_sirasi = okunan_grup_sirasi * 3 + last_read_digit_order = reading_triplet_order * 3 else: - son_okunan_basamak_sirasi = (okunan_grup_sirasi - 1) * 3 + self.total_digits_outside_triplets + last_read_digit_order = (reading_triplet_order - 1) * 3 + self.total_digits_outside_triplets - if not self.integers_to_read[0][son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 3] == "000": - if not self.integers_to_read[0][son_okunan_basamak_sirasi] == "0": - if not self.integers_to_read[0][son_okunan_basamak_sirasi] == "1": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi])] + if not self.integers_to_read[0][last_read_digit_order: last_read_digit_order + 3] == "000": + if not self.integers_to_read[0][last_read_digit_order] == "0": + wrd += self.HUNDREDS.get(self.integers_to_read[0][last_read_digit_order], "") if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( - son_okunan_basamak_sirasi) - 1: + last_read_digit_order) - 1: if i == 1: - oku += self.CARDINAL_HUNDREDS[0] - return oku + wrd += self.CARDINAL_HUNDRED[0] + return wrd elif i > 1: - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TRIPLETS[i - 1] - return oku + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TRIPLETS[i - 1] + return wrd else: - oku += self.CARDINAL_HUNDREDS[0] + wrd += self.CARDINAL_HUNDRED[0] - if not self.integers_to_read[0][son_okunan_basamak_sirasi + 1] == "0": + if not self.integers_to_read[0][last_read_digit_order + 1] == "0": if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( - son_okunan_basamak_sirasi) - 2: + last_read_digit_order) - 2: if i == 1: - oku += self.CARDINAL_TEN[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] - return oku + wrd += self.CARDINAL_TENS.get( + self.integers_to_read[0][last_read_digit_order + 1], "") + return wrd elif i > 1: - oku += self.CARDINAL_TEN[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] - oku += self.CARDINAL_TRIPLETS[i - 1] - return oku + wrd += self.CARDINAL_TENS.get( + self.integers_to_read[0][last_read_digit_order + 1], "") + wrd += self.CARDINAL_TRIPLETS[i - 1] + return wrd else: - oku += self.CARDINAL_TEN[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][last_read_digit_order + 1], + "") - if not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "0": + if not self.integers_to_read[0][last_read_digit_order + 2] == "0": if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( - son_okunan_basamak_sirasi) - 3: + last_read_digit_order) - 3: if i == 1: - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - return oku + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + return wrd if i == 2: if not self.integers_to_read[0][ - son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - elif not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "1": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - oku += self.CARDINAL_TRIPLETS[i - 1] - return oku + last_read_digit_order: last_read_digit_order + 2] == "00": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + elif not self.integers_to_read[0][last_read_digit_order + 2] == "1": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + wrd += self.CARDINAL_TRIPLETS[i - 1] + return wrd if i > 2: - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - oku += self.CARDINAL_TRIPLETS[i - 1] - return oku + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + wrd += self.CARDINAL_TRIPLETS[i - 1] + return wrd else: if not self.integers_to_read[0][ - son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + last_read_digit_order: last_read_digit_order + 2] == "00": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") else: if i == 2: if not self.integers_to_read[0][ - son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - elif not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "1": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + last_read_digit_order: last_read_digit_order + 2] == "00": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + elif not self.integers_to_read[0][last_read_digit_order + 2] == "1": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") - oku += self.CARDINAL_TRIPLETS[i - 1] + wrd += self.CARDINAL_TRIPLETS[i - 1] - return oku + return wrd def to_cardinal_float(self, value): self.splitnum(value) - oku = "" - oku += self.pointword + wrd = "" + wrd += self.pointword if len(self.integers_to_read[1]) >= 1: - if not self.integers_to_read[1][0] == "0": - oku += self.CARDINAL_TEN[int(self.integers_to_read[1][0])] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[1][0], "") + if len(self.integers_to_read[1]) == 2: - if not self.integers_to_read[1][1] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[1][1])] - oku = self.to_cardinal(int(self.integers_to_read[0])) + oku - return oku + wrd += self.CARDINAL_ONES.get(self.integers_to_read[1][1], "") + + if self.integers_to_read[0] == "0": + wrd = self.ZERO[0] + wrd + else: + wrd = self.to_cardinal(int(self.integers_to_read[0])) + wrd + return wrd # def merge(self, curr, next): @@ -325,218 +372,204 @@ class Num2Word_TR(object): # def set_wordnums(self): def to_ordinal(self, value): - oku = "" + wrd = "" isordinal = self.verify_ordinal(value) if isordinal: self.splitnum(value) if self.order_of_last_zero_digit >= len(self.integers_to_read[0]): # number like 00 and all 0s and even more, raise error - return oku + return wrd if self.total_triplets_to_read == 1: if self.total_digits_outside_triplets == 2: if self.order_of_last_zero_digit == 1: # number like x0, read ordinal x0 and return - oku += self.ORDINAL_TENS[int(self.integers_to_read[0][0])] - return oku + wrd += self.ORDINAL_TENS.get(self.integers_to_read[0][0], "") + return wrd if self.order_of_last_zero_digit == 0: # number like xy, read ordinal xy and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - if not self.integers_to_read[0][0] == "0": - oku += self.ORDINAL_ONES[int(self.integers_to_read[0][1])] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.ORDINAL_ONES.get(self.integers_to_read[0][1], "") + return wrd if self.total_digits_outside_triplets == 1: if self.order_of_last_zero_digit == 0: # number like x, read ordinal x and return - oku += self.ORDINAL_ONES[int(self.integers_to_read[0][0])] - return oku + wrd += self.ORDINAL_ONES.get(self.integers_to_read[0][0], "") + return wrd if self.total_digits_outside_triplets == 0: if self.order_of_last_zero_digit == 2: # number like x00, read ordinal x00 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.ORDINAL_HUNDREDS[0] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.ORDINAL_HUNDRED[0] + return wrd if self.order_of_last_zero_digit == 1: # number like xy0, read ordinal xy0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.ORDINAL_TENS[int(self.integers_to_read[0][1])] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.ORDINAL_TENS.get(self.integers_to_read[0][1], "") + return wrd if self.order_of_last_zero_digit == 0: # number like xyz, read ordinal xyz and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") if not self.integers_to_read[0][2] == "0": - oku += self.ORDINAL_ONES[int(self.integers_to_read[0][2])] - return oku + wrd += self.ORDINAL_ONES.get(self.integers_to_read[0][2], "") + return wrd if self.total_triplets_to_read >= 2: if self.total_digits_outside_triplets == 2: if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x0 and all 0s, read ordinal x0 0..0 and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2: # number like xy and all 0s, read ordinal xy 0..0 and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - if not self.integers_to_read[0][1] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] - oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "") + wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 2: # number like xy and others, read cardinal xy n..n and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - if not self.integers_to_read[0][1] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] - - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] if self.total_digits_outside_triplets == 1: if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x and all 0s, read ordinal x 0..0 and return if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"): - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "") + wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 1: # number like x and others, read cardinal x n..n and return if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"): - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] if self.total_digits_outside_triplets == 0: if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x00 and all 0s, read ordinal x00 0..0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2: # number like xy0 and all 0s, read ordinal xy0 0..0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 3: # number like xyz and all 0s, read ordinal xyz 0..0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - if not self.integers_to_read[0][2] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] - oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "") + wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 3: # number like xyz and all others, read cardinal xyz n..n - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - if not self.integers_to_read[0][2] == "0": - if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][2] == "1"): - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][2] == "1"): + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] for i in list(range(self.total_triplets_to_read - 1, 0, -1)): - okunan_grup_sirasi = self.total_triplets_to_read - i + reading_triplet_order = self.total_triplets_to_read - i if self.total_digits_outside_triplets == 0: - son_okunan_basamak_sirasi = okunan_grup_sirasi * 3 + last_read_digit_order = reading_triplet_order * 3 else: - son_okunan_basamak_sirasi = (okunan_grup_sirasi - 1) * 3 + self.total_digits_outside_triplets + last_read_digit_order = (reading_triplet_order - 1) * 3 + self.total_digits_outside_triplets - if not self.integers_to_read[0][son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 3] == "000": - if not self.integers_to_read[0][son_okunan_basamak_sirasi] == "0": - if not self.integers_to_read[0][son_okunan_basamak_sirasi] == "1": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi])] + if not self.integers_to_read[0][last_read_digit_order: last_read_digit_order + 3] == "000": + if not self.integers_to_read[0][last_read_digit_order] == "0": + if not self.integers_to_read[0][last_read_digit_order] == "1": + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][last_read_digit_order], "") if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( - son_okunan_basamak_sirasi) - 1: + last_read_digit_order) - 1: if i == 1: - oku += self.ORDINAL_HUNDREDS[0] - return oku + wrd += self.ORDINAL_HUNDRED[0] + return wrd elif i > 1: - oku += self.CARDINAL_HUNDREDS[0] - oku += self.ORDINAL_TRIPLETS[i - 1] - return oku + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.ORDINAL_TRIPLETS[i - 1] + return wrd else: - oku += self.CARDINAL_HUNDREDS[0] + wrd += self.CARDINAL_HUNDRED[0] - if not self.integers_to_read[0][son_okunan_basamak_sirasi + 1] == "0": + if not self.integers_to_read[0][last_read_digit_order + 1] == "0": if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( - son_okunan_basamak_sirasi) - 2: + last_read_digit_order) - 2: if i == 1: - oku += self.ORDINAL_TENS[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] - return oku + wrd += self.ORDINAL_TENS.get( + self.integers_to_read[0][last_read_digit_order + 1], "") + return wrd elif i > 1: - oku += self.CARDINAL_TEN[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] - oku += self.ORDINAL_TRIPLETS[i - 1] - return oku + wrd += self.CARDINAL_TENS.get( + self.integers_to_read[0][last_read_digit_order + 1], "") + wrd += self.ORDINAL_TRIPLETS[i - 1] + return wrd else: - oku += self.CARDINAL_TEN[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][last_read_digit_order + 1], + "") - if not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "0": + if not self.integers_to_read[0][last_read_digit_order + 2] == "0": if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( - son_okunan_basamak_sirasi) - 3: + last_read_digit_order) - 3: if i == 1: - oku += self.ORDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - return oku + wrd += self.ORDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + return wrd if i == 2: if not self.integers_to_read[0][ - son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - elif not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "1": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - oku += self.ORDINAL_TRIPLETS[i - 1] - return oku + last_read_digit_order: last_read_digit_order + 2] == "00": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + elif not self.integers_to_read[0][last_read_digit_order + 2] == "1": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + wrd += self.ORDINAL_TRIPLETS[i - 1] + return wrd if i > 2: - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - oku += self.ORDINAL_TRIPLETS[i - 1] - return oku + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + wrd += self.ORDINAL_TRIPLETS[i - 1] + return wrd else: if not self.integers_to_read[0][ - son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + last_read_digit_order: last_read_digit_order + 2] == "00": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") else: if not self.integers_to_read[0][ - son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - elif not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "1": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + last_read_digit_order: last_read_digit_order + 2] == "00": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + elif not self.integers_to_read[0][last_read_digit_order + 2] == "1": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") - oku += self.CARDINAL_TRIPLETS[i - 1] + wrd += self.CARDINAL_TRIPLETS[i - 1] - return oku + return wrd def to_ordinal_num(self, value): - oku = "" + wrd = "" isordinal = self.verify_ordinal(value) if isordinal: self.splitnum(value) - oku = self.integers_to_read[0] + self.ORDINAL_SIGN[0] + wrd = self.integers_to_read[0] + self.ORDINAL_SIGN[0] - return oku + return wrd # def inflect(self, value, text): diff --git a/tests/test_tr.py b/tests/test_tr.py index 46210b6..4cc9d4d 100644 --- a/tests/test_tr.py +++ b/tests/test_tr.py @@ -34,10 +34,18 @@ class Num2WordsTRTest(TestCase): 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(111, True, "tr"), u"yüzonbirinci") self.assertEqual(num2words(1000, True, "tr"), u"bininci") self.assertEqual(num2words(1001, True, "tr"), u"binbirinci") + self.assertEqual(num2words(1010, True, "tr"), u"binonuncu") + self.assertEqual(num2words(1011, True, "tr"), u"binonbirinci") + self.assertEqual(num2words(1100, True, "tr"), u"binyüzüncü") + self.assertEqual(num2words(1110, True, "tr"), u"binyüzonuncu") + self.assertEqual(num2words(2341, True, "tr"), u"ikibinüçyüzkırkbirinci") self.assertEqual(num2words(10000, True, "tr"), u"onbininci") + self.assertEqual(num2words(10010, True, "tr"), u"onbinonuncu") self.assertEqual(num2words(10100, True, "tr"), u"onbinyüzüncü") + self.assertEqual(num2words(10110, True, "tr"), u"onbinyüzonuncu") 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") @@ -70,10 +78,18 @@ class Num2WordsTRTest(TestCase): 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(111, False, "tr"), u"yüzonbir") self.assertEqual(num2words(1000, False, "tr"), u"bin") self.assertEqual(num2words(1001, False, "tr"), u"binbir") + self.assertEqual(num2words(1010, False, "tr"), u"binon") + self.assertEqual(num2words(1011, False, "tr"), u"binonbir") + self.assertEqual(num2words(1100, False, "tr"), u"binyüz") + self.assertEqual(num2words(1110, False, "tr"), u"binyüzon") + self.assertEqual(num2words(2341, False, "tr"), u"ikibinüçyüzkırkbir") self.assertEqual(num2words(10000, False, "tr"), u"onbin") + self.assertEqual(num2words(10010, False, "tr"), u"onbinon") self.assertEqual(num2words(10100, False, "tr"), u"onbinyüz") + self.assertEqual(num2words(10110, False, "tr"), u"onbinyüzon") 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")