为什么在启动而不调试模式下运行时,Blazor Web App 中的区域性没有更改?

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

对于 Blazor,我几乎是个新手。我想在我的 Blazor Web 应用程序 (Blazor United) 中以 InteractiveAuto 渲染模式实现多语言。

我遵循了本教程:https://learn.microsoft.com/en-us/aspnet/core/blazor/globalization-localization?view=aspnetcore-8.0#interactive-auto-components

教程很长,所以我无法发布所有代码。

按照教程中的所有内容操作后,代码成功运行。

但是,我的程序中的默认语言不是英语。我在program.cs中的这段代码中提前设置了默认语言。

 var supportedCultures = new[] { "zh-hans","en" };
 var localizationOptions = new RequestLocalizationOptions()
     .SetDefaultCulture(supportedCultures[0])
     .AddSupportedCultures(supportedCultures)
     .AddSupportedUICultures(supportedCultures);
 app.UseRequestLocalization(localizationOptions);
 app.MapControllers();

这是我在 MainLayout 中测试它的代码:

@inherits LayoutComponentBase
@inject IStringLocalizer<MainLayout> Localizer
@inject Blazored.LocalStorage.ISyncLocalStorageService LocalStorage
@code {   
    protected override async Task OnAfterRenderAsync(bool firstRender)
    {        
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("zh-hans");
        CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("zh-hans");                 }        
        abc = CultureInfo.CurrentCulture.ToString();
    }    
    string abc { get; set; } = "456";
}


<div class="page">
    <div class="sidebar">
        <div>@abc</div>
    </div>

    <main>
        <div class="top-row px-4">
            <a href="https://learn.microsoft.com/aspnet/core/" target="_blank">About</a>
        </div>        
        <article class="content px-4">
            @Body
        </article>
    </main>
</div>

<div id="blazor-error-ui" style="display:flex;">
    @Localizer["AnUnhandledErrorHasOccurred"]
    <a href="" class="reload"> @Localizer["Reload"]</a>
    <a class="dismiss">🗙</a>
</div>

但是我发现了一个奇怪的问题,当程序在Start Debugging模式下运行时,一切正常。但是,当我在“启动而不调试”模式下运行它时,默认语言被强制更改为英语。

我什至将这段代码添加到MainLayout中:

protected override async Task OnAfterRenderAsync(bool firstRender)
{
     CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("zh-hans");
     CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("zh-hans");
}

但是语言仍然无法更改。这是什么原因造成的?为了方便使用热重载,我在“启动而不调试”模式下运行它。我该如何解决这个问题?

asp.net-core blazor
1个回答
0
投票

我找到了解决办法(虽然到现在我也不知道问题是什么,也没有人能解决。这种方式可以解决问题,但我不知道它是如何运作的):

添加此代码:

localizationOptions.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
{                
    return await Task.FromResult(new ProviderCultureResult("zh-Hans"));
}));

在此代码之后:

  var supportedCultures = new[] { "zh-Hans", "en-us" };
  var localizationOptions = new RequestLocalizationOptions()
      .SetDefaultCulture(supportedCultures[0])
      .AddSupportedCultures(supportedCultures)
      .AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);

就像这样:

 var supportedCultures = new[] { "zh-Hans", "en-us" };
 var localizationOptions = new RequestLocalizationOptions()
     .SetDefaultCulture(supportedCultures[0])
     .AddSupportedCultures(supportedCultures)
     .AddSupportedUICultures(supportedCultures);
 localizationOptions.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
 {                
     return await Task.FromResult(new ProviderCultureResult("zh-Hans"));
 }));
app.UseRequestLocalization(localizationOptions);
© www.soinside.com 2019 - 2024. All rights reserved.