如何在服务器端渲染 blazor 应用程序中设置语言

问题描述 投票:0回答:1

我正在构建一个服务器端渲染 blazor 应用程序

Program.cs 中我有

builder
    .Services
    .AddRazorComponents()
    .AddInteractiveServerComponents();

app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode();

我构建了一个像下面的代码一样的语言组件,它似乎不起作用,或者至少我没有看到其他组件的本地化有任何变化

@using  System.Globalization
@inject IJSRuntime JSRuntime
@inject NavigationManager Nav

<select class="form-control" @onchange="ChangeLanguage">
    @foreach (var language in supportedLanguages)
    {
        <option value="@language">@language.DisplayName</option>
    }
</select>

@code
{
    CultureInfo[] supportedLanguages = new[]
    {
        new CultureInfo("en-US"),
        new CultureInfo("pt-PT"),
        new CultureInfo("fr-FR"),
    };

    private async Task ChangeLanguage(ChangeEventArgs e)
    {
        var culture = e.Value?.ToString();
        Console.WriteLine("culture is " + culture);
        if (!string.IsNullOrEmpty(culture))
        {
            await JSRuntime.InvokeVoidAsync("BlazorCulture.setCulture", culture);
        }
    }
}

如果其他组件也已渲染,并且我希望它们更新语言,我该怎么做?

例如渲染使用的 2 个组件

IStringLocalizer<App> _localize

但是由于我不更改页面,而且这就像一个单页网站,如何重新渲染组件以考虑更改的语言?

c# .net asp.net-core blazor blazor-server-side
1个回答
0
投票

我能够按照微软的文档来做到这一点。 他们在那里解释了如何使用 Blazor 服务器端来做到这一点

https://learn.microsoft.com/en-us/aspnet/core/blazor/globalization-localization?view=aspnetcore-7.0#dynamically-set-the-server-side-culture-by-user-preference

出于语言目的,它需要使用 cookie 和特定的控制器操作。有点笨重,但它有效。

© www.soinside.com 2019 - 2024. All rights reserved.