Bug 433890 - Too many Default Locale messages
diff --git a/bundles/org.eclipse.e4.core.services/src/org/eclipse/e4/core/internal/services/ResourceBundleHelper.java b/bundles/org.eclipse.e4.core.services/src/org/eclipse/e4/core/internal/services/ResourceBundleHelper.java
index 1a13c11..0395a19 100644
--- a/bundles/org.eclipse.e4.core.services/src/org/eclipse/e4/core/internal/services/ResourceBundleHelper.java
+++ b/bundles/org.eclipse.e4.core.services/src/org/eclipse/e4/core/internal/services/ResourceBundleHelper.java
@@ -19,6 +19,7 @@
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
+import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.MissingResourceException;
@@ -498,23 +499,17 @@
String[] localeParts = str.split("_"); //$NON-NLS-1$
if (localeParts.length == 0 || localeParts.length > 3
|| (localeParts.length == 1 && localeParts[0].length() == 0)) {
- if (logService != null)
- logService.log(LogService.LOG_ERROR, "Invalid locale format: " + str
- + " - Default Locale will be used instead."); //$NON-NLS-1$
+ logInvalidFormat(str, logService);
return Locale.getDefault();
} else {
if (localeParts[0].length() == 1 || localeParts[0].length() > 2) {
- if (logService != null)
- logService.log(LogService.LOG_ERROR, "Invalid locale format: " + str
- + " - Default Locale will be used instead."); //$NON-NLS-1$
+ logInvalidFormat(str, logService);
return Locale.getDefault();
} else if (localeParts[0].length() == 2) {
char ch0 = localeParts[0].charAt(0);
char ch1 = localeParts[0].charAt(1);
if (ch0 < 'a' || ch0 > 'z' || ch1 < 'a' || ch1 > 'z') {
- if (logService != null)
- logService.log(LogService.LOG_ERROR, "Invalid locale format: " + str
- + " - Default Locale will be used instead."); //$NON-NLS-1$
+ logInvalidFormat(str, logService);
return Locale.getDefault();
}
}
@@ -558,6 +553,16 @@
return new Locale(language, country, variant);
}
+ private static HashSet<String> invalidLocalesLogged = new HashSet<String>();
+
+ static void logInvalidFormat(String str, LogService logService) {
+ if (logService != null && !invalidLocalesLogged.contains(str)) {
+ invalidLocalesLogged.add(str);
+ logService.log(LogService.LOG_ERROR, "Invalid locale format: " + str
+ + " - Default Locale will be used instead."); //$NON-NLS-1$
+ }
+ }
+
/**
* Specialization of {@link Control} which loads the {@link ResourceBundle} out of an OSGi
* {@link Bundle} instead of using a classloader.
diff --git a/bundles/org.eclipse.e4.core.services/src/org/eclipse/e4/core/internal/services/TranslationObjectSupplier.java b/bundles/org.eclipse.e4.core.services/src/org/eclipse/e4/core/internal/services/TranslationObjectSupplier.java
index a58e01b..141c529 100644
--- a/bundles/org.eclipse.e4.core.services/src/org/eclipse/e4/core/internal/services/TranslationObjectSupplier.java
+++ b/bundles/org.eclipse.e4.core.services/src/org/eclipse/e4/core/internal/services/TranslationObjectSupplier.java
@@ -89,9 +89,7 @@
.toLocale(locale);
} catch (Exception e) {
// parsing the locale String to a Locale failed, so we use the default Locale
- if (logService != null)
- logService.log(LogService.LOG_ERROR, "Invalid locale format: " + locale //$NON-NLS-1$
- + " - Default Locale will be used instead.", e); //$NON-NLS-1$
+ ResourceBundleHelper.logInvalidFormat(locale, logService);
this.locale = Locale.getDefault();
}