JSTL & I18n : Utilisation de ChoiceFormat pour la gestion du singulier et du pluriel

 Article modifié dernièrement le 19 Avr 2011 @ 11 h 51 min

Je vous ai parlé dans un article précédent comment utiliser JSTL pour l’internationalisation de votre site Web, en mettant l’accent sur les Resource Bundle (accès aux données des fichiers localisation) et les Locale Java (choix de la localisation).

Ce nouvel article est un peu la suite car il apporte un plus, que je viens d’apprendre récemment (grâce à VALJ qui se reconnaîtra), qui permet de simplifier l’affichage de messages internationalisés qui doivent prendre en compte les accords du singulier et du pluriel, par exemple :

  • « Il existe une maison »
  • « Il existe plusieurs maisons »
© http://www.getbodysmart.com

© http://www.getbodysmart.com

Avant

Imaginons ces deux phrases dans un fichier de propriétés correspondant aux clés maison.singulier et maison.pluriel, voici la façon dont j’aurai procédé auparavant pour afficher telle ou telle phrase selon la quantité de maisons donnée par la variable ${nb_maisons} :

Visuellement ce n’est pas très élégant, de plus on imagine mal devoir tester plusieurs cas de la même manière pour afficher simplement un texte ou un mot selon son singulier ou son pluriel.

Voici une façon plus élégante en utilisant une classe standard Java, la classe java.text.ChoiceFormat.

ChoiceFormat

Pour faire simple, la classe ChoiceFormat permet de prendre en compte les accords du singulier et du pluriel des messages selon un indice donné au sein même du fichier de propriétés en exploitant la forme {argind, choice, formstyle}

  • Le champ argind permet d’utiliser l’argument à l’indice {argind}
  • Le mot clé choice permet de d’utiliser la classe ChoiceFormat
  • Le champ formstyle est défini par la sous-forme [Limit Index][Limit Behavior][Choice Text]|…

– [Limit Index] désigne l’indice du message associé (un entier)
– [Limit Behavior] désigne des signes de comparaison (# pour l’égal et < > pour les inférieurs et supérieurs)
– [Choice Text] désigne le message à afficher selon le résultat de la comparaison
– Le caractère « | » permet de séparer les différentes valeurs des limites

Après

Ce qui nous donne donc pour l’exemple donné en introduction :

  1. Au niveau du fichier de propriétés
  2. maison.singulier.pluriel = Il existe {0, choice, 1#une maison|1>plusieurs maisons}

  3. Au niveau de la JSP
  4. L’équivalent Java pur

A présent devoir afficher le singulier ou le pluriel d’un mot n’est plus un problème, cette façon de faire est simple à mettre en place, super pratique et surtout standard.

Trois flèches vers le bas

1- Logiciel de brouillage d’adresse IP :

Contourner la censure en surfant anonyme

2- L’article explicatif :

La différence entre un proxy et un VPN

3- Comment espionner un smartphone (app) :

L’application de référence

Commentez ici

Article suivant:

Article précédent:

Share This