Код: Выделить всё
@using BlazorPractice.Data
@using BlazorPractice.Services
@using Microsoft.Extensions.Localization
@inject TodoService TodoService
@inject IStringLocalizer Localizer
@page "/todolist"
@Localizer["Title"]
@(string.Join(" ", Localizer.GetAllStrings().Select(v => v.ToString())))
[list]
@foreach (var todoItem in _todoNotes)
{
}
[/list]
@Localizer["Title"]
@Localizer["Description"]
@Localizer["IsCompleted"]
@Localizer["CreateNewNote"]
@ErrorMessage
@code {
TodoNote[] _todoNotes = { };
TodoNote _newNote = new();
private string ErrorMessage { get; set; } = string.Empty;
protected override async void OnInitialized()
{
_todoNotes = await TodoService.GetTodoNotesAsync();
}
async Task AddTodoItem()
{
if (!IsValidInput(_newNote.Title, Localizer["TitleRequired"]))
return;
if (!IsValidInput(_newNote.Description, Localizer["DescriptionRequired"]))
return;
await TodoService.AddTodoNoteAsync(_newNote);
_todoNotes = await TodoService.GetTodoNotesAsync();
_newNote = new TodoNote();
StateHasChanged();
}
private async void FetchNotesAsync()
{
_todoNotes = await TodoService.GetTodoNotesAsync();
StateHasChanged();
}
private bool IsValidInput(string input, string errorMessage)
{
if (!string.IsNullOrWhiteSpace(input)) return true;
ShowErrorMessage(errorMessage);
return false;
}
private async void ShowErrorMessage(string message)
{
ErrorMessage = message;
StateHasChanged();
await Task.Delay(2000);
ErrorMessage = string.Empty;
}
}
< /code>
и My Program.cs: < /p>
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using BlazorPractice.Areas.Identity;
using BlazorPractice.Data;
using BlazorPractice.Services;
using Microsoft.AspNetCore.Localization;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext(options =>
options.UseSqlite(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores();
builder.Services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(1);
});
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services
.AddScoped();
builder.Services.AddSingleton();
builder.Services.AddScoped();
builder.Services.AddLocalization(options =>
{
options.ResourcesPath = "Resources";
});
var supportedCultures = new[] { "en", "it" };
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
builder.Services.Configure(options =>
{
options.DefaultRequestCulture = new RequestCulture(supportedCultures[0]);
options.SupportedCultures = localizationOptions.SupportedCultures;
options.SupportedUICultures = localizationOptions.SupportedUICultures;
});
var app = builder.Build();
app.UseRequestLocalization(localizationOptions);
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.Run();
< /code>
Я попытался переименовать файлы в blazorpractice.resources.data.sharedassets.en.resx и .it соответственно, но это не сработало. Я также попытался посмотреть, будет ли метод GetallStrings на локализаторе, чтобы отладить проблему, но я получаю ошибку, в которой говорится: «Не существует манифестов для текущей культуры». Подробнее здесь: https://stackoverflow.com/questions/785 ... -and-is-un