diff --git a/docs/localization.md b/docs/localization.md index f68d9820c..3f4d6aa7f 100644 --- a/docs/localization.md +++ b/docs/localization.md @@ -6,9 +6,9 @@ Most consumers only need to set a culture. Contributors now author locale-specif ## Supported Locales -Humanizer includes generated locale data for 97 checked-in locale files: +Humanizer includes generated locale data for 99 checked-in locale files: -Afrikaans (af), Albanian (sq), Amharic (am), Arabic (ar), Assamese (as), Azerbaijani (az), Belarusian (be), Bengali (bn), Bosnian (bs), Bulgarian (bg), Burmese (my), Catalan (ca), Chinese (zh-CN, zh-Hans, zh-Hant), Croatian (hr), Czech (cs), Danish (da), Dutch (nl), English (en, en-GB, en-IN, en-US), Estonian (et), Finnish (fi), Filipino (fil), French (fr, fr-BE, fr-CH), Galician (gl), German (de, de-CH, de-LI), Georgian (ka), Greek (el), Gujarati (gu), Hausa (ha), Hebrew (he), Hindi (hi), Hungarian (hu), Armenian (hy), Indonesian (id), Igbo (ig), Icelandic (is), Irish (ga), Italian (it), Japanese (ja), Kannada (kn), Kazakh (kk), Khmer (km), Korean (ko), Kurdish (ku), Kyrgyz (ky), Lao (lo), Latvian (lv), Lithuanian (lt), Luxembourgish (lb), Macedonian (mk), Malay (ms), Malayalam (ml), Marathi (mr), Maltese (mt), Mongolian (mn), Nepali (ne), Norwegian Bokmål (nb), Norwegian Nynorsk (nn), Pashto (ps), Persian (fa), Polish (pl), Portuguese (pt, pt-BR), Punjabi (pa, pa-Arab), Romanian (ro), Russian (ru), Serbian (sr, sr-Latn), Sinhala (si), Slovak (sk), Slovenian (sl), Spanish (es), Swahili (sw), Swedish (sv), Tamil (ta), Telugu (te), Thai (th), Turkish (tr), Ukrainian (uk), Urdu (ur, ur-IN, ur-PK), Uzbek (uz-Cyrl-UZ, uz-Latn-UZ), Vietnamese (vi), Welsh (cy), Yoruba (yo), Zulu (zu-ZA). +Afrikaans (af), Albanian (sq), Amharic (am), Arabic (ar), Assamese (as), Azerbaijani (az), Belarusian (be), Bengali (bn), Bosnian (bs), Bulgarian (bg), Burmese (my), Catalan (ca), Chinese (zh-CN, zh-Hans, zh-Hant), Croatian (hr), Czech (cs), Danish (da), Dutch (nl), English (en, en-GB, en-IN, en-US), Estonian (et), Finnish (fi), Filipino (fil), French (fr, fr-BE, fr-CH), Galician (gl), German (de, de-CH, de-LI), Georgian (ka), Greek (el), Gujarati (gu), Hausa (ha), Hebrew (he), Hindi (hi), Hungarian (hu), Armenian (hy), Indonesian (id), Igbo (ig), Icelandic (is), Irish (ga), Italian (it), Japanese (ja), Kannada (kn), Kazakh (kk), Khmer (km), Korean (ko), Kurdish (ku), Kyrgyz (ky), Lao (lo), Latvian (lv), Lithuanian (lt), Luxembourgish (lb), Macedonian (mk), Malay (ms), Malayalam (ml), Marathi (mr), Maltese (mt), Mongolian (mn), Nepali (ne), Norwegian Bokmål (nb), Norwegian Nynorsk (nn), Odia (or), Pashto (ps), Persian (fa), Polish (pl), Portuguese (pt, pt-BR), Punjabi (pa, pa-Arab), Romanian (ro), Russian (ru), Serbian (sr, sr-Latn), Sinhala (si), Slovak (sk), Slovenian (sl), Somali (so), Spanish (es), Swahili (sw), Swedish (sv), Tamil (ta), Telugu (te), Thai (th), Turkish (tr), Ukrainian (uk), Urdu (ur, ur-IN, ur-PK), Uzbek (uz-Cyrl-UZ, uz-Latn-UZ), Vietnamese (vi), Welsh (cy), Yoruba (yo), Zulu (zu-ZA). The supported set above reflects checked-in locale files. Locale files under active, unmerged batch work are not listed as supported until they merge. diff --git a/src/Humanizer/Locales/or.yml b/src/Humanizer/Locales/or.yml new file mode 100644 index 000000000..f8edd88b7 --- /dev/null +++ b/src/Humanizer/Locales/or.yml @@ -0,0 +1,665 @@ +locale: 'or' + +surfaces: + list: + engine: 'conjunction' + value: 'ଏବଂ' + + formatter: + engine: 'profiled' + pluralRule: 'singular-plural' + dataUnitPluralRule: 'singular-plural' + dataUnitFallbackTransform: 'trim-trailing-s' + + phrases: + relativeDate: + now: 'ବର୍ତ୍ତମାନ' + never: 'କେବେ ନୁହେଁ' + past: + millisecond: + single: 'ଏକ ମିଲିସେକେଣ୍ଡ ପୂର୍ବରୁ' + multiple: + forms: + default: 'ମିଲିସେକେଣ୍ଡ' + afterCount: 'ପୂର୍ବରୁ' + second: + single: 'ଏକ ସେକେଣ୍ଡ ପୂର୍ବରୁ' + multiple: + forms: + default: 'ସେକେଣ୍ଡ' + afterCount: 'ପୂର୍ବରୁ' + minute: + single: 'ଏକ ମିନିଟ୍ ପୂର୍ବରୁ' + multiple: + forms: + default: 'ମିନିଟ୍' + afterCount: 'ପୂର୍ବରୁ' + hour: + single: 'ଏକ ଘଣ୍ଟା ପୂର୍ବରୁ' + multiple: + forms: + default: 'ଘଣ୍ଟା' + afterCount: 'ପୂର୍ବରୁ' + day: + single: 'ଗତକାଲି' + multiple: + forms: + default: 'ଦିନ' + afterCount: 'ପୂର୍ବରୁ' + week: + single: 'ଏକ ସପ୍ତାହ ପୂର୍ବରୁ' + multiple: + forms: + default: 'ସପ୍ତାହ' + afterCount: 'ପୂର୍ବରୁ' + month: + single: 'ଏକ ମାସ ପୂର୍ବରୁ' + multiple: + forms: + default: 'ମାସ' + afterCount: 'ପୂର୍ବରୁ' + year: + single: 'ଏକ ବର୍ଷ ପୂର୍ବରୁ' + multiple: + forms: + default: 'ବର୍ଷ' + afterCount: 'ପୂର୍ବରୁ' + future: + millisecond: + single: 'ଏକ ମିଲିସେକେଣ୍ଡ ପରେ' + multiple: + forms: + default: 'ମିଲିସେକେଣ୍ଡ' + afterCount: 'ପରେ' + second: + single: 'ଏକ ସେକେଣ୍ଡ ପରେ' + multiple: + forms: + default: 'ସେକେଣ୍ଡ' + afterCount: 'ପରେ' + minute: + single: 'ଏକ ମିନିଟ୍ ପରେ' + multiple: + forms: + default: 'ମିନିଟ୍' + afterCount: 'ପରେ' + hour: + single: 'ଏକ ଘଣ୍ଟା ପରେ' + multiple: + forms: + default: 'ଘଣ୍ଟା' + afterCount: 'ପରେ' + day: + single: 'ଆସନ୍ତାକାଲି' + multiple: + forms: + default: 'ଦିନ' + afterCount: 'ପରେ' + week: + single: 'ଏକ ସପ୍ତାହ ପରେ' + multiple: + forms: + default: 'ସପ୍ତାହ' + afterCount: 'ପରେ' + month: + single: 'ଏକ ମାସ ପରେ' + multiple: + forms: + default: 'ମାସ' + afterCount: 'ପରେ' + year: + single: 'ଏକ ବର୍ଷ ପରେ' + multiple: + forms: + default: 'ବର୍ଷ' + afterCount: 'ପରେ' + duration: + zero: 'ବର୍ତ୍ତମାନ' + age: + template: '{value}' + millisecond: + single: + numeric: '1 ମିଲିସେକେଣ୍ଡ' + words: 'ଏକ ମିଲିସେକେଣ୍ଡ' + multiple: + forms: + default: 'ମିଲିସେକେଣ୍ଡ' + singular: 'ମିଲିସେକେଣ୍ଡ' + second: + single: + numeric: '1 ସେକେଣ୍ଡ' + words: 'ଏକ ସେକେଣ୍ଡ' + multiple: + forms: + default: 'ସେକେଣ୍ଡ' + singular: 'ସେକେଣ୍ଡ' + minute: + single: + numeric: '1 ମିନିଟ୍' + words: 'ଏକ ମିନିଟ୍' + multiple: + forms: + default: 'ମିନିଟ୍' + singular: 'ମିନିଟ୍' + hour: + single: + numeric: '1 ଘଣ୍ଟା' + words: 'ଏକ ଘଣ୍ଟା' + multiple: + forms: + default: 'ଘଣ୍ଟା' + singular: 'ଘଣ୍ଟା' + day: + single: + numeric: '1 ଦିନ' + words: 'ଏକ ଦିନ' + multiple: + forms: + default: 'ଦିନ' + singular: 'ଦିନ' + week: + single: + numeric: '1 ସପ୍ତାହ' + words: 'ଏକ ସପ୍ତାହ' + multiple: + forms: + default: 'ସପ୍ତାହ' + singular: 'ସପ୍ତାହ' + month: + single: + numeric: '1 ମାସ' + words: 'ଏକ ମାସ' + multiple: + forms: + default: 'ମାସ' + singular: 'ମାସ' + year: + single: + numeric: '1 ବର୍ଷ' + words: 'ଏକ ବର୍ଷ' + multiple: + forms: + default: 'ବର୍ଷ' + singular: 'ବର୍ଷ' + dataUnits: + bit: + forms: + default: 'ବିଟ' + singular: 'ବିଟ' + symbol: 'b' + byte: + forms: + default: 'ବାଇଟ୍' + singular: 'ବାଇଟ୍' + symbol: 'B' + kilobyte: + forms: + default: 'କିଲୋବାଇଟ୍' + singular: 'କିଲୋବାଇଟ୍' + symbol: 'KB' + megabyte: + forms: + default: 'ମେଗାବାଇଟ୍' + singular: 'ମେଗାବାଇଟ୍' + symbol: 'MB' + gigabyte: + forms: + default: 'ଗିଗାବାଇଟ୍' + singular: 'ଗିଗାବାଇଟ୍' + symbol: 'GB' + terabyte: + forms: + default: 'ଟେରାବାଇଟ୍' + singular: 'ଟେରାବାଇଟ୍' + symbol: 'TB' + timeUnits: + millisecond: + symbol: 'ମିଲିସେକେଣ୍ଡ' + second: + symbol: 'ସେକେଣ୍ଡ' + minute: + symbol: 'ମିନିଟ୍' + hour: + symbol: 'ଘଣ୍ଟା' + day: + symbol: 'ଦିନ' + week: + symbol: 'ସପ୍ତାହ' + month: + symbol: 'ମାସ' + year: + symbol: 'ବର୍ଷ' + + number: + words: + engine: 'indian-grouping-gendered' + zeroWord: 'ଶୂନ୍ୟ' + negativeWord: 'ଋଣାତ୍ମକ' + hundredWord: 'ଶହ' + thousandWord: 'ହଜାର' + lakhWord: 'ଲକ୍ଷ' + singleLakhWord: 'ଏକ' + croreWord: 'କୋଟି' + arabWord: 'ଅବ୍ଜ' + kharabWord: 'ଖର୍ବ' + denseUnitsMap: + - 'ଶୂନ୍ୟ' + - 'ଏକ' + - 'ଦୁଇ' + - 'ତିନି' + - 'ଚାରି' + - 'ପାଞ୍ଚ' + - 'ଛଅ' + - 'ସାତ' + - 'ଆଠ' + - 'ନଅ' + - 'ଦଶ' + - 'ଏଗାର' + - 'ବାର' + - 'ତେର' + - 'ଚଉଦ' + - 'ପନ୍ଦର' + - 'ଶୋଳ' + - 'ସତର' + - 'ଅଠର' + - 'ଉଣେଇଶ' + - 'କୋଡ଼ିଏ' + - 'ଏକୋଇଶ' + - 'ବାଇଶି' + - 'ତେଇଶି' + - 'ଚବିଶି' + - 'ପଚିଶି' + - 'ଛବିଶ' + - 'ସତାଇଶ' + - 'ଅଠାଇଶ' + - 'ଅଣତିରିଶ' + - 'ତିରିଶ' + - 'ଏକତିରିଶ' + - 'ବତିଶ' + - 'ତେତିଶ' + - 'ଚଉତିରିଶ' + - 'ପଇଁତିରିଶ' + - 'ଛତିଶ' + - 'ସତିରିଶ' + - 'ଅଟତିରିଶ' + - 'ଅଣଚାଳିଶ' + - 'ଚାଳିଶ' + - 'ଏକଚାଳିଶ' + - 'ବୟାଳିଶ' + - 'ତେୟାଳିଶ' + - 'ଚଉରାଳିଶ' + - 'ପଇଞ୍ଚାଳିଶ' + - 'ଛୟାଳିଶ' + - 'ସତଚାଳିଶ' + - 'ଅଟଚାଳିଶ' + - 'ଅଣଚାଶ' + - 'ପଚାଶ' + - 'ଏକାବନ' + - 'ବାଆନ' + - 'ତେପନ' + - 'ଚଉବନ' + - 'ପଞ୍ଚାବନ' + - 'ଛପନ' + - 'ସତାବନ' + - 'ଅଠାବନ' + - 'ଅଣଷଠି' + - 'ଷାଠିଏ' + - 'ଏକଷଠି' + - 'ବାଷଠି' + - 'ତେଷଠି' + - 'ଚଉଷଠି' + - 'ପଞ୍ଚଷଠି' + - 'ଛଅଷଠି' + - 'ସତଷଠି' + - 'ଅଠଷଠି' + - 'ଅଣସତୁରି' + - 'ସତୁରି' + - 'ଏକସ୍ତରି' + - 'ବାଆସ୍ତରି' + - 'ତେସ୍ତରି' + - 'ଚଉସ୍ତରି' + - 'ପଞ୍ଚସ୍ତରି' + - 'ଛଅସ୍ତରି' + - 'ସତସ୍ତରି' + - 'ଅଠସ୍ତରି' + - 'ଅଣାଅଶୀ' + - 'ଅଶୀ' + - 'ଏକାଶୀ' + - 'ବୟାଶୀ' + - 'ତେୟାଶୀ' + - 'ଚଉରାଶୀ' + - 'ପଞ୍ଚାଅଶୀ' + - 'ଛୟାଶୀ' + - 'ସତାଶୀ' + - 'ଅଠାଶୀ' + - 'ଅଣାନବେ' + - 'ନବେ' + - 'ଏକାନବେ' + - 'ବୟାନବେ' + - 'ତେୟାନବେ' + - 'ଚଉରାନବେ' + - 'ପଞ୍ଚାନବେ' + - 'ଛୟାନବେ' + - 'ସତାନବେ' + - 'ଅଠାନବେ' + - 'ଅନେଶତ' + # Odia ordinal words are gender-invariant; this engine currently requires + # both masculine and feminine blocks, so keep them identical. + # The exact replacements mirror the sourced traditional 1-20 ordinal list; + # larger values use the cardinal word plus the default suffix. + ordinal: + masculine: + defaultSuffix: 'ତମ' + exactReplacements: + 1: 'ପ୍ରଥମ' + 2: 'ଦ୍ୱିତୀୟ' + 3: 'ତୃତୀୟ' + 4: 'ଚତୁର୍ଥ' + 5: 'ପଞ୍ଚମ' + 6: 'ଷଷ୍ଠ' + 7: 'ସପ୍ତମ' + 8: 'ଅଷ୍ଟମ' + 9: 'ନବମ' + 10: 'ଦଶମ' + 11: 'ଏକାଦଶ' + 12: 'ଦ୍ୱାଦଶ' + 13: 'ତ୍ରୟୋଦଶ' + 14: 'ଚତୁର୍ଦଶ' + 15: 'ପଞ୍ଚଦଶ' + 16: 'ଷୋଡ଼ଶ' + 17: 'ସପ୍ତଦଶ' + 18: 'ଅଷ୍ଟାଦଶ' + 19: 'ଊନବିଂଶ' + 20: 'ବିଂଶ' + feminine: + defaultSuffix: 'ତମ' + exactReplacements: + 1: 'ପ୍ରଥମ' + 2: 'ଦ୍ୱିତୀୟ' + 3: 'ତୃତୀୟ' + 4: 'ଚତୁର୍ଥ' + 5: 'ପଞ୍ଚମ' + 6: 'ଷଷ୍ଠ' + 7: 'ସପ୍ତମ' + 8: 'ଅଷ୍ଟମ' + 9: 'ନବମ' + 10: 'ଦଶମ' + 11: 'ଏକାଦଶ' + 12: 'ଦ୍ୱାଦଶ' + 13: 'ତ୍ରୟୋଦଶ' + 14: 'ଚତୁର୍ଦଶ' + 15: 'ପଞ୍ଚଦଶ' + 16: 'ଷୋଡ଼ଶ' + 17: 'ସପ୍ତଦଶ' + 18: 'ଅଷ୍ଟାଦଶ' + 19: 'ଊନବିଂଶ' + 20: 'ବିଂଶ' + neuterFallback: 'masculine' + + parse: + engine: 'token-map' + normalizationProfile: 'CollapseWhitespace' + ordinalNumberToWordsKind: 'self' + ordinalGenderVariant: 'all' + useHundredMultiplier: true + tokenSuffixesToStrip: + - 'ତମ' + cardinalMap: + 'ଶୂନ୍ୟ': 0 + 'ଏକ': 1 + 'ଦୁଇ': 2 + 'ତିନି': 3 + 'ଚାରି': 4 + 'ପାଞ୍ଚ': 5 + 'ଛଅ': 6 + 'ସାତ': 7 + 'ଆଠ': 8 + 'ନଅ': 9 + 'ଦଶ': 10 + 'ଏଗାର': 11 + 'ବାର': 12 + 'ତେର': 13 + 'ଚଉଦ': 14 + 'ପନ୍ଦର': 15 + 'ଶୋଳ': 16 + 'ସତର': 17 + 'ଅଠର': 18 + 'ଉଣେଇଶ': 19 + 'କୋଡ଼ିଏ': 20 + 'ଏକୋଇଶ': 21 + 'ବାଇଶି': 22 + 'ତେଇଶି': 23 + 'ଚବିଶି': 24 + 'ପଚିଶି': 25 + 'ଛବିଶ': 26 + 'ସତାଇଶ': 27 + 'ଅଠାଇଶ': 28 + 'ଅଣତିରିଶ': 29 + 'ତିରିଶ': 30 + 'ଏକତିରିଶ': 31 + 'ବତିଶ': 32 + 'ତେତିଶ': 33 + 'ଚଉତିରିଶ': 34 + 'ପଇଁତିରିଶ': 35 + 'ଛତିଶ': 36 + 'ସତିରିଶ': 37 + 'ଅଟତିରିଶ': 38 + 'ଅଣଚାଳିଶ': 39 + 'ଚାଳିଶ': 40 + 'ଏକଚାଳିଶ': 41 + 'ବୟାଳିଶ': 42 + 'ତେୟାଳିଶ': 43 + 'ଚଉରାଳିଶ': 44 + 'ପଇଞ୍ଚାଳିଶ': 45 + 'ଛୟାଳିଶ': 46 + 'ସତଚାଳିଶ': 47 + 'ଅଟଚାଳିଶ': 48 + 'ଅଣଚାଶ': 49 + 'ପଚାଶ': 50 + 'ଏକାବନ': 51 + 'ବାଆନ': 52 + 'ତେପନ': 53 + 'ଚଉବନ': 54 + 'ପଞ୍ଚାବନ': 55 + 'ଛପନ': 56 + 'ସତାବନ': 57 + 'ଅଠାବନ': 58 + 'ଅଣଷଠି': 59 + 'ଷାଠିଏ': 60 + 'ଏକଷଠି': 61 + 'ବାଷଠି': 62 + 'ତେଷଠି': 63 + 'ଚଉଷଠି': 64 + 'ପଞ୍ଚଷଠି': 65 + 'ଛଅଷଠି': 66 + 'ସତଷଠି': 67 + 'ଅଠଷଠି': 68 + 'ଅଣସତୁରି': 69 + 'ସତୁରି': 70 + 'ଏକସ୍ତରି': 71 + 'ବାଆସ୍ତରି': 72 + 'ତେସ୍ତରି': 73 + 'ଚଉସ୍ତରି': 74 + 'ପଞ୍ଚସ୍ତରି': 75 + 'ଛଅସ୍ତରି': 76 + 'ସତସ୍ତରି': 77 + 'ଅଠସ୍ତରି': 78 + 'ଅଣାଅଶୀ': 79 + 'ଅଶୀ': 80 + 'ଏକାଶୀ': 81 + 'ବୟାଶୀ': 82 + 'ତେୟାଶୀ': 83 + 'ଚଉରାଶୀ': 84 + 'ପଞ୍ଚାଅଶୀ': 85 + 'ଛୟାଶୀ': 86 + 'ସତାଶୀ': 87 + 'ଅଠାଶୀ': 88 + 'ଅଣାନବେ': 89 + 'ନବେ': 90 + 'ଏକାନବେ': 91 + 'ବୟାନବେ': 92 + 'ତେୟାନବେ': 93 + 'ଚଉରାନବେ': 94 + 'ପଞ୍ଚାନବେ': 95 + 'ଛୟାନବେ': 96 + 'ସତାନବେ': 97 + 'ଅଠାନବେ': 98 + 'ଅନେଶତ': 99 + 'ଶୁନ': 0 + 'ଶୂନ': 0 + 'କୋଡିଏ': 20 + 'ତିରିଶି': 30 + 'ଚାଳିଶି': 40 + 'ଷାଠି': 60 + 'ଶତ': 100 + 'ଶହ': 100 + 'ହଜାର': 1000 + 'ଲକ୍ଷ': 100000 + 'ଲକ୍ଷିଆ': 100000 + 'କୋଟି': 10000000 + 'କୋରଡ଼': 10000000 + 'ଅବ୍ଜ': 1000000000 + 'ଖର୍ବ': 100000000000 + ordinalMap: + 'ପ୍ରଥମ': 1 + 'ଦ୍ୱିତୀୟ': 2 + 'ତୃତୀୟ': 3 + 'ଚତୁର୍ଥ': 4 + 'ପଞ୍ଚମ': 5 + 'ଷଷ୍ଠ': 6 + 'ସପ୍ତମ': 7 + 'ଅଷ୍ଟମ': 8 + 'ନବମ': 9 + 'ଦଶମ': 10 + 'ଏକାଦଶ': 11 + 'ଦ୍ୱାଦଶ': 12 + 'ତ୍ରୟୋଦଶ': 13 + 'ଚତୁର୍ଦଶ': 14 + 'ପଞ୍ଚଦଶ': 15 + 'ଷୋଡ଼ଶ': 16 + 'ସପ୍ତଦଶ': 17 + 'ଅଷ୍ଟାଦଶ': 18 + 'ଊନବିଂଶ': 19 + 'ବିଂଶ': 20 + negativePrefixes: + - 'ଋଣାତ୍ମକ' + - 'ମାଇନସ୍' + + ordinal: + numeric: + # Keep exact replacements in sync with number.words.ordinal above. + engine: 'number-word-suffix' + useCulture: true + masculine: + defaultSuffix: 'ତମ' + exactReplacements: + 1: 'ପ୍ରଥମ' + 2: 'ଦ୍ୱିତୀୟ' + 3: 'ତୃତୀୟ' + 4: 'ଚତୁର୍ଥ' + 5: 'ପଞ୍ଚମ' + 6: 'ଷଷ୍ଠ' + 7: 'ସପ୍ତମ' + 8: 'ଅଷ୍ଟମ' + 9: 'ନବମ' + 10: 'ଦଶମ' + 11: 'ଏକାଦଶ' + 12: 'ଦ୍ୱାଦଶ' + 13: 'ତ୍ରୟୋଦଶ' + 14: 'ଚତୁର୍ଦଶ' + 15: 'ପଞ୍ଚଦଶ' + 16: 'ଷୋଡ଼ଶ' + 17: 'ସପ୍ତଦଶ' + 18: 'ଅଷ୍ଟାଦଶ' + 19: 'ଊନବିଂଶ' + 20: 'ବିଂଶ' + neuterFallback: 'masculine' + date: + pattern: '{day} MMMM yyyy' + dayMode: 'Numeric' + calendarMode: 'Native' + dateOnly: + pattern: '{day} MMMM yyyy' + dayMode: 'Numeric' + calendarMode: 'Native' + + clock: + engine: 'phrase-clock' + hourMode: 'h12' + dayPeriodPosition: 'prefix' + hourGender: 'masculine' + minuteGender: 'masculine' + hourWordsMap: + - '' + - 'ଏକ' + - 'ଦୁଇ' + - 'ତିନି' + - 'ଚାରି' + - 'ପାଞ୍ଚ' + - 'ଛଅ' + - 'ସାତ' + - 'ଆଠ' + - 'ନଅ' + - 'ଦଶ' + - 'ଏଗାର' + - 'ବାର' + min0: '{hour}ଟା' + defaultTemplate: '{hour}ଟା {minutes} ମିନିଟ୍' + earlyMorning: 'ସକାଳ' + morning: 'ସକାଳ' + afternoon: 'ଦ୍ୱିପ୍ରହର' + night: 'ରାତି' + evening: 'ସନ୍ଧ୍ୟା' + eveningStartHour: 17 + nightStartHour: 21 + + compass: + full: + - 'ଉତ୍ତର' + - 'ଉତ୍ତର-ଉତ୍ତର-ପୂର୍ବ' + - 'ଉତ୍ତର-ପୂର୍ବ' + - 'ପୂର୍ବ-ଉତ୍ତର-ପୂର୍ବ' + - 'ପୂର୍ବ' + - 'ପୂର୍ବ-ଦକ୍ଷିଣ-ପୂର୍ବ' + - 'ଦକ୍ଷିଣ-ପୂର୍ବ' + - 'ଦକ୍ଷିଣ-ଦକ୍ଷିଣ-ପୂର୍ବ' + - 'ଦକ୍ଷିଣ' + - 'ଦକ୍ଷିଣ-ଦକ୍ଷିଣ-ପଶ୍ଚିମ' + - 'ଦକ୍ଷିଣ-ପଶ୍ଚିମ' + - 'ପଶ୍ଚିମ-ଦକ୍ଷିଣ-ପଶ୍ଚିମ' + - 'ପଶ୍ଚିମ' + - 'ପଶ୍ଚିମ-ଉତ୍ତର-ପଶ୍ଚିମ' + - 'ଉତ୍ତର-ପଶ୍ଚିମ' + - 'ଉତ୍ତର-ଉତ୍ତର-ପଶ୍ଚିମ' + short: + - 'ଉ' + - 'ଉ-ଉ-ପୂ' + - 'ଉ-ପୂ' + - 'ପୂ-ଉ-ପୂ' + - 'ପୂ' + - 'ପୂ-ଦ-ପୂ' + - 'ଦ-ପୂ' + - 'ଦ-ଦ-ପୂ' + - 'ଦ' + - 'ଦ-ଦ-ପ' + - 'ଦ-ପ' + - 'ପ-ଦ-ପ' + - 'ପ' + - 'ପ-ଉ-ପ' + - 'ଉ-ପ' + - 'ଉ-ଉ-ପ' + + calendar: + months: + - 'ଜାନୁଆରୀ' + - 'ଫେବୃଆରୀ' + - 'ମାର୍ଚ୍ଚ' + - 'ଏପ୍ରିଲ' + - 'ମେ' + - 'ଜୁନ' + - 'ଜୁଲାଇ' + - 'ଅଗଷ୍ଟ' + - 'ସେପ୍ଟେମ୍ବର' + - 'ଅକ୍ଟୋବର' + - 'ନଭେମ୍ବର' + - 'ଡିସେମ୍ବର' diff --git a/tests/Humanizer.Tests/Localisation/LocaleCoverageData.cs b/tests/Humanizer.Tests/Localisation/LocaleCoverageData.cs index 7ce13d790..88ac9e545 100644 --- a/tests/Humanizer.Tests/Localisation/LocaleCoverageData.cs +++ b/tests/Humanizer.Tests/Localisation/LocaleCoverageData.cs @@ -36,6 +36,7 @@ static class LocaleCoverageData { "cy", new(2022, 1, 25, "25 Ionawr 2022") }, { "hi", new(2022, 1, 25, "25 जनवरी 2022") }, { "ne", new(2022, 1, 25, "25 जनवरी 2022") }, + { "or", new(2022, 1, 25, "25 ଜାନୁଆରୀ 2022") }, { "mr", new(2022, 1, 25, "25 जानेवारी 2022") }, { "gu", new(2022, 1, 25, "25 જાન્યુઆરી, 2022") }, { "pa", new(2022, 1, 25, "25 ਜਨਵਰੀ 2022") }, @@ -143,6 +144,7 @@ static class LocaleCoverageData { "cy", new(2015, 1, 1, "1 Ionawr 2015") }, { "hi", new(2015, 1, 1, "1 जनवरी 2015") }, { "ne", new(2015, 1, 1, "1 जनवरी 2015") }, + { "or", new(2015, 1, 1, "1 ଜାନୁଆରୀ 2015") }, { "mr", new(2015, 1, 1, "1 जानेवारी 2015") }, { "gu", new(2015, 1, 1, "1 જાન્યુઆરી, 2015") }, { "pa", new(2015, 1, 1, "1 ਜਨਵਰੀ 2015") }, @@ -250,6 +252,7 @@ static class LocaleCoverageData { "cy", new(2015, 2, 3, "3 Chwefror 2015") }, { "hi", new(2015, 2, 3, "3 फ़रवरी 2015") }, { "ne", new(2015, 2, 3, "3 फेब्रुअरी 2015") }, + { "or", new(2015, 2, 3, "3 ଫେବୃଆରୀ 2015") }, { "mr", new(2015, 2, 3, "3 फेब्रुवारी 2015") }, { "gu", new(2015, 2, 3, "3 ફેબ્રુઆરી, 2015") }, { "pa", new(2015, 2, 3, "3 ਫ਼ਰਵਰੀ 2015") }, @@ -341,6 +344,7 @@ static class LocaleCoverageData { "am", new(2020, 2, 29, "29 ፌብሩዋሪ 2020") }, { "hi", new(2020, 2, 29, "29 फ़रवरी 2020") }, + { "or", new(2020, 2, 29, "29 ଫେବୃଆରୀ 2020") }, { "ne", new(2020, 2, 29, "29 फेब्रुअरी 2020") }, { "mr", new(2020, 2, 29, "29 फेब्रुवारी 2020") }, { "gu", new(2020, 2, 29, "29 ફેબ્રુઆરી, 2020") }, @@ -366,6 +370,7 @@ static class LocaleCoverageData { "am", new(2015, 9, 4, "4 ሴፕቴምበር 2015") }, { "hi", new(2015, 9, 4, "4 सितंबर 2015") }, + { "or", new(2015, 9, 4, "4 ସେପ୍ଟେମ୍ବର 2015") }, { "ne", new(2015, 9, 4, "4 सेप्टेम्बर 2015") }, { "gu", new(2015, 9, 4, "4 સપ્ટેમ્બર, 2015") }, { "pa", new(2015, 9, 4, "4 ਸਤੰਬਰ 2015") }, @@ -390,6 +395,7 @@ static class LocaleCoverageData { "am", new(1979, 11, 7, "7 ኖቬምበር 1979") }, { "hi", new(1979, 11, 7, "7 नवंबर 1979") }, + { "or", new(1979, 11, 7, "7 ନଭେମ୍ବର 1979") }, { "ne", new(1979, 11, 7, "7 नोभेम्बर 1979") }, { "gu", new(1979, 11, 7, "7 નવેમ્બર, 1979") }, { "pa", new(1979, 11, 7, "7 ਨਵੰਬਰ 1979") }, @@ -414,6 +420,7 @@ static class LocaleCoverageData { "am", new(2020, 3, 2, "2 ማርች 2020") }, { "hi", new(2020, 3, 2, "2 मार्च 2020") }, + { "or", new(2020, 3, 2, "2 ମାର୍ଚ୍ଚ 2020") }, { "ne", new(2020, 3, 2, "2 मार्च 2020") }, { "gu", new(2020, 3, 2, "2 માર્ચ, 2020") }, { "pa", new(2020, 3, 2, "2 ਮਾਰਚ 2020") }, @@ -437,6 +444,7 @@ static class LocaleCoverageData { "am", new(2021, 10, 31, "31 ኦክቶበር 2021") }, { "hi", new(2021, 10, 31, "31 अक्टूबर 2021") }, + { "or", new(2021, 10, 31, "31 ଅକ୍ଟୋବର 2021") }, { "ne", new(2021, 10, 31, "31 अक्टोबर 2021") }, { "mr", new(2021, 10, 31, "31 ऑक्टोबर 2021") }, { "gu", new(2021, 10, 31, "31 ઑક્ટોબર, 2021") }, @@ -461,6 +469,7 @@ static class LocaleCoverageData { "am", new(2024, 12, 31, "31 ዲሴምበር 2024") }, { "hi", new(2024, 12, 31, "31 दिसंबर 2024") }, + { "or", new(2024, 12, 31, "31 ଡିସେମ୍ବର 2024") }, { "ne", new(2024, 12, 31, "31 डिसेम्बर 2024") }, { "mr", new(2024, 12, 31, "31 डिसेंबर 2024") }, { "gu", new(2024, 12, 31, "31 ડિસેમ્બર, 2024") }, @@ -504,6 +513,7 @@ static class LocaleCoverageData { "yo", new(13, 23, "aago kan kọjá ìṣẹ́jú mẹ́tàlélógún ọ̀sán") }, { "cy", new(13, 23, "dau ddeg tri munud wedi un y prynhawn") }, { "hi", new(13, 23, "दोपहर एक बजकर तेईस मिनट") }, + { "or", new(13, 23, "ଦ୍ୱିପ୍ରହର ଏକଟା ତେଇଶି ମିନିଟ୍") }, { "ne", new(13, 23, "दिउँसो एक बजेर तेइस मिनेट") }, { "mr", new(13, 23, "दुपारी एक वाजून तेवीस मिनिटे") }, { "gu", new(13, 23, "બપોરે એક વાગીને તેવીસ મિનિટ") }, @@ -611,6 +621,7 @@ static class LocaleCoverageData { "yo", new(13, 23, "aago kan kọjá ìṣẹ́jú márùndínlọ́gbọ̀n ọ̀sán") }, { "cy", new(13, 23, "dau ddeg pump munud wedi un y prynhawn") }, { "hi", new(13, 23, "दोपहर एक बजकर पच्चीस मिनट") }, + { "or", new(13, 23, "ଦ୍ୱିପ୍ରହର ଏକଟା ପଚିଶି ମିନିଟ୍") }, { "ne", new(13, 23, "दिउँसो एक बजेर पच्चिस मिनेट") }, { "mr", new(13, 23, "दुपारी एक वाजून पंचवीस मिनिटे") }, { "gu", new(13, 23, "બપોરે એક વાગીને પચ્ચીસ મિનિટ") }, @@ -718,6 +729,7 @@ static class LocaleCoverageData { "yo", new(1, 5, "aago kan kọjá ìṣẹ́jú márùn-ún àárọ̀") }, { "cy", new(1, 5, "pump munud wedi un y bore") }, { "hi", new(1, 5, "सुबह एक बजकर पाँच मिनट") }, + { "or", new(1, 5, "ସକାଳ ଏକଟା ପାଞ୍ଚ ମିନିଟ୍") }, { "ne", new(1, 5, "राति एक बजेर पाँच मिनेट") }, { "mr", new(1, 5, "पहाटे एक वाजून पाच मिनिटे") }, { "gu", new(1, 5, "સવારે એક વાગીને પાંચ મિનિટ") }, @@ -848,10 +860,12 @@ static class LocaleCoverageData { "de", new(20, 59, "acht Uhr neunundfünfzig") }, { "el", new(13, 0, "μία το απόγευμα") }, { "hi", new(18, 0, "शाम छह बजे") }, + { "or", new(18, 0, "ସନ୍ଧ୍ୟା ଛଅଟା") }, { "ne", new(18, 0, "साँझ छ बजे") }, { "pa", new(18, 0, "ਸ਼ਾਮ ਛੇ ਵਜੇ") }, { "pa-Arab", new(18, 0, "شام چھے وجے") }, { "hi", new(21, 0, "रात नौ बजे") }, + { "or", new(21, 0, "ରାତି ନଅଟା") }, { "ne", new(21, 0, "राति नौ बजे") }, { "mr", new(18, 0, "संध्याकाळी सहा वाजले") }, { "pa", new(18, 0, "ਸ਼ਾਮ ਛੇ ਵਜੇ") }, @@ -1237,6 +1251,7 @@ static class LocaleCoverageData { "cy", "ddoe", "2 diwrnod" }, { "hi", "कल", "2 दिन" }, { "ne", "हिजो", "2 दिन" }, + { "or", "ଗତକାଲି", "2 ଦିନ" }, { "mr", "काल", "2 दिवस" }, { "gu", "ગઈકાલે", "2 દિવસ" }, @@ -1344,6 +1359,7 @@ static class LocaleCoverageData { "cy", "1 a 2", "1, 2 a 3" }, { "hi", "1 और 2", "1, 2 और 3" }, { "ne", "1 र 2", "1, 2 र 3" }, + { "or", "1 ଏବଂ 2", "1, 2 ଏବଂ 3" }, { "mr", "1 आणि 2", "1, 2 आणि 3" }, { "gu", "1 અને 2", "1, 2 અને 3" }, @@ -1450,6 +1466,7 @@ static class LocaleCoverageData { "yo", 1, "àkọ́kọ́" }, { "cy", 1, "cyntaf" }, { "hi", 1, "पहली" }, + { "or", 1, "ପ୍ରଥମ" }, { "ne", 1, "पहिली" }, { "mr", 1, "पहिली" }, @@ -1557,6 +1574,7 @@ static class LocaleCoverageData { "yo", 1, "ọ̀kan" }, { "cy", 1, "un" }, { "hi", 1, "एक" }, + { "or", 1, "ଏକ" }, { "ne", 1, "एक" }, { "mr", 1, "एक" }, @@ -1702,6 +1720,7 @@ static class LocaleCoverageData { "yo", 21, "ọ̀kanlélógún" }, { "cy", 21, "dau ddeg un" }, { "hi", 21, "इक्कीस" }, + { "or", 21, "ଏକୋଇଶ" }, { "ne", 21, "एक्काइस" }, { "mr", 21, "एकवीस" }, diff --git a/tests/Humanizer.Tests/Localisation/LocaleFormatterExactTheoryData.cs b/tests/Humanizer.Tests/Localisation/LocaleFormatterExactTheoryData.cs index d15ebffde..841668d9d 100644 --- a/tests/Humanizer.Tests/Localisation/LocaleFormatterExactTheoryData.cs +++ b/tests/Humanizer.Tests/Localisation/LocaleFormatterExactTheoryData.cs @@ -276,6 +276,7 @@ public readonly record struct CardinalHeadingExpectationRow( { "zu-ZA", new("2 izinsuku ezedlule", "3 izinsuku ezedlule", "4 izinsuku ezedlule", "5 izinsuku ezedlule", "11 izinsuku ezedlule", "21 izinsuku ezedlule", "2 izinsuku ezizayo", "3 izinsuku ezizayo", "4 izinsuku ezizayo", "5 izinsuku ezizayo", "11 izinsuku ezizayo", "21 izinsuku ezizayo") }, { "hi", new("2 दिन पहले", "3 दिन पहले", "4 दिन पहले", "5 दिन पहले", "11 दिन पहले", "21 दिन पहले", "2 दिन में", "3 दिन में", "4 दिन में", "5 दिन में", "11 दिन में", "21 दिन में") }, + { "or", new("2 ଦିନ ପୂର୍ବରୁ", "3 ଦିନ ପୂର୍ବରୁ", "4 ଦିନ ପୂର୍ବରୁ", "5 ଦିନ ପୂର୍ବରୁ", "11 ଦିନ ପୂର୍ବରୁ", "21 ଦିନ ପୂର୍ବରୁ", "2 ଦିନ ପରେ", "3 ଦିନ ପରେ", "4 ଦିନ ପରେ", "5 ଦିନ ପରେ", "11 ଦିନ ପରେ", "21 ଦିନ ପରେ") }, { "gu", new("2 દિવસ પહેલાં", "3 દિવસ પહેલાં", "4 દિવસ પહેલાં", "5 દિવસ પહેલાં", "11 દિવસ પહેલાં", "21 દિવસ પહેલાં", "2 દિવસમાં", "3 દિવસમાં", "4 દિવસમાં", "5 દિવસમાં", "11 દિવસમાં", "21 દિવસમાં") }, { "pa", new("2 ਦਿਨ ਪਹਿਲਾਂ", "3 ਦਿਨ ਪਹਿਲਾਂ", "4 ਦਿਨ ਪਹਿਲਾਂ", "5 ਦਿਨ ਪਹਿਲਾਂ", "11 ਦਿਨ ਪਹਿਲਾਂ", "21 ਦਿਨ ਪਹਿਲਾਂ", "2 ਦਿਨ ਵਿੱਚ", "3 ਦਿਨ ਵਿੱਚ", "4 ਦਿਨ ਵਿੱਚ", "5 ਦਿਨ ਵਿੱਚ", "11 ਦਿਨ ਵਿੱਚ", "21 ਦਿਨ ਵਿੱਚ") }, { "pa-Arab", new("2 دن پہلاں", "3 دن پہلاں", "4 دن پہلاں", "5 دن پہلاں", "11 دن پہلاں", "21 دن پہلاں", "2 دن وچ", "3 دن وچ", "4 دن وچ", "5 دن وچ", "11 دن وچ", "21 دن وچ") }, @@ -383,6 +384,7 @@ public readonly record struct CardinalHeadingExpectationRow( { "zu-ZA", new("2 amaviki, 1 usuku na 1 ihora", "1 usuku, 3 amaminithi na 4 amasekhondi", "1 usuku na 3 amaminithi") }, { "hi", new("2 सप्ताह, 1 दिन और 1 घंटा", "1 दिन, 3 मिनट और 4 सेकंड", "1 दिन और 3 मिनट") }, + { "or", new("2 ସପ୍ତାହ, 1 ଦିନ ଏବଂ 1 ଘଣ୍ଟା", "1 ଦିନ, 3 ମିନିଟ୍ ଏବଂ 4 ସେକେଣ୍ଡ", "1 ଦିନ ଏବଂ 3 ମିନିଟ୍") }, { "gu", new("2 અઠવાડિયા, 1 દિવસ અને 1 કલાક", "1 દિવસ, 3 મિનિટ અને 4 સેકંડ", "1 દિવસ અને 3 મિનિટ") }, { "pa", new("2 ਹਫ਼ਤੇ, 1 ਦਿਨ ਅਤੇ 1 ਘੰਟਾ", "1 ਦਿਨ, 3 ਮਿੰਟ ਅਤੇ 4 ਸਕਿੰਟ", "1 ਦਿਨ ਅਤੇ 3 ਮਿੰਟ") }, { "pa-Arab", new("2 ہفتے, 1 دن اتے 1 گھنٹہ", "1 دن, 3 منٹ اتے 4 سیکنڈ", "1 دن اتے 3 منٹ") }, @@ -511,6 +513,7 @@ public readonly record struct CardinalHeadingExpectationRow( { "zu-ZA", new("imilisekhondi", "isekhondi", "iminithi", "ihora", "usuku", "iviki", "inyanga", "unyaka") }, { "hi", new("मिलीसेकंड", "सेकंड", "मिनट", "घंटा", "दिन", "सप्ताह", "महीना", "साल") }, + { "or", new("ମିଲିସେକେଣ୍ଡ", "ସେକେଣ୍ଡ", "ମିନିଟ୍", "ଘଣ୍ଟା", "ଦିନ", "ସପ୍ତାହ", "ମାସ", "ବର୍ଷ") }, { "gu", new("મિલિસેકંડ", "સેકંડ", "મિનિટ", "કલાક", "દિવસ", "અઠવાડિયું", "મહિનો", "વર્ષ") }, { "pa", new("ਮਿਲੀਸਕਿੰਟ", "ਸਕਿੰਟ", "ਮਿੰਟ", "ਘੰਟਾ", "ਦਿਨ", "ਹਫ਼ਤਾ", "ਮਹੀਨਾ", "ਸਾਲ") }, { "pa-Arab", new("ملی سیکنڈ", "سیکنڈ", "منٹ", "گھنٹہ", "دن", "ہفتہ", "مہینہ", "سال") }, @@ -618,6 +621,7 @@ public readonly record struct CardinalHeadingExpectationRow( { "zu-ZA", new("1 b", "2 B", "1.95 KB", "2048 KB") }, { "hi", new("1 b", "2 B", "1.95 KB", "2048 KB") }, + { "or", new("1 b", "2 B", "1.95 KB", "2048 KB") }, { "gu", new("1 b", "2 B", "1.95 KB", "2048 KB") }, { "pa", new("1 b", "2 B", "1.95 KB", "2048 KB") }, { "pa-Arab", new("1 b", "2 B", "1٫95 KB", "2048 KB") }, @@ -725,6 +729,7 @@ public readonly record struct CardinalHeadingExpectationRow( { "zu-ZA", new("1 i-bit", "1 i-byte", "2 ama-bytes", "2 ama-kilobytes", "2 ama-megabytes") }, { "hi", new("1 बिट", "1 बाइट", "2 बाइट", "2 किलोबाइट", "2 मेगाबाइट") }, + { "or", new("1 ବିଟ", "1 ବାଇଟ୍", "2 ବାଇଟ୍", "2 କିଲୋବାଇଟ୍", "2 ମେଗାବାଇଟ୍") }, { "gu", new("1 બિટ", "1 બાઇટ", "2 બાઇટ", "2 કિલોબાઇટ", "2 મેગાબાઇટ") }, { "pa", new("1 ਬਿਟ", "1 ਬਾਈਟ", "2 ਬਾਈਟ", "2 ਕਿਲੋਬਾਈਟ", "2 ਮੇਗਾਬਾਈਟ") }, { "pa-Arab", new("1 بٹ", "1 بائٹ", "2 بائٹ", "2 کلو بائٹ", "2 میگا بائٹ") }, @@ -832,6 +837,7 @@ public readonly record struct CardinalHeadingExpectationRow( { "zu-ZA", new("1 na 2", "1, 2 na 3", "1, 2, 3 na 4") }, { "hi", new("1 और 2", "1, 2 और 3", "1, 2, 3 और 4") }, + { "or", new("1 ଏବଂ 2", "1, 2 ଏବଂ 3", "1, 2, 3 ଏବଂ 4") }, { "gu", new("1 અને 2", "1, 2 અને 3", "1, 2, 3 અને 4") }, { "pa", new("1 ਅਤੇ 2", "1, 2 ਅਤੇ 3", "1, 2, 3 ਅਤੇ 4") }, { "pa-Arab", new("1 اتے 2", "1, 2 اتے 3", "1, 2, 3 اتے 4") }, @@ -941,6 +947,7 @@ public readonly record struct CardinalHeadingExpectationRow( { "zu-ZA", new("N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "enyakatho", "enyakatho-enyakatho-mpumalanga", "enyakatho-mpumalanga", "empumalanga-enyakatho-mpumalanga", "empumalanga", "empumalanga-eningizimu-mpumalanga", "eningizimu-mpumalanga", "eningizimu-eningizimu-mpumalanga", "eningizimu", "eningizimu-eningizimu-ntshonalanga", "eningizimu-ntshonalanga", "entshonalanga-eningizimu-ntshonalanga", "entshonalanga", "entshonalanga-enyakatho-ntshonalanga", "enyakatho-ntshonalanga", "enyakatho-enyakatho-ntshonalanga") }, { "hi", new("उ", "उ-उ-पू", "उ-पू", "पू-उ-पू", "पू", "पू-द-पू", "द-पू", "द-द-पू", "द", "द-द-प", "द-प", "प-द-प", "प", "प-उ-प", "उ-प", "उ-उ-प", "उत्तर", "उत्तर-उत्तर-पूर्व", "उत्तर-पूर्व", "पूर्व-उत्तर-पूर्व", "पूर्व", "पूर्व-दक्षिण-पूर्व", "दक्षिण-पूर्व", "दक्षिण-दक्षिण-पूर्व", "दक्षिण", "दक्षिण-दक्षिण-पश्चिम", "दक्षिण-पश्चिम", "पश्चिम-दक्षिण-पश्चिम", "पश्चिम", "पश्चिम-उत्तर-पश्चिम", "उत्तर-पश्चिम", "उत्तर-उत्तर-पश्चिम") }, + { "or", new("ଉ", "ଉ-ଉ-ପୂ", "ଉ-ପୂ", "ପୂ-ଉ-ପୂ", "ପୂ", "ପୂ-ଦ-ପୂ", "ଦ-ପୂ", "ଦ-ଦ-ପୂ", "ଦ", "ଦ-ଦ-ପ", "ଦ-ପ", "ପ-ଦ-ପ", "ପ", "ପ-ଉ-ପ", "ଉ-ପ", "ଉ-ଉ-ପ", "ଉତ୍ତର", "ଉତ୍ତର-ଉତ୍ତର-ପୂର୍ବ", "ଉତ୍ତର-ପୂର୍ବ", "ପୂର୍ବ-ଉତ୍ତର-ପୂର୍ବ", "ପୂର୍ବ", "ପୂର୍ବ-ଦକ୍ଷିଣ-ପୂର୍ବ", "ଦକ୍ଷିଣ-ପୂର୍ବ", "ଦକ୍ଷିଣ-ଦକ୍ଷିଣ-ପୂର୍ବ", "ଦକ୍ଷିଣ", "ଦକ୍ଷିଣ-ଦକ୍ଷିଣ-ପଶ୍ଚିମ", "ଦକ୍ଷିଣ-ପଶ୍ଚିମ", "ପଶ୍ଚିମ-ଦକ୍ଷିଣ-ପଶ୍ଚିମ", "ପଶ୍ଚିମ", "ପଶ୍ଚିମ-ଉତ୍ତର-ପଶ୍ଚିମ", "ଉତ୍ତର-ପଶ୍ଚିମ", "ଉତ୍ତର-ଉତ୍ତର-ପଶ୍ଚିମ") }, { "gu", new("ઉ", "ઉ-ઉ-પૂ", "ઉ-પૂ", "પૂ-ઉ-પૂ", "પૂ", "પૂ-દ-પૂ", "દ-પૂ", "દ-દ-પૂ", "દ", "દ-દ-પ", "દ-પ", "પ-દ-પ", "પ", "પ-ઉ-પ", "ઉ-પ", "ઉ-ઉ-પ", "ઉત્તર", "ઉત્તર-ઉત્તર-પૂર્વ", "ઉત્તર-પૂર્વ", "પૂર્વ-ઉત્તર-પૂર્વ", "પૂર્વ", "પૂર્વ-દક્ષિણ-પૂર્વ", "દક્ષિણ-પૂર્વ", "દક્ષિણ-દક્ષિણ-પૂર્વ", "દક્ષિણ", "દક્ષિણ-દક્ષિણ-પશ્ચિમ", "દક્ષિણ-પશ્ચિમ", "પશ્ચિમ-દક્ષિણ-પશ્ચિમ", "પશ્ચિમ", "પશ્ચિમ-ઉત્તર-પશ્ચિમ", "ઉત્તર-પશ્ચિમ", "ઉત્તર-ઉત્તર-પશ્ચિમ") }, { "pa", new("ਉੱ", "ਉੱ-ਉੱ-ਪੂ", "ਉੱ-ਪੂ", "ਪੂ-ਉੱ-ਪੂ", "ਪੂ", "ਪੂ-ਦੱਖ-ਪੂ", "ਦੱਖ-ਪੂ", "ਦੱਖ-ਦੱਖ-ਪੂ", "ਦੱਖ", "ਦੱਖ-ਦੱਖ-ਪੱਛ", "ਦੱਖ-ਪੱਛ", "ਪੱਛ-ਦੱਖ-ਪੱਛ", "ਪੱਛ", "ਪੱਛ-ਉੱ-ਪੱਛ", "ਉੱ-ਪੱਛ", "ਉੱ-ਉੱ-ਪੱਛ", "ਉੱਤਰ", "ਉੱਤਰ-ਉੱਤਰ-ਪੂਰਬ", "ਉੱਤਰ-ਪੂਰਬ", "ਪੂਰਬ-ਉੱਤਰ-ਪੂਰਬ", "ਪੂਰਬ", "ਪੂਰਬ-ਦੱਖਣ-ਪੂਰਬ", "ਦੱਖਣ-ਪੂਰਬ", "ਦੱਖਣ-ਦੱਖਣ-ਪੂਰਬ", "ਦੱਖਣ", "ਦੱਖਣ-ਦੱਖਣ-ਪੱਛਮ", "ਦੱਖਣ-ਪੱਛਮ", "ਪੱਛਮ-ਦੱਖਣ-ਪੱਛਮ", "ਪੱਛਮ", "ਪੱਛਮ-ਉੱਤਰ-ਪੱਛਮ", "ਉੱਤਰ-ਪੱਛਮ", "ਉੱਤਰ-ਉੱਤਰ-ਪੱਛਮ") }, { "pa-Arab", new("ا", "ا-ا-پو", "ا-پو", "پو-ا-پو", "پو", "پو-دکھ-پو", "دکھ-پو", "دکھ-دکھ-پو", "دکھ", "دکھ-دکھ-پچھ", "دکھ-پچھ", "پچھ-دکھ-پچھ", "پچھ", "پچھ-ا-پچھ", "ا-پچھ", "ا-ا-پچھ", "اتر", "اتر-اتر-پورب", "اتر-پورب", "پورب-اتر-پورب", "پورب", "پورب-دکھن-پورب", "دکھن-پورب", "دکھن-دکھن-پورب", "دکھن", "دکھن-دکھن-پچھم", "دکھن-پچھم", "پچھم-دکھن-پچھم", "پچھم", "پچھم-اتر-پچھم", "اتر-پچھم", "اتر-اتر-پچھم") }, @@ -1048,6 +1055,7 @@ public readonly record struct CardinalHeadingExpectationRow( { "zu-ZA", new("N", "E", "S", "W") }, { "hi", new("उ", "पू", "द", "प") }, + { "or", new("ଉ", "ପୂ", "ଦ", "ପ") }, { "gu", new("ઉ", "પૂ", "દ", "પ") }, { "pa", new("ਉੱ", "ਪੂ", "ਦੱਖ", "ਪੱਛ") }, { "pa-Arab", new("ا", "پو", "دکھ", "پچھ") }, diff --git a/tests/Humanizer.Tests/Localisation/LocaleNumberMagnitudeTheoryData.cs b/tests/Humanizer.Tests/Localisation/LocaleNumberMagnitudeTheoryData.cs index b3485e34e..d5fcecd30 100644 --- a/tests/Humanizer.Tests/Localisation/LocaleNumberMagnitudeTheoryData.cs +++ b/tests/Humanizer.Tests/Localisation/LocaleNumberMagnitudeTheoryData.cs @@ -196,6 +196,7 @@ public static class LocaleNumberMagnitudeTheoryData { "zu-ZA", 1000001L, "kanye isigidi kanye" }, { "hi", 1234567L, "बारह लाख चौंतीस हज़ार पाँच सौ सड़सठ" }, + { "or", 1234567L, "ବାର ଲକ୍ଷ ଚଉତିରିଶ ହଜାର ପାଞ୍ଚ ଶହ ସତଷଠି" }, { "gu", 1234567L, "બાર લાખ ચોત્રીસ હજાર પાંચસો સડસઠ" }, { "pa", 1234567L, "ਬਾਰਾਂ ਲੱਖ ਚੌਂਤੀ ਹਜ਼ਾਰ ਪੰਜ ਸੌ ਸਤਾਹਠ" }, { "pa-Arab", 1234567L, "باراں لکھ چونتی ہزار پنج سو ستاہٹھ" }, @@ -512,6 +513,7 @@ public static class LocaleNumberMagnitudeTheoryData { "zu-ZA", 4325010007018L, "kune itriliyoni kuthathu ikhulu na amashumi amabili kuhlanu ibhiliyoni ishumi isigidi isikhombisa inkulungwane ishumi nesishiyagalombili" }, { "hi", 123456789L, "बारह करोड़ चौंतीस लाख छप्पन हज़ार सात सौ नवासी" }, + { "or", 123456789L, "ବାର କୋଟି ଚଉତିରିଶ ଲକ୍ଷ ଛପନ ହଜାର ସାତ ଶହ ଅଣାନବେ" }, { "gu", 123456789L, "બાર કરોડ ચોત્રીસ લાખ છપ્પન હજાર સાતસો નેવ્યાસી" }, { "pa", 123456789L, "ਬਾਰਾਂ ਕਰੋੜ ਚੌਂਤੀ ਲੱਖ ਛਪੰਜਾ ਹਜ਼ਾਰ ਸੱਤ ਸੌ ਉਨਾਨਵੇਂ" }, { "pa-Arab", 123456789L, "باراں کروڑ چونتی لکھ چھپنجا ہزار ست سو انانویں" }, diff --git a/tests/Humanizer.Tests/Localisation/LocaleNumberOverloadTheoryData.cs b/tests/Humanizer.Tests/Localisation/LocaleNumberOverloadTheoryData.cs index d421d3078..ab0e09392 100644 --- a/tests/Humanizer.Tests/Localisation/LocaleNumberOverloadTheoryData.cs +++ b/tests/Humanizer.Tests/Localisation/LocaleNumberOverloadTheoryData.cs @@ -243,6 +243,7 @@ public static class LocaleNumberOverloadTheoryData { "zu-ZA", 4325010007018L, "kune itriliyoni kuthathu ikhulu na amashumi amabili kuhlanu ibhiliyoni ishumi isigidi isikhombisa inkulungwane ishumi nesishiyagalombili" }, { "hi", 1001001L, "दस लाख एक हज़ार एक" }, + { "or", 1001001L, "ଦଶ ଲକ୍ଷ ଏକ ହଜାର ଏକ" }, { "gu", 1001001L, "દસ લાખ એક હજાર એક" }, { "pa", 1001001L, "ਦਸ ਲੱਖ ਇੱਕ ਹਜ਼ਾਰ ਇੱਕ" }, { "pa-Arab", 1001001L, "دس لکھ اک ہزار اک" }, @@ -499,6 +500,7 @@ public static class LocaleNumberOverloadTheoryData { "zu-ZA", 4325010007018L, "kune itriliyoni kuthathu ikhulu na amashumi amabili kuhlanu ibhiliyoni ishumi isigidi isikhombisa inkulungwane ishumi nesishiyagalombili" }, { "hi", 1001001L, "दस लाख एक हज़ार एक" }, + { "or", 1001001L, "ଦଶ ଲକ୍ଷ ଏକ ହଜାର ଏକ" }, { "pa", 1001001L, "ਦਸ ਲੱਖ ਇੱਕ ਹਜ਼ਾਰ ਇੱਕ" }, { "pa-Arab", 1001001L, "دس لکھ اک ہزار اک" }, { "mr", 1001001L, "दहा लाख एक हजार एक" }, @@ -754,6 +756,7 @@ public static class LocaleNumberOverloadTheoryData { "zu-ZA", 4325010007018L, "kune itriliyoni kuthathu ikhulu na amashumi amabili kuhlanu ibhiliyoni ishumi isigidi isikhombisa inkulungwane ishumi nesishiyagalombili" }, { "hi", 1001001L, "दस लाख एक हज़ार एक" }, + { "or", 1001001L, "ଦଶ ଲକ୍ଷ ଏକ ହଜାର ଏକ" }, { "pa", 1001001L, "ਦਸ ਲੱਖ ਇੱਕ ਹਜ਼ਾਰ ਇੱਕ" }, { "pa-Arab", 1001001L, "دس لکھ اک ہزار اک" }, { "mr", 1001001L, "दहा लाख एक हजार एक" }, @@ -1009,6 +1012,7 @@ public static class LocaleNumberOverloadTheoryData { "zu-ZA", 4325010007018L, "kune itriliyoni kuthathu ikhulu na amashumi amabili kuhlanu ibhiliyoni ishumi isigidi isikhombisa inkulungwane ishumi nesishiyagalombili" }, { "hi", 1001001L, "दस लाख एक हज़ार एक" }, + { "or", 1001001L, "ଦଶ ଲକ୍ଷ ଏକ ହଜାର ଏକ" }, { "pa", 1001001L, "ਦਸ ਲੱਖ ਇੱਕ ਹਜ਼ਾਰ ਇੱਕ" }, { "pa-Arab", 1001001L, "دس لکھ اک ہزار اک" }, { "mr", 1001001L, "दहा लाख एक हजार एक" }, diff --git a/tests/Humanizer.Tests/Localisation/LocaleNumberTheoryData.cs b/tests/Humanizer.Tests/Localisation/LocaleNumberTheoryData.cs index ad59f95da..45a588c93 100644 --- a/tests/Humanizer.Tests/Localisation/LocaleNumberTheoryData.cs +++ b/tests/Humanizer.Tests/Localisation/LocaleNumberTheoryData.cs @@ -3001,38 +3001,47 @@ static class LocaleNumberTheoryData { "zu-ZA", 1001, "kanye inkulungwane kanye" }, { "hi", 0, "शून्य" }, + { "or", 0, "ଶୂନ୍ୟ" }, { "gu", 0, "શૂન્ય" }, { "pa", 0, "ਸਿਫ਼ਰ" }, { "pa-Arab", 0, "صفر" }, { "hi", 1, "एक" }, + { "or", 1, "ଏକ" }, { "gu", 1, "એક" }, { "pa", 1, "ਇੱਕ" }, { "pa-Arab", 1, "اک" }, { "hi", 2, "दो" }, + { "or", 2, "ଦୁଇ" }, { "gu", 2, "બે" }, { "pa", 2, "ਦੋ" }, { "pa-Arab", 2, "دو" }, { "hi", 21, "इक्कीस" }, + { "or", 21, "ଏକୋଇଶ" }, { "gu", 21, "એકવીસ" }, { "pa", 21, "ਇੱਕੀ" }, { "pa-Arab", 21, "اکی" }, { "hi", 100, "एक सौ" }, + { "or", 100, "ଏକ ଶହ" }, { "gu", 100, "એકસો" }, { "pa", 100, "ਇੱਕ ਸੌ" }, { "pa-Arab", 100, "اک سو" }, { "hi", 101, "एक सौ एक" }, + { "or", 101, "ଏକ ଶହ ଏକ" }, { "gu", 101, "એકસો એક" }, { "pa", 101, "ਇੱਕ ਸੌ ਇੱਕ" }, { "pa-Arab", 101, "اک سو اک" }, { "hi", 1000, "एक हज़ार" }, + { "or", 1000, "ଏକ ହଜାର" }, { "gu", 1000, "એક હજાર" }, { "pa", 1000, "ਇੱਕ ਹਜ਼ਾਰ" }, { "pa-Arab", 1000, "اک ہزار" }, { "hi", 100000, "एक लाख" }, + { "or", 100000, "ଏକ ଲକ୍ଷ" }, { "gu", 100000, "એક લાખ" }, { "pa", 100000, "ਇੱਕ ਲੱਖ" }, { "pa-Arab", 100000, "اک لکھ" }, { "hi", 12345678, "एक करोड़ तेईस लाख पैंतालीस हज़ार छह सौ अठहत्तर" }, + { "or", 12345678, "ଏକ କୋଟି ତେଇଶି ଲକ୍ଷ ପଇଞ୍ଚାଳିଶ ହଜାର ଛଅ ଶହ ଅଠସ୍ତରି" }, { "gu", 12345678, "એક કરોડ તેવીસ લાખ પિસ્તાલીસ હજાર છસો અઠ્યોતેર" }, { "pa", 12345678, "ਇੱਕ ਕਰੋੜ ਤੇਈ ਲੱਖ ਪੰਤਾਲੀ ਹਜ਼ਾਰ ਛੇ ਸੌ ਅਠੱਤਰ" }, { "pa-Arab", 12345678, "اک کروڑ تےئی لکھ پنتالی ہزار چھے سو اٹھتر" }, @@ -3972,10 +3981,12 @@ static class LocaleNumberTheoryData { "zu-ZA", 1001, false, "kanye inkulungwane kanye" }, { "hi", 101, true, "एक सौ एक" }, + { "or", 101, true, "ଏକ ଶହ ଏକ" }, { "gu", 101, true, "એકસો એક" }, { "pa", 101, true, "ਇੱਕ ਸੌ ਇੱਕ" }, { "pa-Arab", 101, true, "اک سو اک" }, { "hi", 101, false, "एक सौ एक" }, + { "or", 101, false, "ଏକ ଶହ ଏକ" }, { "gu", 101, false, "એકસો એક" }, { "pa", 101, false, "ਇੱਕ ਸੌ ਇੱਕ" }, { "pa-Arab", 101, false, "اک سو اک" }, @@ -4440,6 +4451,7 @@ static class LocaleNumberTheoryData { "zu-ZA", 1001, WordForm.Abbreviation, "kanye inkulungwane kanye" }, { "hi", 21, WordForm.Abbreviation, "इक्कीस" }, + { "or", 21, WordForm.Abbreviation, "ଏକୋଇଶ" }, { "gu", 21, WordForm.Abbreviation, "એકવીસ" }, { "pa", 21, WordForm.Abbreviation, "ਇੱਕੀ" }, { "pa-Arab", 21, WordForm.Abbreviation, "اکی" }, @@ -4934,14 +4946,17 @@ static class LocaleNumberTheoryData { "zu-ZA", 1, GrammaticalGender.Neuter, "kanye" }, { "hi", 2, GrammaticalGender.Masculine, "दो" }, + { "or", 2, GrammaticalGender.Masculine, "ଦୁଇ" }, { "gu", 2, GrammaticalGender.Masculine, "બે" }, { "pa", 2, GrammaticalGender.Masculine, "ਦੋ" }, { "pa-Arab", 2, GrammaticalGender.Masculine, "دو" }, { "hi", 2, GrammaticalGender.Feminine, "दो" }, + { "or", 2, GrammaticalGender.Feminine, "ଦୁଇ" }, { "gu", 2, GrammaticalGender.Feminine, "બે" }, { "pa", 2, GrammaticalGender.Feminine, "ਦੋ" }, { "pa-Arab", 2, GrammaticalGender.Feminine, "دو" }, { "hi", 2, GrammaticalGender.Neuter, "दो" }, + { "or", 2, GrammaticalGender.Neuter, "ଦୁଇ" }, { "gu", 2, GrammaticalGender.Neuter, "બે" }, { "pa", 2, GrammaticalGender.Neuter, "ਦੋ" }, { "pa-Arab", 2, GrammaticalGender.Neuter, "دو" }, @@ -5237,14 +5252,17 @@ static class LocaleNumberTheoryData { "zu-ZA", 21, WordForm.Abbreviation, GrammaticalGender.Neuter, "amashumi amabili kanye" }, { "hi", 2, WordForm.Abbreviation, GrammaticalGender.Masculine, "दो" }, + { "or", 2, WordForm.Abbreviation, GrammaticalGender.Masculine, "ଦୁଇ" }, { "gu", 2, WordForm.Abbreviation, GrammaticalGender.Masculine, "બે" }, { "pa", 2, WordForm.Abbreviation, GrammaticalGender.Masculine, "ਦੋ" }, { "pa-Arab", 2, WordForm.Abbreviation, GrammaticalGender.Masculine, "دو" }, { "hi", 2, WordForm.Abbreviation, GrammaticalGender.Feminine, "दो" }, + { "or", 2, WordForm.Abbreviation, GrammaticalGender.Feminine, "ଦୁଇ" }, { "gu", 2, WordForm.Abbreviation, GrammaticalGender.Feminine, "બે" }, { "pa", 2, WordForm.Abbreviation, GrammaticalGender.Feminine, "ਦੋ" }, { "pa-Arab", 2, WordForm.Abbreviation, GrammaticalGender.Feminine, "دو" }, { "hi", 2, WordForm.Abbreviation, GrammaticalGender.Neuter, "दो" }, + { "or", 2, WordForm.Abbreviation, GrammaticalGender.Neuter, "ଦୁଇ" }, { "gu", 2, WordForm.Abbreviation, GrammaticalGender.Neuter, "બે" }, { "pa", 2, WordForm.Abbreviation, GrammaticalGender.Neuter, "ਦੋ" }, { "pa-Arab", 2, WordForm.Abbreviation, GrammaticalGender.Neuter, "دو" }, @@ -6734,9 +6752,11 @@ static class LocaleNumberTheoryData { "zu-ZA", 101, "kanye ikhulu na kanye" }, { "hi", 1, "पहला" }, + { "or", 1, "ପ୍ରଥମ" }, { "pa", 1, "ਪਹਿਲਾ" }, { "pa-Arab", 1, "پہلا" }, { "hi", 21, "इक्कीसवाँ" }, + { "or", 21, "ଏକୋଇଶତମ" }, { "gu", 21, "એકવીસમો" }, { "pa", 21, "ਇੱਕੀਵਾਂ" }, { "pa-Arab", 21, "اکیواں" }, @@ -7207,6 +7227,7 @@ static class LocaleNumberTheoryData { "zu-ZA", 21, WordForm.Abbreviation, "amashumi amabili kanye" }, { "hi", 21, WordForm.Abbreviation, "इक्कीसवाँ" }, + { "or", 21, WordForm.Abbreviation, "ଏକୋଇଶତମ" }, { "pa", 21, WordForm.Abbreviation, "ਇੱਕੀਵਾਂ" }, { "pa-Arab", 21, WordForm.Abbreviation, "اکیواں" }, { "mr", 21, WordForm.Abbreviation, "एकविसावा" }, @@ -8120,12 +8141,15 @@ static class LocaleNumberTheoryData { "zu-ZA", 1, GrammaticalGender.Neuter, "okokuqala" }, { "hi", 1, GrammaticalGender.Masculine, "पहला" }, + { "or", 1, GrammaticalGender.Masculine, "ପ୍ରଥମ" }, { "pa", 1, GrammaticalGender.Masculine, "ਪਹਿਲਾ" }, { "pa-Arab", 1, GrammaticalGender.Masculine, "پہلا" }, { "hi", 1, GrammaticalGender.Feminine, "पहली" }, + { "or", 1, GrammaticalGender.Feminine, "ପ୍ରଥମ" }, { "pa", 1, GrammaticalGender.Feminine, "ਪਹਿਲੀ" }, { "pa-Arab", 1, GrammaticalGender.Feminine, "پہلی" }, { "hi", 1, GrammaticalGender.Neuter, "पहला" }, + { "or", 1, GrammaticalGender.Neuter, "ପ୍ରଥମ" }, { "pa", 1, GrammaticalGender.Neuter, "ਪਹਿਲਾ" }, { "pa-Arab", 1, GrammaticalGender.Neuter, "پہلا" }, { "mr", 21, GrammaticalGender.Masculine, "एकविसावा" }, @@ -8422,12 +8446,15 @@ static class LocaleNumberTheoryData { "zu-ZA", 3, GrammaticalGender.Neuter, WordForm.Abbreviation, "kuthathu" }, { "hi", 21, GrammaticalGender.Masculine, WordForm.Abbreviation, "इक्कीसवाँ" }, + { "or", 21, GrammaticalGender.Masculine, WordForm.Abbreviation, "ଏକୋଇଶତମ" }, { "pa", 21, GrammaticalGender.Masculine, WordForm.Abbreviation, "ਇੱਕੀਵਾਂ" }, { "pa-Arab", 21, GrammaticalGender.Masculine, WordForm.Abbreviation, "اکیواں" }, { "hi", 21, GrammaticalGender.Feminine, WordForm.Abbreviation, "इक्कीसवीं" }, + { "or", 21, GrammaticalGender.Feminine, WordForm.Abbreviation, "ଏକୋଇଶତମ" }, { "pa", 21, GrammaticalGender.Feminine, WordForm.Abbreviation, "ਇੱਕੀਵੀਂ" }, { "pa-Arab", 21, GrammaticalGender.Feminine, WordForm.Abbreviation, "اکیویں" }, { "hi", 21, GrammaticalGender.Neuter, WordForm.Abbreviation, "इक्कीसवाँ" }, + { "or", 21, GrammaticalGender.Neuter, WordForm.Abbreviation, "ଏକୋଇଶତମ" }, { "pa", 21, GrammaticalGender.Neuter, WordForm.Abbreviation, "ਇੱਕੀਵਾਂ" }, { "pa-Arab", 21, GrammaticalGender.Neuter, WordForm.Abbreviation, "اکیواں" }, { "mr", 21, GrammaticalGender.Masculine, WordForm.Abbreviation, "एकविसावा" }, @@ -8551,6 +8578,7 @@ static class LocaleNumberTheoryData { "zu-ZA", 2, "kubili" }, { "hi", 2, "दो" }, + { "or", 2, "ଦୁଇ" }, { "pa", 2, "ਦੋ" }, { "pa-Arab", 2, "دو" }, { "mr", 2, "दोन" }, @@ -8741,15 +8769,19 @@ static class LocaleNumberTheoryData { "zh-Hant", "二十一", 21L }, { "zu-ZA", "amashumi amabili kanye", 21L }, { "hi", "इक्कीस", 21L }, + { "or", "ଏକୋଇଶ", 21L }, { "pa", "ਇੱਕੀ", 21L }, { "pa-Arab", "اکی", 21L }, { "hi", "एक करोड़ तेईस लाख पैंतालीस हज़ार छह सौ अठहत्तर", 12345678L }, + { "or", "ଏକ କୋଟି ତେଇଶି ଲକ୍ଷ ପଇଞ୍ଚାଳିଶ ହଜାର ଛଅ ଶହ ଅଠସ୍ତରି", 12345678L }, { "pa", "ਇੱਕ ਕਰੋੜ ਤੇਈ ਲੱਖ ਪੰਤਾਲੀ ਹਜ਼ਾਰ ਛੇ ਸੌ ਅਠੱਤਰ", 12345678L }, { "pa-Arab", "اک کروڑ تےئی لکھ پنتالی ہزار چھے سو اٹھتر", 12345678L }, { "hi", "माइनस पांच", -5L }, + { "or", "ମାଇନସ୍ ପାଞ୍ଚ", -5L }, { "pa", "ਮਾਇਨਸ ਪੰਜ", -5L }, { "pa-Arab", "مائنس پنج", -5L }, { "hi", "इक्कीसवीं", 21L }, + { "or", "ଏକୋଇଶତମ", 21L }, { "pa", "ਇੱਕੀਵੀਂ", 21L }, { "pa-Arab", "اکیویں", 21L }, { "mr", "एकवीस", 21L }, diff --git a/tests/Humanizer.Tests/Localisation/LocaleOrdinalizerMatrixData.cs b/tests/Humanizer.Tests/Localisation/LocaleOrdinalizerMatrixData.cs index 5f984dc21..16a377b39 100644 --- a/tests/Humanizer.Tests/Localisation/LocaleOrdinalizerMatrixData.cs +++ b/tests/Humanizer.Tests/Localisation/LocaleOrdinalizerMatrixData.cs @@ -743,6 +743,8 @@ static class LocaleOrdinalizerMatrixData { "zu-ZA", 1001, "1001" }, { "hi", 1, "पहला" }, + { "or", 1, "ପ୍ରଥମ" }, + { "or", 21, "ଏକୋଇଶତମ" }, { "gu", 1, "પહેલો" }, { "pa", 1, "ਪਹਿਲਾ" }, { "pa-Arab", 1, "پہلا" }, @@ -3659,6 +3661,7 @@ static class LocaleOrdinalizerMatrixData { "zu-ZA", 1001, GrammaticalGender.Neuter, "1001" }, { "hi", 1, GrammaticalGender.Masculine, "पहला" }, + { "or", 1, GrammaticalGender.Masculine, "ପ୍ରଥମ" }, { "gu", 1, GrammaticalGender.Masculine, "પહેલો" }, { "gu", 1, GrammaticalGender.Feminine, "પહેલી" }, { "gu", 1, GrammaticalGender.Neuter, "પહેલું" }, @@ -3666,9 +3669,11 @@ static class LocaleOrdinalizerMatrixData { "pa", 1, GrammaticalGender.Masculine, "ਪਹਿਲਾ" }, { "pa-Arab", 1, GrammaticalGender.Masculine, "پہلا" }, { "hi", 1, GrammaticalGender.Feminine, "पहली" }, + { "or", 1, GrammaticalGender.Feminine, "ପ୍ରଥମ" }, { "pa", 1, GrammaticalGender.Feminine, "ਪਹਿਲੀ" }, { "pa-Arab", 1, GrammaticalGender.Feminine, "پہلی" }, { "hi", 1, GrammaticalGender.Neuter, "पहला" }, + { "or", 1, GrammaticalGender.Neuter, "ପ୍ରଥମ" }, { "mr", 1, GrammaticalGender.Masculine, "पहिला" }, { "mr", 1, GrammaticalGender.Feminine, "पहिली" }, { "mr", 1, GrammaticalGender.Neuter, "पहिले" }, @@ -4465,6 +4470,7 @@ static class LocaleOrdinalizerMatrixData { "zu-ZA", "1001", "1001" }, { "hi", "1", "पहला" }, + { "or", "1", "ପ୍ରଥମ" }, { "gu", "1", "પહેલો" }, { "pa", "1", "ਪਹਿਲਾ" }, { "pa-Arab", "1", "پہلا" }, @@ -4891,6 +4897,7 @@ static class LocaleOrdinalizerMatrixData { "zu-ZA", -2147483648, "-2147483648" }, { "hi", -1, "ऋणात्मक पहला" }, + { "or", -1, "ଋଣାତ୍ମକ ପ୍ରଥମ" }, { "gu", -1, "નકારાત્મક પહેલો" }, { "pa", -1, "ਰਿਣਾਤਮਕ ਪਹਿਲਾ" }, { "pa-Arab", -1, "منفی پہلا" }, @@ -5514,6 +5521,7 @@ static class LocaleOrdinalizerMatrixData { "zu-ZA", 21, WordForm.Normal, "21" }, { "hi", 21, WordForm.Abbreviation, "इक्कीसवाँ" }, + { "or", 21, WordForm.Abbreviation, "ଏକୋଇଶତମ" }, { "gu", 21, WordForm.Abbreviation, "એકવીસમો" }, { "gu", 21, WordForm.Normal, "એકવીસમો" }, { "pa", 21, WordForm.Abbreviation, "ਇੱਕੀਵਾਂ" }, @@ -7219,12 +7227,15 @@ static class LocaleOrdinalizerMatrixData { "zu-ZA", 21, GrammaticalGender.Neuter, WordForm.Normal, "21" }, { "hi", 21, GrammaticalGender.Masculine, WordForm.Abbreviation, "इक्कीसवाँ" }, + { "or", 21, GrammaticalGender.Masculine, WordForm.Abbreviation, "ଏକୋଇଶତମ" }, { "pa", 21, GrammaticalGender.Masculine, WordForm.Abbreviation, "ਇੱਕੀਵਾਂ" }, { "pa-Arab", 21, GrammaticalGender.Masculine, WordForm.Abbreviation, "اکیواں" }, { "hi", 21, GrammaticalGender.Feminine, WordForm.Abbreviation, "इक्कीसवीं" }, + { "or", 21, GrammaticalGender.Feminine, WordForm.Abbreviation, "ଏକୋଇଶତମ" }, { "pa", 21, GrammaticalGender.Feminine, WordForm.Abbreviation, "ਇੱਕੀਵੀਂ" }, { "pa-Arab", 21, GrammaticalGender.Feminine, WordForm.Abbreviation, "اکیویں" }, { "hi", 21, GrammaticalGender.Neuter, WordForm.Abbreviation, "इक्कीसवाँ" }, + { "or", 21, GrammaticalGender.Neuter, WordForm.Abbreviation, "ଏକୋଇଶତମ" }, { "gu", 21, GrammaticalGender.Masculine, WordForm.Abbreviation, "એકવીસમો" }, { "gu", 21, GrammaticalGender.Feminine, WordForm.Abbreviation, "એકવીસમી" }, { "gu", 21, GrammaticalGender.Neuter, WordForm.Abbreviation, "એકવીસમું" }, @@ -9965,12 +9976,15 @@ static class LocaleOrdinalizerMatrixData { "zu-ZA", "1001", GrammaticalGender.Neuter, "1001" }, { "hi", "21", GrammaticalGender.Masculine, "इक्कीसवाँ" }, + { "or", "21", GrammaticalGender.Masculine, "ଏକୋଇଶତମ" }, { "pa", "21", GrammaticalGender.Masculine, "ਇੱਕੀਵਾਂ" }, { "pa-Arab", "21", GrammaticalGender.Masculine, "اکیواں" }, { "hi", "21", GrammaticalGender.Feminine, "इक्कीसवीं" }, + { "or", "21", GrammaticalGender.Feminine, "ଏକୋଇଶତମ" }, { "pa", "21", GrammaticalGender.Feminine, "ਇੱਕੀਵੀਂ" }, { "pa-Arab", "21", GrammaticalGender.Feminine, "اکیویں" }, { "hi", "21", GrammaticalGender.Neuter, "इक्कीसवाँ" }, + { "or", "21", GrammaticalGender.Neuter, "ଏକୋଇଶତମ" }, { "gu", "21", GrammaticalGender.Masculine, "એકવીસમો" }, { "gu", "21", GrammaticalGender.Feminine, "એકવીસમી" }, { "gu", "21", GrammaticalGender.Neuter, "એકવીસમું" }, @@ -12918,12 +12932,15 @@ static class LocaleOrdinalizerMatrixData { "zu-ZA", 1001, GrammaticalGender.Neuter, "1001" }, { "hi", 21, GrammaticalGender.Masculine, "इक्कीसवाँ" }, + { "or", 21, GrammaticalGender.Masculine, "ଏକୋଇଶତମ" }, { "pa", 21, GrammaticalGender.Masculine, "ਇੱਕੀਵਾਂ" }, { "pa-Arab", 21, GrammaticalGender.Masculine, "اکیواں" }, { "hi", 21, GrammaticalGender.Feminine, "इक्कीसवीं" }, + { "or", 21, GrammaticalGender.Feminine, "ଏକୋଇଶତମ" }, { "pa", 21, GrammaticalGender.Feminine, "ਇੱਕੀਵੀਂ" }, { "pa-Arab", 21, GrammaticalGender.Feminine, "اکیویں" }, { "hi", 21, GrammaticalGender.Neuter, "इक्कीसवाँ" }, + { "or", 21, GrammaticalGender.Neuter, "ଏକୋଇଶତମ" }, { "gu", 21, GrammaticalGender.Masculine, "એકવીસમો" }, { "gu", 21, GrammaticalGender.Feminine, "એકવીસમી" }, { "gu", 21, GrammaticalGender.Neuter, "એકવીસમું" }, diff --git a/tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs b/tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs index 451c08e4a..a355c9772 100644 --- a/tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs +++ b/tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs @@ -1181,62 +1181,77 @@ static class LocalePhraseTheoryData { "zu-ZA", 0, TimeUnit.Second, Tense.Future, "manje" }, { "hi", 1, TimeUnit.Second, Tense.Past, "एक सेकंड पहले" }, + { "or", 1, TimeUnit.Second, Tense.Past, "ଏକ ସେକେଣ୍ଡ ପୂର୍ବରୁ" }, { "gu", 1, TimeUnit.Second, Tense.Past, "એક સેકંડ પહેલાં" }, { "pa", 1, TimeUnit.Second, Tense.Past, "ਇੱਕ ਸਕਿੰਟ ਪਹਿਲਾਂ" }, { "pa-Arab", 1, TimeUnit.Second, Tense.Past, "اک سیکنڈ پہلاں" }, { "hi", 2, TimeUnit.Second, Tense.Future, "2 सेकंड में" }, + { "or", 2, TimeUnit.Second, Tense.Future, "2 ସେକେଣ୍ଡ ପରେ" }, { "gu", 2, TimeUnit.Second, Tense.Future, "2 સેકંડમાં" }, { "pa", 2, TimeUnit.Second, Tense.Future, "2 ਸਕਿੰਟ ਵਿੱਚ" }, { "pa-Arab", 2, TimeUnit.Second, Tense.Future, "2 سیکنڈ وچ" }, { "hi", 1, TimeUnit.Minute, Tense.Past, "एक मिनट पहले" }, + { "or", 1, TimeUnit.Minute, Tense.Past, "ଏକ ମିନିଟ୍ ପୂର୍ବରୁ" }, { "gu", 1, TimeUnit.Minute, Tense.Past, "એક મિનિટ પહેલાં" }, { "pa", 1, TimeUnit.Minute, Tense.Past, "ਇੱਕ ਮਿੰਟ ਪਹਿਲਾਂ" }, { "pa-Arab", 1, TimeUnit.Minute, Tense.Past, "اک منٹ پہلاں" }, { "hi", 2, TimeUnit.Minute, Tense.Future, "2 मिनट में" }, + { "or", 2, TimeUnit.Minute, Tense.Future, "2 ମିନିଟ୍ ପରେ" }, { "gu", 2, TimeUnit.Minute, Tense.Future, "2 મિનિટમાં" }, { "pa", 2, TimeUnit.Minute, Tense.Future, "2 ਮਿੰਟ ਵਿੱਚ" }, { "pa-Arab", 2, TimeUnit.Minute, Tense.Future, "2 منٹ وچ" }, { "hi", 1, TimeUnit.Hour, Tense.Past, "एक घंटा पहले" }, + { "or", 1, TimeUnit.Hour, Tense.Past, "ଏକ ଘଣ୍ଟା ପୂର୍ବରୁ" }, { "gu", 1, TimeUnit.Hour, Tense.Past, "એક કલાક પહેલાં" }, { "pa", 1, TimeUnit.Hour, Tense.Past, "ਇੱਕ ਘੰਟਾ ਪਹਿਲਾਂ" }, { "pa-Arab", 1, TimeUnit.Hour, Tense.Past, "اک گھنٹہ پہلاں" }, { "hi", 2, TimeUnit.Hour, Tense.Future, "2 घंटे में" }, + { "or", 2, TimeUnit.Hour, Tense.Future, "2 ଘଣ୍ଟା ପରେ" }, { "gu", 2, TimeUnit.Hour, Tense.Future, "2 કલાકમાં" }, { "pa", 2, TimeUnit.Hour, Tense.Future, "2 ਘੰਟੇ ਵਿੱਚ" }, { "pa-Arab", 2, TimeUnit.Hour, Tense.Future, "2 گھنٹے وچ" }, { "hi", 1, TimeUnit.Day, Tense.Past, "कल" }, + { "or", 1, TimeUnit.Day, Tense.Past, "ଗତକାଲି" }, { "gu", 1, TimeUnit.Day, Tense.Past, "ગઈકાલે" }, { "pa", 1, TimeUnit.Day, Tense.Past, "ਕੱਲ੍ਹ" }, { "pa-Arab", 1, TimeUnit.Day, Tense.Past, "کل" }, { "hi", 1, TimeUnit.Day, Tense.Future, "कल" }, + { "or", 1, TimeUnit.Day, Tense.Future, "ଆସନ୍ତାକାଲି" }, { "gu", 1, TimeUnit.Day, Tense.Future, "આવતીકાલે" }, { "pa", 1, TimeUnit.Day, Tense.Future, "ਕੱਲ੍ਹ" }, { "pa-Arab", 1, TimeUnit.Day, Tense.Future, "کل" }, { "hi", 2, TimeUnit.Day, Tense.Past, "2 दिन पहले" }, + { "or", 2, TimeUnit.Day, Tense.Past, "2 ଦିନ ପୂର୍ବରୁ" }, { "gu", 2, TimeUnit.Day, Tense.Past, "2 દિવસ પહેલાં" }, { "pa", 2, TimeUnit.Day, Tense.Past, "2 ਦਿਨ ਪਹਿਲਾਂ" }, { "pa-Arab", 2, TimeUnit.Day, Tense.Past, "2 دن پہلاں" }, { "hi", 2, TimeUnit.Day, Tense.Future, "2 दिन में" }, + { "or", 2, TimeUnit.Day, Tense.Future, "2 ଦିନ ପରେ" }, { "gu", 2, TimeUnit.Day, Tense.Future, "2 દિવસમાં" }, { "pa", 2, TimeUnit.Day, Tense.Future, "2 ਦਿਨ ਵਿੱਚ" }, { "pa-Arab", 2, TimeUnit.Day, Tense.Future, "2 دن وچ" }, { "hi", 1, TimeUnit.Month, Tense.Past, "एक महीना पहले" }, + { "or", 1, TimeUnit.Month, Tense.Past, "ଏକ ମାସ ପୂର୍ବରୁ" }, { "gu", 1, TimeUnit.Month, Tense.Past, "એક મહિના પહેલાં" }, { "pa", 1, TimeUnit.Month, Tense.Past, "ਇੱਕ ਮਹੀਨਾ ਪਹਿਲਾਂ" }, { "pa-Arab", 1, TimeUnit.Month, Tense.Past, "اک مہینہ پہلاں" }, { "hi", 2, TimeUnit.Month, Tense.Future, "2 महीने में" }, + { "or", 2, TimeUnit.Month, Tense.Future, "2 ମାସ ପରେ" }, { "gu", 2, TimeUnit.Month, Tense.Future, "2 મહિનામાં" }, { "pa", 2, TimeUnit.Month, Tense.Future, "2 ਮਹੀਨਿਆਂ ਵਿੱਚ" }, { "pa-Arab", 2, TimeUnit.Month, Tense.Future, "2 مہینیاں وچ" }, { "hi", 1, TimeUnit.Year, Tense.Past, "एक साल पहले" }, + { "or", 1, TimeUnit.Year, Tense.Past, "ଏକ ବର୍ଷ ପୂର୍ବରୁ" }, { "gu", 1, TimeUnit.Year, Tense.Past, "એક વર્ષ પહેલાં" }, { "pa", 1, TimeUnit.Year, Tense.Past, "ਇੱਕ ਸਾਲ ਪਹਿਲਾਂ" }, { "pa-Arab", 1, TimeUnit.Year, Tense.Past, "اک سال پہلاں" }, { "hi", 2, TimeUnit.Year, Tense.Future, "2 साल में" }, + { "or", 2, TimeUnit.Year, Tense.Future, "2 ବର୍ଷ ପରେ" }, { "gu", 2, TimeUnit.Year, Tense.Future, "2 વર્ષમાં" }, { "pa", 2, TimeUnit.Year, Tense.Future, "2 ਸਾਲਾਂ ਵਿੱਚ" }, { "pa-Arab", 2, TimeUnit.Year, Tense.Future, "2 سالاں وچ" }, { "hi", 0, TimeUnit.Second, Tense.Future, "अभी" }, + { "or", 0, TimeUnit.Second, Tense.Future, "ବର୍ତ୍ତମାନ" }, { "gu", 0, TimeUnit.Second, Tense.Future, "હમણાં" }, { "pa", 0, TimeUnit.Second, Tense.Future, "ਹੁਣੇ" }, { "pa-Arab", 0, TimeUnit.Second, Tense.Future, "ہن" }, @@ -1774,6 +1789,7 @@ static class LocalePhraseTheoryData { "zu-ZA", "akakaze" }, { "hi", "कभी नहीं" }, + { "or", "କେବେ ନୁହେଁ" }, { "gu", "ક્યારેય નહીં" }, { "pa", "ਕਦੇ ਨਹੀਂ" }, { "pa-Arab", "کدے نہیں" }, @@ -2713,38 +2729,47 @@ static class LocalePhraseTheoryData { "zu-ZA", 0, TimeUnit.Millisecond, true, "asikho isikhathi" }, { "hi", 1, TimeUnit.Second, false, "1 सेकंड" }, + { "or", 1, TimeUnit.Second, false, "1 ସେକେଣ୍ଡ" }, { "gu", 1, TimeUnit.Second, false, "1 સેકંડ" }, { "pa", 1, TimeUnit.Second, false, "1 ਸਕਿੰਟ" }, { "pa-Arab", 1, TimeUnit.Second, false, "1 سیکنڈ" }, { "hi", 2, TimeUnit.Second, false, "2 सेकंड" }, + { "or", 2, TimeUnit.Second, false, "2 ସେକେଣ୍ଡ" }, { "gu", 2, TimeUnit.Second, false, "2 સેકંડ" }, { "pa", 2, TimeUnit.Second, false, "2 ਸਕਿੰਟ" }, { "pa-Arab", 2, TimeUnit.Second, false, "2 سیکنڈ" }, { "hi", 1, TimeUnit.Minute, false, "1 मिनट" }, + { "or", 1, TimeUnit.Minute, false, "1 ମିନିଟ୍" }, { "gu", 1, TimeUnit.Minute, false, "1 મિનિટ" }, { "pa", 1, TimeUnit.Minute, false, "1 ਮਿੰਟ" }, { "pa-Arab", 1, TimeUnit.Minute, false, "1 منٹ" }, { "hi", 2, TimeUnit.Minute, false, "2 मिनट" }, + { "or", 2, TimeUnit.Minute, false, "2 ମିନିଟ୍" }, { "gu", 2, TimeUnit.Minute, false, "2 મિનિટ" }, { "pa", 2, TimeUnit.Minute, false, "2 ਮਿੰਟ" }, { "pa-Arab", 2, TimeUnit.Minute, false, "2 منٹ" }, { "hi", 1, TimeUnit.Hour, false, "1 घंटा" }, + { "or", 1, TimeUnit.Hour, false, "1 ଘଣ୍ଟା" }, { "gu", 1, TimeUnit.Hour, false, "1 કલાક" }, { "pa", 1, TimeUnit.Hour, false, "1 ਘੰਟਾ" }, { "pa-Arab", 1, TimeUnit.Hour, false, "1 گھنٹہ" }, { "hi", 2, TimeUnit.Hour, false, "2 घंटे" }, + { "or", 2, TimeUnit.Hour, false, "2 ଘଣ୍ଟା" }, { "gu", 2, TimeUnit.Hour, false, "2 કલાક" }, { "pa", 2, TimeUnit.Hour, false, "2 ਘੰਟੇ" }, { "pa-Arab", 2, TimeUnit.Hour, false, "2 گھنٹے" }, { "hi", 1, TimeUnit.Day, false, "1 दिन" }, + { "or", 1, TimeUnit.Day, false, "1 ଦିନ" }, { "gu", 1, TimeUnit.Day, false, "1 દિવસ" }, { "pa", 1, TimeUnit.Day, false, "1 ਦਿਨ" }, { "pa-Arab", 1, TimeUnit.Day, false, "1 دن" }, { "hi", 2, TimeUnit.Day, false, "2 दिन" }, + { "or", 2, TimeUnit.Day, false, "2 ଦିନ" }, { "gu", 2, TimeUnit.Day, false, "2 દિવસ" }, { "pa", 2, TimeUnit.Day, false, "2 ਦਿਨ" }, { "pa-Arab", 2, TimeUnit.Day, false, "2 دن" }, { "hi", 1, TimeUnit.Hour, true, "एक घंटा" }, + { "or", 1, TimeUnit.Hour, true, "ଏକ ଘଣ୍ଟା" }, { "gu", 1, TimeUnit.Hour, true, "એક કલાક" }, { "pa", 1, TimeUnit.Hour, true, "ਇੱਕ ਘੰਟਾ" }, { "pa-Arab", 1, TimeUnit.Hour, true, "اک گھنٹہ" }, diff --git a/tests/Humanizer.Tests/Localisation/or/OdiaLocaleTests.cs b/tests/Humanizer.Tests/Localisation/or/OdiaLocaleTests.cs new file mode 100644 index 000000000..e235bb613 --- /dev/null +++ b/tests/Humanizer.Tests/Localisation/or/OdiaLocaleTests.cs @@ -0,0 +1,174 @@ +namespace Humanizer.Tests.Localisation.or; + +[UseCulture("or")] +public class OdiaLocaleTests +{ + static readonly CultureInfo Odia = new("or"); + static readonly int[] Pair = [1, 2]; + static readonly int[] Triple = [1, 2, 3]; + + [Fact] + public void ListHumanize_UsesOdiaConjunction() + { + Assert.Equal("1 ଏବଂ 2", Pair.Humanize()); + Assert.Equal("1, 2 ଏବଂ 3", Triple.Humanize()); + } + + [Theory] + [InlineData(1, TimeUnit.Second, Tense.Past, "ଏକ ସେକେଣ୍ଡ ପୂର୍ବରୁ")] + [InlineData(2, TimeUnit.Second, Tense.Future, "2 ସେକେଣ୍ଡ ପରେ")] + [InlineData(1, TimeUnit.Day, Tense.Past, "ଗତକାଲି")] + [InlineData(1, TimeUnit.Day, Tense.Future, "ଆସନ୍ତାକାଲି")] + [InlineData(2, TimeUnit.Day, Tense.Past, "2 ଦିନ ପୂର୍ବରୁ")] + [InlineData(2, TimeUnit.Day, Tense.Future, "2 ଦିନ ପରେ")] + [InlineData(0, TimeUnit.Second, Tense.Future, "ବର୍ତ୍ତମାନ")] + public void RelativeDate_UsesOdiaPhrases(int count, TimeUnit unit, Tense tense, string expected) + { + var formatter = Configurator.Formatters.ResolveForCulture(Odia); + Assert.Equal(expected, formatter.DateHumanize(unit, tense, count)); + } + + [Fact] + public void NullableDateHumanize_NullDateUsesOdiaNeverPhrase() + { + DateTime? date = null; + Assert.Equal("କେବେ ନୁହେଁ", date.Humanize(culture: Odia)); + } + + [Theory] + [InlineData(1, "1 ସେକେଣ୍ଡ")] + [InlineData(2, "2 ସେକେଣ୍ଡ")] + public void Duration_UsesOdiaUnitForms(int seconds, string expected) + { + Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize(culture: Odia)); + } + + [Fact] + public void Duration_ToWordsUsesOdiaNumberWords() + { + Assert.Equal("ଏକ ଘଣ୍ଟା", TimeSpan.FromHours(1).Humanize(toWords: true, culture: Odia)); + } + + [Theory] + [InlineData(DataUnit.Bit, 1, "ବିଟ")] + [InlineData(DataUnit.Byte, 2, "ବାଇଟ୍")] + [InlineData(DataUnit.Megabyte, 2, "ମେଗାବାଇଟ୍")] + public void DataUnit_FullWordForms(DataUnit unit, int count, string expected) + { + var formatter = Configurator.Formatters.ResolveForCulture(Odia); + Assert.Equal(expected, formatter.DataUnitHumanize(unit, count, toSymbol: false)); + } + + [Theory] + [InlineData(TimeUnit.Second, "ସେକେଣ୍ଡ")] + [InlineData(TimeUnit.Minute, "ମିନିଟ୍")] + [InlineData(TimeUnit.Hour, "ଘଣ୍ଟା")] + [InlineData(TimeUnit.Day, "ଦିନ")] + public void TimeUnitSymbols(TimeUnit unit, string expected) + { + var formatter = Configurator.Formatters.ResolveForCulture(Odia); + Assert.Equal(expected, formatter.TimeUnitHumanize(unit)); + } + + [Theory] + [InlineData(0, "ଶୂନ୍ୟ")] + [InlineData(21, "ଏକୋଇଶ")] + [InlineData(68, "ଅଠଷଠି")] + [InlineData(100, "ଏକ ଶହ")] + [InlineData(101, "ଏକ ଶହ ଏକ")] + [InlineData(999, "ନଅ ଶହ ଅନେଶତ")] + [InlineData(1000, "ଏକ ହଜାର")] + [InlineData(100000, "ଏକ ଲକ୍ଷ")] + [InlineData(12345678, "ଏକ କୋଟି ତେଇଶି ଲକ୍ଷ ପଇଞ୍ଚାଳିଶ ହଜାର ଛଅ ଶହ ଅଠସ୍ତରି")] + public void NumberToWords_ProducesExpectedOutput(long number, string expected) + { + Assert.Equal(expected, number.ToWords(Odia)); + } + + [Theory] + [InlineData("କୋଡିଏ", 20)] + [InlineData("ଅଠଷଠି", 68)] + [InlineData("ଏକୋଇଶ", 21)] + [InlineData("ଏକ ଶହ ଏକ", 101)] + [InlineData("ଏକ କୋଟି ତେଇଶି ଲକ୍ଷ ପଇଞ୍ଚାଳିଶ ହଜାର ଛଅ ଶହ ଅଠସ୍ତରି", 12345678)] + public void WordsToNumber_ParsesOdiaCardinals(string words, long expected) + { + Assert.Equal(expected, words.ToNumber(Odia)); + } + + [Theory] + [InlineData(1, "ପ୍ରଥମ")] + [InlineData(2, "ଦ୍ୱିତୀୟ")] + [InlineData(21, "ଏକୋଇଶତମ")] + [InlineData(27, "ସତାଇଶତମ")] + public void Ordinalize_UsesOdiaOrdinalWords(int number, string expected) + { + Assert.Equal(expected, number.Ordinalize(Odia)); + Assert.Equal(expected, number.ToOrdinalWords(Odia)); + } + + [Theory] + [InlineData("ପ୍ରଥମ", 1)] + [InlineData("ଏକୋଇଶତମ", 21)] + [InlineData("ସତାଇଶତମ", 27)] + public void WordsToNumber_ParsesOdiaOrdinalWords(string words, long expected) + { + Assert.Equal(expected, words.ToNumber(Odia)); + } + + [Theory] + [InlineData(2022, 1, 25, "25 ଜାନୁଆରୀ 2022")] + [InlineData(2015, 2, 3, "3 ଫେବୃଆରୀ 2015")] + [InlineData(2024, 12, 31, "31 ଡିସେମ୍ବର 2024")] + public void DateTime_ToOrdinalWords_ExactOutput(int year, int month, int day, string expected) + { + Assert.Equal(expected, new DateTime(year, month, day).ToOrdinalWords()); + } + +#if NET6_0_OR_GREATER + [Theory] + [InlineData(2022, 1, 25, "25 ଜାନୁଆରୀ 2022")] + [InlineData(2015, 2, 3, "3 ଫେବୃଆରୀ 2015")] + public void DateOnly_ToOrdinalWords_ExactOutput(int year, int month, int day, string expected) + { + Assert.Equal(expected, new DateOnly(year, month, day).ToOrdinalWords()); + } + + [Theory] + [InlineData(1, 0, "ସକାଳ ଏକଟା")] + [InlineData(1, 5, "ସକାଳ ଏକଟା ପାଞ୍ଚ ମିନିଟ୍")] + [InlineData(13, 23, "ଦ୍ୱିପ୍ରହର ଏକଟା ତେଇଶି ମିନିଟ୍")] + [InlineData(18, 0, "ସନ୍ଧ୍ୟା ଛଅଟା")] + [InlineData(21, 0, "ରାତି ନଅଟା")] + public void ClockNotation_ExactOutput(int hours, int minutes, string expected) + { + Assert.Equal(expected, new TimeOnly(hours, minutes).ToClockNotation()); + } + + [Fact] + public void ClockNotation_Rounded_ExactOutput() + { + Assert.Equal("ଦ୍ୱିପ୍ରହର ଏକଟା ପଚିଶି ମିନିଟ୍", new TimeOnly(13, 23).ToClockNotation(ClockNotationRounding.NearestFiveMinutes)); + } +#endif + + [Theory] + [InlineData(0.0, "ଉତ୍ତର")] + [InlineData(45.0, "ଉତ୍ତର-ପୂର୍ବ")] + [InlineData(90.0, "ପୂର୍ବ")] + [InlineData(180.0, "ଦକ୍ଷିଣ")] + [InlineData(270.0, "ପଶ୍ଚିମ")] + public void Compass_FullDirections(double angle, string expected) + { + Assert.Equal(expected, angle.ToHeading(HeadingStyle.Full)); + } + + [Theory] + [InlineData(0.0, "ଉ")] + [InlineData(45.0, "ଉ-ପୂ")] + [InlineData(90.0, "ପୂ")] + public void Compass_AbbreviatedDirections(double angle, string expected) + { + Assert.Equal(expected, angle.ToHeading(HeadingStyle.Abbreviated)); + } +} \ No newline at end of file