#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.
Ближайший, который я могу найти, — это 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>