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();
 		}