Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Added kyrgyz language #166

Merged
merged 4 commits into from
Jan 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ With Tradukisto, you can now transform numbers into their word equivalents easy
* 🇮🇹 Italian
* 🇯🇵 Japanese (KANJI)
* 🇰🇿 Kazakh
* 🇰🇬 Kyrgyz
* 🇱🇻 Latvian
* 🇵🇱 Polish
* 🇷🇺 Russian
Expand Down
25 changes: 2 additions & 23 deletions src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,7 @@
import java.math.BigDecimal;
import java.util.Objects;

import static pl.allegro.finance.tradukisto.internal.Container.americanEnglishContainer;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you please revert old imports?

import static pl.allegro.finance.tradukisto.internal.Container.brazilianPortugueseContainer;
import static pl.allegro.finance.tradukisto.internal.Container.croatianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.czechContainer;
import static pl.allegro.finance.tradukisto.internal.Container.englishContainer;
import static pl.allegro.finance.tradukisto.internal.Container.frenchContainer;
import static pl.allegro.finance.tradukisto.internal.Container.germanContainer;
import static pl.allegro.finance.tradukisto.internal.Container.italianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.japaneseKanjiContainer;
import static pl.allegro.finance.tradukisto.internal.Container.kazakhContainer;
import static pl.allegro.finance.tradukisto.internal.Container.latvianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.polishContainer;
import static pl.allegro.finance.tradukisto.internal.Container.russianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.serbianCyrillicContainer;
import static pl.allegro.finance.tradukisto.internal.Container.serbianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.slovakContainer;
import static pl.allegro.finance.tradukisto.internal.Container.sloveneContainer;
import static pl.allegro.finance.tradukisto.internal.Container.spanishContainer;
import static pl.allegro.finance.tradukisto.internal.Container.swedishContainer;
import static pl.allegro.finance.tradukisto.internal.Container.turkishContainer;
import static pl.allegro.finance.tradukisto.internal.Container.ukrainianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.bulgarianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.dutchContainer;
import static pl.allegro.finance.tradukisto.internal.Container.*;

public enum MoneyConverters {

Expand All @@ -44,6 +22,7 @@ public enum MoneyConverters {
SLOVAK_BANKING_MONEY_VALUE(slovakContainer().getBankingMoneyConverter()),
LATVIAN_BANKING_MONEY_VALUE(latvianContainer().getBankingMoneyConverter()),
KAZAKH_BANKING_MONEY_VALUE(kazakhContainer().getBankingMoneyConverter()),
KYRGYZ_BANKING_MONEY_VALUE(kyrgyzContainer().getBankingMoneyConverter()),
UKRAINIAN_BANKING_MONEY_VALUE(ukrainianContainer().getBankingMoneyConverter()),
TURKISH_BANKING_MONEY_VALUE(turkishContainer().getBankingMoneyConverter()),
SERBIAN_BANKING_MONEY_VALUE(serbianContainer().getBankingMoneyConverter()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public enum ValueConverters {
SLOVAK_INTEGER(Container.slovakContainer().getIntegerConverter(), "sk"),
LATVIAN_INTEGER(Container.latvianContainer().getIntegerConverter(), "lv"),
KAZAKH_INTEGER(Container.kazakhContainer().getIntegerConverter(), "kk"),
KYRGYZ_INTEGER(Container.kyrgyzContainer().getIntegerConverter(), "kg"),
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be "ky", because of locale ky-KG https://www.localeplanet.com/icu/ky-KG/index.html

UKRAINIAN_INTEGER(Container.ukrainianContainer().getIntegerConverter(), "uk"),
SERBIAN_INTEGER(Container.serbianContainer().getIntegerConverter(), Arrays.asList("sr", getLanguageCodeFor("sr", "Latn"))),
SERBIAN_CYRILLIC_INTEGER(Container.serbianCyrillicContainer().getIntegerConverter(), getLanguageCodeFor("sr", "Cyrl")),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import pl.allegro.finance.tradukisto.internal.languages.japanese.JapaneseThousandToWordsConverter;
import pl.allegro.finance.tradukisto.internal.languages.japanese.JapaneseValues;
import pl.allegro.finance.tradukisto.internal.languages.kazakh.KazakhValues;
import pl.allegro.finance.tradukisto.internal.languages.kyrgyz.KyrgyzValues;
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 @@ -270,6 +271,11 @@ public static Container kazakhContainer() {
return new Container(kazakhValues);
}

public static Container kyrgyzContainer() {
KyrgyzValues kyrgyzValues = new KyrgyzValues();
return new Container(kyrgyzValues);
}

public static Container hindiContainer() {
HindiValues hindiValues = new HindiValues();

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

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

public class KyrgyzPluralForms implements PluralForms {

private String form;

public KyrgyzPluralForms(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.kyrgyz;

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 KyrgyzValues 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 KyrgyzPluralForms(""),
new KyrgyzPluralForms("миң"),
new KyrgyzPluralForms("миллион"),
new KyrgyzPluralForms("миллиард")
);
}

@Override
public String currency() {
return "сом";
}

@Override
public char twoDigitsNumberSeparator() {
return ' ';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import static pl.allegro.finance.tradukisto.MoneyConverters.HINDI_BANKING_MONEY_
import static pl.allegro.finance.tradukisto.MoneyConverters.ITALIAN_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.JAPANESE_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.KAZAKH_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.KYRGYZ_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.RUSSIAN_BANKING_MONEY_VALUE
Expand Down Expand Up @@ -47,6 +48,7 @@ class MoneyConvertersTest extends Specification {
"Italian" | ITALIAN_BANKING_MONEY_VALUE || "milleduecentotrentaquattro € 56/100"
"Japanese" | JAPANESE_BANKING_MONEY_VALUE || "千二百三十四 円 56/100"
"Kazakh" | KAZAKH_BANKING_MONEY_VALUE || "бір мың екі жүз отыз төрт KZT 56/100"
"Kyrgyz" | KYRGYZ_BANKING_MONEY_VALUE || "бир миң эки жүз отуз төрт сом 56/100"
"Latvian" | LATVIAN_BANKING_MONEY_VALUE || "viens tūkstotis divi simti trīsdesmit četri EUR 56/100"
"Polish" | POLISH_BANKING_MONEY_VALUE || "jeden tysiąc dwieście trzydzieści cztery PLN 56/100"
"Serbian Cyrillic" | SERBIAN_CYRILLIC_BANKING_MONEY_VALUE || "једна хиљада двеста тридесет четири РСД 56/100"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import static pl.allegro.finance.tradukisto.ValueConverters.HINDI_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.ITALIAN_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.JAPANESE_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.KAZAKH_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.KYRGYZ_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.LATVIAN_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.POLISH_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.RUSSIAN_INTEGER
Expand Down Expand Up @@ -47,6 +48,7 @@ class ValueConvertersTest extends Specification {
"Italian" | ITALIAN_INTEGER || "milleduecentotrentaquattro"
"Japanese" | JAPANESE_INTEGER || "千二百三十四"
"Kazakh" | KAZAKH_INTEGER || "бір мың екі жүз отыз төрт"
"Kyrgyz" | KYRGYZ_INTEGER || "бир миң эки жүз отуз төрт"
"Latvian" | LATVIAN_INTEGER || "viens tūkstotis divi simti trīsdesmit četri"
"Polish" | POLISH_INTEGER || "jeden tysiąc dwieście trzydzieści cztery"
"Serbian Cyrillic" | SERBIAN_CYRILLIC_INTEGER || "једна хиљада двеста тридесет четири"
Expand Down Expand Up @@ -91,6 +93,7 @@ class ValueConvertersTest extends Specification {
new Locale("de") || GERMAN_INTEGER
Locale.GERMANY || GERMAN_INTEGER
new Locale("kk") || KAZAKH_INTEGER
new Locale("kg") || KYRGYZ_INTEGER
new Locale("lv") || LATVIAN_INTEGER
new Locale("pl") || POLISH_INTEGER
new Locale("ru") || RUSSIAN_INTEGER
Expand Down Expand Up @@ -143,6 +146,7 @@ class ValueConvertersTest extends Specification {
"it" || ITALIAN_INTEGER
"de" || GERMAN_INTEGER
"kk" || KAZAKH_INTEGER
"kg" || KYRGYZ_INTEGER
"lv" || LATVIAN_INTEGER
"pl" || POLISH_INTEGER
"ru" || RUSSIAN_INTEGER
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package pl.allegro.finance.tradukisto.internal.languages.kyrgyz

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

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

class KyrgyzValuesTest extends Specification {

static intConverter = kyrgyzContainer().getIntegerConverter()
static longConverter = kyrgyzContainer().getLongConverter()

@Unroll
def "should convert #value to '#words' in Kazakh"() {
expect:
intConverter.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 | "бир миллиард"

25 | "жыйырма беш"
34 | "отуз төрт"
51 | "элүү бир"
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 | "бир миллиард сегиз жүз отуз алты миллион үч жүз он бир миң тогуз жүз үч"
}

@Ignore("Needs kyrgyz long converter and values for trillion, quadrillion, quintillion")
@Unroll
def "should convert long #value to '#words' in Kyrgyz"() {
expect:
longConverter.asWords(value) == words

where:
value | words
5_000_000_000 | ""

1_000_000_000_000 | ""
2_000_000_000_000 | ""
5_000_000_000_000 | ""

1_000_000_000_000_000 | ""
2_000_000_000_000_000 | ""
5_000_000_000_000_000 | ""

1_000_000_000_000_000_000 | ""
2_000_000_000_000_000_000 | ""
Long.MAX_VALUE | ""
}
}