我正在 .net core 中编写 mvc 应用程序,我遇到本地化问题,我不知道如何将 IViewLocalizer 添加到我的网格视图中。这是我的代码:
@using NonFactors.Mvc.Grid;
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@model IEnumerable<WeegreeEmployeeFormsCore.Models.Employee>
@(Html
.Grid(Model)
.Build(columns =>
{
columns.Add(model => model.Name).Titled(Localizer["Name"]).Sortable(true).Filterable(true);
columns.Add(model => model.Surname).Titled(Localizer["Surname"]).Sortable(true).Filterable(true);
columns.Add(model => model.EmploymentDate).Titled(Localizer["Hired"]).Sortable(true).Filterable(true);
columns.Add(model => model.Country).Titled(Localizer["Country"]).Filterable(true).Sortable(true).Filterable(true);
columns.Add(model => model.EmploymentForm).Titled(Localizer["EmploymentForm"]).Filterable(true);
columns.Add(model => $"<a href=\"{Url.Action("Edit", "Form")}/{model.EmployeeId}\">{Localizer["Edit"]}</a>").Encoded(false);
columns.Add(model => $"<a href=\"{Url.Action("Details", "Form")}/{model.EmployeeId}\">Details</a>").Encoded(false);
})
.Pageable(pager =>
{
pager.PagesToDisplay = 10;
pager.CurrentPage = 1;
pager.RowsPerPage = 10;
})
.Sortable()
.Empty("No data found")
)
当我使用时{}
插入表达式内部model.EmployeeId
它有效 - 链接有效,但是当我想使用 Localizer 获取铭文时Edit/Edytuj/змінити etc
。而不是我认为:Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString
那是因为IViewLocalizer["Foo"]
返回一个LocalizedHtmlString https://docs.asp.net/projects/api/en/latest/autoapi/Microsoft/AspNetCore/Mvc/Localization/LocalizedHtmlString/index.html#Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString而不是字符串。因此,当您将其包含在字符串插值表达式中时,它会调用其 ToString 方法。由于 ToString 尚未在该类中重新定义,因此默认值Object.ToString()
实现返回类型名称:
var foo = Localizer["Foo"].ToString();
//foo gets assigned "Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString"
Razor 知道在渲染页面时如何处理 LocalizedHtmlString 实例,因此会按预期渲染:
<p>Hello @Localizer["World"]</p>
//renders <p>Hello World</p>
如果您想手动连接本地化字符串,那么您需要确保获得LocalizedHtmlString.Value https://docs.asp.net/projects/api/en/latest/autoapi/Microsoft/AspNetCore/Mvc/Localization/LocalizedHtmlString/index.html#prop-Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.Value财产:
@{
var text = $"Hello {Localizer["World"].Value}";
}
<p>@text</p>
//renders <p>Hello World</p>
将其与您不打电话的方法进行比较.Value
:
@{
var text = $"Hello {Localizer["World"]}";
}
<p>@text</p>
//renders <p>Hello Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString</p>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)