Локализация на стороне сервера Blazor без файлов cookie

#asp.net-core #localization #blazor-server-side

Вопрос:

Поэтому я пытаюсь добавить локализацию без файлов cookie в свой серверный проект Blazor.

В документе https://docs.microsoft.com/en-us/aspnet/core/blazor/globalization-localization?view=aspnetcore-5.0#provide-ui-to-choose-the-culture там написано:

Использование файлов cookie гарантирует, что подключение к WebSocket может правильно распространять культуру. Если схемы локализации основаны на пути URL или строке запроса, схема может не работать с веб-сайтами и, следовательно, не сохранять культуру. Поэтому рекомендуется использовать файл cookie культуры локализации.

Поэтому я знаю, что это не рекомендуется, но я бы хотел, чтобы это было основано на пути, если это возможно. Можно ли это сделать с помощью стандартных сервисов.AddLocalization(); и IStringLocalizer, или мне нужно создать собственный?

Комментарии:

1. Согласно документу , культуру можно установить с помощью одного из следующих подходов: файлы cookie или предоставить пользовательский интерфейс для выбора культуры. Если вы хотите использовать метод предоставления пользовательского интерфейса для выбора культуры, вы можете следовать руководству по настройке приложения.

2. @Жилв Да? И «Предоставить пользовательский интерфейс для выбора культуры» — это всего лишь вызов IActionResult SetCulture, который устанавливает языковой файл cookie?

Ответ №1:

Для локализации я предпочитаю прямую, понятную и читаемую ссылку, содержащую первые 2 буквы языка (например: mysite.com/en/mypage ), что позволяет иметь правильную ссылку, используя именно тот язык, который необходим.

Единственным решением, которое я нашел, которое идеально работает с сервером Blazor без необходимости в файлах cookie, было использование пакета «BlazorServerUrlRequestCultureProvider», созданного «Пьер-Люк Бонневиль»; он прост в использовании и дает отличные результаты.

Использование:

Установите пакет BlazorServerUrlRequestCultureProvider (отлично работал для меня с .Net 5.0):

 Install-Package BlazorServerUrlRequestCultureProvider -Version 1.0.0
 

Startup.cs:

 using BlazorServerUrlRequestCultureProvider;
// ...
//------------------------------
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // ...
        // Set the Resources folder name:
        services.AddLocalization(options => options.ResourcesPath = "Resources");
        // ...
    }
}
//------------------------------
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();

    #region Localization
    var supportedCultures = new[]
                {
                    new CultureInfo("en"),
                    new CultureInfo("ar"),
                };
    var options = new RequestLocalizationOptions
    {
        // Select a default language:
        DefaultRequestCulture = new RequestCulture("en"),
        // For Numbers, Dates, etc:
        SupportedCultures = supportedCultures,
        // For strings that we have localized in .resx files:
        SupportedUICultures = supportedCultures
    };
    app.UseUrlRequestLocalization(options);
    #endregion
    
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapBlazorHub();
        endpoints.MapFallbackToPage("/_Host");
    });
    app.UseRequestLocalization();
}
 

Это было как раз все, что тебе нужно! Никаких файлов cookie и контроллеров!

Теперь используйте StringLocalizer как обычно (в моем случае имена файлов ресурсов были App.resx и App.ar.resx внутри папки ресурсов):

Моя страница.бритва:

 @page "/ar/MyPage"
@page "/en/MyPage"

@inject IStringLocalizer<App> localizer

<h1>@localizer["My Translated Text Here !"]</h1>
 

Вся благодарность и кредиты достаются «Пирсу-Люку Бонневиллю» за его замечательную работу. Веб — сайт проекта , NuGet .

Бонус: Чтобы сделать вашу жизнь намного проще, используйте инструмент ResXManager для простого управления и перевода файлов ресурсов, это бесплатный и отличный инструмент, и он сэкономит вам много времени.