Bonjour à tous,

Je suis en train de tester la classe ChoiceFormat pour internationaliser une application.
J'ai fait l'exemple de la documentation et je pensais l'avoir compris, toutefois, dès que j'essaie de sortir de l'exemple prédéfini. ça bug!
Ci-dessous, je vous joins mon code. J'essaie simplement de rajouter une chaine de caractère "Toto" à la fin de ma première ligne. Mais rien à faire.
Je suis obligé d'ajouter un zéro (ou de manière générale une valeur numérique) pour que cela passe et affiche Toto ce qui donne 0Toto alors que je veux juste Toto.
Qu'est ce que j'ai oublié?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package fr.localisation.app.Pluriel;
 
import java.text.ChoiceFormat;
import java.text.Format;
import java.text.MessageFormat;
import java.text.NumberFormat;
import java.util.Locale;
import java.util.ResourceBundle;
 
public class Pluriel {
 
	public static void mesPluriels() {
 
		//--------------------------------------------------------//
		// Gestion des pluriels
		//--------------------------------------------------------//	
 
		ResourceBundle traduction_pluriel = ResourceBundle.getBundle("fr.localisation.app.Pluriel.Pluriel", new Locale("fr", "CA"));
 
		MessageFormat messageForm = new MessageFormat("");
		messageForm.setLocale(new Locale("fr", "CA"));
 
		// Création d'un ChoiceFormat
		// Chaque numéro de fileLimits correspond à un chiffre dans le template
		double[] fileLimits = {0,1,2};
		// Les Strings recupérer seront liés à chaque numéro.
		String [] fileStrings = {
				traduction_pluriel.getString("noFiles"),
				traduction_pluriel.getString("oneFile"),
				traduction_pluriel.getString("multipleFiles")
		};
		// Création à proprement dit du ChoiceFormat
		ChoiceFormat choiceForm = new ChoiceFormat(fileLimits, fileStrings);
 
		// Appliquer le pattern présent dans le fichier .properties
		String pattern = traduction_pluriel.getString("pattern");
		messageForm.applyPattern(pattern);
 
		// Assigner les formats
		Format[] formats = {choiceForm, null, NumberFormat.getInstance(), null, null};
		messageForm.setFormats(formats);
 
		// Configurer les arguments pour utiliser le bon choix
 
		Object[] messageArguments = {null, "XDisk", null, 0, "Toto"};
                // Il m'oblige à ajouter le 0 avant Toto, sinon, plantage!!!
 
		for (int numFiles = 0; numFiles < 4; numFiles++) {
		    messageArguments[0] = new Integer(numFiles);
		    messageArguments[2] = new Integer(numFiles);
		    String result = messageForm.format(messageArguments);
		    System.out.println(result);
		}
 
	}
 
}
Le fichier Pluriel_fr_CA.properties correspondant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
pattern = Il {0} sur {1}. (fichier fr_CA) {3}{4}
noFiles = n'y a pas de fichiers
oneFile = y a un fichier
multipleFiles = y a {2} fichiers
Le {3} est inutile, mais je l'ajoute à cause de cette fichue valeur numérique qu'il m'impose.
Curieusement, sur Format[] formats, je ne suis pas obligé de définir le même nombre d'arguments que messageArguments (ça me parait louche ça), du moment que je mets ma valeur numérique.

Le message d'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Number
	at java.text.DecimalFormat.format(DecimalFormat.java:507)
	at java.text.Format.format(Format.java:157)
	at java.text.MessageFormat.subformat(MessageFormat.java:1322)
	at java.text.MessageFormat.format(MessageFormat.java:865)
	at java.text.Format.format(Format.java:157)
	at fr.localisation.app.Pluriel.Pluriel.mesPluriels(Pluriel.java:49)
	at fr.localisation.app.Main.main(Main.java:23)
Si quelqu'un arrive me dire ce que j'ai mal fait. Merci d'avance. A bientôt.
Damien.

NOTA: Je suis sous Mac OS El Capitan et Java 1.8.0_131. Editeur : Eclipse
NOTA2 : L'utilisation de MessageText seule fonctionne bien.

A priori, c'est un bug : https://bugs.openjdk.java.net/browse/JDK-8042551
J'ai cru comprendre que je dois modifier un des fichiers du JDK?