using System.Collections.Generic; using System.Linq; namespace DNTCaptcha.Core; /// /// Convert a number into words /// public class HumanReadableIntegerProvider : ICaptchaTextProvider { private readonly Dictionary _and = new() { { Language.English, " " }, { Language.Persian, " و " }, { Language.Norwegian, " og " }, { Language.Italian, " " }, { Language.Turkish, " " }, { Language.Arabic, " و " }, { Language.Russian, " " }, { Language.Chinese, " " }, { Language.Spanish, " " }, { Language.Portuguese, " " }, { Language.French, " et " }, { Language.German, " und " }, { Language.Dutch, " en " }, { Language.Azerbaijani, " " } }; private readonly Dictionary _negative = new() { { Language.English, "Negative " }, { Language.Persian, "منهای " }, { Language.Norwegian, "Negativ" }, { Language.Italian, "Negativo" }, { Language.Turkish, "Eksi" }, { Language.Arabic, "سالب " }, { Language.Russian, "Минус " }, { Language.Chinese, "负" }, { Language.Spanish, "Negativo" }, { Language.Portuguese, "Negativo" }, { Language.French, "Négatif" }, { Language.German, "Negativ" }, { Language.Dutch, "Negatief" }, { Language.Azerbaijani, "Neqativ" } }; private readonly IList _numberWords = [ new() { Group = DigitGroup.Ones, Language = Language.English, Names = (List) [ string.Empty, "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" ] }, new() { Group = DigitGroup.Ones, Language = Language.Persian, Names = (List) [string.Empty, "یک", "دو", "سه", "چهار", "پنج", "شش", "هفت", "هشت", "نه"] }, new() { Group = DigitGroup.Ones, Language = Language.Norwegian, Names = (List) [string.Empty, "en", "to", "tre", "fire", "fem", "seks", "syv", "åtte", "ni"] }, new() { Group = DigitGroup.Ones, Language = Language.Italian, Names = (List) [ string.Empty, "Uno", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Otto", "Nove" ] }, new() { Group = DigitGroup.Ones, Language = Language.Turkish, Names = (List) [string.Empty, "Bir", "İki", "Üç", "Dört", "Beş", "Altı", "Yedi", "Sekiz", "Dokuz"] }, new() { Group = DigitGroup.Ones, Language = Language.Arabic, Names = (List) [ string.Empty, "واحد", "اثنان", "ثلاثة", "اربعة", "خمسة", "ستة", "سبعة", "ثمانية", "تسعة" ] }, new() { Group = DigitGroup.Ones, Language = Language.Russian, Names = (List) [ string.Empty, "Один", "Два", "Три", "Четыре", "Пять", "Шесть", "Семь", "Восемь", "Девять" ] }, new() { Group = DigitGroup.Ones, Language = Language.Chinese, Names = (List) [string.Empty, "一", "二", "三", "四", "五", "六", "七", "八", "九"] }, new() { Group = DigitGroup.Ones, Language = Language.Spanish, Names = (List) [ string.Empty, "Uno", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve" ] }, new() { Group = DigitGroup.Ones, Language = Language.Portuguese, Names = (List) [ string.Empty, "Um", "Dois", "Três", "Quatro", "Cinco", "Seis", "Sete", "Oito", "Nove" ] }, new() { Group = DigitGroup.Ones, Language = Language.French, Names = (List) [ string.Empty, "Un", "Deux", "Trois", "Quatre", "Cinq", "Six", "Sept", "Huit", "Neuf" ] }, new() { Group = DigitGroup.Ones, Language = Language.German, Names = (List) [ string.Empty, "Eins", "Zwei", "Drei", "Vier", "Fünf", "Sechs", "Sieben", "Acht", "Neun" ] }, new() { Group = DigitGroup.Ones, Language = Language.Dutch, Names = (List) [ string.Empty, "Een", "Twee", "Drie", "Vier", "Vijf", "Zes", "Zeven", "Acht", "Negen" ] }, new() { Group = DigitGroup.Ones, Language = Language.Azerbaijani, Names = (List) [ string.Empty, "Bir", "İki", "Üç", "Dörd", "Beş", "Altı", "Yeddi", "Səkkiz", "Doqquz" ] }, new() { Group = DigitGroup.Teens, Language = Language.English, Names = (List) [ "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" ] }, new() { Group = DigitGroup.Teens, Language = Language.Persian, Names = (List) [ "ده", "یازده", "دوازده", "سیزده", "چهارده", "پانزده", "شانزده", "هفده", "هجده", "نوزده" ] }, new() { Group = DigitGroup.Teens, Language = Language.Norwegian, Names = (List) [ "ti", "elleve", "tolv", "tretten", "fjorten", "femten", "seksten", "sytten", "atten", "nitten" ] }, new() { Group = DigitGroup.Teens, Language = Language.Italian, Names = (List) [ "Dieci", "Undici", "Dodici", "Tredici", "Quattordici", "Quindici", "Sedici", "Diciassette", "Diciotto", "Diciannove" ] }, new() { Group = DigitGroup.Teens, Language = Language.Turkish, Names = (List) [ "On", "Onbir", "Oniki", "Onüç", "Ondört", "Onbeş", "Onaltı", "Onyedi", "Onsekiz", "Ondokuz" ] }, new() { Group = DigitGroup.Teens, Language = Language.Arabic, Names = (List) [ "عشرة", "احدى عشر", "اثني عشر", "ثلاثة عشر", "اربعة عشر", "خمسة عشر", "ستة عشر", "سبعة عشر", "ثمانية عشر", "تسعة عشر" ] }, new() { Group = DigitGroup.Teens, Language = Language.Russian, Names = (List) [ "Десять", "Одинадцать", "Двенадцать", "Тринадцать", "Четырнадцать", "Пятнадцать", "Шестнадцать", "Семнадцать", "Восемнадцать", "Девятнадцать" ] }, new() { Group = DigitGroup.Teens, Language = Language.Chinese, Names = (List) ["十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九"] }, new() { Group = DigitGroup.Teens, Language = Language.Spanish, Names = (List) [ string.Empty, "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecineve" ] }, new() { Group = DigitGroup.Teens, Language = Language.Portuguese, Names = (List) [ "Dez", "Onze", "Doze", "Treze", "Catorze", "Quinze", "Dezaseis", "Dezasete", "Dezoito", "Dezanove" ] }, new() { Group = DigitGroup.Teens, Language = Language.French, Names = (List) [ "Dix", "Onze", "Douze", "Treize", "Quatorze", "Quinze", "Seize", "Dix-sept", "Dix-huit", "Dix-neuf" ] }, new() { Group = DigitGroup.Teens, Language = Language.German, Names = (List) [ "Zehn", "Elf", "Zwölf", "Dreizehn", "Vierzehn", "Fünfzehn", "Sechzehn", "Siebzehn", "Achtzehn", "Neunzehn" ] }, new() { Group = DigitGroup.Teens, Language = Language.Dutch, Names = (List) [ "Tien", "Elf", "Twaalf", "Dertien", "Veertien", "Vijftien", "Zestien", "Zeventien", "Achttien", "Negentien" ] }, new() { Group = DigitGroup.Teens, Language = Language.Azerbaijani, Names = (List) [ "On", "Onbir", "Oniki", "Onüç", "Ondörd", "Onbeş", "Onaltı", "Onyeddi", "Onsəkkiz", "Ondoqquz" ] }, new() { Group = DigitGroup.Tens, Language = Language.English, Names = (List) ["Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"] }, new() { Group = DigitGroup.Tens, Language = Language.Persian, Names = (List) ["بیست", "سی", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود"] }, new() { Group = DigitGroup.Tens, Language = Language.Norwegian, Names = (List) ["tjue", "tretti", "førti", "femti", "seksti", "sytti", "åtti", "nitti"] }, new() { Group = DigitGroup.Tens, Language = Language.Italian, Names = (List) [ "Venti", "Trenta", "Quaranta", "Cinquanta", "Sessanta", "Settanta", "Ottanta", "Novanta" ] }, new() { Group = DigitGroup.Tens, Language = Language.Turkish, Names = (List) ["Yirmi", "Otuz", "Kırk", "Elli", "Altmış", "Yetmiş", "Seksen", "Doksan"] }, new() { Group = DigitGroup.Tens, Language = Language.Arabic, Names = (List) ["عشرون", "ثلاثون", "اربعون", "خمسون", "ستون", "سبعون", "ثمانون", "تسعون"] }, new() { Group = DigitGroup.Tens, Language = Language.Russian, Names = (List) [ "Двадцать", "Тридцать", "Сорок", "Пятьдесят", "Шестьдесят", "Семьдесят", "Восемьдесят", "Девяносто" ] }, new() { Group = DigitGroup.Tens, Language = Language.Chinese, Names = (List) ["二十", "三十", "四十", "五十", "六十", "七十", "八十", "九十"] }, new() { Group = DigitGroup.Tens, Language = Language.Spanish, Names = (List) [ "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa" ] }, new() { Group = DigitGroup.Tens, Language = Language.Portuguese, Names = (List) [ "Vinte", "Trinta", "Quarnta", "Cinquenta", "Sessenta", "Setenta", "Oitenta", "Noventa" ] }, new() { Group = DigitGroup.Tens, Language = Language.French, Names = (List) [ "Vingt", "Trente", "Quarante", "Cinquante", "Soixante", "Soixante-dix", "Quatre-vingts", "Quatre-vingt-dix" ] }, new() { Group = DigitGroup.Tens, Language = Language.German, Names = (List) [ "Zwanzig", "Dreißig", "Vierzig", "Fünfzig", "Sechzig", "Siebzig", "Achtzig", "Neunzig" ] }, new() { Group = DigitGroup.Tens, Language = Language.Dutch, Names = (List) [ "Twintig", "Dertig", "Veertig", "Vijftig", "Zestig", "Zeventig", "Tachtig", "Negentig" ] }, new() { Group = DigitGroup.Tens, Language = Language.Azerbaijani, Names = (List) ["İyirmi", "Otuz", "Qırx", "Əlli", "Altmış", "Yetmiş", "Səksən", "Doxsan"] }, new() { Group = DigitGroup.Hundreds, Language = Language.English, Names = (List) [ string.Empty, "One Hundred", "Two Hundred", "Three Hundred", "Four Hundred", "Five Hundred", "Six Hundred", "Seven Hundred", "Eight Hundred", "Nine Hundred" ] }, new() { Group = DigitGroup.Hundreds, Language = Language.Persian, Names = (List) [ string.Empty, "یکصد", "دویست", "سیصد", "چهارصد", "پانصد", "ششصد", "هفتصد", "هشتصد", "نهصد" ] }, new() { Group = DigitGroup.Hundreds, Language = Language.Norwegian, Names = (List) [ string.Empty, "ett hundre", "to hundre", "tre hundre", "fire hundre", "fem hundre", "seks hundre", "syv hundre", "åtte hundre", "ni hundre" ] }, new() { Group = DigitGroup.Hundreds, Language = Language.Italian, Names = (List) [ string.Empty, "Cento", "Duecento", "Trecento", "Quattrocento", "Cinquecento", "Seicento", "Settecento", "Ottocento", "Novecento" ] }, new() { Group = DigitGroup.Hundreds, Language = Language.Turkish, Names = (List) [ string.Empty, "Yüz", "İki Yüz", "Üç Yüz", "Dört Yüz", "Beş Yüz", "Altı Yüz", "Yedi Yüz", "Sekiz Yüz", "Dokuz Yüz" ] }, new() { Group = DigitGroup.Hundreds, Language = Language.Arabic, Names = (List) [ string.Empty, "مائة", "مائتان", "ثلاثمائة", "اربعمائة", "خمسمائة", "ستمائة", "سبعمائة", "ثمانمائة", "تسعمائة" ] }, new() { Group = DigitGroup.Hundreds, Language = Language.Russian, Names = (List) [ string.Empty, "Сто", "Двести", "Триста", "Четыреста", "Пятьсот", "Шестьсот", "Семьсот", "Восемьсот", "Девятьсот" ] }, new() { Group = DigitGroup.Hundreds, Language = Language.Chinese, Names = (List) [string.Empty, "一百", "两百", "三百", "四百", "五百", "六百", "七百", "八百", "九百"] }, new() { Group = DigitGroup.Hundreds, Language = Language.Spanish, Names = (List) [ string.Empty, "Cien", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos" ] }, new() { Group = DigitGroup.Hundreds, Language = Language.Portuguese, Names = (List) [ string.Empty, "Cem", "Duzentos", "Trezentos", "Quatrocentos", "Quinhentos", "Seiscentos", "Setecentos", "Oitocentos", "Novecentos" ] }, new() { Group = DigitGroup.Hundreds, Language = Language.French, Names = (List) [ string.Empty, "Cent", "Deux Cents", "Trois Cents", "Quatre Cents", "Cinq Cents", "Six Cents", "Sept Cents", "Huit Cents", "Neuf Cents" ] }, new() { Group = DigitGroup.Hundreds, Language = Language.German, Names = (List) [ string.Empty, "Einhundert", "Zweihundert", "Dreihundert", "Vierhundert", "Fünfhundert", "Sechshundert", "Siebenhundert", "Achthundert", "Neunhundert" ] }, new() { Group = DigitGroup.Hundreds, Language = Language.Dutch, Names = (List) [ string.Empty, "Honderd", "Tweehonderd", "Driehonderd", "Vierhonderd", "Vijfhonderd", "Zeshonderd", "Zevenhonderd", "Achthonderd", "Negenhonderd" ] }, new() { Group = DigitGroup.Hundreds, Language = Language.Azerbaijani, Names = (List) [ string.Empty, "Yüz", "İki yüz", "Üç yüz", "Dörd yüz", "Beş yüz", "Altı yüz", "Yeddi yüz", "Səkkiz yüz", "Doqquz yüz" ] }, new() { Group = DigitGroup.Thousands, Language = Language.English, Names = (List) [ string.Empty, " Thousand", " Million", " Billion", " Trillion", " Quadrillion", " Quintillion", " Sextillian", " Septillion", " Octillion", " Nonillion", " Decillion", " Undecillion", " Duodecillion", " Tredecillion", " Quattuordecillion", " Quindecillion", " Sexdecillion", " Septendecillion", " Octodecillion", " Novemdecillion", " Vigintillion", " Unvigintillion", " Duovigintillion", " 10^72", " 10^75", " 10^78", " 10^81", " 10^84", " 10^87", " Vigintinonillion", " 10^93", " 10^96", " Duotrigintillion", " Trestrigintillion" ] }, new() { Group = DigitGroup.Thousands, Language = Language.Persian, Names = (List) [ string.Empty, " هزار", " میلیون", " میلیارد", " تریلیون", " Quadrillion", " Quintillion", " Sextillian", " Septillion", " Octillion", " Nonillion", " Decillion", " Undecillion", " Duodecillion", " Tredecillion", " Quattuordecillion", " Quindecillion", " Sexdecillion", " Septendecillion", " Octodecillion", " Novemdecillion", " Vigintillion", " Unvigintillion", " Duovigintillion", " 10^72", " 10^75", " 10^78", " 10^81", " 10^84", " 10^87", " Vigintinonillion", " 10^93", " 10^96", " Duotrigintillion", " Trestrigintillion" ] }, new() { Group = DigitGroup.Thousands, Language = Language.Norwegian, Names = (List) [ string.Empty, " tusen", " million", " milliard", " billion", " billiard", " trillion", " trilliard", " kvadrillion", " kvintillion", " sekstillion", " septillion", " oktillion", " nonillion", " desillion", // Not translated the next " Quattuordecillion", " Quindecillion", " Sexdecillion", " Septendecillion", " Octodecillion", " Novemdecillion", " Vigintillion", " Unvigintillion", " Duovigintillion", " 10^72", " 10^75", " 10^78", " 10^81", " 10^84", " 10^87", " Vigintinonillion", " 10^93", " 10^96", " Duotrigintillion", " Trestrigintillion" ] }, new() { Group = DigitGroup.Thousands, Language = Language.Italian, Names = (List) [ string.Empty, "mila", "Milioni", "Miliardi", "Bilioni", "Biliardi", "Trilioni", "Triliardi", " Quadrilioni", "Quadriliardi", "Quintilioni", "Quintiliardi", "Sistilioni", "Sistiliardi", "Settilioni", " Settiliardi", " Ottilioni", "Ottiliardi", "Novilioni", "Noviliardi", "Decilioni", " Deciliardi", "Undicilioni", "Undiciliardi ", "Dodicilioni", "Dodiciliardi", "Tredicilioni", "Trediciliardi", "Quattordicilioni", "Quattordiciliardi", "Quindicilioni", "Quindiciliardi", "Sedicilioni", "Sediciliardi", "Diciasettilioni" ] }, new() { Group = DigitGroup.Thousands, Language = Language.Turkish, Names = (List) [ string.Empty, "Bin", "Milyon", "Milyar", "Trilyon", "Katrilyon", " Quadrillion", " Quintillion", " Sextillian", " Septillion", " Octillion", " Nonillion", " Decillion", " Undecillion", " Duodecillion", " Tredecillion", " Quattuordecillion", " Quindecillion", " Sexdecillion", " Septendecillion", " Octodecillion", " Novemdecillion", " Vigintillion", " Unvigintillion", " Duovigintillion", " 10^72", " 10^75", " 10^78", " 10^81", " 10^84", " 10^87", " Vigintinonillion", " 10^93", " 10^96", " Duotrigintillion", " Trestrigintillion" ] }, new() { Group = DigitGroup.Thousands, Language = Language.Arabic, Names = (List) [ string.Empty, " الف", " مليون", " مليار", " بليون", " بليار", " ترليون", " تريليار", " كريليون", " كزيليار", " سنكليون", " سنكليار", " سيزيليون", " سيزيليار", " سيتليون", " سيتليار", " ويتليون", " ويتليار", " تيفليون", " تيفليار", " ديشليون", " ديشليار", " Unvigintillion", " Duovigintillion", " 10^72", " 10^75", " 10^78", " 10^81", " 10^84", " 10^87", " Vigintinonillion", " 10^93", " 10^96", " Duotrigintillion", " Trestrigintillion" ] }, new() { Group = DigitGroup.Thousands, Language = Language.Russian, Names = (List) [ string.Empty, " Тысяча", " Миллион", " Миллиард", " Триллион", " Квадриллион", " Квинтиллион", " Секстиллиан", " Септиллион", " Октиллион", " Нониллион", " Дециллион", " Ундециллион", " Дуодециллион", " Тредециллион", " Кваттуордециллион", " Квиндециллион", " Сексдециллион", " Септдециллион", " Октодециллион", " Новемдециллион", " Вигинтиллион", " Унвигинтиллион", " Дуовигинтиллион", " 10 ^ 72", " 10 ^ 75", " 10 ^ 78", " 10 ^ 81", " 10 ^ 84", " 10 ^ 87", " Вигинтинониллион", " 10 ^ 93", " 10 ^ 96", " Дуотригинтиллион", " Трестригинтиллион" ] }, new() { Group = DigitGroup.Thousands, Language = Language.Chinese, Names = (List) [ string.Empty, "千", "百万", "十亿", "万亿", "千万亿", "百兆", "十万兆", "京", "千京", "百万京", "十垓", "万垓", "千万垓", "百秭", "十万秭", "穰", "千穰", "百万穰", "十沟", "万沟", "千万沟", " 百涧", "十万涧", "正", "千正", "百万正", "十载", "万载", "千万载", "百极", "十万极", "恒河沙", "千恒河沙", "百万恒河沙" ] }, new() { Group = DigitGroup.Thousands, Language = Language.Spanish, Names = (List) [ string.Empty, " Mil", " Millón", " Billón", " Trillón", " Cuatrillón", " Quintrillón", " Sextillón", " Septillón", " Octrillón", " Nonillón", " Decillión", " Undecillón", " Duodecillón", " 10^72", " 10^75", " 10^78", " 10^81", " 10^84", " 10^87", " Vigintillón", " 10^93", " 10^96", " Duotrigintillón", " Trestrigintillón" ] }, new() { Group = DigitGroup.Thousands, Language = Language.Portuguese, Names = (List) [ string.Empty, " Mil", " Milhão", " Bilhão", " Trilhão", " Quatrilhão", " Quintilhão", " Sextilhão", " Septilhão", " Octilhão", " Nonilhão", " Decilhão", " Undecilhão", " Dudecilhão ", " Tredecilhão", " Quadriodecilhão", " Quindecilhão", " ", " Seisdecilhão", " Oitodecillhão", " Novedecilhão", " Vigintilhão", " Unvigintilhão", " Duovigintilhão", " 10^72", " 10^75", " 10^78", " 10^81", " 10^84", " 10^87", " Vigintinonilhão", " 10^93", " 10^96", " Duotrigintilhão", " Trestrigintilhão" ] }, new() { Group = DigitGroup.Thousands, Language = Language.French, Names = (List) [ string.Empty, " Mille", " Million", " Milliard", " Billion", " Billiard", " Trillion", " Trilliard", " Quadrillion", " Quadrilliard", " Quintillion", " Quintilliard", " Sextillion", " Sextilliard", " Septillion", " Septilliard", " Octillion", " Octilliard", " Nonillion", " Nonilliard", " Decillion", " Decilliard", " Undecillion", " Undecilliard", " Duodecillion", " Duodecilliard", " Tredecillion", " Tredecilliard", " Quattuordecillion", " Quattuordecilliard", " Quindecillion", " Quindecilliard", " Sexdecillion", " Sexdecilliard", " Septendecillion" ] }, new() { Group = DigitGroup.Thousands, Language = Language.German, Names = (List) [ string.Empty, " Tausend", " Million", " Milliarde", " Billion", " Billiard", " Trillion", " Trilliarde", " Quadrillion", " Quadrilliarde", " Quintillion", " Quintilliarde", " Sextillion", " Sextilliarde", " Septillion", " Septilliarde", " Octillion", " Octilliarde", " Nonillion", " Nonilliarde", " Decillion", " Decilliarde", " Undecillion", " Undecilliarde", " Duodecillion", " Duodecilliarde", " Tredecillion", " Tredecilliarde", " Quattuordecillion", " Quattuordecilliarde", " Quindecillion", " Quindecilliarde", " Sexdecillion", " Sexdecilliarde", " Septendecillion" ] }, new() { Group = DigitGroup.Thousands, Language = Language.Dutch, Names = (List) [ string.Empty, "Duizend", "Miljoen", "Miljard", "Biljoen", "Biljard", "Triljoen", "Triljard", "Quadriljoen", "Quadriljard", "Quintiljoen", "Quintiljard", "Sextiljoen", "Sextiljard", "Septiljoen", "Septiljard", "Octiljoen", "Octiljard", "Noniljoen", "Noniljard", "Deciljoen", "Deciljard", "Undeciljoen", "Undeciljard", "Duodeciljoen", "Duodeciljard", "Tredeciljoen", "Tredeciljard", "Quattuordeciljoen", "Quattuordeciljard", "Quindeciljoen", "Quindeciljard", "Sexdeciljoen", "Sexdeciljard", "Septendeciljoen" ] }, new() { Group = DigitGroup.Thousands, Language = Language.Azerbaijani, Names = (List) [ string.Empty, " Min", " milyon", " Milyard", " Trilyon", " Kvadrilyon", " Kvintilyon", " Sekstillian", " Septilyon", " Oktilyon", " Nonillion", " Decillion", " Undecillion", " Duodecillion", " Tredecillion", " Quattuordecillion", " Quindecillion", " Sexdecillion", " Septendecillion", " Octodecillion", " Novemdecillion", " Vigintillion", " Unvigintillion", " Duovigintillion", " 10^72", " 10^75", " 10^78", " 10^81", " 10^84", " 10^87", " Vigintinonillion", " 10^93", " 10^96", " Duotrigintillion", " Trestrigintillion" ] } ]; private readonly Dictionary _zero = new() { { Language.English, "Zero" }, { Language.Persian, "صفر" }, { Language.Norwegian, "Null" }, { Language.Italian, "Zero" }, { Language.Turkish, "Sıfır" }, { Language.Arabic, "صفر" }, { Language.Russian, "Ноль" }, { Language.Chinese, "零" }, { Language.Spanish, "Cero" }, { Language.Portuguese, "Zero" }, { Language.French, "Zéro" }, { Language.German, "Null" }, { Language.Dutch, "Nul" }, { Language.Azerbaijani, "Sıfır" } }; /// /// display a numeric value using the equivalent text /// /// input number /// local language /// the equivalent text public string GetText(int number, Language language) => NumberToText((long)number, language); /// /// display a numeric value using the equivalent text /// /// input number /// local language /// the equivalent text public string GetText(long number, Language language) => NumberToText(number, language); /// /// display a numeric value using the equivalent text /// /// input number /// local language /// the equivalent text public string NumberToText(int number, Language language) => NumberToText((long)number, language); /// /// display a numeric value using the equivalent text /// /// input number /// local language /// the equivalent text public string NumberToText(uint number, Language language) => NumberToText((long)number, language); /// /// display a numeric value using the equivalent text /// /// input number /// local language /// the equivalent text public string NumberToText(byte number, Language language) => NumberToText((long)number, language); /// /// display a numeric value using the equivalent text /// /// input number /// local language /// the equivalent text public string NumberToText(decimal number, Language language) => NumberToText((long)number, language); /// /// display a numeric value using the equivalent text /// /// input number /// local language /// the equivalent text public string NumberToText(double number, Language language) => NumberToText((long)number, language); /// /// display a numeric value using the equivalent text /// /// input number /// local language /// the equivalent text public string NumberToText(long number, Language language) { if (number == 0) { return _zero[language]; } if (number < 0) { return _negative[language] + NumberToText(-number, language); } return Wordify(number, language, string.Empty, thousands: 0); } private string GetName(int idx, Language language, DigitGroup group) => _numberWords.First(x => x.Group == group && x.Language == language).Names[idx]; private string Wordify(long number, Language language, string leftDigitsText, int thousands) { if (number == 0) { return leftDigitsText; } var wordValue = leftDigitsText; if (wordValue.Length > 0) { wordValue += _and[language]; } if (number < 10) { wordValue += GetName((int)number, language, DigitGroup.Ones); } else if (number < 20) { wordValue += GetName((int)(number - 10), language, DigitGroup.Teens); } else if (number < 100) { wordValue += Wordify(number % 10, language, GetName((int)(number / 10 - 2), language, DigitGroup.Tens), thousands: 0); } else if (number < 1000) { wordValue += Wordify(number % 100, language, GetName((int)(number / 100), language, DigitGroup.Hundreds), thousands: 0); } else { wordValue += Wordify(number % 1000, language, Wordify(number / 1000, language, string.Empty, thousands + 1), thousands: 0); } if (number % 1000 == 0) { return wordValue; } return wordValue + GetName(thousands, language, DigitGroup.Thousands); } }