lang_KZ.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from .base import Num2Word_Base
  4. from .utils import get_digits, splitbyx
  5. ZERO = 'нөл'
  6. ONES = {
  7. 1: 'бір',
  8. 2: 'екі',
  9. 3: 'үш',
  10. 4: 'төрт',
  11. 5: 'бес',
  12. 6: 'алты',
  13. 7: 'жеті',
  14. 8: 'сегіз',
  15. 9: 'тоғыз',
  16. }
  17. TEN = 'он'
  18. TWENTIES = {
  19. 2: 'жиырма',
  20. 3: 'отыз',
  21. 4: 'қырық',
  22. 5: 'елу',
  23. 6: 'алпыс',
  24. 7: 'жетпіс',
  25. 8: 'сексен',
  26. 9: 'тоқсан',
  27. }
  28. HUNDRED = 'жүз'
  29. THOUSANDS = {
  30. 1: 'мың',
  31. 2: 'миллион',
  32. 3: 'миллиард',
  33. 4: 'триллион',
  34. 5: 'квадриллион',
  35. 6: 'квинтиллион',
  36. 7: 'секстиллион',
  37. 8: 'септиллион',
  38. 9: 'октиллион',
  39. 10: 'нониллион',
  40. }
  41. class Num2Word_KZ(Num2Word_Base):
  42. CURRENCY_FORMS = {
  43. 'USD': ('доллар', 'цент'),
  44. 'KZT': ('теңге', 'тиын'),
  45. }
  46. def setup(self):
  47. self.negword = "минус"
  48. self.pointword = "бүтін"
  49. def to_cardinal(self, number):
  50. n = str(number).replace(',', '.')
  51. if '.' in n:
  52. left, right = n.split('.')
  53. leading_zero_count = len(right) - len(right.lstrip('0'))
  54. return u'%s %s %s' % (
  55. self._int2word(int(left)),
  56. self.pointword,
  57. (ZERO + ' ') * leading_zero_count + self._int2word(int(right))
  58. )
  59. else:
  60. return self._int2word(int(n))
  61. def pluralize(self, n, form):
  62. return form
  63. def _cents_verbose(self, number, currency):
  64. return self._int2word(number, currency == 'KZT')
  65. def _int2word(self, n, feminine=False):
  66. if n < 0:
  67. return ' '.join([self.negword, self._int2word(abs(n))])
  68. if n == 0:
  69. return ZERO
  70. words = []
  71. chunks = list(splitbyx(str(n), 3))
  72. i = len(chunks)
  73. for x in chunks:
  74. i -= 1
  75. if x == 0:
  76. continue
  77. n1, n2, n3 = get_digits(x)
  78. if n3 > 0:
  79. if n3 > 1:
  80. words.append(ONES[n3])
  81. words.append(HUNDRED)
  82. if n2 == 1:
  83. words.append(TEN)
  84. elif n2 > 1:
  85. words.append(TWENTIES[n2])
  86. if n1 > 0:
  87. words.append(ONES[n1])
  88. if i > 0:
  89. words.append(THOUSANDS[i])
  90. return ' '.join(words)
  91. def to_ordinal(self, number):
  92. # TODO: Implement to_ordinal
  93. raise NotImplementedError()