]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3783 Fix regression on single quotes used with parameters
authorFabrice Bellingard <fabrice.bellingard@sonarsource.com>
Tue, 9 Oct 2012 15:05:07 +0000 (17:05 +0200)
committerFabrice Bellingard <fabrice.bellingard@sonarsource.com>
Tue, 9 Oct 2012 15:14:06 +0000 (17:14 +0200)
sonar-core/src/main/java/org/sonar/core/i18n/I18nManager.java
sonar-core/src/test/java/org/sonar/core/i18n/I18nManagerTest.java
sonar-core/src/test/resources/org/sonar/core/i18n/frenchPack/org/sonar/l10n/forge_fr.properties

index 3125faea3fbe62ce79147d4ff4fe2f57ffb1a6dc..922710e431194ed9593613742cd56f24ba3981cf 100644 (file)
@@ -113,7 +113,7 @@ public class I18nManager implements I18n, ServerExtension, BatchExtension {
         // First, we check if the bundle exists in the language pack classloader
         resourceBundle = ResourceBundle.getBundle(bundleKey, locale, languagePackClassLoader);
         String message = resourceBundle.getString(key);
-        return MessageFormat.format(message, parameters);
+        return formatMessage(message, parameters);
       } catch (MissingResourceException e1) {
         // well, maybe the plugin has specified its own bundles, let's see
         resourceBundle = getBundleFromCorrespondingPluginClassloader(bundleKey, locale);
@@ -214,10 +214,14 @@ public class I18nManager implements I18n, ServerExtension, BatchExtension {
     if (value == null) {
       value = defaultValue;
     }
-    if (value != null && parameters.length > 0) {
-      return MessageFormat.format(value, parameters);
+    return formatMessage(value, parameters);
+  }
+
+  private String formatMessage(String message, Object... parameters) {
+    if (message == null || parameters.length == 0) {
+      return message;
     }
-    return value;
+    return MessageFormat.format(message.replaceAll("'", "''"), parameters);
   }
 
   String extractBundleFromKey(String key) {
index 5a2d6e8205feabbf61e43296949541e74291b6f3..19cb921cf757752aa97f345b68aabbf204f6be95 100644 (file)
@@ -212,14 +212,14 @@ public class I18nManagerTest {
   @Test
   public void shouldLookInCoreClassloaderForPluginsThatDontEmbedAllLanguages() {
     assertThat(manager.message(Locale.ENGLISH, "forge_plugin.page", null)).isEqualTo("This is my plugin");
-    assertThat(manager.message(Locale.FRENCH, "forge_plugin.page", null)).isEqualTo("Mon plugin!");
+    assertThat(manager.message(Locale.FRENCH, "forge_plugin.page", null)).isEqualTo("C'est mon plugin");
   }
 
   // see SONAR-3783 => test that there will be no future regression on fallback for keys spread accross several classloaders
   @Test
   public void shouldFallbackOnOriginalPluginIfTranslationNotPresentInLanguagePack() {
     // the "forge_plugin.page" has been translated in French
-    assertThat(manager.message(Locale.FRENCH, "forge_plugin.page", null)).isEqualTo("Mon plugin!");
+    assertThat(manager.message(Locale.FRENCH, "forge_plugin.page", null)).isEqualTo("C'est mon plugin");
     // but not the "forge_plugin.key_not_translated" key
     assertThat(manager.message(Locale.FRENCH, "forge_plugin.key_not_translated", null)).isEqualTo("Key Not Translated");
   }
index 9d06fab3ec797b0df2164eb53427f1cdf245d49f..96fb089d580471891540e9532554ed731e428018 100644 (file)
@@ -1 +1 @@
-forge_plugin.page=Mon plugin!
\ No newline at end of file
+forge_plugin.page=C'est mon plugin
\ No newline at end of file