如何格式化本地化字符串以使句子的单个单词成为链接?

Jes*_*ebb 5 string-formatting internationalization asp.net-mvc-3

我正在ASP.NET MVC3中开发一个全球化的Web应用程序.该项目包含I18N资源文件,我通常访问Razor视图中的资源,如...

@I18N.MyResourceString
Run Code Online (Sandbox Code Playgroud)

我有一个棘手的情况,我还没有找到一个优雅的解决方案.我需要能够将句子本地化为"点击此处捐赠"."这里"这个词应该是我们捐赠系统的链接.

网站中的大多数链接都是内部的,所以要创建链接我只需写...

@Html.ActionLink("Some link text", "MyAction", "MyController")
Run Code Online (Sandbox Code Playgroud)

这个捐赠链接是外部的.到目前为止我所做的(不起作用)是......

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

I18N.ClickHereToDonate资源的文本在哪里"Click {0} to donate.".

我在屏幕上看到的是......

Click <a href="http://paypal.com">here</a> to donate.
Run Code Online (Sandbox Code Playgroud)

此外,我还想在'a'标签中添加'title'属性.当我尝试时它变得更加丑陋......

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

必须有一种更好的方法来形成具有嵌入式标签的复杂字符串,而不会以这种hackish方式将事物连接在一起.它不仅不起作用(预期的标记被编码),但它使我的剃刀模板中的字符串文字内的HTML,这使我松散任何令人敬畏的IDE支持/整合/重构功能.

如何将标记注入本地化字符串?

更新
Adam Tuliper @Html.Raw在他的回答中提到了辅助方法,所以我把它添加到我已经丑陋的标记......

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

至少让我在输出的标记中找到了一个可点击的链接.

点击这里捐款.

它仍然是一个远不是优雅的解决方案,所以我仍然在寻找更好的方法来做到这一点.

Chr*_*rew 2

也许尝试一下

<a href="http://paypal.com" title="@I18N.PayPal">@I18N.ClickHereToDonate</a>
Run Code Online (Sandbox Code Playgroud)

总的来说,您不需要 String 格式 - 您只需将 Razor 内容注入普通 html 元素即可。

编辑:合并以下内容:

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

  • 他确实需要 string.format 因为上面的字符串包含占位符。{0}等 (2认同)