Is there a single rule to cope with single quotes in writing Spring Resource Boundle?
Asked Answered
L

1

17

Spring's ResourceBundleMessageSource uses MessageFormat for replacing placeholders ({0}) inside messages.

MessageFormat requires that single quotes (') are escaped using two single quotes ('') (see: MessageFormat Javadoc). However, by default messages that does not contain any arguments will not be parsed by MessageFormat, so single quotes in messages without arguments don't need to be escaped.

So your translator have to be aware of two rules in writing and maintaining resource bundle:

  • write ('') if the message with the single quotes contains at least one placeholders ({0}) too;
  • write (') if the message with the single quotes contains none placeholders.

Is there a single rule to cope with single quotes in writing Spring Resource Boundle?

Leacock answered 13/3, 2014 at 13:32 Comment(0)
L
21

ResourceBundleMessageSource provides a flag called alwaysUseMessageFormat that can be used if MessageFormat should be applied to all messages.

The single rule is...

Configure one time for all your resource boundle with:

<bean 
    id="messageSource" 
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="alwaysUseMessageFormat" value="true" />
    ...
</bean>

and your translator have to be aware of a single rule in writing and maintaining resource bundle:

  • write always ('')

See also Why Spring MessageSource arguments are not filled correctly in some locales.

Leacock answered 13/3, 2014 at 13:32 Comment(2)
If I remeber correctly: One problem with useAlwaysMessageFormat is that javax.validation messages will fail as {min} is not a correct message format. This happens once you start superseeding the default properties of the validator.Konrad
@MartinFrey Accordingly with "The orders of bean validation default parameters?" you are right, and it seems that the problem is related to JSR 303: the file name has to be ValidationMessages.properties, and the key has to be exactly the one that exists in the default resource bundle by the JSR 303 implementation. So if programmers take care of the correct keys the translators who write and maintain the resource bundle shouldn't have problem.Leacock

© 2022 - 2024 — McMap. All rights reserved.