IstringLocalizer возвращает ключ вместо значения в приложении Blazor Web Server и не может найти файлы ресурсовC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 IstringLocalizer возвращает ключ вместо значения в приложении Blazor Web Server и не может найти файлы ресурсов

Сообщение Anonymous »

У меня есть 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»