Почему ж-ханс не работает в локализаторе веб-сборки Blazor? - PullRequest
0 голосов
/ 18 июня 2020

Я следил за примером проекта в https://github.com/pranavkm/LocSample

Вот код Program.cs:

using System;
using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Blazored.LocalStorage;
using System.Globalization;
using System.Diagnostics;
using Microsoft.Extensions.Options;

namespace Temple
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            var builder = WebAssemblyHostBuilder.CreateDefault(args);
            builder.RootComponents.Add<App>("app");

            builder.Services.AddTransient(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
            builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
            builder.Services.AddBlazoredLocalStorage();

            var host = builder.Build();
            var localStorage = host.Services.GetRequiredService<ILocalStorageService>();
            string CurrentLanguage=await localStorage.GetItemAsync<string>("Language");           
            Debug.WriteLine(CurrentLanguage);            
            if (!string.IsNullOrEmpty(CurrentLanguage))
            {
                var culture = new CultureInfo(CurrentLanguage);
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.DefaultThreadCurrentUICulture = culture;
            }
            await host.RunAsync();
        }
    }
}

А вот код index. razor:

@page "/"
@inject IStringLocalizer<Index> Localizer;
@inject NavigationManager Nav
@inject Blazored.LocalStorage.ILocalStorageService localStorage

<h1>@Localizer["Test"]</h1>

<button @onclick="ABC">123123</button>
Welcome to your new app.

@code{
    public void ABC()
    {        
        localStorage.SetItemAsync("Language", "zh-Hans");        
        Nav.NavigateTo(Nav.Uri, forceLoad: true);
    }
}

А вот список файлов: enter image description here

Как видите, я использую пакет Blazored.LocalStorage nuget для локального хранилища, и он хорошо работает.

Проблема в том, когда я нажимал кнопку в index.razor. Язык никогда не меняется на китайский.

Более того, я обнаружил странную проблему. После того, как я изменил код в index.razor следующим образом:

@code{
    public void ABC()
    {        
        localStorage.SetItemAsync("Language", "en");        
        Nav.NavigateTo(Nav.Uri, forceLoad: true);
    }
}

Когда я нажал кнопку, он правильно изменил язык на английский sh.

Что с этим не так?

1 Ответ

1 голос
/ 19 июня 2020

Проблема решена.

В ядре asp. net имя языка может быть 'zh-hans' или 'zh-Hans', в то время как в Blazor in может быть только 'zh-Hans'. Это чувствительность к регистру в Blazor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...