-
-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathtr-tr.go
100 lines (83 loc) · 2.41 KB
/
tr-tr.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package ntw
import (
"fmt"
"strings"
)
func init() {
// register the language
Languages["tr-tr"] = Language{
Name: "Turkish",
Aliases: []string{"tr", "tr-tr", "tr_TR", "turkish"},
Flag: "🇹🇷",
IntegerToWords: IntegerToTrTr,
}
}
// IntegerToTrTr converts an integer to Turkish words
func IntegerToTrTr(input int) string {
var turkishMegs = []string{"", "bin", "milyon", "milyar", "trilyon", "katrilyon", "kentilyon", "sekstilyon", "septilyon", "oktilyon", "nonilyon", "desilyon", "andesilyon", "dodesilyon", "tredesilyon", "katordesilyon"}
var turkishUnits = []string{"", "bir", "iki", "üç", "dört", "beş", "altı", "yedi", "sekiz", "dokuz"}
var turkishTens = []string{"", "on", "yirmi", "otuz", "kırk", "elli", "altmış", "yetmiş", "seksen", "doksan"}
var turkishTeens = []string{"on", "on bir", "on iki", "on üç", "on dört", "on beş", "on altı", "on yedi", "on sekiz", "on dokuz"}
//log.Printf("Input: %d\n", input)
words := []string{}
if input < 0 {
words = append(words, "eksi")
input *= -1
}
// split integer in triplets
triplets := integerToTriplets(input)
//log.Printf("Triplets: %v\n", triplets)
// zero is a special case
if len(triplets) == 0 {
return "sıfır"
}
// iterate over triplets
for idx := len(triplets) - 1; idx >= 0; idx-- {
triplet := triplets[idx]
//log.Printf("Triplet: %d (idx=%d)\n", triplet, idx)
// nothing todo for empty triplet
if triplet == 0 {
continue
}
// three-digits
hundreds := triplet / 100 % 10
tens := triplet / 10 % 10
units := triplet % 10
//log.Printf("Input: %d, Idx: %d, Hundreds:%d, Tens:%d, Units:%d\n", input, idx, hundreds, tens, units)
switch hundreds {
case 0:
break
case 1:
words = append(words, "yüz")
default:
words = append(words, turkishUnits[hundreds], "yüz")
}
if tens == 0 && units == 0 {
goto tripletEnd
}
switch tens {
case 0:
if !(units == 1 && idx == 1) {
words = append(words, turkishUnits[units])
}
case 1:
words = append(words, turkishTeens[units])
break
default:
if units > 0 {
word := fmt.Sprintf("%s %s", turkishTens[tens], turkishUnits[units])
words = append(words, word)
} else {
words = append(words, turkishTens[tens])
}
break
}
tripletEnd:
// mega
if mega := turkishMegs[idx]; mega != "" {
words = append(words, mega)
}
}
//log.Printf("Words length: %d\n", len(words))
return strings.Join(words, " ")
}