From bf7e31f9eaab32745f6b5edb900b90963e1de184 Mon Sep 17 00:00:00 2001 From: Holly Freeman Date: Tue, 17 Mar 2026 14:57:19 -0400 Subject: [PATCH 1/2] issue 1674 irregular plurals added --- src/Humanizer/Inflections/Vocabularies.cs | 14 +++++++++++++- tests/Humanizer.Tests/InflectorTests.cs | 7 +++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/Humanizer/Inflections/Vocabularies.cs b/src/Humanizer/Inflections/Vocabularies.cs index 5b31baa0a..6eac2b950 100644 --- a/src/Humanizer/Inflections/Vocabularies.cs +++ b/src/Humanizer/Inflections/Vocabularies.cs @@ -43,7 +43,7 @@ static Vocabulary BuildDefault() _default.AddSingular("(n)ews$", "$1ews"); _default.AddSingular("([dti])a$", "$1um"); _default.AddSingular("(analy|ba|diagno|parenthe|progno|synop|the|ellip|empha|neuro|oa|paraly)ses$", "$1sis"); - _default.AddSingular("([^f])ves$", "$1fe"); + _default.AddSingular("(kni|wi|li)ves$", "$1fe"); _default.AddSingular("(hive)s$", "$1"); _default.AddSingular("(tive)s$", "$1"); _default.AddSingular("([lr]|hoo|lea|loa|thie)ves$", "$1f"); @@ -94,6 +94,18 @@ static Vocabulary BuildDefault() _default.AddIrregular("clove", "cloves"); _default.AddIrregular("valve", "valves"); _default.AddIrregular("explosive", "explosives"); + _default.AddIrregular("safe", "saves", matchEnding: false); + _default.AddIrregular("curve", "curves"); + _default.AddIrregular("carve", "carves"); + _default.AddIrregular("starve", "starves"); + _default.AddIrregular("serve", "serves"); + _default.AddIrregular("swerve", "swerves"); + _default.AddIrregular("revolve", "revolves"); + _default.AddIrregular("involve", "involves"); + _default.AddIrregular("evolve", "evolves"); + _default.AddIrregular("dissolve", "dissolves"); + _default.AddIrregular("resolve", "resolves"); + _default.AddIrregular("absolve", "absolves"); _default.AddUncountable("staff"); _default.AddUncountable("training"); diff --git a/tests/Humanizer.Tests/InflectorTests.cs b/tests/Humanizer.Tests/InflectorTests.cs index 10cd54062..610334e61 100644 --- a/tests/Humanizer.Tests/InflectorTests.cs +++ b/tests/Humanizer.Tests/InflectorTests.cs @@ -404,6 +404,13 @@ public IEnumerator GetEnumerator() //Issue #1042 yield return ["database", "databases"]; + + //Issue #1674 + yield return ["arrive", "arrives"]; + yield return ["drive", "drives"]; + yield return ["curve", "curves"]; + yield return ["behave", "behaves"]; + } IEnumerator IEnumerable.GetEnumerator() => From 5ed7f5c7f48ad3b61eb4958297d18c0e2898da60 Mon Sep 17 00:00:00 2001 From: Holly Freeman Date: Tue, 17 Mar 2026 15:36:32 -0400 Subject: [PATCH 2/2] fixed a potential bug --- src/Humanizer/Inflections/Vocabularies.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Humanizer/Inflections/Vocabularies.cs b/src/Humanizer/Inflections/Vocabularies.cs index 6eac2b950..163205064 100644 --- a/src/Humanizer/Inflections/Vocabularies.cs +++ b/src/Humanizer/Inflections/Vocabularies.cs @@ -94,7 +94,7 @@ static Vocabulary BuildDefault() _default.AddIrregular("clove", "cloves"); _default.AddIrregular("valve", "valves"); _default.AddIrregular("explosive", "explosives"); - _default.AddIrregular("safe", "saves", matchEnding: false); + _default.AddIrregular("safe", "saves"); _default.AddIrregular("curve", "curves"); _default.AddIrregular("carve", "carves"); _default.AddIrregular("starve", "starves");