Укажите язык для ASP.NET Локализатор Core 2 на страницах Razor

#c# #asp.net-core #asp.net-core-mvc

#c# #asp.net-ядро #asp.net-core-mvc

Вопрос:

Я работаю над приложением ASP Net Core 2, которое использует Microsoft.Extensions.Localization.IStringLocalizer и Microsoft.AspNetCore.Mvc.Localization для предоставления трехъязычного контента. Файлы ресурсов (например, Controllers.HomeController.fr.resx и Controllers.HomeController.nl.resx работают нормально, и следующее типично для просмотров страниц Razor:

 @using Microsoft.Extensions.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@using System.Globalization;

@inject IStringLocalizer<HomeController> Localizer
@inject IHtmlLocalizer<HomeController> HtmlLocalizer
...
<span style="font-weight: bold">@Localizer["My string 1"]</span>
...
<li>@HtmlLocalizer["My string 2 <span style="font-weight: bold;">with bold</span>."]</li>
  

В остальной части приложения язык определяется заголовком браузера, как описано здесь.

Вопрос

Я создаю функцию, которая должна отображать содержимое на языке, указанном пользователем в форме, независимо от языкового заголовка браузера. Примечание: Языковой заголовок браузера по-прежнему обычно используется для определения языка, на котором будет отображаться общее содержимое страницы, но это конкретное содержимое предоставляется ViewComponent и используется для создания ярлыка для печати для предоставления пользователям. Поэтому я также не могу указать язык в параметре URL lang , поскольку это повлияло бы на язык всей страницы.

Я хочу сделать что-то вроде следующего

 <span style="font-weight: bold">@Localizer["Usage Instructions", "nl"]</span>
  

но я не думаю, что это существует (пробовал). Т.е. установите язык / культуру на основе конкретной строки.

Однако, судя по подсказке в Visual Studio (см. скриншот), похоже, что arguments это может позволить мне установить язык, я просто не могу найти много документации для этого, кроме общих руководств по локализации, таких как Microsoft one.

Подсказка Visual Studio

Ближайший, который я могу найти, — это this docs, но я все еще не вижу подробностей о params object[] arguments

Заранее спасибо за любые предложения!

Ответ №1:

IHtmlLocalizer содержит метод WithCulture , который создает локализатор с заданным языком

 @inject IHtmlLocalizer<HomeController> HtmlLocalizer

@{
    var nlHtmlLocalizer = HtmlLocalizer.WithCulture(new System.Globalization.CultureInfo("nl"));
}

<li>@nlHtmlLocalizer ["My string 2 <span style="font-weight: bold;">with bold</span>."]</li>