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