From: Markus S. <mar...@gm...> - 2010-07-30 18:11:16
|
I found an issue that is unavoidable and should be documented. I expect that this will be very rare because I think most people will just write # for the number inside a PluralFormat. But if they don't -- Consider this message: "I see {0, plural, offset:1 " "=0 {no one at all}" "=1 {{1}}" "one {{1} and one other person}" "other {{1} and *{0, number,##,##.00}* other people}} " "in {2}." Note that the "other" clause does not use a simple # but a "fancy" NumberFormat pattern. Due to the way MessageFormat and PluralFormat/ChoiceFormat/SelectFormat work together , this {0, number, ...} sees the value *without offset adjustment*. With arguments (200, "Asterix", "Lutetia") you get "I see Asterix and 2,00.00 other people in Lutetia." Rather than the offset-adjusted 199=1,99.00. We should also document the workaround: Use a different placeholder that is manually offset-adjusted. For example: "I see {0, plural, offset:1 " "=0 {no one at all}" "=1 {{2}}" "one {{2} and one other person}" "other {{2} and *{1, number,##,##.00}* other people}} " "in {3}." Now, with int value = 200; int value_minus_offset = value - 1; and MessageFormat arguments of (value, value_minus_offset, "Obelix", "Helvetia") you get "I see Obelix and 1,99.00 other people in Helvetia." markus |