[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