5

私は、ASP.NET MVC3のグローバル化されたWebアプリケーションを開発中です。プロジェクトはI18Nのリソースファイルが含まれていると私は、通常のように私のカミソリビュー内のリソースにアクセスする...ローカライズされた文字列の書式を設定して、文の1語をリンクにするにはどうすればよいですか?

@I18N.MyResourceString 

私はまだエレガントな解決策を把握することができていないトリッキーな状況があります。私は「寄付するにはここをクリック」という文章をローカライズできる必要があります。 「ここ」という言葉は私たちの寄付システムへのリンクになるはずです。サイト内

ほとんどのリンクは、この寄付のリンクは外部で

@Html.ActionLink("Some link text", "MyAction", "MyController") 

...私は単に書くのリンクを作成するように内部にあります。私は今のところ(作業されていない)持っていることは... I18N.ClickHereToDonateリソースのテキストが"Click {0} to donate."ある

@String.Format(I18N.ClickHereToDonate, "<a href=\"http://paypal.com\">" + I18N.Here + "</a>") 

です。私は画面に表示されるもの

...

Click <a href="http://paypal.com">here</a> to donate. 

さらに、私はまた、「」タグに「タイトル」属性を追加したいと思います。私はそれをしようとすると、それも醜います...

@String.Format(I18N.ClickHereToDonate, "<a href=\"http://paypal.com\" title=\"" + I18N.PayPal + "\">" + I18N.Here + "</a>") 

は、このようなハック方法で一緒に物事を連結せずに埋め込まれたタグを持つ複雑な文字列を形成するためのより良い方法がなければなりません。それはうまく動作しません(意図したマークアップはエンコードされています)が、IDEのサポート/統合/リファクタリング機能を失うことになる私のひげ剃りテンプレートの文字列リテラル内にHTMLを作成します。

ローカライズされた文字列にマークアップを挿入するにはどうすればよいですか?私はすでに醜いマークアップにこれを追加しましたので、アダムTuliperが彼の答えで@Html.Rawヘルパーメソッドを述べた

UPDATE
...

@Html.Raw(String.Format(I18N.ClickHereToDonate, "<a href=\"http://paypal.com\" title=\"" + I18N.PayPal + "\">" + I18N.Here + "</a>")) 

はこの少なくともは私に、クリック可能なリンクを得ました出力されたマークアップに追加します。

をクリックしてください。hereを寄付してください。

これはまだまだエレガントなソリューションですが、私はまだこれを行うより良い方法を探しています。

答えて

2

たぶん

<a href="http://paypal.com" title="@I18N.PayPal">@I18N.ClickHereToDonate</a> 

総合してみてください、あなたは文字列の形式を必要としない - あなただけの通常のHTML要素内のカミソリのものを注入することができます。

編集:以下組み込む:

@Html.Raw(String.Format(@I18N.ClickHereToDonate,String.Format("<a href='http://paypal.com' title='{0}'>{1}</a>", I18N.PayPal,I18N.Here))) 
+2

彼は上記の文字列にプレースホルダが含まれているため、string.formatが必要です。 {0}など –

+0

これは私が今のところリゾートにしなければならなかったものですが、望ましい結果ではありません。ビジネスは、文全体ではなく、「ここ」という言葉だけをリンクにしたいと考えています。あなたの答えはまさに私がメニュー項目リンクのためにやっていることです。 –

+0

私は@ Html.Rawを使用するために上記を編集しました - アダムはそれを以下で使用しました。 2つのString.Formatsを使用すると、リソース文字列などを変更することなく、必要な結果が得られます。 –

1

をあなたの選択は、このシナリオのサポートが組み込まれずに限られている(とヘルパーではありません) きれいな方法でのviewmodelでURLを形成することですそのビューモデルをビューに渡すと、最小限のhtmlしか持てません。 {{取得} 公共の文字列のタイトルを;セット;} ;セット;} パブリック文字列URI {を取得または設定します パブリック文字列キー{取得}あなたの中の情報を設定し

あなたのViewModelはWhateverIndexViewModel publicクラスが含まれていますコントローラー、あなたの視野に入れて使用してください。

 

<a href="@Html.Raw(Links["YourKey"].URI)">@Links["YourKey"].Title"</a> 

基本的な考え方です。 ここでHtml.Rawを使いたくない場合は、クラス内のURIはMvcString型でなければなりません。このように@Links ["YourKey"]。URIはhtmlエンコードされません。

+0

'Html.Raw'は私の質問に記述されているようにエンコードされていないマークアップを手に入れるのに役立ちました。しかし、私はあなたが何を記述しているのか理解していない私は、ローカライズされた文字列にそのリンクを埋め込むのに役立ちます... –

関連する問題