Pregunta

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?

¿Fue útil?

Solución

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top