Question

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?

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top