Hello,
Suite à une discussion sur irc, voici les spécifications d’un nouveau filtre destiné à remplacer singulier_ou_pluriel… en mieux !
-
Proposition de nom : un_ou_plusieurs()
-
Prototype de la fonction : un_ou_plusieurs($nb, $chaine_un, $options=array())
-
Résumé :
Permet d’afficher la chaine correspondant au singulier, au pluriel voire au duel pour les langues qui supportent cette spécificité (arabe, par exemple).
Les options permettent principalement d’ajouter des paramètres supplémentaires de personnalisation de la chaine de langue…
Cette fonction n’est pas destinée à conserver la compatibilité avec singulier_ou_pluriel mais à la remplacer petit à petit.
La base du traitement est de considérer qu’un item pluriel ou duel est construit sur la base du nom de l’item singulier de la manière suivante :
- singulier : ‘item_un’
- pluriel : ‘item_un_pluriel’
- duel : ‘item_un_duel’
Pour illustrer voilà des exemples avec les items de langue français, pour un module de langue “test” :
‘un_article’ => ‘article’
‘un_article_pluriel’ => ‘articles’
‘un_fichier’ => ‘@nb_fic@ fichier’
‘un_fichier_pluriel’ => ‘@nb_fic@ fichiers’
‘un_autre_fichier’ => ‘@nb@ fichier de type @type@’
‘un_autre_fichier_pluriel’ => ‘@nb@ fichiers de type @type@’
Appels en php :
de façon classique, dans un contexte français :
- un_ou_plusieurs(1, ‘test:un_article’) => renvoie la chaine ‘article’
- un_ou_plusieurs(3, ‘test:un_article’) => renvoie la chaine ‘articles’
en supposant que nous sommes en arabe et que la chaine un_article_duel existe :
- un_ou_plusieurs(2, ‘test:un_article’) => renvoie la traduction arable correspondant à l’item ‘un_article_duel’
Pour l’utilisation de $options, on a la possibilité de préciser le nom du paramètre représentant le nombre (cela permet de ne pas modifier les chaines actuelles sauf le nom de l’item) :
- un_ou_plusieurs(1, ‘test:un_fichier’, array(‘nb’ => ‘nb_fic’)) => renvoie la chaine ‘1 fichier’
- un_ou_plusieurs(3, ‘test:un_fichier’ array(‘nb’ => ‘nb_fic’)) => renvoie la chaine ‘3 fichiers’
Enfin, pour passer des paramètres supplémentaires :
- un_ou_plusieurs(1, ‘test:un_fichier’, array(‘type’ => ‘php’)) => renvoie la chaine ‘1 fichier de type php’
- un_ou_plusieurs(3, ‘test:un_fichier’ array(‘type’ => ‘log’)) => renvoie la chaine ‘3 fichiers de type log’
Les différents cas peuvent bien entendu se combiner.
Voilà voilà
J’attends vos remarques avant de déverser le code dans SPIP.
