【发布时间】:2019-01-28 21:25:14
【问题描述】:
我正在使用 ASP.NET Core MVC,假设我有以下 Razor 视图:
@model AwesomeApp.ViewModels.User
<h1>
User <span class="user">@Model.Username</span> has reached <span class="level">@Model.Level</span> level!
</h1>
现在我想本地化它:
@model AwesomeApp.ViewModels.User
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
<h1>
@Localizer["LevelUp", Model.Username, Model.Level]
</h1>
在我的 .resx 文件中,我有一个带有 LevelUp 键的资源:
User <span class="user">{0}</span> has reached <span class="level">{1}</span> level
这很好,但我不想在 .resx 文件中保留 HTML 标记,我只想保留呈现的文本:
用户 {0} 已达到 {1} 级!
有没有办法使用IViewLocalizer 或使用Localization.AspNetCore.TagHelpers 来做到这一点?
【问题讨论】:
-
简单地说,不。如果您想要生成的本地化字符串中的标签,它们需要以这种方式出现在您的资源文件中。
-
也就是说,您实际上可以执行类似
@Localizer["LevelUp", $"<span class=\"user\">{Model.Username}</span>", $"<span class=\"level\">{Model.Level}</span>"]的操作。换句话说,您在整个 HTML 结构中加入了用户名/级别,而不仅仅是用户名/级别本身。但是,这是一种非常明显的代码气味,特别是如果您最终在多个地方使用相同的东西。最终,最好将 HTML 简单地放入资源文件中。 -
@Chris Pratt,你确定吗?一位官方guide提到
You generally want to only localize text and not HTML. -
确实如此,但是使用您想要的代码(用户名和级别包含在跨度中)您必须 - 因此是“一般”。换句话说,最好的办法是完全避免在要本地化的内容中使用 HTML,但如果您出于某种原因需要 HTML,那么您可以。
标签: asp.net razor localization tag-helpers asp.net-core-tag-helpers