Вам не нужно использовать контроллеры, недавно я опубликовал пошаговое руководство по разработке мультикультурного веб-приложения с ASP.NET Core Razor Pages; Вы можете найти его здесь:
http://www.ziyad.info/en/articles/10-Developing_Multicultural_Web_Application
Я использовал подход с использованием значения маршрута, но вы можете расширить его, чтобы использовать строку запроса, cookie или принятое значение заголовка для выбора культуры.
На сайте вы можете увидеть живую демонстрацию и ссылку на исходный код проекта на github.
Кроме того, вам также может понадобиться проверить локализацию сообщений об ошибках идентификации:
http://ziyad.info/en/articles/20-Localizing_Identity_Error_Messages
Надеюсь, это поможет:)
[UPDATE]
Пример, который я предоставил, использует файлы общих ресурсов. Если вы хотите использовать сопоставление файлов ресурсов, относящихся к представлению, создайте файлы ресурсов для каждого представления / культуры в папке «Ресурсы» и оставьте структуру папок ресурсов похожей на связанные представления.
например, если у нас есть представление с именем «MyView» внутри папки страниц:
Страницы / MyView.cshtml
Файлы ресурсов должны выглядеть следующим образом:
Ресурсы / Страницы / MyView.tr-TR.resx
Ресурсы / Страницы / MyView.ar-SY.resx
Resources / Pages / MyView.hi-IN.resx
Чтобы использовать локализацию внутри представлений, введите IViewLocalizer
:
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer _loc
<h4>@_loc["My view title"]</h4>
и для ViewModel / DataAnnotations создайте другой файл ресурсов для каждой культуры:
Посмотреть модель:
Страницы / MyViewModel.cshtml.cs
Имя файла ресурса:
Ресурсы / Страницы / MyViewModel.tr-TR.resx
Ресурсы / Страницы / MyViewModel.ar-SY.resx
Ресурсы / Страницы / MyViewModel.hi-IN.resx
Заполните файлы ресурсов соответствующими отображаемыми именами свойств модели и сообщениями с комментариями к данным, затем измените файл startup.cs, очистив код общего ресурса для DataAnnotations и оставив его без параметров:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddViewLocalization(o=>o.ResourcesPath = "Resources")
// Option A: use this for localization with shared resource
/*
.AddDataAnnotationsLocalization(o=> {
var type = typeof(ViewResource);
var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName);
var factory = services.BuildServiceProvider().GetService<IStringLocalizerFactory>();
var localizer = factory.Create("ViewResource", assemblyName.Name);
o.DataAnnotationLocalizerProvider = (t, f) => localizer;
})
*/
// Option B: use this for localization by view specific resource
.AddDataAnnotationsLocalization()
.AddRazorPagesOptions(o => {
o.Conventions.Add(new CultureTemplateRouteModelConvention());
});
Кстати, я обновил пример GitHub, теперь он содержит представление "AnotherPage", локализованное с использованием файлов определенных ресурсов.