我正试图获得如下所示的i18n消息:
messageCode = {0}和{1}以及{2}的测试消息。
在jsp中,我有这个:
<spring:message code="messageCode"
arguments="${value1},${value2},${value3}"
htmlEscape="false"/>
论点:
value1=A,B
value2=C,D
value3=E,F
我想要的输出:
Test message for A,B and C,D and E,F
实际输出:
Test message for A and B and C
有没有办法克服这个问题?谢谢。
乔治
答案 0 :(得分:57)
问题的原因是,
(逗号)是默认分隔符。因此,最后spring消息标记将获取参数A,B,C,D,E,F
的字符串arguments
,并将此字符串拆分为6个不同的内部参数以供消息使用。
您必须更改分隔符。例如,如果您使用;
,那么它将起作用。
<spring:message code="messageCode"
arguments="${value1};${value2};${value3}"
htmlEscape="false"
argumentSeparator=";"/>
答案 1 :(得分:1)
我使用完全不同的方法。我的配置中公开了基于数据库的消息源,名称为i18n:
@Bean(name = {"i18n", "messageSource"})
public MessageSource messageSource() {
return new JpaMessageSource();
}
我还用viewResolver.setExposeContextBeansAsAttributes(true);
公开我的豆子
之后我可以在我的jsp-views中使用${i18n.message("messageCode", value1, value2, value3)}
。
答案 2 :(得分:1)
您也可以将不同的值作为数组发送,并且没有空间让Spring在如何解析字符串参数时出错。
<c:set var="value1" value="A,B;X" />
<c:set var="value2" value="C,D;Y" />
<c:set var="value3" value="E,F;Z" />
<spring:message code="messageCode"
arguments="${[value1, value2, value3]}"
htmlEscape="false" />
这样你就不用担心你的新分隔符会在某个时候再次被用在某个值中。