繁体   English   中英

ASP.NET Core MVC 视图本地化

[英]ASP.NET Core MVC view localization

我正在使用 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来做到这一点?

对于那些现在从谷歌找到这个的人,我能够在 ASP.Net Core 3.1 中做到这一点(不确定其他版本)。

正如上面评论中所建议的那样,将 HTML 放在资源键的参数中是行不通的,因为参数是 HTML 编码的: 智能感知文本截图

但是,它很接近,我可以使用@Html.Raw()Localizer.GetString()方法解决它:

@Html.Raw( Localizer.GetString( "LevelUp", $"<span class=\\"user\\">{Model.Username}</span>", $"<span class=\\"level\\">{Model.Level}</span>" ) )

并将LevelUp的 resx 值更改为: User {0} has reached level {1}

这里的关键是 GetString 不返回LocalizedHtmlString ,它返回一个LocalizedString ,然后您可以将其输出为原始 HTML。

为了清楚,如果你正在做那里的默认语言的翻译是关键(而不是某些鼻涕虫一样的格式LevelUp ),它是这样的: @Html.Raw( Localizer.GetString( "User {0} has reached level {1}", $"<span class=\\"user\\">{Model.Username}</span>", $"<span class=\\"level\\">{Model.Level}</span>" ) )

而且,作为奖励,您还可以在参数中使用GetString ,如下所示: @Html.Raw( Localizer.GetString( "Click {0} to do something...", $"<a href=\\"whatever-link\\">{Localizer.GetString("here")}</span>" )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM