Wie man die Standard-ResourceBundle-unabhängig von der derzeitigen Standard-Locale
Habe ich drei Ressource-Dateien im class-path:
labels.Eigenschaften:
language = Default
labels_en.Eigenschaften:
language = English
labels_fr.Eigenschaften:
language = French
Gibt es eine Möglichkeit, um eine ResourceBundle
- Objekt, die immer zu Lasten labels.properties
EGAL was meine Standard - Locale
ist?
ResourceBundle.getBundle("labels")
gibt die man entsprechend der derzeitigen Standard-locale (wie erwartet).
Die einzige Möglichkeit, die ich finden kann ist die Einstellung der Standard-locale zu einer nicht vorhandenen Gebietsschema, aber diese können zerbrechen, andere Module.
Danke!
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"));
Möglicherweise müssen Sie anrufen
Vielen Dank für Ihren Kommentar. Es hat nicht funktioniert, obwohl. Wenn
ResourceBundle.clearCache()
vor dem Versuch: ResourceBundle.getBundle( "labels", new Locale( "do-not-exist")).getString( "language"));
. (Von diese Frage).Vielen Dank für Ihren Kommentar. Es hat nicht funktioniert, obwohl. Wenn
new Locale("do-not-exist")
(ich hätte es mit dem Namen "does-not-exist"...) nicht gefunden wird, wird ResourceBundle
zu laden versucht man mit Locale.getDefault()
statt, nicht die Standard-version des Bundles.
InformationsquelleAutor | 2014-06-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie in einem ResourceBundle.Kontrolle, die, unabhängig von der angeforderten Gebietsschema, sucht immer nur die root-ResourceBundle:
Locale.ROOT
ich dachtenew Locale("")
waren nicht erlaubt... übrigens, ist das nicht dein code entsprichtResourceBundle.getBundle("labels", Locale.ROOT)
? Gibt es andere Gründe, erstreckt sichControl
(für dieses problem)? Folgende test-Fall geht:Locale.setDefault( Locale.ENGLISH); Assert.assertEquals( "Default", ResourceBundle.getBundle( "labels", Locale.ROOT).getString( "language"));
1. Ja, passing Locale.WURZEL zu jedem Aufruf von ResourceBundle.getBundle vollendet die gleiche Sache. 2. Es gibt viele andere Gründe für die Verwendung von ResourceBundle.Kontrollieren, wie die Steuerung des caching der bundles und kontrollieren, ob Sie nur suchen .Eigenschaften Ressourcen-und/oder Unterklassen von ResourceBundle. Die javadoc (zu denen ich verlinkt) listet alle Verhaltensweisen, die Sie überschreiben können.
Stimme mit @VGR, wenn du gehen Sie durch die
java.util.ResourceBundle
Klasse aufrufenResourceBundle.getBundle("baseName", Locale.ROOT);
wird das gleiche tun, aber überspringen Sie den Schritt, um zu versuchen, bundle mitLocale.getDefault()
, was ist überflüssig in diesem Fall.InformationsquelleAutor VGR
Ein anderer Weg ist, um den Standard-Gebietsschema der Anwendung, wie
InformationsquelleAutor Michel Fortes