From 81bb2e6b180a30f4b283dc23dbff13e70f06bc5c Mon Sep 17 00:00:00 2001 From: Cavagna Date: Tue, 30 May 2023 17:30:52 +0200 Subject: [PATCH 1/9] Dutch language --- .../finance/tradukisto/MoneyConverters.java | 4 +- .../finance/tradukisto/ValueConverters.java | 4 +- .../tradukisto/internal/Container.java | 20 +++ .../dutch/DutchIntegerToWordsConverter.java | 35 +++++ .../languages/dutch/DutchPluralForms.java | 26 ++++ .../dutch/DutchThousandToWordsConverter.java | 78 +++++++++++ .../internal/languages/dutch/DutchValues.java | 73 ++++++++++ .../tradukisto/MoneyConvertersTest.groovy | 2 + .../tradukisto/ValueConvertersTest.groovy | 4 + .../DutchThousandToWordsConverterTest.groovy | 53 +++++++ .../languages/dutch/DutchValuesTest.groovy | 131 ++++++++++++++++++ 11 files changed, 428 insertions(+), 2 deletions(-) create mode 100644 src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchIntegerToWordsConverter.java create mode 100644 src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchPluralForms.java create mode 100644 src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverter.java create mode 100644 src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValues.java create mode 100644 src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverterTest.groovy create mode 100644 src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValuesTest.groovy diff --git a/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java b/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java index 7ac137ce..fb1bd050 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java +++ b/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java @@ -22,6 +22,7 @@ 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; public enum MoneyConverters { @@ -41,7 +42,8 @@ public enum MoneyConverters { SERBIAN_BANKING_MONEY_VALUE(serbianContainer().getBankingMoneyConverter()), SERBIAN_CYRILLIC_BANKING_MONEY_VALUE(serbianCyrillicContainer().getBankingMoneyConverter()), FRENCH_BANKING_MONEY_VALUE(frenchContainer().getBankingMoneyConverter()), - BULGARIAN_BANKING_MONEY_VALUE(bulgarianContainer().getBankingMoneyConverter()); + BULGARIAN_BANKING_MONEY_VALUE(bulgarianContainer().getBankingMoneyConverter()), + DUTCH_BANKING_MONEY_VALUE(dutchContainer().getBankingMoneyConverter()); private final BigDecimalToStringConverter converter; diff --git a/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java b/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java index c6e97c5f..72632213 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java +++ b/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java @@ -26,6 +26,7 @@ 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; public enum ValueConverters { @@ -44,7 +45,8 @@ public enum ValueConverters { SERBIAN_CYRILLIC_INTEGER(serbianCyrillicContainer().getIntegerConverter(), getLanguageCodeFor("sr", "Cyrl")), BULGARIAN_INTEGER(bulgarianContainer().getIntegerConverter(), "bg"), FRENCH_INTEGER(frenchContainer().getIntegerConverter(), "fr"), - TURKISH_INTEGER(turkishContainer().getIntegerConverter(), "tr"); + TURKISH_INTEGER(turkishContainer().getIntegerConverter(), "tr"), + DUTCH_INTEGER(dutchContainer().getIntegerConverter(), "nl"); private final IntegerToStringConverter converter; private final List languageCodes; 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 2a14604b..91d4b3a2 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/internal/Container.java +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/Container.java @@ -8,6 +8,9 @@ import pl.allegro.finance.tradukisto.internal.languages.czech.CzechIntegerToWordsConverter; import pl.allegro.finance.tradukisto.internal.languages.czech.CzechValues; import pl.allegro.finance.tradukisto.internal.languages.czech.CzechValuesForSmallNumbers; +import pl.allegro.finance.tradukisto.internal.languages.dutch.DutchIntegerToWordsConverter; +import pl.allegro.finance.tradukisto.internal.languages.dutch.DutchThousandToWordsConverter; +import pl.allegro.finance.tradukisto.internal.languages.dutch.DutchValues; import pl.allegro.finance.tradukisto.internal.languages.english.AmericanEnglishValues; import pl.allegro.finance.tradukisto.internal.languages.english.EnglishValues; import pl.allegro.finance.tradukisto.internal.languages.french.FrenchNumberToWordsConverter; @@ -147,6 +150,23 @@ public static Container germanContainer() { return new Container(converter, null, bigDecimalBankingMoneyValueConverter); } + public static Container dutchContainer() { + + DutchValues values = new DutchValues(); + + DutchThousandToWordsConverter dutchThousandToWordsConverter = new DutchThousandToWordsConverter( + values.baseNumbers()); + + IntegerToStringConverter converter = new DutchIntegerToWordsConverter( + new NumberToWordsConverter(dutchThousandToWordsConverter, values.pluralForms()), values.exceptions(), + dutchThousandToWordsConverter); + + BigDecimalToStringConverter bigDecimalBankingMoneyValueConverter = new BigDecimalToBankingMoneyConverter( + converter, values.currency()); + + return new Container(converter, null, bigDecimalBankingMoneyValueConverter); + } + public static Container italianContainer() { ItalianValues values = new ItalianValues(); diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchIntegerToWordsConverter.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchIntegerToWordsConverter.java new file mode 100644 index 00000000..97260421 --- /dev/null +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchIntegerToWordsConverter.java @@ -0,0 +1,35 @@ +package pl.allegro.finance.tradukisto.internal.languages.dutch; + +import java.util.Map; + +import pl.allegro.finance.tradukisto.internal.GenderAwareIntegerToStringConverter; +import pl.allegro.finance.tradukisto.internal.IntegerToStringConverter; +import pl.allegro.finance.tradukisto.internal.NumberProcessor; + +public class DutchIntegerToWordsConverter implements IntegerToStringConverter { + + private final IntegerToStringConverter bigNumbersConverter; + private final Map exceptions; + private final GenderAwareIntegerToStringConverter smallNumbersConverter; + + public DutchIntegerToWordsConverter(IntegerToStringConverter bigNumbersConverter, + Map exceptions, + GenderAwareIntegerToStringConverter smallNumbersConverter) { + this.bigNumbersConverter = bigNumbersConverter; + this.exceptions = exceptions; + this.smallNumbersConverter = smallNumbersConverter; + } + + @Override + public String asWords(Integer value) { + if (exceptions.containsKey(value)) { + return exceptions.get(value); + } + + Integer bigNumber = value / 1000000; + Integer smallNumber = value % 1000000; + + return new NumberProcessor(bigNumbersConverter, smallNumbersConverter).process(bigNumber, smallNumber); + } + +} diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchPluralForms.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchPluralForms.java new file mode 100644 index 00000000..0e94712f --- /dev/null +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchPluralForms.java @@ -0,0 +1,26 @@ +package pl.allegro.finance.tradukisto.internal.languages.dutch; + +import pl.allegro.finance.tradukisto.internal.languages.GenderType; +import pl.allegro.finance.tradukisto.internal.languages.PluralForms; + +/** + * @author Dilaver Demirel + */ +public class DutchPluralForms implements PluralForms { + + private final String form; + + public DutchPluralForms(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/dutch/DutchThousandToWordsConverter.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverter.java new file mode 100644 index 00000000..f1d633e3 --- /dev/null +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverter.java @@ -0,0 +1,78 @@ +package pl.allegro.finance.tradukisto.internal.languages.dutch; + +import com.google.common.collect.Range; +import pl.allegro.finance.tradukisto.internal.GenderAwareIntegerToStringConverter; +import pl.allegro.finance.tradukisto.internal.languages.GenderForms; +import pl.allegro.finance.tradukisto.internal.languages.GenderType; + +import java.util.Map; + +import static java.lang.String.format; +public class DutchThousandToWordsConverter implements GenderAwareIntegerToStringConverter { + + private final Map baseValues; + + public DutchThousandToWordsConverter(Map baseValues) { + this.baseValues = baseValues; + } + + @Override + public String asWords(Integer value, GenderType genderType) { + if (baseValues.containsKey(value)) { + return baseValues.get(value).formFor(genderType); + } else if (Range.closed(21, 99).contains(value)) { + return twoDigitsNumberAsString(value, genderType); + } else if (Range.closed(101, 999).contains(value)) { + return threeDigitsNumberAsString(value, genderType); + } else if (Range.closed(1000, 999999).contains(value)) { + return thousandsAsString(value, genderType); + } + + throw new IllegalArgumentException(format("Can't convert %d", value)); + } + + private String twoDigitsNumberAsString(Integer value, GenderType genderType) { + Integer units = value % 10; + Integer tens = value - units; + + // When units are 2 or 3, between the tens and the units + if (units == 2 || units == 3) { + return format("%sën%s", asWords(units, genderType), asWords(tens, genderType)); + } else { + return format("%sen%s", asWords(units, genderType), asWords(tens, genderType)); + } + } + + private String threeDigitsNumberAsString(Integer value, GenderType genderType) { + Integer tensWithUnits = value % 100; + Integer hundreds = value - tensWithUnits; + + return format("%s%s", asWords(hundreds, genderType), asWords(tensWithUnits, genderType)); + } + + private String thousandsAsString(Integer value, GenderType genderType) { + Integer thousands = value / 1000; + Integer other = value % 1000; + + if (isOneThousand(thousands)) { + return getOneThousandAsWords(other, genderType); + } + + return getThousandsAsWords(thousands, other, genderType); + } + + private String getThousandsAsWords(Integer thousands, Integer other, GenderType genderType) { + if (other == 0) { + return format("%sduizend", asWords(thousands, genderType)); + } + return format("%sduizend%s", asWords(thousands, genderType), asWords(other, genderType)); + } + + private String getOneThousandAsWords(Integer other, GenderType genderType) { + return format("duizend%s", asWords(other, genderType)); + } + + private boolean isOneThousand(Integer thousands) { + return thousands == 1; + } +} diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValues.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValues.java new file mode 100644 index 00000000..ce13e095 --- /dev/null +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValues.java @@ -0,0 +1,73 @@ +package pl.allegro.finance.tradukisto.internal.languages.dutch; + +import static pl.allegro.finance.tradukisto.internal.support.BaseNumbersBuilder.baseNumbersBuilder; + +import com.google.common.collect.ImmutableMap; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import pl.allegro.finance.tradukisto.internal.languages.GenderForms; +import pl.allegro.finance.tradukisto.internal.languages.PluralForms; + +public class DutchValues { + + public Map baseNumbers() { + return baseNumbersBuilder() + .put(0, "nul") + .put(1, "één") + .put(2, "twee") + .put(3, "drie") + .put(4, "vier") + .put(5, "vijf") + .put(6, "zes") + .put(7, "zeven") + .put(8, "acht") + .put(9, "negen") + .put(10, "tien") + .put(11, "elf") + .put(12, "twaalf") + .put(13, "dertien") + .put(14, "veertien") + .put(15, "vijftien") + .put(16, "zestien") + .put(17, "zeventien") + .put(18, "achttien") + .put(19, "negentien") + .put(20, "twintig") + .put(30, "dertig") + .put(40, "veertig") + .put(50, "vijftig") + .put(60, "zestig") + .put(70, "zeventig") + .put(80, "tachtig") + .put(90, "negentig") + .put(100, "honderd") + .put(200, "tweehonderd") + .put(300, "driehonderd") + .put(400, "vierhonderd") + .put(500, "vijfhonderd") + .put(600, "zeshonderd") + .put(700, "zevenhonderd") + .put(800, "achthonderd") + .put(900, "negenhonderd") + .build(); + } + + public Map exceptions() { + return ImmutableMap.builder() + .put(1000, "duizend") + .build(); + } + + public List pluralForms() { + return Arrays.asList( + new DutchPluralForms("miljoen"), + new DutchPluralForms("miljard")); + } + + public String currency() { + return "€"; + } +} diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy index a7f965e0..b7317574 100644 --- a/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy +++ b/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy @@ -21,6 +21,7 @@ import static pl.allegro.finance.tradukisto.MoneyConverters.SERBIAN_CYRILLIC_BAN import static pl.allegro.finance.tradukisto.MoneyConverters.SLOVAK_BANKING_MONEY_VALUE import static pl.allegro.finance.tradukisto.MoneyConverters.TURKISH_BANKING_MONEY_VALUE import static pl.allegro.finance.tradukisto.MoneyConverters.UKRAINIAN_BANKING_MONEY_VALUE +import static pl.allegro.finance.tradukisto.MoneyConverters.DUTCH_BANKING_MONEY_VALUE class MoneyConvertersTest extends Specification { @@ -35,6 +36,7 @@ class MoneyConvertersTest extends Specification { "Brazilian Portuguese" | BRAZILIAN_PORTUGUESE_BANKING_MONEY_VALUE || "mil duzentos e trinta e quatro R\$ 56/100" "Bulgarian" | BULGARIAN_BANKING_MONEY_VALUE || "хиляда двеста тридесет четири лв 56/100" "Czech" | CZECH_BANKING_MONEY_VALUE || "jeden tisíc dvě stě třicet čtyři Kč 56/100" + "Dutch" | DUTCH_BANKING_MONEY_VALUE || "duizendtweehonderdvierendertig € 56/100" "English" | ENGLISH_BANKING_MONEY_VALUE || "one thousand two hundred thirty-four £ 56/100" "French" | FRENCH_BANKING_MONEY_VALUE || "mille deux cent trente-quatre € 56/100" "German" | GERMAN_BANKING_MONEY_VALUE || "eintausendzweihundertvierunddreißig € 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 f900d3e9..1ce1adfa 100644 --- a/src/test/groovy/pl/allegro/finance/tradukisto/ValueConvertersTest.groovy +++ b/src/test/groovy/pl/allegro/finance/tradukisto/ValueConvertersTest.groovy @@ -20,6 +20,7 @@ import static pl.allegro.finance.tradukisto.ValueConverters.SERBIAN_INTEGER import static pl.allegro.finance.tradukisto.ValueConverters.SLOVAK_INTEGER import static pl.allegro.finance.tradukisto.ValueConverters.TURKISH_INTEGER import static pl.allegro.finance.tradukisto.ValueConverters.UKRAINIAN_INTEGER +import static pl.allegro.finance.tradukisto.ValueConverters.DUTCH_INTEGER import static pl.allegro.finance.tradukisto.ValueConverters.getByLanguageCodeOrDefault import static pl.allegro.finance.tradukisto.ValueConverters.getByLocaleOrDefault @@ -35,6 +36,7 @@ class ValueConvertersTest extends Specification { "Brazilian Portuguese" | BRAZILIAN_PORTUGUESE_INTEGER || "mil duzentos e trinta e quatro" "Bulgarian" | BULGARIAN_INTEGER || "хиляда двеста тридесет четири" "Czech" | CZECH_INTEGER || "jeden tisíc dvě stě třicet čtyři" + "Dutch" | DUTCH_INTEGER || "duizendtweehonderdvierendertig" "English" | ENGLISH_INTEGER || "one thousand two hundred thirty-four" "French" | FRENCH_INTEGER || "mille deux cent trente-quatre" "German" | GERMAN_INTEGER || "eintausendzweihundertvierunddreißig" @@ -89,6 +91,7 @@ class ValueConvertersTest extends Specification { new Locale("sk") || SLOVAK_INTEGER new Locale("tr") || TURKISH_INTEGER new Locale("uk") || UKRAINIAN_INTEGER + new Locale("nl") || DUTCH_INTEGER } def "should return supplied default converter when locale is unknown"() { @@ -119,6 +122,7 @@ class ValueConvertersTest extends Specification { "pt" || BRAZILIAN_PORTUGUESE_INTEGER "bg" || BULGARIAN_INTEGER "cs" || CZECH_INTEGER + "nl" || DUTCH_INTEGER "en" || ENGLISH_INTEGER "fr" || FRENCH_INTEGER "it" || ITALIAN_INTEGER diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverterTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverterTest.groovy new file mode 100644 index 00000000..ef08170d --- /dev/null +++ b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverterTest.groovy @@ -0,0 +1,53 @@ +package pl.allegro.finance.tradukisto.internal.languages.dutch + +import pl.allegro.finance.tradukisto.internal.languages.GenderType +import spock.lang.Specification + +import static pl.allegro.finance.tradukisto.internal.languages.GenderForms.genderForm + +class DutchThousandToWordsConverterTest extends Specification { + + def "should convert value from list of base values"() { + given: + def converter = new DutchThousandToWordsConverter([1: genderForm("één")]) + + expect: + converter.asWords(1, GenderType.NON_APPLICABLE) == "één" + } + + def "should convert two digits number"() { + given: + def converter = new DutchThousandToWordsConverter([20: genderForm("twintig"), 1: genderForm("één")]) + + expect: + converter.asWords(21, GenderType.NON_APPLICABLE) == "éénentwintig" + } + + def "should convert three digits number"() { + given: + def converter = new DutchThousandToWordsConverter([600: genderForm("zeshonderd"), 60: genderForm("zestig"), 6: genderForm("zes")]) + + expect: + converter.asWords(666, GenderType.NON_APPLICABLE) == "zeshonderdzesenzestig" + } + + def "should convert more that three digits number"() { + given: + def converter = new DutchThousandToWordsConverter([600: genderForm("zeshonderd"), 60: genderForm("zestig"), 6: genderForm("zes")]) + + expect: + converter.asWords(66666, GenderType.NON_APPLICABLE) == "zesenzestigduizendzeshonderdzesenzestig" + } + + def "should throw IllegalArgumentException when given number is not supported"() { + given: + def converter = new DutchThousandToWordsConverter([1: genderForm("één")]) + + when: + converter.asWords(2, GenderType.NON_APPLICABLE) + + then: + def exception = thrown(IllegalArgumentException) + exception.message == "Can't convert 2" + } +} diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValuesTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValuesTest.groovy new file mode 100644 index 00000000..f92f06fe --- /dev/null +++ b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValuesTest.groovy @@ -0,0 +1,131 @@ +package pl.allegro.finance.tradukisto.internal.languages.dutch + +import spock.lang.Ignore +import spock.lang.Specification +import spock.lang.Unroll + +import static pl.allegro.finance.tradukisto.internal.Container.dutchContainer + +class DutchValuesTest extends Specification { + + static intConverter = dutchContainer().getIntegerConverter() + static longConverter = dutchContainer().getLongConverter() + + @Unroll + def "should convert #value to '#words' in Dutch"() { + expect: + intConverter.asWords(value) == words + + where: + value | words + 0 | "nul" + 1 | "één" + 2 | "twee" + 3 | "drie" + 4 | "vier" + 5 | "vijf" + 6 | "zes" + 7 | "zeven" + 8 | "acht" + 9 | "negen" + + 11 | "elf" + 12 | "twaalf" + 13 | "dertien" + 14 | "veertien" + 15 | "vijftien" + 16 | "zestien" + 17 | "zeventien" + 18 | "achttien" + 19 | "negentien" + + 10 | "tien" + 20 | "twintig" + 30 | "dertig" + 40 | "veertig" + 50 | "vijftig" + 60 | "zestig" + 70 | "zeventig" + 80 | "tachtig" + 90 | "negentig" + + 21 | "éénentwintig" + 37 | "zevenendertig" + 43 | "drieënveertig" + 58 | "achtenvijftig" + 69 | "negenenzestig" + 76 | "zesenzeventig" + 82 | "tweeëntachtig" + 95 | "vijfennegentig" + + 100 | "honderd" + 200 | "tweehonderd" + 300 | "driehonderd" + 400 | "vierhonderd" + 500 | "vijfhonderd" + 600 | "zeshonderd" + 700 | "zevenhonderd" + 800 | "achthonderd" + 900 | "negenhonderd" + + 111 | "honderdelf" + 272 | "tweehonderdtweeënzeventig" + 387 | "driehonderdzevenentachtig" + 448 | "vierhonderdachtenveertig" + 569 | "vijfhonderdnegenenzestig" + 625 | "zeshonderdvijfentwintig" + 782 | "zevenhonderdtweeëntachtig" + 895 | "achthonderdvijfennegentig" + 999 | "negenhonderdnegenennegentig" + + 1000 | "duizend" + 2000 | "tweeduizend" + 3000 | "drieduizend" + 4000 | "vierduizend" + 5000 | "vijfduizend" + 7634 | "zevenduizendzeshonderdvierendertig" + + 11000 | "elfduizend" + 15000 | "vijftienduizend" + 21000 | "éénentwintigduizend" + 24190 | "vierentwintigduizendhonderdnegentig" + 653000 | "zeshonderddrieënvijftigduizend" + 123454 | "honderddrieëntwintigduizendvierhonderdvierenvijftig" + 700000 | "zevenhonderdduizend" + 999999 | "negenhonderdnegenennegentigduizendnegenhonderdnegenennegentig" + + 1000000 | "één miljoen" + 2000000 | "twee miljoen" + 5000000 | "vijf miljoen" + 23437219 | "drieëntwintig miljoen vierhonderdzevenendertigduizendtweehonderdnegentien" + 100000000 | "honderd miljoen" + 123456789 | "honderddrieëntwintig miljoen vierhonderdzesenvijftigduizendzevenhonderdnegenentachtig" + 322089890 | "driehonderdtweeëntwintig miljoen negenentachtigduizendachthonderdnegentig" + + 1000000000 | "één miljard" + 2147483647 | "twee miljard honderdzevenenveertig miljoen vierhonderddrieëntachtigduizendzeshonderdzevenenveertig" + } + + @Ignore("Needs Dutch long converter and values for trillion, quadrillion, quintillion") + @Unroll + def "should convert long #value to '#words' in Dutch"() { + 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 | "" + } +} From 862a4b281d8c8adbc2f522d2cc8bc277bab7e28b Mon Sep 17 00:00:00 2001 From: GHim9182 Date: Thu, 6 Jul 2023 10:24:50 +0200 Subject: [PATCH 2/9] Added required tests and re-adapted code after last commits --- .../languages/dutch/DutchThousandToWordsConverter.java | 2 +- .../tradukisto/internal/languages/dutch/DutchValues.java | 9 ++++----- .../internal/languages/dutch/DutchValuesTest.groovy | 3 +++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverter.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverter.java index f1d633e3..c112f5dd 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverter.java +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverter.java @@ -1,6 +1,6 @@ package pl.allegro.finance.tradukisto.internal.languages.dutch; -import com.google.common.collect.Range; +import pl.allegro.finance.tradukisto.internal.support.Range; import pl.allegro.finance.tradukisto.internal.GenderAwareIntegerToStringConverter; import pl.allegro.finance.tradukisto.internal.languages.GenderForms; import pl.allegro.finance.tradukisto.internal.languages.GenderType; diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValues.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValues.java index ce13e095..8b96e423 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValues.java +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValues.java @@ -2,8 +2,6 @@ import static pl.allegro.finance.tradukisto.internal.support.BaseNumbersBuilder.baseNumbersBuilder; -import com.google.common.collect.ImmutableMap; - import java.util.Arrays; import java.util.List; import java.util.Map; @@ -11,6 +9,9 @@ import pl.allegro.finance.tradukisto.internal.languages.GenderForms; import pl.allegro.finance.tradukisto.internal.languages.PluralForms; +import static java.util.Collections.singletonMap; + + public class DutchValues { public Map baseNumbers() { @@ -56,9 +57,7 @@ public Map baseNumbers() { } public Map exceptions() { - return ImmutableMap.builder() - .put(1000, "duizend") - .build(); + return singletonMap(1000, "duizend"); } public List pluralForms() { diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValuesTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValuesTest.groovy index f92f06fe..ce6690d9 100644 --- a/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValuesTest.groovy +++ b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValuesTest.groovy @@ -53,6 +53,7 @@ class DutchValuesTest extends Specification { 37 | "zevenendertig" 43 | "drieënveertig" 58 | "achtenvijftig" + 62 | "tweeënzestig" 69 | "negenenzestig" 76 | "zesenzeventig" 82 | "tweeëntachtig" @@ -79,6 +80,7 @@ class DutchValuesTest extends Specification { 999 | "negenhonderdnegenennegentig" 1000 | "duizend" + 1001 | "duizendéén" 2000 | "tweeduizend" 3000 | "drieduizend" 4000 | "vierduizend" @@ -89,6 +91,7 @@ class DutchValuesTest extends Specification { 15000 | "vijftienduizend" 21000 | "éénentwintigduizend" 24190 | "vierentwintigduizendhonderdnegentig" + 24191 | "vierentwintigduizendhonderdéénennegentig" 653000 | "zeshonderddrieënvijftigduizend" 123454 | "honderddrieëntwintigduizendvierhonderdvierenvijftig" 700000 | "zevenhonderdduizend" From 88d0f0ecf52b97798bbcdbb0169fea4af9bf9845 Mon Sep 17 00:00:00 2001 From: Julia Glaszka Date: Thu, 6 Jul 2023 19:11:12 +0200 Subject: [PATCH 3/9] run-ci-after-merge-to-master --- .github/workflows/ci.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 443865b2..fcd9fea7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,8 +3,6 @@ name: Build on: pull_request: push: - tags-ignore: - - 'v*' permissions: contents: write @@ -41,19 +39,19 @@ jobs: - name: Upload coverage to Codecov if: matrix.Java == '17' uses: codecov/codecov-action@v3 - + dependabot: runs-on: ubuntu-latest if: ${{ github.event_name == 'pull_request' && github.actor == 'dependabot[bot]' }} needs: build - + steps: - name: Dependabot metadata id: metadata uses: dependabot/fetch-metadata@v1.6.0 with: github-token: "${{ secrets.GITHUB_TOKEN }}" - + - name: Enable auto-merge for Dependabot PRs run: gh pr merge --auto --merge "$PR_URL" env: From 504593b3c48d61289be0dbf8e003180401bab0b8 Mon Sep 17 00:00:00 2001 From: Julia Glaszka Date: Fri, 7 Jul 2023 15:45:08 +0200 Subject: [PATCH 4/9] run-ci-after-merge-to-master --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fcd9fea7..5c58b63e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,7 +1,6 @@ name: Build on: - pull_request: push: permissions: From ab4f65e5526f22c6147b9c6023bf49f8b19e1b34 Mon Sep 17 00:00:00 2001 From: Julia Glaszka Date: Fri, 7 Jul 2023 15:48:29 +0200 Subject: [PATCH 5/9] run-ci-after-merge-to-master --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5c58b63e..73e3c352 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,10 +15,11 @@ jobs: matrix: java: ['8', '11', '17'] + name: Run tests for Java ${{ matrix.java }} steps: - uses: actions/checkout@v3 - - name: Set up ${{ matrix.java }} + - name: Set up Java ${{ matrix.java }} uses: actions/setup-java@v3 with: distribution: 'temurin' From b9a0880bbd434d642625d7248c55dcf3b4bacb91 Mon Sep 17 00:00:00 2001 From: Julia Glaszka Date: Fri, 7 Jul 2023 15:49:16 +0200 Subject: [PATCH 6/9] run-ci-after-merge-to-master --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 73e3c352..ee63773e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,6 +2,7 @@ name: Build on: push: + workflow_dispatch: permissions: contents: write From 416f5ccdfc0f7eff8bb39d1488f4a94241b4040f Mon Sep 17 00:00:00 2001 From: Julia Glaszka Date: Fri, 7 Jul 2023 15:57:21 +0200 Subject: [PATCH 7/9] run-ci-after-merge-to-master --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ee63773e..a0e061f1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,7 @@ permissions: contents: write pull-requests: write + jobs: build: runs-on: ubuntu-latest From b60a7457e490f05ef71da026bcbfcb8431080345 Mon Sep 17 00:00:00 2001 From: Julia Glaszka Date: Fri, 7 Jul 2023 15:57:26 +0200 Subject: [PATCH 8/9] run-ci-after-merge-to-master --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a0e061f1..ee63773e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,6 @@ permissions: contents: write pull-requests: write - jobs: build: runs-on: ubuntu-latest From 43bd112907ba615e64995ea84d4244efcb9ff77a Mon Sep 17 00:00:00 2001 From: Julia Glaszka Date: Fri, 7 Jul 2023 16:06:33 +0200 Subject: [PATCH 9/9] add-dutch-in-readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6dcaedb7..e4eb4efc 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ With Tradukisto, you can now transform numbers into their word equivalents easy * 🇧🇬 Bulgarian * 🇭🇷 Croatian * 🇨🇿 Czech +* 🇳🇱 Dutch * 🇬🇧 English * 🇫🇷 French * 🇩🇪 German