IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

ngettext avec zéro


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 26
    Points
    26
    Par défaut ngettext avec zéro
    Bonjour à tous
    J'ai un petit problème avec la fonction ngettext.
    Si on utilise 1 ou plus, pas de soucis ça marche très bien, mais avec zéro on obtient toujours le mot (ou l'expression) au pluriel:
    Par exemple:

    ngettext("absence","absences",1) = > absence
    ngettext("absence","absences",2) = > absences
    ngettext("absence","absences",0) = > absences

    J'ai lu quelque part que suivant la langue on écrit pour zéro soit au pluriel, soit au singulier.
    Mais même en déclarant la langue, ça ne change pas.

    setlocale(LC_ALL, 'fr_FR');
    ngettext("absence","absences",0) = > absences


    Je n'ai pas encore regardé le problème des termes traduits, mais déjà en français ça ne marche pas :-(

    Est-ce que quelqu'un à une idée ou au moins une piste ?

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    En français l'absence de quelque chose peut être un pluriel ou un singulier selon le contexte.
    Il n'y a donc pas d'automatisme.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Aie !!
    J'ai un peu de mal à écrire sur le site:
    0 absences cette semaine.

    C'est correcte ça ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne suis pas professeur de français mais on peut dire zéro absences.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Pour terminer cette discussion, voici la solution que j'ai finalement mis en place, Ce n'est peut-être pas l'idéal, mais ça marche et c'est adaptable à toutes les langues.

    Mise en place d'un fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function plurielGettext($singulier, $pluriel, $nombre){
    	if(empty($nombre)) return _($singulier);
    	else return ngettext($singulier, $pluriel, $nombre);
    }
    La 1ere ligne peut être conditionnée suivant la langue, c'est là l'intérêt.
    Voilà j'ai bien galéré pour trouver une solution qui paraît somme toute très simple.

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 233
    Points : 15 528
    Points
    15 528
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Je ne suis pas professeur de français mais on peut dire zéro absences.
    non pas du tout, le français et le portugais brésilien sont les seuls cas où le zéro utilise le singulier :
    http://www.gnu.org/software/gettext/...ral-forms.html

    marochlo, est ce que tu as bien chargé le fichier ".mo" avec les traductions ? montre nous le code complet d'un test qui ne fonctionne pas

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il y mieux que la doc de gettext pour vérifier l'usage du français.
    En français quand on écrit l'absence de quelque chose, il peut s'agir d'un pluriel ou d'un singulier selon le cas.
    exemple : Il y a des bonbons / Il n'y a pas de bonbons

    Dans le cas de "0 absence" ce n'est pas une phrase alors bon il n'y a pas de règle de français.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Bonjour
    Citation Envoyé par mathieu Voir le message
    marochlo, est ce que tu as bien chargé le fichier ".mo" avec les traductions ? montre nous le code complet d'un test qui ne fonctionne pas
    Il n'y a pas de fichier .mo pour le français, c'est la langue de base du site.
    Le ngettext prend bien sans problème le pluriel ou le singulier des expressions (sauf pour 0).
    Le problème ne se trouve pas dans le .mo ou dans l'expression, mais bien dans le principe de fonctionnement de ngettext.
    C'est un problème uniquement pour le français (et je viens d'apprendre que pour le portugais aussi) avec une règle de grammaire particulière.

    Lorsqu'on cherche un peu sur le net, on s’aperçoit que c'est un vaste débat qui dépasse très largement le cadre de l'informatique et encore plus celui du gettext

    Merci pour vos réponses

  9. #9
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 233
    Points : 15 528
    Points
    15 528
    Par défaut
    Citation Envoyé par marochlo Voir le message
    Il n'y a pas de fichier .mo pour le français, c'est la langue de base du site.
    non le fonctionnement de base c'est l'anglais, d'où le pluriel pour le 0

    c'est dans le fichier .po (ensuite compilé en .mo) qu'est indiqué le fonctionnement du pluriel. par exemple en français il y a cette information:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plural-Forms: nplurals=2; plural=n > 1;
    ce qui se traduit par "utiliser le pluriel si N > 1"

    alors qu'en anglais ou en allemand le fichier contient cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plural-Forms: nplurals=2; plural=n != 1;
    ce qui se traduit par "utiliser le pluriel si N différent de 1" (donc pluriel pour zéro)

    et il y a même des langues qui plusieurs autres formes comme le russes par exemple qui a 3 formes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);

  10. #10
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    À mon sens, zéro a toujours été suivi d'un singulier depuis que mon prof de français me l'a appris en classe de cinquième. Le wikitionnaire va dans ce sens.

    J'ai également trouvé une conversation de littéraires qui sont visiblement tous d'accord sur ce point.

    Utiliser le zéro est différent d'utiliser les expressions « sans … » et « pas de … » qui peuvent s'accorder au singulier ou au pluriel selon le cas. En revanche, on sera davantage choqué par un pluriel après « aucun », par exemple si je vous dis « je ne voyais aucun chevaux » : vous serez tous d'accord, je pense, pour admettre que c'est une faute.

    On peut considérer que le zéro et l'adjectif indéfini « aucun » suivent les mêmes règles dans la plupart des cas (voir encore le Wikitionnaire pour les exceptions).

    Pour moi, s'il y a débat, il se justifie dans le domaine des mathématiques où la nature particulière du zéro lui donne la propriété de n'être ni singulier, ni pluriel. Mais ici avec ngettext, on est clairement dans le domaine de l'orthographe, où les règles sont bien définies.

    Pour conclure, si ngettext ne renvoie pas de singulier après zéro en langue française, c'est un bug et il faut le signaler
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par mathieu Voir le message
    non le fonctionnement de base c'est l'anglais, d'où le pluriel pour le 0
    Je pense qu'il faut expliquer 2 ou 3 trucs.
    Ok le fonctionnement de base des fonctions php (entre autres) est l'anglais, là je suis d'accord.
    Dans le post j'ai utilisé l' expression , "La langue de base du site est le français".

    C'est un site qui existe depuis 10 ans et que je suis en train de passer en gettext pour l'avenir. C'est un travail de malade vu le nombre de page :-(.
    Bref tout ça pour dire que je n'ai pas encore de .mo, et que donc je ne peux pas mettre les infos de pluriel dans l'entête.

    Ceci dit, j'ai fait un essai avec un mo provisoire avec juste une phrase et ça ne marchait pas, malgré l'entête
    Je répond tout de suite à la question: oui la traduction était correctement prise en compte, je suis sûr que le gettext faisait bien son travail et que le .mo était chargé correctement

    Citation Envoyé par Watilin Voir le message
    Pour conclure, si ngettext ne renvoie pas de singulier après zéro en langue française, c'est un bug et il faut le signaler
    C'est une sorte de bogue je suis d'accord, mais il faudrait pouvoir paramétrer la langue initiale, et là c'est pas gagné.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Effectuer un calcul jusqu’à cellule avec zéro
    Par evo84 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2014, 09h05
  2. Réponses: 1
    Dernier message: 09/09/2011, 20h44
  3. Format avec Zéro devant
    Par fred_bel dans le forum SAS Base
    Réponses: 1
    Dernier message: 04/07/2008, 10h16
  4. Affichage d'un chiffre avec zéros significatifs
    Par Trebor_ dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2008, 09h55
  5. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo