You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by so...@apache.org on 2011/09/09 17:22:09 UTC
svn commit: r1167245 - in /myfaces/trinidad/trunk:
trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/
trinidad-api/src/test/java/org/apache/myfaces/trinidad/util/
trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/
Author: sobryan
Date: Fri Sep 9 15:22:09 2011
New Revision: 1167245
URL: http://svn.apache.org/viewvc?rev=1167245&view=rev
Log:
TRINIDAD-2116 - ResourceBundles Strings containing doubled single quotes are not properly formatted by FastMessageFormat on display...
* Patch committed by Pavitra Subramaniam
Modified:
myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/FastMessageFormat.java
myfaces/trinidad/trunk/trinidad-api/src/test/java/org/apache/myfaces/trinidad/util/FastMessageFormatTest.java
myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Locale.js
Modified: myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/FastMessageFormat.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/FastMessageFormat.java?rev=1167245&r1=1167244&r2=1167245&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/FastMessageFormat.java (original)
+++ myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/FastMessageFormat.java Fri Sep 9 15:22:09 2011
@@ -86,7 +86,27 @@ public class FastMessageFormat
for (int i = 0; i < formatLength; i++)
{
char ch = _formatText[i];
- if (ch == '{')
+
+ // Check for doubled-up quotes
+ if (ch == '\'' && (i+1 < formatLength) && (_formatText[i+1] == '\''))
+ {
+ /*
+ The tranlations tool uses special processing for single quotation marks that appear in
+ resource strings. In ResourceBundle files, if a message contains an argument placeholder,
+ e.g. {0} or {1}, it is assumed to be a format pattern for MessageFormat and the translation
+ tool automatically doubles all single quotes inside such a message. If the message contains
+ no arguments, it is expected to be used directly after loading from the bundle, without
+ processing with MessageFormat. Therefore, no quotes are doubled automatically in such a
+ message. This code change accounts for the presence of doubled quotes.
+ */
+
+ buffer.append(_formatText, lastStart, i - lastStart);
+
+ // skip one of the double quotes.
+ i++;
+ lastStart = i;
+ }
+ else if (ch == '{')
{
// Only check for single digit patterns that have an associated token.
if (i + 2 < formatLength && _formatText[i + 2] == '}')
Modified: myfaces/trinidad/trunk/trinidad-api/src/test/java/org/apache/myfaces/trinidad/util/FastMessageFormatTest.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-api/src/test/java/org/apache/myfaces/trinidad/util/FastMessageFormatTest.java?rev=1167245&r1=1167244&r2=1167245&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-api/src/test/java/org/apache/myfaces/trinidad/util/FastMessageFormatTest.java (original)
+++ myfaces/trinidad/trunk/trinidad-api/src/test/java/org/apache/myfaces/trinidad/util/FastMessageFormatTest.java Fri Sep 9 15:22:09 2011
@@ -54,6 +54,16 @@ public class FastMessageFormatTest
String[] params = { "beef", "kosher", null };
String result = fmf.format(params);
assertEquals(result, "beef {{3} isn't {} {a} {12a}kosher {");
+
+ // tests doubled single quotes.
+ // Same as above, except doubled single quotes are replaced
+ // with a single single quote.
+ // Expected result: "beef {{3} isn't {} {a} {12a}kosher {"
+ FastMessageFormat fmf2 =
+ new FastMessageFormat("{0} {{3} isn''t {} {a} {12a}{2}{1} {");
+ String[] params2 = { "beef", "kosher", null };
+ result = fmf2.format(params2);
+ assertEquals(result, "beef {{3} isn't {} {a} {12a}kosher {");
}
}
Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Locale.js
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Locale.js?rev=1167245&r1=1167244&r2=1167245&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Locale.js (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Locale.js Fri Sep 9 15:22:09 2011
@@ -961,6 +961,7 @@ TrFastMessageFormatUtils.format = functi
// arguments[1], ..., arguments[arguments.length-1]
var formatLength = formatString.length;
var tokenCount = arguments.length - 1;
+ var substr = null;
// Use the javascript StringBuffer technique.
var buffer = [];
@@ -970,7 +971,18 @@ TrFastMessageFormatUtils.format = functi
{
// IE7 does not support the string[index] syntax, so use string.charAt(index) instead.
var ch = formatString.charAt(i);
- if (ch == '{')
+
+ // Check for a double quoted (escape) character
+ if (ch == '\'' && (i + 1 < formatLength) && (formatString.charAt(i+1) == '\''))
+ {
+ substr = formatString.substring(lastStart, i - lastStart);
+ buffer.push(substr);
+
+ // skip one of the double quotes.
+ i++;
+ lastStart = i;
+ }
+ else if (ch == '{')
{
// Only check for single digit patterns that have an associated token.
if (i + 2 < formatLength && formatString.charAt(i+2) == '}')
@@ -979,7 +991,7 @@ TrFastMessageFormatUtils.format = functi
if (tokenIndex >= 0 && tokenIndex < tokenCount)
{
// Use the javascript StringBuffer technique for append(string)
- var substr = formatString.substring(lastStart, i);
+ substr = formatString.substring(lastStart, i);
buffer.push(substr);
var token = arguments[tokenIndex+1];