inflector icon indicating copy to clipboard operation
inflector copied to clipboard

[Fix] Add invariable words in french

Open lemonlab opened this issue 2 years ago • 5 comments

@greg0ire i have retargeted to 2.0.x as you suggest here : https://github.com/doctrine/inflector/pull/198


Some words should not be singularized in french.

The list is coming from here : https://github.com/symfony/symfony/blob/6.2/src/Symfony/Component/String/Inflector/FrenchInflector.php#L111

lemonlab avatar Jun 26 '22 19:06 lemonlab

@lemonlab great! You didn't have to create a new PR though, using the edit button to change the target branch would have worked just as well. For next time :wink:

greg0ire avatar Jun 27 '22 08:06 greg0ire

I think that creating a list of all "gentilés" is too long, so it could more useful to implement the grammatical rule ais and ois 'gentilés" aren't singularised. Technicaly, you have to implement an exception list of this exception rule. If a word is finishing by ais, do not singularize it except balai, etc. if a word is finishing by ois, do not singularize it except roi, etc.

Je me permets de l'écrire en français vu les contributeurs :-) : la liste des gentilés qui finissent par ais et ois est particulièrement longue (il ya quand même 36.000 communes en France (je vous passe les bordelais, strabourgeois, etc.) et on se retrouverait à télécharger une liste particulièrement longue). A constituer aussi, une telle liste demanderait du temps. (Et je ne vous raconte pas la liste de Pull Request à gérer quand chaque villageois (exception aussi) voudra comme moi ajouter son gentilé (je suis très fier d'être canaulais, alors je l'ajoute ?)

Donc je pense qu'il est peut-être plus simple de prendre le problème à l'envers : créer une exception pour ne pas singulariser les mots finissant en ais ou en ois.

Ensuite, avec un dictionnaire inversé (ce que j'ai utilisé pour Symfony), on recherche les noms communs finissant par ai et oi au singulier et on les gère comme exception de l'exception précédente.

Pour les tests, on peut prendre ces valeurs :

canaulais => canaulais
français => français
portois => portois
balais => balai
rois => roi

Liste des mots en oi : émoi surmoi monoï tournoi waterzooi époi roi paroi beffroi orfroi arroi charroi désarroi

Liste des mots en ai thaï cabiai haikai tokai skai lai balai délai déblai remblai virelai mai shahnai moai

Alexandre-T avatar Jun 28 '22 17:06 Alexandre-T

@Alexandre-T merci pour le plan d'attaque, ça semble faisable avec ce genre de regex: https://regex101.com/r/ZXXbpJ/1

@lemonlab soit tu te sens d'implémenter ça, soit non, et dans le deux cas, peux-tu retirer "anglais" de ton premier commit, (avec git commit --amend && git push --force) ?

greg0ire avatar Jun 28 '22 18:06 greg0ire

Je ne sais pas ce qui est plus rapide, deux boucles ou bien une regexp plus complexe, mais en tout cas, celle-ci gère les deux : ^(?!balais|délais|rois)(.*ais|.*ois)$ https://regex101.com/r/ZXXbpJ/2

Alexandre-T avatar Jun 28 '22 18:06 Alexandre-T

ping @lemonlab

greg0ire avatar Jul 28 '22 12:07 greg0ire