Comment obtenir la valeur par défaut ResourceBundle indépendamment de courant de paramètres Régionaux par défaut
J'ai trois fichiers de ressources dans le chemin de classe:
étiquettes.propriétés:
language = Default
labels_en.propriétés:
language = English
labels_fr.propriétés:
language = French
Est-il un moyen d'obtenir un ResourceBundle
objet qui est toujours chargé labels.properties
peu IMPORTE ce que mon défaut Locale
est?
ResourceBundle.getBundle("labels")
renvoie l'un correspondant aux paramètres régionaux par défaut (comme prévu).
La seule façon que je peux trouver est de définir les paramètres régionaux par défaut à un non-existant régionaux, mais cela peut casser d'autres modules.
Merci!
Locale.setDefault( Locale.ENGLISH);
Assert.assertEquals( "English", ResourceBundle.getBundle( "labels").getString( "language"));
Locale.setDefault( Locale.FRENCH);
Assert.assertEquals( "French", ResourceBundle.getBundle( "labels").getString( "language"));
Assert.assertEquals( "French", ResourceBundle.getBundle( "labels", new Locale( "do-not-exist")).getString( "language"));
Locale.setDefault( new Locale( "do-not-exist"));
Assert.assertEquals( "Default", ResourceBundle.getBundle( "labels").getString( "language"));
Vous pourriez avoir besoin d'appeler
Je vous remercie pour votre commentaire. Il n'a pas de travail, si. Si
ResourceBundle.clearCache()
avant d'essayer: ResourceBundle.getBundle( "labels", new Locale( "do-not-exist")).getString( "language"));
. (À partir de cette question).Je vous remercie pour votre commentaire. Il n'a pas de travail, si. Si
new Locale("do-not-exist")
(j'aurais appelé cela "n'existe pas"...) n'est pas trouvé, ResourceBundle
essaie de charger un avec Locale.getDefault()
au lieu de cela, pas la version par défaut de l'ensemble.
OriginalL'auteur | 2014-06-19
Vous devez vous connecter pour publier un commentaire.
Vous pouvez passer une ResourceBundle.Contrôle qui, indépendamment de la demande Locale, toujours à la recherche uniquement la racine de ResourceBundle:
Locale.ROOT
, j'ai pensénew Locale("")
n'étaient pas autorisés... d'ailleurs, n'est-ce pas votre code équivalent àResourceBundle.getBundle("labels", Locale.ROOT)
? Existe-il d'autres raisons étendControl
(pour ce problème spécifique)? La suite de cas de test passe:Locale.setDefault( Locale.ENGLISH); Assert.assertEquals( "Default", ResourceBundle.getBundle( "labels", Locale.ROOT).getString( "language"));
1. Oui, en passant des paramètres Régionaux.De la RACINE à chaque appel de ResourceBundle.getBundle permettra d'accomplir la même chose. 2. Il ya beaucoup d'autres raisons pour utiliser les ResourceBundle.De contrôle, tels que le contrôle de la mise en cache de paquets et de contrôler si seulement la recherche .propriétés de ressources et/ou des sous-classes de ResourceBundle. La javadoc (à qui je me suis lié) la liste de tous les comportements que vous pouvez remplacer.
D'accord avec @VGR, si vous passez par la
java.util.ResourceBundle
classe, invoquerResourceBundle.getBundle("baseName", Locale.ROOT);
va faire la même chose, mais sauter le pas pour tenter d'obtenir bundle avecLocale.getDefault()
, qui est inutile dans ce cas.OriginalL'auteur VGR
Une autre solution consiste à définir les paramètres régionaux par défaut de votre application, comme
OriginalL'auteur Michel Fortes