Tutoriel : Traduction de thèmes et plugins : Gestion du pluriel (Créer un compte)

  • Statut : non résolu
Affichage de 1 message (sur 1 au total)
  • Auteur
    Messages
  • #464413
    dlo
    Participant
    Maître WordPress
    1848 contributions

    1 – Préambule

    Les développeurs de thème ou de plugin pour WordPress sont, tôt ou tard, confrontés au délicat problème de l’internationalisation et de la traduction, soit parce qu’ils souhaitent que leur travail soit utilisable par des personnes ne parlant pas leur langue, soit parce qu’ils veulent traduire en français un thème ou un plugin.

    Pour ce faire, WordPress utilise un mécanisme appelé « gettext » qui comprend des règles de programmation qui définissent ce qu’il convient de faire pour qu’une application soit traduisible, une bibliothèque de fonctions PHP ainsi que des outils pour gérer les catalogues de messages dans les différentes langues.

    Une abondante littérature existe déjà concernant la traduction de thèmes et plugin de WordPress et notamment la série d’articles disponible sur le blog « La 57ème boule de cristal ». Mon propos n’est pas d’en ajouter un mais de préciser un point particulier dans la traduction: La gestion des pluriels.

    Cet article part du principe que le lecteur possède les connaissances de PHP, de WordPress et des fonctions de base de gettext. Si tel n’est pas le cas, il est fortement conseillé de lire au préalable les articles du blog « La 57ème boule de cristal » cités plus haut.

    2 – Les mots en -al font leur pluriel en -aux

    Un blog comme tout média écrit se doit d’être rédigé dans le respect des règles grammaticales et syntaxiques de la langue dans lequel il est produit. Rien de plus exaspérant, voire rédhibitoire, que la lecture de textes à la syntaxe approximative et à l’orthographe massacrée et le blog ne fait pas exception. S’il est facile d’obtenir un texte sans fautes avec l’aide des correcteurs orthographiques, il existe un cas où la technique informatique qui supporte notre blog génère elle-même des erreurs et nous pousse à la faute… d’orthographe.

    Prenons un exemple:

    Vous avez créé un plugin qui permet d’afficher le nombre d’articles nouveaux qui ont été publiés depuis la dernière visite d’un lecteur quand celui-ci se connecte à nouveau sur un blog. Pour ce faire, vous l’avertissez en affichant le message suivant dans un bandeau sur la page d’accueil :

    Trois nouveaux articles sont parus depuis votre dernière visite.

    Votre code PHP correspondant va donc ressembler à ceci:

    <?php echo(sprintf('%d nouveaux articles sont parus depuis votre dernière visite.', $nombredarticles)); ?>

    Ce qui vous permet d’afficher le texte avec le nombre d’articles contenu dans la variable $nombredarticles. Tout va bien et, comme vous comptez diffuser votre plugin dans le monde entier, vous l’améliorez en lui permettant d’être traduit dans n’importe quelle langue.
    Votre code PHP devient alors:

    <?php echo(sprintf(__('%d new posts published since your last visit.', 'monplugin'), $nombredarticles)); ?>

    Ceci permettra à un utilisateur anglais de votre plugin de présenter un message compréhensible pour ses lecteurs et pour votre lecteur français, vous traduisez le message ‘%d new posts published since your last visit.’ en ‘%d nouveaux articles sont parus depuis votre dernière visite.’ dans le fichier de message de la version française.

    Votre fichier de messages traduits monplugin-fr_FR.po va donc ressembler à ceci:

    msgid «  »
    msgstr «  »
    « Project-Id-Version: n »
    « POT-Creation-Date: n »
    « PO-Revision-Date: 2008-10-14 17:07+0100n »
    « Last-Translator: DLO <DLO@DLO.com>n »
    « Language-Team: n »
    « MIME-Version: 1.0n »
    « Content-Type: text/plain; charset=iso-8859-1n »
    « Content-Transfer-Encoding: 8bitn »

    msgid « %d new posts published since your last visit. »
    msgstr « %d nouveaux articles sont parus depuis votre dernière visite. »

    So far, so good comme disent les anglais et vous vous frottez les mains car votre plugin est maintenant fin prêt et votre heure de gloire est proche. Quand tout à coup, c’est le drame…

    3 – Vous avez 1 nouveaux messages

    Horreur ! Vous venez de vous rendre compte que le message affiché quand il n’y a qu’un article nouveau est mal orthographié. En effet, dans ce cas, le message est:

    1 nouveaux articles sont parus depuis votre dernière visite.

    et la faute saute aux yeux. En anglais, cela ne sera pas mieux:

    1 new posts published since your last visit.

    Que faire ? Renoncer et conserver cette faute d’orthographe ? Se lancer dans la programmation pour tester le nombre d’articles et afficher des messages différents ?
    Heureusement, le modèle « gettext » a prévu cette éventualité et nous propose la solution.

    4 – La gestion du pluriel des messages avec __ngettext

    Il existe une fonction à utiliser à la place de _e() ou __() pour traduire les chaînes de caractères possédant une forme plurielle. Cette fonction s’appelle __ngettext. Elle retourne un message au pluriel $msgid1 ou $msgid2 en fonction du compteur $n et sa syntaxe est la suivante:

    __ngettext(string $msgid1, string $msgid2, int $n, string $domain)

    Les paramètres:
    $msgid1: Message au singulier
    $msgid2: Message au pluriel
    $n: Compteur
    $domain: Domaine de texte

    Votre code PHP devient alors:

    <?php echo(sprintf(__ngettext('%d new post published since your last visit.', '%d new posts published since your last visit.', $nombredarticles, 'monplugin'), $nombredarticles)); ?>

    Ainsi le message sera affiché au singulier ou au pluriel selon la valeur de $nombredarticles.
    Pour cela le fichier de messages monplugin-fr_FR.po possède une syntaxe enrichie par rapport à la première version vue plus haut:

    msgid «  »
    msgstr «  »
    « Project-Id-Version: n »
    « POT-Creation-Date: n »
    « PO-Revision-Date: 2008-10-14 17:07+0100n »
    « Last-Translator: DLO <DLO@DLO.com>n »
    « Language-Team: n »
    « MIME-Version: 1.0n »
    « Content-Type: text/plain; charset=iso-8859-1n »
    « Content-Transfer-Encoding: 8bitn »
    « Plural-Forms: nplurals=2; plural=n>1n »

    msgid « %d new post published since your last visit. »
    msgid_plural « %d new posts published since your last visit. »
    msgstr[0] « %d nouvel article est paru depuis votre dernière visite. »
    msgstr[1] « %d nouveaux articles sont parus depuis votre dernière visite. »

    Vous pouvez constater que l’entête du fichier .po contient une ligne qui précise la façon de gérer le pluriel: « Plural-Forms: nplurals=2; plural=n>1n »

    Les paramètres sont:

    nplurals : Le nombre de formes singulier/pluriel. Pour le français et l’anglais ainsi que de nombreuses langues, nplurals=2 car il n’existe qu’un pluriel mais d’autres langues ont plusieurs formes plurielles.
    plural : La règle qui détermine le passage du singulier au pluriel. Dans le cas du français, toute quantité strictement supérieure à 1 entraîne l’utilisation du pluriel d’où le n>1.

    Ensuite, les messages sont décrits de la façon suivante:

    msgid : Le message d’origine au singulier
    msgid_plural : Le message d’origine au pluriel
    msgstr[0] : Le message traduit au singulier
    msgstr[1] : Le message traduit au pluriel

    S’il y a un seul article nouveau, le blog affichera:

    1 nouvel article est paru depuis votre dernière visite.

    S’il y a 3 articles nouveaux, le blog affichera:

    3 nouveaux articles sont parus depuis votre dernière visite.

    Il est à noter que le programme PoEdit qui permet de générer le fichier .mo qui sera utilisé par WordPress supporte cette syntaxe et vous permet de gérer les traductions des chaînes avec leur forme singulière et plurielle.

    5 – Conclusion

    Avoir un blog respectant la grammaire et la syntaxe de la langue utilisée est maintenant à votre portée et apportera une finition impeccable à ce que vous exposez de vous sur la Toile.

Affichage de 1 message (sur 1 au total)
  • Vous devez être connecté pour répondre à ce sujet.