Skip to content

Commit

Permalink
Merge pull request #19 from ukarim/add-kazakh
Browse files Browse the repository at this point in the history
kazakh support
  • Loading branch information
dorians committed May 14, 2018
2 parents 9b22ed3 + 1118063 commit 4a8f3f7
Show file tree
Hide file tree
Showing 9 changed files with 220 additions and 4 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ Supported languages
* German
* Brazilian Portuguese
* Latvian
* Kazakh

Usage
-----
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import static pl.allegro.finance.tradukisto.internal.Container.russianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.slovakContainer;
import static pl.allegro.finance.tradukisto.internal.Container.latvianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.kazakhContainer;

import java.math.BigDecimal;

Expand All @@ -23,7 +24,8 @@ public enum MoneyConverters {
CZECH_BANKING_MONEY_VALUE(czechContainer().getBankingMoneyConverter()),
ENGLISH_BANKING_MONEY_VALUE(englishContainer().getBankingMoneyConverter()),
SLOVAK_BANKING_MONEY_VALUE(slovakContainer().getBankingMoneyConverter()),
LATVIAN_BANKING_MONEY_VALUE(latvianContainer().getBankingMoneyConverter());
LATVIAN_BANKING_MONEY_VALUE(latvianContainer().getBankingMoneyConverter()),
KAZAKH_BANKING_MONEY_VALUE(kazakhContainer().getBankingMoneyConverter());

private final BigDecimalToStringConverter converter;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import static pl.allegro.finance.tradukisto.internal.Container.russianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.slovakContainer;
import static pl.allegro.finance.tradukisto.internal.Container.latvianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.kazakhContainer;

import pl.allegro.finance.tradukisto.internal.IntegerToStringConverter;

Expand All @@ -21,7 +22,8 @@ public enum ValueConverters {
CZECH_INTEGER(czechContainer().getNumbersConverter()),
ENGLISH_INTEGER(englishContainer().getNumbersConverter()),
SLOVAK_INTEGER(slovakContainer().getNumbersConverter()),
LATVIAN_INTEGER(latvianContainer().getNumbersConverter());
LATVIAN_INTEGER(latvianContainer().getNumbersConverter()),
KAZAKH_INTEGER(kazakhContainer().getNumbersConverter());

private final IntegerToStringConverter converter;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import pl.allegro.finance.tradukisto.internal.languages.german.GermanIntegerToWordsConverter;
import pl.allegro.finance.tradukisto.internal.languages.german.GermanThousandToWordsConverter;
import pl.allegro.finance.tradukisto.internal.languages.german.GermanValues;
import pl.allegro.finance.tradukisto.internal.languages.kazakh.KazakhValues;
import pl.allegro.finance.tradukisto.internal.languages.latvian.LatvianValues;
import pl.allegro.finance.tradukisto.internal.languages.polish.PolishValues;
import pl.allegro.finance.tradukisto.internal.languages.portuguese.BrazilianPortugueseValues;
Expand Down Expand Up @@ -53,7 +54,7 @@ public static Container slovakContainer() {

IntegerToStringConverter integerConverter = new CzechIntegerToWordsConverter(containerForBigNumbers.getNumbersConverter(),
containerForSmallNumbers.getNumbersConverter(), slovakValues.exceptions());
BigDecimalToStringConverter bigDecimalBankingMoneyValueConverter = new BigDecimalToBankingMoneyConverter(integerConverter,
BigDecimalToStringConverter bigDecimalBankingMoneyValueConverter = new BigDecimalToBankingMoneyConverter(integerConverter,
slovakValues.currency());

return new Container(integerConverter, bigDecimalBankingMoneyValueConverter);
Expand Down Expand Up @@ -100,6 +101,11 @@ public static Container brazilianPortugueseContainer() {
return new Container(converter, bigDecimalBankingMoneyValueConverter);
}

public static Container kazakhContainer() {
KazakhValues kazakhValues = new KazakhValues();
return new Container(kazakhValues);
}

private final IntegerToStringConverter integerConverter;
private final BigDecimalToStringConverter bigDecimalConverter;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package pl.allegro.finance.tradukisto.internal.languages.kazakh;

import pl.allegro.finance.tradukisto.internal.languages.GenderType;
import pl.allegro.finance.tradukisto.internal.languages.PluralForms;

public class KazakhPluralForms implements PluralForms {

private String form;

public KazakhPluralForms(String form) {
this.form = form;
}

@Override
public String formFor(Integer value) {
return form;
}

@Override
public GenderType genderType() {
return GenderType.NON_APPLICABLE;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package pl.allegro.finance.tradukisto.internal.languages.kazakh;

import pl.allegro.finance.tradukisto.internal.BaseValues;
import pl.allegro.finance.tradukisto.internal.languages.GenderForms;
import pl.allegro.finance.tradukisto.internal.languages.PluralForms;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

import static pl.allegro.finance.tradukisto.internal.support.BaseNumbersBuilder.baseNumbersBuilder;

public class KazakhValues implements BaseValues {

@Override
public Map<Integer, GenderForms> baseNumbers() {
return baseNumbersBuilder()
.put(0, "нөл")
.put(1, "бір")
.put(2, "екі")
.put(3, "үш")
.put(4, "төрт")
.put(5, "бес")
.put(6, "алты")
.put(7, "жеті")
.put(8, "сегіз")
.put(9, "тоғыз")
.put(10, "он")
.put(11, "он бір")
.put(12, "он екі")
.put(13, "он үш")
.put(14, "он төрт")
.put(15, "он бес")
.put(16, "он алты")
.put(17, "он жеті")
.put(18, "он сегіз")
.put(19, "он тоғыз")
.put(20, "жиырма")
.put(30, "отыз")
.put(40, "қырық")
.put(50, "елу")
.put(60, "алпыс")
.put(70, "жетпіс")
.put(80, "сексен")
.put(90, "тоқсан")
.put(100, "жүз")
.put(200, "екі жүз")
.put(300, "үш жүз")
.put(400, "төрт жүз")
.put(500, "бес жүз")
.put(600, "алты жүз")
.put(700, "жеті жүз")
.put(800, "сегіз жүз")
.put(900, "тоғыз жүз")
.build();
}

@Override
public List<PluralForms> pluralForms() {
return Arrays.asList(
new KazakhPluralForms(""),
new KazakhPluralForms("мың"),
new KazakhPluralForms("миллион"),
new KazakhPluralForms("миллиард")
);
}

@Override
public String currency() {
return "KZT";
}

@Override
public char twoDigitsNumberSeparator() {
return ' ';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import spock.lang.Specification
import static pl.allegro.finance.tradukisto.MoneyConverters.CZECH_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.ENGLISH_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.GERMAN_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.KAZAKH_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.LATVIAN_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.POLISH_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.BRAZILIAN_PORTUGUESE_BANKING_MONEY_VALUE
Expand Down Expand Up @@ -54,6 +55,11 @@ class MoneyConvertersTest extends Specification {
ENGLISH_BANKING_MONEY_VALUE.asWords(1_234.56) == "one thousand two hundred thirty-four £ 56/100"
}

def "should convert money in Kazakh"() {
expect:
KAZAKH_BANKING_MONEY_VALUE.asWords(1_234.56) == "бір мың екі жүз отыз төрт KZT 56/100"
}

def "should throw exception when null given"() {
when:
POLISH_BANKING_MONEY_VALUE.asWords(null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import static pl.allegro.finance.tradukisto.ValueConverters.CZECH_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.ENGLISH_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.GERMAN_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.BRAZILIAN_PORTUGUESE_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.KAZAKH_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.POLISH_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.RUSSIAN_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.LATVIAN_INTEGER
Expand All @@ -16,7 +17,7 @@ class ValueConvertersTest extends Specification {
def "should convert numbers in Brazilian Portuguese"() {
expect:
BRAZILIAN_PORTUGUESE_INTEGER.asWords(1_234) == "mil duzentos e trinta e quatro"
}
}

def "should convert numbers in German"() {
expect:
Expand Down Expand Up @@ -48,6 +49,11 @@ class ValueConvertersTest extends Specification {
LATVIAN_INTEGER.asWords(1_234) == "viens tūkstotis divi simti trīsdesmit četri"
}

def "should convert numbers in Kazakh"() {
expect:
KAZAKH_INTEGER.asWords(1_234) == "бір мың екі жүз отыз төрт"
}

def "should throw exception when null given"() {
when:
POLISH_INTEGER.asWords(null)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package pl.allegro.finance.tradukisto.internal.languages.kazakh

import spock.lang.Specification
import spock.lang.Unroll

import static pl.allegro.finance.tradukisto.internal.Container.kazakhContainer

class KazakhValuesTest extends Specification {

static converter = kazakhContainer().getNumbersConverter()

@Unroll
def "should convert #value to '#words' in Kazakh"() {
expect:
converter.asWords(value) == words

where:
value | words

0 | "нөл"
1 | "бір"
2 | "екі"
3 | "үш"
4 | "төрт"
5 | "бес"
6 | "алты"
7 | "жеті"
8 | "сегіз"
9 | "тоғыз"
10 | "он"

11 | "он бір"
12 | "он екі"
13 | "он үш"
14 | "он төрт"
15 | "он бес"
16 | "он алты"
17 | "он жеті"
18 | "он сегіз"
19 | "он тоғыз"

20 | "жиырма"
30 | "отыз"
40 | "қырық"
50 | "елу"
60 | "алпыс"
70 | "жетпіс"
80 | "сексен"
90 | "тоқсан"
100 | "жүз"

200 | "екі жүз"
300 | "үш жүз"
400 | "төрт жүз"
500 | "бес жүз"
600 | "алты жүз"
700 | "жеті жүз"
800 | "сегіз жүз"
900 | "тоғыз жүз"
1000 | "бір мың"

1_000_000 | "бір миллион"
1_000_000_000 | "бір миллиард"

21 | "жиырма бір"
34 | "отыз төрт"
55 | "елу бес"
89 | "сексен тоғыз"
144 | "жүз қырық төрт"
233 | "екі жүз отыз үш"
377 | "үш жүз жетпіс жеті"
610 | "алты жүз он"
987 | "тоғыз жүз сексен жеті"
1_597 | "бір мың бес жүз тоқсан жеті"
2_584 | "екі мың бес жүз сексен төрт"
4_181 | "төрт мың жүз сексен бір"
6_765 | "алты мың жеті жүз алпыс бес"
10_946 | "он мың тоғыз жүз қырық алты"
17_711 | "он жеті мың жеті жүз он бір"
28_657 | "жиырма сегіз мың алты жүз елу жеті"
46_368 | "қырық алты мың үш жүз алпыс сегіз"
75_025 | "жетпіс бес мың жиырма бес"
121_393 | "жүз жиырма бір мың үш жүз тоқсан үш"
196_418 | "жүз тоқсан алты мың төрт жүз он сегіз"
317_811 | "үш жүз он жеті мың сегіз жүз он бір"
514_229 | "бес жүз он төрт мың екі жүз жиырма тоғыз"
832_040 | "сегіз жүз отыз екі мың қырық"
1_346_269 | "бір миллион үш жүз қырық алты мың екі жүз алпыс тоғыз"
2_178_309 | "екі миллион жүз жетпіс сегіз мың үш жүз тоғыз"

1_836_311_903 | "бір миллиард сегіз жүз отыз алты миллион үш жүз он бір мың тоғыз жүз үш"
}
}

0 comments on commit 4a8f3f7

Please sign in to comment.