4

.netコアにmvcアプリケーションを作成していますが、ローカリゼーションに問題があります。グリッドビューにIViewLocalizerを追加する方法がわかりません。ここに私のコードは次のとおりです。私は表現model.EmployeeIdの内側に挿入するために{}を使用する場合.Net Core Localization View:Linq式内の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") 

) 

それは動作します - リンクが稼働しているが、私は碑文Edit/Edytuj/змінити etcを取得するためにローカライザを使用したいとき。代わりに私は私の見解ではこれを得た: IViewLocalizer["Foo"]ではなく、文字列のLocalizedHtmlStringを返すためですMicrosoft.AspNetCore.Mvc.Localization.LocalizedHtmlString

答えて

4

。だから、文字列補間式にその文字列を含めると、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

マイクロソフトのミスのように感じているならば、これは実際には、設計によるものです。 [documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization)で説明されていません。 –