【解決方法】blazorserver でデフォルトのカルチャを設定できませんでした


引用:

みなさん、こんにちは。私は複数の言語を使用する必要があるプロジェクトに取り組んでおり、デフォルトのカルチャを設定したいと考えています。 すべて正常に動作していますが、デフォルトのカルチャを設定できませんでした。 以下のコードを示すようにロシア語に変更しましたが、プロジェクトはデフォルトの英語で開始されます。 助けてください、ありがとう。

私が試したこと:

引用:

プログラム.cs

  using AnalysisDashboard.Authentication;
using AnalysisDashboard.Data;   
using AnalysisDashboard.DataAccess;
using AnalysisDashboard.Models;
using AnalysisDashboard.Services;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Localization;
using Microsoft.EntityFrameworkCore;
using System.Globalization;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<DashboardContext>(options =>
{
    options.UseMySQL(builder.Configuration.GetConnectionString("Default"));
});

// Add services to the container.
builder.Services.AddAuthenticationCore();
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddScoped<ProtectedSessionStorage>();
builder.Services.AddScoped<AuthenticationStateProvider, 
CustomAuthenticationStateProvider>();
builder.Services.AddSingleton<UserAccountService>();
builder.Services.AddScoped<IRegistrationService, RegistrationService>();
builder.Services.AddScoped<DataInfo>();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
  app.UseExceptionHandler("/Error");
  app.UseHsts();
}

app.UseHttpsRedirection();

app.UseStaticFiles();

var supportedCultures = new[] { "en-US", "uz-UZ", "uz-Cyrl", "ru-RU" };
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(supportedCultures[3])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);

app.UseRequestLocalization(localizationOptions); 

app.UseRouting();

app.MapControllers();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();</blockquote>

Index.razor.cs ファイル

public void ClickLanguage(string lanCode)
    {
        string selectedCulture = Thread.CurrentThread.CurrentCulture.Name;
        switch (lanCode)
        {
            case "uz":      selectedCulture = "uz-UZ";   break;
            case "uzCyrl":  selectedCulture = "uz-Cyrl"; break;
            case "ru":      selectedCulture = "ru-RU";   break;
            case "en":      selectedCulture = "en-US";   break;
        }

        if (string.IsNullOrWhiteSpace(selectedCulture))
        {
            return;
        }

        var uri = new Uri(Navigation.Uri).GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped);
        var query = $"?culture={Uri.EscapeDataString(selectedCulture)}&" + $"redirectUri={Uri.EscapeDataString(uri)}";

        Navigation.NavigateTo("/Culture/SetCulture" + query, forceLoad: true); 
    }</blockquote>

CultureController.cs ファイル

using Microsoft.AspNetCore.Http;
   using Microsoft.AspNetCore.Localization;
   using Microsoft.AspNetCore.Mvc;

  namespace AnalysisDashboard.Controllers
  {
      [Route("[controller]/[action]")]
      public class CultureController : Controller
      {
           public IActionResult SetCulture(string culture, string redirectUri)
           {
              if (culture != null)
              {
                  HttpContext.Response.Cookies.Append(
                         CookieRequestCultureProvider.DefaultCookieName,
                         CookieRequestCultureProvider.MakeCookieValue(
                         new RequestCulture(culture)));
              }

               return LocalRedirect(redirectUri);
           }
      }
   }

解決策 1

インターネット上にはチュートリアルや解決策がたくさんあるので、調べるだけで十分です。 コードとその実行方法を確認できるので、YouTube を検索しました。 blazer サーバーの変更文化[^]

以下に明確な解決策をいくつか示します。
* Blazor サーバーのローカリゼーション – 言語と文化を変更する方法 – YouTube[^]

* Blazor のローカリゼーション: カール フランクリンの Blazor Train Ep 90 – YouTube[^]

彼らは Blazor に関してはプロです。 そこにあなたの答えが見つかります。

コメント

タイトルとURLをコピーしました