Пожалуйста, помогите мне, потому что я схожу с ума здесь :-(
Я пытаюсь понять, как работает ASP.Net MVC Core Localization
. Я работал по учебнику MS, но безрезультатно.
Короче говоря: я настраиваю RequestLocalizationOptions
по умолчанию на иврит (he-IL
). У меня есть соответствующие файлы ресурсов в структуре каталогов, основанной на моих представлениях (и я знаю, что это работает, потому что изменение ресурсов в файле ресурсов en-US
по умолчанию отражается в пользовательском интерфейсе).
Когда я запускаю свое приложение, мое представление локализуется на английский, а не на иврит.
Бонусная странность: Thread.CurrentThread.CurrentUICulture
действительно устанавливается на he-IL
, когда я прерываю код Startup.cs, но затем он снова устанавливается на en-US
для всех других потоков, что я проверяю в представлении, печатая <H2>@Thread.CurrentThread.CurrentUICulture.Name</H2>
. Я попытался установить как Thread.CurrentThread.CurrentUICulture
, так и CultureInfo.DefaultThreadCurrentUICulture
в действиях моего контроллера, но это не сработало.
В принципе:
// Startup.cs
private static void ConfigureServices(IServiceCollection services)
{
// localization
services
.AddLocalization(options => options.ResourcesPath = "Resources");
services.Configure<RequestLocalizationOptions>(options =>
{
var hebrew = new CultureInfo("he-IL");
var usEnglish = new CultureInfo("en-US");
var supportedCultures = new[]
{
hebrew, usEnglish
};
options.DefaultRequestCulture = new RequestCulture(hebrew, hebrew);
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
// MVC
services.AddMvc((options) => { options.Filters.Add(new RequireHttpsAttribute()); })
.AddViewLocalization()
.AddDataAnnotationsLocalization();
// other configurations go here...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// localization
var localizationOption = app
.ApplicationServices
.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(localizationOption.Value);
// other configurations go here...
}
Затем в любом представлении:
@using Microsoft.AspNetCore.Mvc.Localization
@using System.Threading
@inject IViewLocalizer Localizer
<H1>@Localizer["Test string"]</H1>
<H2>@Thread.CurrentThread.CurrentUICulture.Name</H2>
Результат, который я получаю:
<H1>Test string</H1>
<H2>en-US</H2>
должно быть:
<H1>טקסט בעברית</H1>
<H2>he-IL</H2>