2016-11-02 17 views
1

私はThymeleafを初めて使い、いくつかのFaceletsページを動かしてThymeleafを使用しています。従来のシステムのため、私はThymeleaf 2.1.5をXML設定で使用しています。Thymeleaf:別のメッセージのパラメータとしてのメッセージ

私は適切なドキュメントを見つけるために苦労しているという問題にぶつかってきました。私が達成しようとしているのは、他のメッセージのパラメータとしてローカライズされたメッセージを取ることです。

私はいくつかのテンプレートのプロパティファイルは、このようなものです。この

Some text string <a href="url">CLICK HERE</a> 

のようなものであるしていることを一つの例:

<p th:utext="#{some.text('<a th:utext="#{click.here}" href="url">')}"></p> 

some.text=Some text string {0} 
click.here=CLICK HERE 

私はこのような何かをやってみました

しかし、それはうまく動作するようになった。

また、文字列をローカライズする方法はありますか?それは独自のDOM要素の一部ではありませんか?例えば、私はこのような単一の文字列を配置する:

String 

の代わりにこの:

<div> String </div> 

任意の洞察力をいただければ幸いです。ありがとうございました。

答えて

1

これはあなたの具体的な例のためにThymeleaf 3で動作します:

<p th:with="openTag='<a href=\'stackoverflow.com\'>',anchorLabel=#{click.here},closeTag='</a>'" th:remove="tag" th:utext="#{some.text(${openTag+anchorLabel+closeTag})}"></p> 

残念ながら、出力にリンク周り、二重引用符を生産して動作するようには思えません。 Thymeleafがこれをサポートしているかどうかは分かりません。方法を見つけたら更新します。一重引用符はうまくいくようです。

しかし、一般的には、th:withの組み合わせを検索して変数を作成する可能性があります。あなたの2番目の質問では、th:remove="tag"を使ってタグを削除したいと思うでしょう。あなたは本当に国際化とリンクしてテキスト生成を分割する必要があり

@Bean 
public ThymeleafViewResolver viewResolver() { 

    ThymeleafViewResolver resolver = new ThymeleafViewResolver(); 
    resolver.setOrder(1); 
    resolver.setCharacterEncoding("UTF-8"); 
    resolver.setTemplateEngine(templateEngine()); 
    return resolver; 
} 

@Bean 
public ITemplateResolver webTemplateResolver() { 

    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); 
    resolver.setPrefix("/WEB-INF/thymeleaf/"); 
    resolver.setTemplateMode(TemplateMode.HTML); 
    resolver.setCharacterEncoding("UTF-8"); 
    resolver.setSuffix(".html"); 
    resolver.setCacheable(false); 
    resolver.setOrder(2); 
    return resolver; 
} 
+0

ありがとうございました。私はあなたが私に近づいてきたと信じていますが、このエラーが発生します。要素タイプ "null"に関連付けられた属性 "th:with"の値には、 '<'文字が含まれていてはなりません。エスケープされていないテキストを使用しながらこれを修正する方法はありますか? –

+0

は、nullを指定する値の1つですか?私は 'クリックを見るだろう。ここに – bphilipnyc

+0

click.here私が言うことができる限り限りnullではありません。私はパラメータをまったく問題なく使用することができます。私はおそらく '<'が何らかの形でエスケープされる必要があるとは思っていましたが、確信が持てません。 –

0

回答は次のように設定を前提としています。スパンに「some.text」をラップし、その後にリンクをレンダリングすることができます。このように、utextを避け、翻訳されたテキストでリンクを生成することもできます。

結果のHTMLにスパンが発生しないようにする1つの方法は、属性th:remove="tag"を使用することです。

私が間違っていない場合は、<th:block>...</>要素を使用することで別の解決策が可能になるはずです。再度タグを削除する必要はありません。

<span th:remove="tag" th:text="#{some.text}">some text that will be replaced but shows in the mock</span> <a href="url" th:text="#{click.me}">CLICK HERE</a> 
+0

残念ながら、私はそれを分割することは選択肢だとは思わない。 –

+0

それはなぜできないでしょうか?あなたはテンプレートとメッセージ作成を完全に制御できませんか? –

関連する問題