From 134c20fefc6689aa7120c5845d717617c8db1cca Mon Sep 17 00:00:00 2001 From: Yegor Sychev Date: Sun, 19 Apr 2026 11:46:13 +0500 Subject: [PATCH 1/6] correct plural forms for week and millisecond in relative date phrases --- src/Humanizer/Locales/ru.yml | 20 +++++++++++++++---- .../Localisation/LocalePhraseTheoryData.cs | 12 +++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/Humanizer/Locales/ru.yml b/src/Humanizer/Locales/ru.yml index c9f7551aa..4ce9cfa32 100644 --- a/src/Humanizer/Locales/ru.yml +++ b/src/Humanizer/Locales/ru.yml @@ -27,7 +27,10 @@ surfaces: millisecond: single: 'миллисекунду назад' multiple: - forms: 'миллисекунд' + forms: + default: 'миллисекунд' + singular: 'миллисекунду' + dual: 'миллисекунды' afterCount: 'назад' second: single: 'секунду назад' @@ -67,7 +70,10 @@ surfaces: week: single: 'неделю назад' multiple: - forms: 'недель' + forms: + default: 'недель' + singular: 'неделю' + dual: 'недели' afterCount: 'назад' month: single: 'месяц назад' @@ -89,7 +95,10 @@ surfaces: millisecond: single: 'через миллисекунду' multiple: - forms: 'миллисекунд' + forms: + default: 'миллисекунд' + singular: 'миллисекунду' + dual: 'миллисекунды' beforeCount: 'через' second: single: 'через секунду' @@ -129,7 +138,10 @@ surfaces: week: single: 'через неделю' multiple: - forms: 'недель' + forms: + default: 'недель' + singular: 'неделю' + dual: 'недели' beforeCount: 'через' month: single: 'через месяц' diff --git a/tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs b/tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs index 292ba04e0..3a44ba3b4 100644 --- a/tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs +++ b/tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs @@ -745,6 +745,18 @@ static class LocalePhraseTheoryData { "ru", 2, TimeUnit.Month, Tense.Future, "через 2 месяца" }, { "ru", 1, TimeUnit.Year, Tense.Past, "год назад" }, { "ru", 2, TimeUnit.Year, Tense.Future, "через 2 года" }, + { "ru", 1, TimeUnit.Week, Tense.Past, "неделю назад" }, + { "ru", 2, TimeUnit.Week, Tense.Past, "2 недели назад" }, + { "ru", 7, TimeUnit.Week, Tense.Past, "7 недель назад" }, + { "ru", 1, TimeUnit.Week, Tense.Future, "через неделю" }, + { "ru", 2, TimeUnit.Week, Tense.Future, "через 2 недели" }, + { "ru", 7, TimeUnit.Week, Tense.Future, "через 7 недель" }, + { "ru", 1, TimeUnit.Millisecond, Tense.Past, "миллисекунду назад" }, + { "ru", 2, TimeUnit.Millisecond, Tense.Past, "2 миллисекунды назад" }, + { "ru", 7, TimeUnit.Millisecond, Tense.Past, "7 миллисекунд назад" }, + { "ru", 1, TimeUnit.Millisecond, Tense.Future, "через миллисекунду" }, + { "ru", 2, TimeUnit.Millisecond, Tense.Future, "через 2 миллисекунды" }, + { "ru", 7, TimeUnit.Millisecond, Tense.Future, "через 7 миллисекунд" }, { "ru", 0, TimeUnit.Second, Tense.Future, "сейчас" }, { "sk", 1, TimeUnit.Second, Tense.Past, "pred sekundou" }, { "sk", 2, TimeUnit.Second, Tense.Future, "o 2 sekundy" }, From 6ea2a21e35c5b6b3ff12646a66932114bff66adc Mon Sep 17 00:00:00 2001 From: Yegor Sychev Date: Sun, 19 Apr 2026 14:42:53 +0500 Subject: [PATCH 2/6] correct tests --- .../GeneratedLocaleDeRuPhraseMigrationTests.cs | 2 +- .../Localisation/LocalePhraseTheoryData.cs | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs b/tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs index 215a3ea8c..9bdbe12da 100644 --- a/tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs +++ b/tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs @@ -46,7 +46,7 @@ public void RussianPhraseTableUsesCompactGrammarAwareYamlForms() Assert.True(table.TryGetDatePhrase(TimeUnit.Week, Tense.Future, out var futureWeek)); Assert.Equal("недель", futureWeek.Multiple?.Forms.Default); - Assert.Null(futureWeek.Multiple?.Forms.Dual); + Assert.Equal("недели", futureWeek.Multiple?.Forms.Dual); } [Theory] diff --git a/tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs b/tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs index 3a44ba3b4..292ba04e0 100644 --- a/tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs +++ b/tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs @@ -745,18 +745,6 @@ static class LocalePhraseTheoryData { "ru", 2, TimeUnit.Month, Tense.Future, "через 2 месяца" }, { "ru", 1, TimeUnit.Year, Tense.Past, "год назад" }, { "ru", 2, TimeUnit.Year, Tense.Future, "через 2 года" }, - { "ru", 1, TimeUnit.Week, Tense.Past, "неделю назад" }, - { "ru", 2, TimeUnit.Week, Tense.Past, "2 недели назад" }, - { "ru", 7, TimeUnit.Week, Tense.Past, "7 недель назад" }, - { "ru", 1, TimeUnit.Week, Tense.Future, "через неделю" }, - { "ru", 2, TimeUnit.Week, Tense.Future, "через 2 недели" }, - { "ru", 7, TimeUnit.Week, Tense.Future, "через 7 недель" }, - { "ru", 1, TimeUnit.Millisecond, Tense.Past, "миллисекунду назад" }, - { "ru", 2, TimeUnit.Millisecond, Tense.Past, "2 миллисекунды назад" }, - { "ru", 7, TimeUnit.Millisecond, Tense.Past, "7 миллисекунд назад" }, - { "ru", 1, TimeUnit.Millisecond, Tense.Future, "через миллисекунду" }, - { "ru", 2, TimeUnit.Millisecond, Tense.Future, "через 2 миллисекунды" }, - { "ru", 7, TimeUnit.Millisecond, Tense.Future, "через 7 миллисекунд" }, { "ru", 0, TimeUnit.Second, Tense.Future, "сейчас" }, { "sk", 1, TimeUnit.Second, Tense.Past, "pred sekundou" }, { "sk", 2, TimeUnit.Second, Tense.Future, "o 2 sekundy" }, From d8d815675b08b0c987c7147360ec8df97df2acf2 Mon Sep 17 00:00:00 2001 From: Yegor Sychev Date: Mon, 29 Jun 2026 01:18:23 +0500 Subject: [PATCH 3/6] Add RU relative date phrase assertions --- ...GeneratedLocaleDeRuPhraseMigrationTests.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs b/tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs index 9bdbe12da..51be61a3e 100644 --- a/tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs +++ b/tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs @@ -45,8 +45,27 @@ public void RussianPhraseTableUsesCompactGrammarAwareYamlForms() Assert.Equal("минут", timeSpanMinute.Multiple?.Forms.Default); Assert.True(table.TryGetDatePhrase(TimeUnit.Week, Tense.Future, out var futureWeek)); + Assert.Equal("неделю", futureWeek.Multiple?.Forms.Singular); Assert.Equal("недель", futureWeek.Multiple?.Forms.Default); Assert.Equal("недели", futureWeek.Multiple?.Forms.Dual); + + Assert.True(table.TryGetDatePhrase(TimeUnit.Week, Tense.Past, out var pastWeek)); + Assert.Equal("неделю назад", pastWeek.Single); + Assert.Equal("неделю", pastWeek.Multiple?.Forms.Singular); + Assert.Equal("недель", pastWeek.Multiple?.Forms.Default); + Assert.Equal("недели", pastWeek.Multiple?.Forms.Dual); + + Assert.True(table.TryGetDatePhrase(TimeUnit.Millisecond, Tense.Past, out var pastMillisecond)); + Assert.Equal("миллисекунду назад", pastMillisecond.Single); + Assert.Equal("миллисекунду", pastMillisecond.Multiple?.Forms.Singular); + Assert.Equal("миллисекунд", pastMillisecond.Multiple?.Forms.Default); + Assert.Equal("миллисекунды", pastMillisecond.Multiple?.Forms.Dual); + + Assert.True(table.TryGetDatePhrase(TimeUnit.Millisecond, Tense.Future, out var futureMillisecond)); + Assert.Equal("через миллисекунду", futureMillisecond.Single); + Assert.Equal("миллисекунду", futureMillisecond.Multiple?.Forms.Singular); + Assert.Equal("миллисекунд", futureMillisecond.Multiple?.Forms.Default); + Assert.Equal("миллисекунды", futureMillisecond.Multiple?.Forms.Dual); } [Theory] From 4e25462507b9e40c9598a9d778d2a18f4a3ddebd Mon Sep 17 00:00:00 2001 From: Yegor Sychev Date: Mon, 29 Jun 2026 03:39:50 +0500 Subject: [PATCH 4/6] Trigger CI rerun From cbb799d6fe38f5a091480b232ce6750141eb6476 Mon Sep 17 00:00:00 2001 From: Yegor Sychev Date: Mon, 29 Jun 2026 03:54:38 +0500 Subject: [PATCH 5/6] chore: update SDK version to 11.0.100-preview.5 --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index f618f76a6..5e42ce591 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "11.0.100-preview.3", + "version": "11.0.100-preview.5", "rollForward": "latestFeature", "allowPrerelease": true }, From 3b43c4e0290b3d36ee4abc730d23c821af75d6ab Mon Sep 17 00:00:00 2001 From: Yegor Sychev Date: Mon, 29 Jun 2026 03:56:31 +0500 Subject: [PATCH 6/6] chore: update SDK version to 11.0.100-preview.5.26302.115 --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index 5e42ce591..bf9e267bd 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "11.0.100-preview.5", + "version": "11.0.100-preview.5.26302.115", "rollForward": "latestFeature", "allowPrerelease": true },