UNPKG

kira-crud

Version:

Intelligent CRUD Generator for Laravel and Angular

113 lines (99 loc) 3.51 kB
/** * Utilitaires pour gérer le genre et le pluriel des mots en français */ /** * Détermine si un nom est féminin en français * @param {string} word Le nom à vérifier * @returns {boolean} true si le nom est féminin */ function isFeminine(word) { const femininWords = [ 'agence', 'personne', 'table', 'chaise', 'maison', 'voiture', 'entreprise', 'société', 'organisation', 'application', 'catégorie', 'équipe', 'école', 'université', 'administration', 'banque', 'compagnie', 'image', 'photo', 'vidéo', 'carte', 'adresse', 'ville', 'région', 'province', 'nation', 'information', 'donnée', 'page', 'clé', 'notification', 'alerte' ]; const femininEndings = [ 'tion', 'sion', 'té', 'ée', 'ie', 'ue', 'ence', 'ance', 'ette', 'elle', 'esse', 'isse', 'rice', 'ine', 'euse', 'ade', 'ure', 'ode', 'ière', 'eté' ]; // Mettre le mot en minuscules pour la comparaison const lowercaseWord = word.toLowerCase().trim(); // Vérifier si le mot est dans la liste des mots féminins connus if (femininWords.includes(lowercaseWord)) { return true; } // Vérifier si le mot se termine par une terminaison féminine connue for (const ending of femininEndings) { if (lowercaseWord.endsWith(ending)) { return true; } } // Par défaut, considérer comme masculin return false; } /** * Détermine l'article défini approprié pour un nom en français * @param {string} word Le nom pour lequel trouver l'article * @returns {string} L'article approprié ("le", "la", "l'") */ function getDefiniteArticle(word) { // Vérifier si le mot commence par une voyelle ou un h muet const startsWithVowel = /^[aeiouhéèêàâ]/i.test(word); if (startsWithVowel) { return "l'"; } // Utiliser "la" pour les noms féminins, "le" pour les masculins return isFeminine(word) ? "la" : "le"; } /** * Détermine l'article indéfini approprié pour un nom en français * @param {string} word Le nom pour lequel trouver l'article * @returns {string} L'article approprié ("un", "une") */ function getIndefiniteArticle(word) { return isFeminine(word) ? "une" : "un"; } /** * Convertit un nom en son pluriel en français * @param {string} word Le nom à mettre au pluriel * @returns {string} Le nom au pluriel */ function toPlural(word) { const specialCases = { 'travail': 'travaux', 'bail': 'baux', 'email': 'emails', // Anglicisme qui ne suit pas les règles françaises 'détail': 'détails', 'cheval': 'chevaux', 'journal': 'journaux' }; const word_lower = word.toLowerCase(); // Traiter les cas spéciaux if (specialCases[word_lower]) { // Conserver la casse originale si le premier caractère était en majuscule if (word.charAt(0) === word.charAt(0).toUpperCase()) { return specialCases[word_lower].charAt(0).toUpperCase() + specialCases[word_lower].slice(1); } return specialCases[word_lower]; } // Règles pour le pluriel en français if (word_lower.endsWith('au') || word_lower.endsWith('eu')) { return word + 'x'; } else if (word_lower.endsWith('al')) { return word.slice(0, -2) + 'aux'; } else if (word_lower.endsWith('s') || word_lower.endsWith('x') || word_lower.endsWith('z')) { // Ces mots restent inchangés au pluriel return word; } else { // Cas général: ajouter un 's' return word + 's'; } } module.exports = { isFeminine, getDefiniteArticle, getIndefiniteArticle, toPlural };