diff --git a/README.md b/README.md index 4d12e662..f980e5d0 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ With Tradukisto, you can now transform numbers into their word equivalents easy * 🇮🇹 Italian * 🇯🇵 Japanese (KANJI) * 🇰🇿 Kazakh +* 🇰🇬 Kyrgyz * 🇱🇻 Latvian * 🇵🇱 Polish * 🇷🇺 Russian diff --git a/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java b/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java index c61a4edc..9ac3bc11 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java +++ b/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java @@ -6,29 +6,7 @@ import java.math.BigDecimal; import java.util.Objects; -import static pl.allegro.finance.tradukisto.internal.Container.americanEnglishContainer; -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 { @@ -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()), diff --git a/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java b/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java index 33846aaf..59b006c6 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java +++ b/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java @@ -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"), 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")), diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/Container.java b/src/main/java/pl/allegro/finance/tradukisto/internal/Container.java index d82acd7a..7ead1200 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/internal/Container.java +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/Container.java @@ -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; @@ -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(); diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/kyrgyz/KyrgyzPluralForms.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/kyrgyz/KyrgyzPluralForms.java new file mode 100644 index 00000000..3f2f7fc0 --- /dev/null +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/kyrgyz/KyrgyzPluralForms.java @@ -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; + } +} diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/kyrgyz/KyrgyzValues.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/kyrgyz/KyrgyzValues.java new file mode 100644 index 00000000..2f5ca4ff --- /dev/null +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/kyrgyz/KyrgyzValues.java @@ -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 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() { + return Arrays.asList( + new KyrgyzPluralForms(""), + new KyrgyzPluralForms("миң"), + new KyrgyzPluralForms("миллион"), + new KyrgyzPluralForms("миллиард") + ); + } + + @Override + public String currency() { + return "сом"; + } + + @Override + public char twoDigitsNumberSeparator() { + return ' '; + } +} diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy index f8e11da0..34d3428f 100644 --- a/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy +++ b/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy @@ -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 @@ -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" diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/ValueConvertersTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/ValueConvertersTest.groovy index 131fd5cc..7eb17688 100644 --- a/src/test/groovy/pl/allegro/finance/tradukisto/ValueConvertersTest.groovy +++ b/src/test/groovy/pl/allegro/finance/tradukisto/ValueConvertersTest.groovy @@ -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 @@ -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 || "једна хиљада двеста тридесет четири" @@ -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 @@ -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 diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/kyrgyz/KyrgyzValuesTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/kyrgyz/KyrgyzValuesTest.groovy new file mode 100644 index 00000000..ef317d0d --- /dev/null +++ b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/kyrgyz/KyrgyzValuesTest.groovy @@ -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 | "" + } +}