-
-
Notifications
You must be signed in to change notification settings - Fork 25
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #30 from mablo/master
Polish language
- Loading branch information
Showing
2 changed files
with
218 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
package ntw | ||
|
||
import ( | ||
"fmt" | ||
"strings" | ||
) | ||
|
||
func init() { | ||
// register the language | ||
Languages["pl-pl"] = Language{ | ||
Name: "Polish", | ||
Aliases: []string{"pl", "pl-pl", "pl_PL", "polish"}, | ||
Flag: "🇵🇱", | ||
|
||
IntegerToWords: IntegerToPlPl, | ||
} | ||
} | ||
|
||
func IntegerToPlPl(input int) string { | ||
var polishMegas = [][]string{ | ||
{"", "", ""}, | ||
{"tysiąc", "tysiące", "tysięcy"}, | ||
{"milion", "miliony", "milionów"}, | ||
{"miliard", "miliardy", "miliardów"}, | ||
{"bilion", "biliony", "bilionów"}, | ||
{"biliard", "biliardy", "biliardów"}, | ||
{"trylion", "tryliony", "trylionów"}, | ||
{"tryliard", "tryliardy", "tryliardów"}, | ||
{"kwadrylion", "kwadryliony", "kwadrylionów"}, | ||
{"kwintylion", "kwintyliony", "kwintylionów"}, | ||
{"sekstylion", "sekstyliony", "sekstylionów"}, | ||
{"septylion", "septyliony", "septylionów"}, | ||
{"oktylion", "oktyliony", "oktylionów"}, | ||
{"nonylion", "nonyliony", "nonylionów"}, | ||
{"decylion", "decyliony", "decylionów"}} | ||
var polishUnits = []string{"", "jeden", "dwa", "trzy", "cztery", "pięć", "sześć", "siedem", "osiem", "dziewięć"} | ||
var polishTens = []string{"", "dziesięć", "dwadzieścia", "trzydzieści", "czterdzieści", "pięćdziesiąt", "sześćdziesiąt", "siedemdziesiąt", "osiemdziesiąt", "dziewięćdziesiąt"} | ||
var polishTeens = []string{"dziesięć", "jedenaście", "dwanaście", "trzynaście", "czternaście", "piętnaście", "szesnaście", "siedemnaście", "osiemnaście", "dziewiętnaście"} | ||
var polishHundreds = []string{"", "sto", "dwieście", "trzysta", "czterysta", "pięćset", "sześćset", "siedemset", "osiemset", "dziewięćset"} | ||
|
||
//log.Printf("Input: %d\n", input) | ||
words := []string{} | ||
|
||
if input < 0 { | ||
words = append(words, "minus") | ||
input *= -1 | ||
} | ||
|
||
// split integer in triplets | ||
triplets := integerToTriplets(input) | ||
|
||
// zero is a special case | ||
if len(triplets) == 0 { | ||
return "zero" | ||
} | ||
|
||
// iterate over triplets | ||
for idx := len(triplets) - 1; idx >= 0; idx-- { | ||
triplet := triplets[idx] | ||
//log.Printf("Triplet: %d (idx=%d)\n", triplet, idx) | ||
|
||
if triplet == 0 { | ||
continue | ||
} | ||
|
||
// three-digits | ||
hundreds := triplet / 100 % 10 | ||
tens := triplet / 10 % 10 | ||
units := triplet % 10 | ||
|
||
if hundreds > 0 { | ||
words = append(words, polishHundreds[hundreds]) | ||
} | ||
|
||
if tens == 0 && units == 0 { | ||
goto tripletEnd | ||
} | ||
|
||
switch tens { | ||
case 0: | ||
words = append(words, polishUnits[units]) | ||
case 1: | ||
words = append(words, polishTeens[units]) | ||
break | ||
default: | ||
if units > 0 { | ||
word := fmt.Sprintf("%s %s", polishTens[tens], polishUnits[units]) | ||
words = append(words, word) | ||
} else { | ||
words = append(words, polishTens[tens]) | ||
} | ||
break | ||
} | ||
|
||
tripletEnd: | ||
if triplet == 1 { | ||
words = append(words, polishMegas[idx][0]) | ||
continue | ||
} | ||
|
||
megaIndex := 2 | ||
if units >= 2 && units <= 4 { | ||
megaIndex = 1 | ||
} | ||
|
||
if mega := polishMegas[idx][megaIndex]; mega != "" { | ||
words = append(words, mega) | ||
} | ||
} | ||
|
||
return strings.TrimSpace(strings.Join(words, " ")) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
package ntw | ||
|
||
import ( | ||
"testing" | ||
|
||
. "github.com/smartystreets/goconvey/convey" | ||
) | ||
|
||
func TestIntegerToPlPl(t *testing.T) { | ||
Convey("Testing IntegerToPlPl()", t, FailureContinues, func() { | ||
testing := map[int]string{ | ||
0: "zero", | ||
1: "jeden", | ||
2: "dwa", | ||
3: "trzy", | ||
4: "cztery", | ||
5: "pięć", | ||
6: "sześć", | ||
7: "siedem", | ||
8: "osiem", | ||
9: "dziewięć", | ||
10: "dziesięć", | ||
11: "jedenaście", | ||
12: "dwanaście", | ||
13: "trzynaście", | ||
14: "czternaście", | ||
15: "piętnaście", | ||
16: "szesnaście", | ||
17: "siedemnaście", | ||
18: "osiemnaście", | ||
19: "dziewiętnaście", | ||
20: "dwadzieścia", | ||
21: "dwadzieścia jeden", | ||
22: "dwadzieścia dwa", | ||
23: "dwadzieścia trzy", | ||
24: "dwadzieścia cztery", | ||
25: "dwadzieścia pięć", | ||
26: "dwadzieścia sześć", | ||
27: "dwadzieścia siedem", | ||
28: "dwadzieścia osiem", | ||
29: "dwadzieścia dziewięć", | ||
30: "trzydzieści", | ||
31: "trzydzieści jeden", | ||
32: "trzydzieści dwa", | ||
39: "trzydzieści dziewięć", | ||
42: "czterdzieści dwa", | ||
80: "osiemdziesiąt", | ||
90: "dziewięćdziesiąt", | ||
99: "dziewięćdziesiąt dziewięć", | ||
100: "sto", | ||
101: "sto jeden", | ||
111: "sto jedenaście", | ||
120: "sto dwadzieścia", | ||
121: "sto dwadzieścia jeden", | ||
200: "dwieście", | ||
300: "trzysta", | ||
400: "czterysta", | ||
500: "pięćset", | ||
600: "sześćset", | ||
700: "siedemset", | ||
800: "osiemset", | ||
900: "dziewięćset", | ||
909: "dziewięćset dziewięć", | ||
919: "dziewięćset dziewiętnaście", | ||
990: "dziewięćset dziewięćdziesiąt", | ||
999: "dziewięćset dziewięćdziesiąt dziewięć", | ||
1000: "jeden tysiąc", | ||
1337: "jeden tysiąc trzysta trzydzieści siedem", | ||
2000: "dwa tysiące", | ||
4000: "cztery tysiące", | ||
5000: "pięć tysięcy", | ||
11000: "jedenaście tysięcy", | ||
21000: "dwadzieścia jeden tysięcy", | ||
28000: "dwadzieścia osiem tysięcy", | ||
31000: "trzydzieści jeden tysięcy", | ||
32000: "trzydzieści dwa tysiące", | ||
39000: "trzydzieści dziewięć tysięcy", | ||
42000: "czterdzieści dwa tysiące", | ||
999000: "dziewięćset dziewięćdziesiąt dziewięć tysięcy", | ||
999999: "dziewięćset dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć", | ||
1000000: "jeden milion", | ||
2000000: "dwa miliony", | ||
4000000: "cztery miliony", | ||
5000000: "pięć milionów", | ||
100100100: "sto milionów sto tysięcy sto", | ||
500500500: "pięćset milionów pięćset tysięcy pięćset", | ||
606606606: "sześćset sześć milionów sześćset sześć tysięcy sześćset sześć", | ||
999000000: "dziewięćset dziewięćdziesiąt dziewięć milionów", | ||
999000999: "dziewięćset dziewięćdziesiąt dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć", | ||
999999000: "dziewięćset dziewięćdziesiąt dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć tysięcy", | ||
999999999: "dziewięćset dziewięćdziesiąt dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć", | ||
1174315110: "jeden miliard sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziesięć", | ||
1174315119: "jeden miliard sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziewiętnaście", | ||
15174315119: "piętnaście miliardów sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziewiętnaście", | ||
35174315119: "trzydzieści pięć miliardów sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziewiętnaście", | ||
935174315119: "dziewięćset trzydzieści pięć miliardów sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziewiętnaście", | ||
2935174315119: "dwa biliony dziewięćset trzydzieści pięć miliardów sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziewiętnaście", | ||
} | ||
for input, expectedOutput := range testing { | ||
So(IntegerToPlPl(input), ShouldEqual, expectedOutput) | ||
} | ||
|
||
// testing negative values | ||
So(IntegerToPlPl(-1), ShouldEqual, "minus jeden") | ||
}) | ||
} |