4

我在.NET核心写mvc应用程序,我有本地化的问题,我不知道如何将IViewLocalizer添加到我的网格视图。这里是我的代码:.Net核心本地化视图:IViewLocalizer里面Linq表达式

@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它的工作原理插入 - 链接工作,但是当我想用定位器来获得题词Edit/Edytuj/змінити etc。而不是我在我的观点得到了这个: Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString

回答

4

这是因为IViewLocalizer["Foo"]返回LocalizedHtmlString而不是字符串。所以当你将它包含在一个字符串插值表达式中时,它正在调用它的ToString方法。由于的ToString尚未在该类中重新定义,默认Object.ToString()实现返回类型名称:

var foo = Localizer["Foo"].ToString(); 
//foo gets assigned "Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString" 

剃刀知道如何处理呈现页面时LocalizedHtmlString情况,所以这使得预期:

<p>Hello @Localizer["World"]</p> 
//renders <p>Hello World</p> 

如果你想手动串联本地化的字符串,那么你需要确保你得到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> 
+0

谢谢你,它完美的作品:) – tuchy

+0

在我看来,如果感觉微软一个错误,这是不是在设计上,其实。它不在[文档](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization)中解释 –