Revision: 5387
          http://sourceforge.net/p/jump-pilot/code/5387
Author:   edso
Date:     2017-03-19 15:04:34 +0000 (Sun, 19 Mar 2017)
Log Message:
-----------
fix ResourceBundle does not like backslash separators when resources are in 
zips/jars

> java.util.MissingResourceException: Can't find bundle for base name 
> language\wfs\messages, locale fr_FR
>      at 
> java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
>      at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
>      at java.util.ResourceBundle.getBundle(ResourceBundle.java:1082)
>      at com.vividsolutions.jump.I18N.init(I18N.java:127)
>      at com.vividsolutions.jump.I18N.<init>(I18N.java:94)
>      at com.vividsolutions.jump.I18N.getInstance(I18N.java:245)
>      at com.vividsolutions.jump.I18N.getMessage(I18N.java:416)
>      at com.vividsolutions.jump.I18N.getMessage(I18N.java:441)
>      at de.latlon.deejump.wfs.i18n.I18N.get(I18N.java:25)
>      at de.latlon.deejump.wfs.plugin.WFSPlugIn.i18n(WFSPlugIn.java:328)
>      at de.latlon.deejump.wfs.plugin.WFSPlugIn.execute(WFSPlugIn.java:110)
...

Modified Paths:
--------------
    core/trunk/src/com/vividsolutions/jump/I18N.java

Modified: core/trunk/src/com/vividsolutions/jump/I18N.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/I18N.java    2017-03-19 13:43:24 UTC 
(rev 5386)
+++ core/trunk/src/com/vividsolutions/jump/I18N.java    2017-03-19 15:04:34 UTC 
(rev 5387)
@@ -93,6 +93,11 @@
    */
   private I18N(final File path) {
     resourcePath = path.toString();
+    // make sure the resource path is slash separated, File.toString()
+    // returns it as separated by the OS which may contain eg. backslashes
+    // on windows, leading to resources not found in zipped jars
+    if (File.separatorChar != '/')
+        resourcePath = resourcePath.replace(File.separatorChar, '/');
     init();
   }
 
@@ -125,13 +130,15 @@
   private void init() {
     ClassLoader cl = classLoader instanceof ClassLoader ? classLoader
         : getClass().getClassLoader();
-    // load resourcebundles accordingly
-    // selected locale
-    resourceBundle = getBundleOrDummy(resourcePath, locale, cl);
-    // lang only locale
-    resourceBundle2 = getBundleOrDummy(resourcePath, new Locale(
+    // load several resourcebundles to allow overlaying "invalid" translations
+    // with an entry from te next sensible translation file
+    // order is: lang_Country, lang, default (english)
+    // loads selected locale, selected language, empty locale
+    resourceBundle = ResourceBundle.getBundle(resourcePath, locale, cl);
+    // loads lang only locale or empty
+    resourceBundle2 = ResourceBundle.getBundle(resourcePath, new Locale(
         language()), cl);
-    // empty fallback locale (english)
+    // loads only empty fallback locale (english)
     resourceBundle3 = ResourceBundle.getBundle(resourcePath,
         new Locale("", ""), cl);
     // apply locale to system
@@ -138,22 +145,6 @@
     applyToRuntime(locale);
   }
 
-  private ResourceBundle getBundleOrDummy(String baseName, Locale 
targetLocale, ClassLoader loader){
-      try {
-        return ResourceBundle.getBundle(baseName, locale, loader);
-    } catch (MissingResourceException e) {
-        // return a dummy rb
-        return new ResourceBundle(){
-            protected Object handleGetObject(String key) {
-                return null;
-            }
-            public Enumeration<String> getKeys() {
-                return null;
-            }
-        };
-    }
-  }
-
   // remember missing strings, do not flood log
   private HashSet<String> missing = new HashSet<>();
 


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Jump-pilot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to