[Schmitzm-commits] r1085 - in trunk: src/schmitzm/lang src_junit/schmitzm/lang
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Sat Oct 9 19:46:52 CEST 2010
Author: mojays
Date: 2010-10-09 19:46:52 +0200 (Sat, 09 Oct 2010)
New Revision: 1085
Modified:
trunk/src/schmitzm/lang/ResourceProvider.java
trunk/src_junit/schmitzm/lang/ResourceProviderTest.java
Log:
Workaround for Fallback-Problem in ResourceProvider, if requested Locale is explicitly set (Bug #1611, http://wald.intevation.org/tracker/?func=detail&atid=290&aid=1611&group_id=47).
Not yet nice, but it works...
Modified: trunk/src/schmitzm/lang/ResourceProvider.java
===================================================================
--- trunk/src/schmitzm/lang/ResourceProvider.java 2010-10-09 13:41:10 UTC (rev 1084)
+++ trunk/src/schmitzm/lang/ResourceProvider.java 2010-10-09 17:46:52 UTC (rev 1085)
@@ -434,9 +434,9 @@
String primaryBundle = null;
String prefix = "";
- if (requestedLocale == null) {
- requestedLocale = Locale.getDefault();
- }
+ Locale locale = requestedLocale;
+ if (locale == null)
+ locale = Locale.getDefault();
// Wenn gesetzt, dann das alternative Bundle (mit Key-Prefix)
// verwenden. Ansonsten das Standard-Bundle ohne Prefix.
@@ -451,15 +451,38 @@
}
try {
- // Ressource im gesetzten Bundle suchen
+ // PROBLEM: ResourceBundle.getBundle(.) faellt zunaechst auf
+ // das Bundle in der DefaultLocale zurueck, bevor
+ // auf den FallBack (Root) zurueckgegriffen wird.
+ // -> wird die Methode fuer eine explizite Locale aufgerufen,
+ // die es nicht gibt, liefert sie nicht den FallBack,
+ // sondern die DefaultLocale
+ //
+ // Workaround: Wenn "requestedLocale" gesetzt und von der
+ // DefaultLocale abweicht, wird die DefaultLocale
+ // "kurzzeitig" umgestellt, so dass auf den
+ // FallBack zurueckgegriffen wird
+ Locale resetDefaultLocale = null;
+ if ( requestedLocale != null && !requestedLocale.equals(Locale.getDefault()) ) {
+ resetDefaultLocale = Locale.getDefault();
+ Locale.setDefault(requestedLocale);
+ }
+
+ // Ressource im gesetzten Bundle suchen
final ResourceBundle pBundle = ResourceBundle.getBundle(
- primaryBundle, requestedLocale);
+ primaryBundle, locale);
+
+ // Ende von Workaroud: Wenn DefaulLocale umgestellt wurde, wieder
+ // zurueck-switchen
+ if ( resetDefaultLocale != null )
+ Locale.setDefault(resetDefaultLocale);
+
return pBundle.getObject(prefix + key);
} catch (final MissingResourceException err) {
// Ressource im Standard-Bundle suchen
try {
return ResourceBundle.getBundle(defaultResourceBundle,
- requestedLocale).getObject(key);
+ locale).getObject(key);
} catch (final MissingResourceException err2) {
// Wenn Ressource auch im Standard-Bundle nicht vorhanden ist,
// Fehler werfen (oder ignorieren)
Modified: trunk/src_junit/schmitzm/lang/ResourceProviderTest.java
===================================================================
--- trunk/src_junit/schmitzm/lang/ResourceProviderTest.java 2010-10-09 13:41:10 UTC (rev 1084)
+++ trunk/src_junit/schmitzm/lang/ResourceProviderTest.java 2010-10-09 17:46:52 UTC (rev 1085)
@@ -17,7 +17,7 @@
* deaktiviert.
*/
@Test
- @Ignore
+// @Ignore
public void testGetStringForSpecificLocale_WhichIsTheDefault() {
// English ist die default Locale und Deutsch ist als "normale" Sprache
More information about the Schmitzm-commits
mailing list