在编写Spring Resource Bundle时,有适用于单引号的单一规则吗?

16

Spring的ResourceBundleMessageSource使用MessageFormat替换消息中的占位符({0})。

MessageFormat要求用两个单引号('')转义单引号(')。(参见: MessageFormat Javadoc)。然而,默认情况下,不包含任何参数的消息将不会被MessageFormat解析,因此消息中不带参数的单引号不需要转义。

因此,你的翻译者必须注意以下两个规则来编写和维护资源包:

  • 如果带有单引号的消息中至少包含一个占位符({0}),则写成 ('');
  • 如果带有单引号的消息中不包含任何占位符,则写成 (')。

在编写Spring Resource Bundle时,是否存在单一规则来处理单引号呢?

1个回答

21

ResourceBundleMessageSource提供了一个名为alwaysUseMessageFormat的标志,如果应该将MessageFormat应用于所有消息,则可以使用该标志。

唯一的规则是...

为您的所有资源束进行一次配置:

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

而且您的译者必须在编写和维护资源束时意识到一个规则:

  • 始终写成 ('')

另请参见为什么Spring MessageSource在某些区域设置中未正确填充参数


如果我没记错的话:使用 useAlwaysMessageFormat 的一个问题是 javax.validation 消息将失败,因为 {min} 不是正确的消息格式。一旦您开始替换验证器的默认属性,就会发生这种情况。 - Martin Frey
根据“bean验证默认参数的顺序?”的说法,您是正确的,问题似乎与JSR 303有关:文件名必须为ValidationMessages.properties,并且键必须与JSR 303实现中的默认资源包中存在的键完全相同。因此,如果程序员注意正确的键,则编写和维护资源包的翻译人员不应该有问题。 - taringamberini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接