web-dev-qa-db-ja.com

複数の引数を持つスプリングメッセージタグ

私は以下のような国際化メッセージを取得しようとしています:

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

これを克服する方法はありますか?ありがとうございました。

ジョージ

32
George Sun

probelmの原因は、,(コンマ)がデフォルトの区切り文字であるためです。そのため、最後に、スプリングメッセージタグはパラメータargumentsのString A,B,C,D,E,Fを取得し、この文字列をメッセージの6つの異なる内部引数に分割します。

区切り文字を変更する必要があります。たとえば;を使用すると、動作します。

<spring:message code="messageCode"
       arguments="${value1};${value2};${value3}"
       htmlEscape="false"
       argumentSeparator=";"/>

@See Spring Reference:Appendix F.6 The Message Tag

57
Ralph

また、さまざまな値を配列として送信し、文字列引数の解析方法を間違えて春の余地を残さないようにすることもできます。

<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" />

この方法では、新しいセパレータが何らかの点で値で再び使用されることを心配する必要はありません。

1
Mahdi

私は完全に異なるアプローチを使用します。私のデータベースベースのメッセージソースは、i18nという名前で私の設定に公開されています:

_@Bean(name = {"i18n", "messageSource"})
public MessageSource messageSource() {
    return new JpaMessageSource();
}
_

また、viewResolver.setExposeContextBeansAsAttributes(true);でBeanを公開します。その後、jspビューで${i18n.message("messageCode", value1, value2, value3)}を使用できます。

1
Vadim Ferderer