r1906 - in trunk/maven-i18n-plugin/src: main/java/org/nuiton/i18n/plugin/bundle test/java/org/nuiton/i18n/plugin/bundle
Author: fdesbois Date: 2011-05-09 13:33:42 +0200 (Mon, 09 May 2011) New Revision: 1906 Url: http://nuiton.org/repositories/revision/i18n/1906 Log: Resolve issue with ' escape Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/bundle/StringFormatToMessageFormat.java trunk/maven-i18n-plugin/src/test/java/org/nuiton/i18n/plugin/bundle/StringFormatToMessageFormatTest.java Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/bundle/StringFormatToMessageFormat.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/bundle/StringFormatToMessageFormat.java 2011-05-06 12:51:09 UTC (rev 1905) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/bundle/StringFormatToMessageFormat.java 2011-05-09 11:33:42 UTC (rev 1906) @@ -1,12 +1,12 @@ package org.nuiton.i18n.plugin.bundle; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - import java.text.MessageFormat; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + /** * Converter used to change printf args syntax by {@link MessageFormat} syntax * <p/> @@ -19,7 +19,7 @@ private static final Log log = LogFactory.getLog(StringFormatToMessageFormat.class); - protected static Pattern PATTERN = Pattern.compile("%\\$?(\\d?)([^\\s])?[^\\s]+"); + protected static Pattern PATTERN = Pattern.compile("%\\$?(\\d?)[^\\s']*"); @Override public String convert(String value) { @@ -59,15 +59,34 @@ log.debug("Result : " + result); - // Replace ' by '' - result = result.replaceAll("([^']+)'([^']+)", "$1''$2"); + result = escapeQuoteChar(result); - log.debug("Result with ' escape : " + result); - } else { result = value; } return result; } + /** + * Escape ' char with '', needed by {@link MessageFormat}. + * + * @param value Message that contains ' + * @return the message with ' escaped + */ + protected String escapeQuoteChar(String value) { + + // Replace ' by '' + String result = value.replaceAll("([^'])'([^'])", "$1''$2"); + + // Manage ' as last char + result = result.replaceFirst("([^'])'$", "$1''"); + + // Manage ' as first char + result = result.replaceFirst("^'([^'])", "''$1"); + + log.debug("Result with ' escape : " + result); + + return result; + } + } Modified: trunk/maven-i18n-plugin/src/test/java/org/nuiton/i18n/plugin/bundle/StringFormatToMessageFormatTest.java =================================================================== --- trunk/maven-i18n-plugin/src/test/java/org/nuiton/i18n/plugin/bundle/StringFormatToMessageFormatTest.java 2011-05-06 12:51:09 UTC (rev 1905) +++ trunk/maven-i18n-plugin/src/test/java/org/nuiton/i18n/plugin/bundle/StringFormatToMessageFormatTest.java 2011-05-09 11:33:42 UTC (rev 1906) @@ -33,8 +33,12 @@ Assert.assertEquals(expected, actual); expected = "Salut à tous pour l''ouverture de {1} le {0} à l''heure {0}"; - actual = converter.convert("Salut à tous pour l''ouverture de %$2s le %$1td à l'heure %1tH"); + actual = converter.convert("Salut à tous pour l'ouverture de %$2s le %$1td à l'heure %1tH"); Assert.assertEquals(expected, actual); + + expected = "Salut à tous pour l''ouverture de ''{0}''"; + actual = converter.convert("Salut à tous pour l''ouverture de '%$1s'"); + Assert.assertEquals(expected, actual); } }
participants (1)
-
fdesbois@users.nuiton.org