From c7c3ee9906b1f7b0d0aa35e4fbb87e228fde0bcd Mon Sep 17 00:00:00 2001 From: Alexander Zaytsev Date: Wed, 18 Feb 2015 17:34:15 +1300 Subject: [PATCH 1/2] Fix 90000th and -thousandth in Russian --- .../Localisation/ru-RU/NumberToWordsTests.cs | 35 ++++++++++--------- .../RussianNumberToWordsConverter.cs | 6 ++-- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/Humanizer.Tests/Localisation/ru-RU/NumberToWordsTests.cs b/src/Humanizer.Tests/Localisation/ru-RU/NumberToWordsTests.cs index c4e8c0b48..f0ed776ae 100644 --- a/src/Humanizer.Tests/Localisation/ru-RU/NumberToWordsTests.cs +++ b/src/Humanizer.Tests/Localisation/ru-RU/NumberToWordsTests.cs @@ -41,9 +41,9 @@ public NumberToWordsTests() : base("ru-RU") { } [InlineData(2000, "две тысячи")] [InlineData(3000, "три тысячи")] [InlineData(4000, "четыре тысячи")] - [InlineData(5000, "пять тысячь")] - [InlineData(10000, "десять тысячь")] - [InlineData(100000, "сто тысячь")] + [InlineData(5000, "пять тысяч")] + [InlineData(10000, "десять тысяч")] + [InlineData(100000, "сто тысяч")] [InlineData(1000000, "один миллион")] [InlineData(2000000, "два миллиона")] [InlineData(10000000, "десять миллионов")] @@ -54,12 +54,12 @@ public NumberToWordsTests() : base("ru-RU") { } [InlineData(3501, "три тысячи пятьсот один")] [InlineData(111, "сто одиннадцать")] [InlineData(1112, "одна тысяча сто двенадцать")] - [InlineData(11213, "одиннадцать тысячь двести тринадцать")] + [InlineData(11213, "одиннадцать тысяч двести тринадцать")] [InlineData(121314, "сто двадцать одна тысяча триста четырнадцать")] [InlineData(2132415, "два миллиона сто тридцать две тысячи четыреста пятнадцать")] - [InlineData(12345516, "двенадцать миллионов триста сорок пять тысячь пятьсот шестнадцать")] + [InlineData(12345516, "двенадцать миллионов триста сорок пять тысяч пятьсот шестнадцать")] [InlineData(751633617, "семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцать")] - [InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысячь сто восемнадцать")] + [InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцать")] [InlineData(-751633617, "минус семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцать")] public void ToWords(int number, string expected) { @@ -134,12 +134,12 @@ public void ToWordsWithGender(int number, string expected, GrammaticalGender gen [InlineData(3501, "три тысячи пятьсот первый")] [InlineData(111, "сто одиннадцатый")] [InlineData(1112, "одна тысяча сто двенадцатый")] - [InlineData(11213, "одиннадцать тысячь двести тринадцатый")] + [InlineData(11213, "одиннадцать тысяч двести тринадцатый")] [InlineData(121314, "сто двадцать одна тысяча триста четырнадцатый")] [InlineData(2132415, "два миллиона сто тридцать две тысячи четыреста пятнадцатый")] - [InlineData(12345516, "двенадцать миллионов триста сорок пять тысячь пятьсот шестнадцатый")] + [InlineData(12345516, "двенадцать миллионов триста сорок пять тысяч пятьсот шестнадцатый")] [InlineData(751633617, "семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатый")] - [InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысячь сто восемнадцатый")] + [InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцатый")] [InlineData(1111111000, "один миллиард сто одиннадцать миллионов стоодиннадцатитысячный")] [InlineData(1234567000, "один миллиард двести тридцать четыре миллиона пятисотшестидесятисемитысячный")] [InlineData(2000000000, "двухмиллиардный")] @@ -187,7 +187,10 @@ public void ToOrdinalWords(int number, string expected) [InlineData(4000, "четырёхтысячная")] [InlineData(5000, "пятитысячная")] [InlineData(10000, "десятитысячная")] + [InlineData(90000, "девяностотысячная")] [InlineData(100000, "стотысячная")] + [InlineData(990000, "девятисотдевяностотысячная")] + [InlineData(990001, "девятьсот девяносто тысяч первая")] [InlineData(1000000, "миллионная")] [InlineData(2000000, "двухмиллионная")] [InlineData(10000000, "десятимиллионная")] @@ -199,15 +202,15 @@ public void ToOrdinalWords(int number, string expected) [InlineData(111, "сто одиннадцатая")] [InlineData(1112, "одна тысяча сто двенадцатая")] [InlineData(11000, "одиннадцатитысячная")] - [InlineData(11001, "одиннадцать тысячь первая")] - [InlineData(11213, "одиннадцать тысячь двести тринадцатая")] + [InlineData(11001, "одиннадцать тысяч первая")] + [InlineData(11213, "одиннадцать тысяч двести тринадцатая")] [InlineData(15000, "пятнадцатитысячная")] [InlineData(20000, "двадцатитысячная")] [InlineData(121314, "сто двадцать одна тысяча триста четырнадцатая")] [InlineData(2132415, "два миллиона сто тридцать две тысячи четыреста пятнадцатая")] - [InlineData(12345516, "двенадцать миллионов триста сорок пять тысячь пятьсот шестнадцатая")] + [InlineData(12345516, "двенадцать миллионов триста сорок пять тысяч пятьсот шестнадцатая")] [InlineData(751633617, "семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатая")] - [InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысячь сто восемнадцатая")] + [InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцатая")] [InlineData(-751633617, "минус семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатая")] public void ToOrdinalWordsFeminine(int number, string expected) { @@ -218,12 +221,12 @@ public void ToOrdinalWordsFeminine(int number, string expected) [InlineData(3, "третье")] [InlineData(111, "сто одиннадцатое")] [InlineData(1112, "одна тысяча сто двенадцатое")] - [InlineData(11213, "одиннадцать тысячь двести тринадцатое")] + [InlineData(11213, "одиннадцать тысяч двести тринадцатое")] [InlineData(121314, "сто двадцать одна тысяча триста четырнадцатое")] [InlineData(2132415, "два миллиона сто тридцать две тысячи четыреста пятнадцатое")] - [InlineData(12345516, "двенадцать миллионов триста сорок пять тысячь пятьсот шестнадцатое")] + [InlineData(12345516, "двенадцать миллионов триста сорок пять тысяч пятьсот шестнадцатое")] [InlineData(751633617, "семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатое")] - [InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысячь сто восемнадцатое")] + [InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцатое")] [InlineData(-751633617, "минус семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатое")] public void ToOrdinalWordsNeuter(int number, string expected) { diff --git a/src/Humanizer/Localisation/NumberToWords/RussianNumberToWordsConverter.cs b/src/Humanizer/Localisation/NumberToWords/RussianNumberToWordsConverter.cs index e53092aad..2ae449ed0 100644 --- a/src/Humanizer/Localisation/NumberToWords/RussianNumberToWordsConverter.cs +++ b/src/Humanizer/Localisation/NumberToWords/RussianNumberToWordsConverter.cs @@ -10,7 +10,7 @@ internal class RussianNumberToWordsConverter : GenderedNumberToWordsConverter private static readonly string[] TensMap = { "ноль", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто" }; private static readonly string[] UnitsMap = { "ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", "десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать" }; private static readonly string[] UnitsOrdinalPrefixes = { string.Empty, string.Empty, "двух", "трёх", "четырёх", "пяти", "шести", "семи", "восьми", "девяти", "десяти", "одиннадцати", "двенадцати", "тринадцати", "четырнадцати", "пятнадцати", "шестнадцати", "семнадцати", "восемнадцати", "девятнадцати" }; - private static readonly string[] TensOrdinalPrefixes = { string.Empty, "десяти", "двадцати", "тридцати", "сорока", "пятидесяти", "шестидесяти", "семидесяти", "восьмидесяти", "девятидесяти" }; + private static readonly string[] TensOrdinalPrefixes = { string.Empty, "десяти", "двадцати", "тридцати", "сорока", "пятидесяти", "шестидесяти", "семидесяти", "восьмидесяти", "девяносто" }; private static readonly string[] TensOrdinal = { string.Empty, "десят", "двадцат", "тридцат", "сороков", "пятидесят", "шестидесят", "семидесят", "восьмидесят", "девяност" }; private static readonly string[] UnitsOrdinal = { string.Empty, "перв", "втор", "трет", "четверт", "пят", "шест", "седьм", "восьм", "девят", "десят", "одиннадцат", "двенадцат", "тринадцат", "четырнадцат", "пятнадцат", "шестнадцат", "семнадцат", "восемнадцат", "девятнадцат" }; @@ -29,7 +29,7 @@ public override string Convert(int number, GrammaticalGender gender) CollectParts(parts, ref number, 1000000000, GrammaticalGender.Masculine, "миллиард", "миллиарда", "миллиардов"); CollectParts(parts, ref number, 1000000, GrammaticalGender.Masculine, "миллион", "миллиона", "миллионов"); - CollectParts(parts, ref number, 1000, GrammaticalGender.Feminine, "тысяча", "тысячи", "тысячь"); + CollectParts(parts, ref number, 1000, GrammaticalGender.Feminine, "тысяча", "тысячи", "тысяч"); if (number > 0) CollectPartsUnderOneThousand(parts, number, gender); @@ -52,7 +52,7 @@ public override string ConvertToOrdinal(int number, GrammaticalGender gender) CollectOrdinalParts(parts, ref number, 1000000000, GrammaticalGender.Masculine, "миллиардн" + GetEndingForGender(gender, number), "миллиард", "миллиарда", "миллиардов"); CollectOrdinalParts(parts, ref number, 1000000, GrammaticalGender.Masculine, "миллионн" + GetEndingForGender(gender, number), "миллион", "миллиона", "миллионов"); - CollectOrdinalParts(parts, ref number, 1000, GrammaticalGender.Feminine, "тысячн" + GetEndingForGender(gender, number), "тысяча", "тысячи", "тысячь"); + CollectOrdinalParts(parts, ref number, 1000, GrammaticalGender.Feminine, "тысячн" + GetEndingForGender(gender, number), "тысяча", "тысячи", "тысяч"); if (number >= 100) { From 976603d3d977423f2f09ca8d0d58f409759d890d Mon Sep 17 00:00:00 2001 From: Alexander Zaytsev Date: Thu, 19 Feb 2015 09:25:20 +1300 Subject: [PATCH 2/2] Add #382 to release notes --- release_notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/release_notes.md b/release_notes.md index e7cf714a0..afa84d524 100644 --- a/release_notes.md +++ b/release_notes.md @@ -1,5 +1,6 @@ ###In Development - [#381](https://github.com/MehdiK/Humanizer/pull/381): Fixes trailing question mark reported in #378. + - [#382](https://github.com/MehdiK/Humanizer/pull/382): Fix 90000th and -thousandth in RussianNumberToWordsConverter. [Commits](https://github.com/MehdiK/Humanizer/compare/v1.33.7...master)