Место общения программистов C#
Anonymous
IstringLocalizer возвращает ключ вместо значения в приложении Blazor Web Server и не может найти файлы ресурсов
Сообщение
Anonymous » 11 авг 2025, 20:03
У меня есть Istringlocalizer в моем приложении, вводимом через инъекцию зависимости на моей странице Todolist, которая должна обеспечить локализацию для итальянского и английского. Локализация: < /p>
Код: Выделить всё
@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
1754931813
Anonymous
У меня есть Istringlocalizer в моем приложении, вводимом через инъекцию зависимости на моей странице Todolist, которая должна обеспечить локализацию для итальянского и английского. Локализация: < /p> [code]@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 на локализаторе, чтобы отладить проблему, но я получаю ошибку, в которой говорится: «Не существует манифестов для текущей культуры». [/code] Подробнее здесь: [url]https://stackoverflow.com/questions/78566224/istringlocalizer-returns-key-instead-of-value-in-blazor-web-server-app-and-is-un[/url]