Локализация представлений

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 18.12.2019

Для локализации строк в представлении применяется сервис IViewLocalizer, который по своему действию аналогичен сервису IStringLocalizer. Встроенная реализация этого интерфейса - класс ViewLocalizer в зависимости от пути к локализуемому представлению пытается найти нужный файл ресурсов.

При локализации представлений применяются те же соглашения по именованию, что и при локализации контроллеров. То есть имя файла ресурсов, предназначенного для представления, должно отражать его путь в проекте. Например, пусть нам надо локализовать представление Views/Home/Index.cshtml. В этом случае ViewLocalizer будет искать для него файл ресурсов по следующим путям:

  • [папка_ресурсов]/Views/Home/Index.[код_культуры].resx

  • [папка_ресурсов]/Views.Home.Index.[код_культуры].resx

Например, добавим для представления Views/Home/Index.cshtml ресурсы в папку Resources. Воспользуемся первым вариантов:

Локализация представлений в ASP.NET Core

Как видно из скриншота, папка ресурсов в данном случае называется Resources, и в ней с прошлой темы остались ресурсы для локализации контроллеров. Использование структуры папок позволяет избежать мешанины в одной папке ресурсов для локализуемых сущностей и должным образом их структуризировать.

В данном случае я определил три файла ресурсов:

  • Resources/Views/Home/Index.ru.resx (для русского языка)

  • Resources/Views/Home/Index.en.resx (для английского языка)

  • Resources/Views/Home/Index.de.resx (для немецкого языка)

Каждый из файлов ресурсов имеет два ресурса с одинаковыми ключами Header и Message, но значениями на соответствующем языке. Например, ресурс для английского языка:

Ресурсы представлений в ASP.NET Core MVC

А аналогичный ресурс для русского языка выглядит следующим образом:

Локализация представлений на языки в ASP.NET Core MVC

После добавления ресурсов сделаем ребилд (перестроение) проекта.

Используем эти ресурсы в представлении Views/Home/Index.cshtml:

@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer


<h1>@Localizer["Header"]</h1>
<h3>@Localizer["Message"]</h3>

Первой строкой подключаем пространство имен, где определен IViewLocalizer. Второй строкой инжектируем данный сервис в представление и даем ему название Localizer.

И в конце добавим данный сервис в приложение, изменив класс Startup:

using System.Globalization;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.DependencyInjection;

namespace LocalizationApp
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddLocalization(options => options.ResourcesPath = "Resources");
            services.AddControllersWithViews()
                .AddViewLocalization();// добавляем локализацию представлений;
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseDeveloperExceptionPage();

            var supportedCultures = new[]
            {
                new CultureInfo("en"),
                new CultureInfo("ru"),
                new CultureInfo("de")
            };
            app.UseRequestLocalization(new RequestLocalizationOptions
            {
                DefaultRequestCulture = new RequestCulture("ru"),
                SupportedCultures = supportedCultures,
                SupportedUICultures = supportedCultures
            });

            app.UseStaticFiles();

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }
}

Для добавления сервиса IViewLocalizer в методе ConfigureServices вызывается метод AddViewLocalization().

Также следует отметить, что в методе Configure подключен RequestLocalizationMiddleware, который определяет набор допустимых культур и культуру по умолчанию.

Запустим приложение и передадим русскоязычную культуру:

View localization in ASP.NET Core

Передадим другую культуру, например, англоязычную:

View localization in ASP.NET Core MVC
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850