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:
''
) if the message with the single quotes contains at least one placeholders ({0}
) too;'
) 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?
ResourceBundleMessageSource
provides a flag called alwaysUseMessageFormat
that can be used if MessageFormat
should be applied to all messages.
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:
''
)See also Why Spring MessageSource arguments are not filled correctly in some locales.