我正在构建一个服务器端渲染 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
但是由于我不更改页面,而且这就像一个单页网站,如何重新渲染组件以考虑更改的语言?
我能够按照微软的文档来做到这一点。 他们在那里解释了如何使用 Blazor 服务器端来做到这一点
出于语言目的,它需要使用 cookie 和特定的控制器操作。有点笨重,但它有效。