diff --git a/grammar.go b/grammar.go index ba52611..ec64c0b 100644 --- a/grammar.go +++ b/grammar.go @@ -452,6 +452,9 @@ func articleForCurrentLanguage(lowerWord, originalWord string) (string, bool) { return "", false } + if article, ok := articleForPluralForm(data, lowerWord, lang); ok { + return article, true + } if article, ok := articleByGender(data, lowerWord, originalWord, lang); ok { return article, true } @@ -476,6 +479,32 @@ func articleByGender(data *GrammarData, lowerWord, originalWord, lang string) (s return maybeElideArticle(article, originalWord, lang), true } +func articleForPluralForm(data *GrammarData, lowerWord, lang string) (string, bool) { + if !isFrenchLanguage(lang) { + return "", false + } + if !isKnownPluralNoun(data, lowerWord) { + return "", false + } + return "les", true +} + +func isKnownPluralNoun(data *GrammarData, lowerWord string) bool { + if data == nil || len(data.Nouns) == 0 { + return false + } + for _, forms := range data.Nouns { + if forms.Other == "" || core.Lower(forms.Other) != lowerWord { + continue + } + if forms.One != "" && core.Lower(forms.One) == lowerWord { + continue + } + return true + } + return false +} + func articleFromGrammarForms(data *GrammarData, word string) (string, bool) { if data.Articles.IndefiniteDefault == "" && data.Articles.IndefiniteVowel == "" { return "", false diff --git a/grammar_test.go b/grammar_test.go index 07c63ba..f26d650 100644 --- a/grammar_test.go +++ b/grammar_test.go @@ -334,6 +334,7 @@ func TestArticleFrenchLocale(t *testing.T) { want string }{ {"branche", "la"}, + {"branches", "les"}, {"enfant", "l'"}, {"fichier", "le"}, {"inconnu", "un"}, @@ -510,6 +511,7 @@ func TestArticlePhraseFrenchLocale(t *testing.T) { want string }{ {"branche", "la branche"}, + {"branches", "les branches"}, {"enfant", "l'enfant"}, {"fichier", "le fichier"}, }