Как добавить поддержку перевода в Blazor?
Работаю над приложением на Blazor и столкнулась с задачей добавления поддержки перевода интерфейса на несколько языков. Как лучше всего реализовать поддержку многоязычного интерфейса в Blazor? Какие библиотеки или подходы использовать?
Ответы (1 шт):
Автор решения: Dev18
→ Ссылка
Чтобы добавить поддержку перевода в Blazor, выполните следующие шаги:
- Добавьте контроллер для установки культуры: (Этот контроллер позволит переключаться между различными культурами (языками) в вашем приложении)
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc;
namespace TranslateSimple.Controller
{
[Route("[controller]/[action]")]
public class CultureController : Microsoft.AspNetCore.Mvc.Controller
{
public IActionResult SetCulture(string culture, string redirectionUri)
{
if (culture != null)
{
HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)));
}
if (redirectionUri == null) redirectionUri = "/";
return LocalRedirect(redirectionUri);
}
}
}
- Добавьте ресурсы: (Создайте файлы ресурсов для каждого языка, который вы хотите поддерживать. пр.,
Resources/Pages/Index.ru-RU.resx
для русского итд)
- Настройте локализацию в Program.cs: (Здесь вы указываете поддерживаемые культуры и настройки локализации.)
...
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new List<CultureInfo>()
{
new CultureInfo("en-US"),
new CultureInfo("es-ES"),
new CultureInfo("de-DE"),
new CultureInfo("fr")
};
options.DefaultRequestCulture = new RequestCulture("fr");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
....
app.UseRequestLocalization();
- Используйте локализацию на Razor страницах: (Инъектируйте
IStringLocalizer
и используйте его для вывода локализованных строк.)
@inject IStringLocalizer<Index> myLocalizer
<p>@myLocalizer["Test"]</p>