J'essaie d'obtenir le message i18n comme ci-dessous:
messageCode = Message de test pour {0} et {1} et {2}.
En jsp, j'ai ceci:
<spring:message code="messageCode"
arguments="${value1},${value2},${value3}"
htmlEscape="false"/>
Les arguments:
value1=A,B
value2=C,D
value3=E,F
La sortie pour ce que je veux:
Test message for A,B and C,D and E,F
La sortie réelle:
Test message for A and B and C
Y a-t-il un moyen de surmonter cela? Je vous remercie.
George
La cause du problème est que ,
(virgule) est le séparateur par défaut. Donc, à la fin, la balise de message de printemps obtiendra la chaîne A,B,C,D,E,F
pour le paramètre arguments
, et il divisera cette chaîne en 6 arguments internes différents pour le message.
Vous devez changer le séparateur. Si tu utilises ;
par exemple, alors cela fonctionnera.
<spring:message code="messageCode"
arguments="${value1};${value2};${value3}"
htmlEscape="false"
argumentSeparator=";"/>
Vous pouvez également envoyer les différentes valeurs sous forme de tableau et ne laisser aucune place au printemps en faisant une erreur dans la façon d'analyser l'argument chaîne.
<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" />
De cette façon, vous n'avez plus à vous soucier de l'utilisation de votre nouveau séparateur d'une manière ou d'une autre à un moment donné.
J'utilise une approche complètement différente. Ma source de messages basée sur une base de données est exposée dans ma configuration avec le nom i18n:
@Bean(name = {"i18n", "messageSource"})
public MessageSource messageSource() {
return new JpaMessageSource();
}
et j'expose également mes beans avec viewResolver.setExposeContextBeansAsAttributes(true);
Après cela, je peux utiliser ${i18n.message("messageCode", value1, value2, value3)}
dans mes vues jsp.