asp mvc core url локализация

Я пытаюсь локализовать URL-адреса своего приложения. К сожалению, на большинстве страниц мне представлены примеры локализации приложений. Например:

http://localhost/en-US/Home/Index

Это не то, что я хочу. Я бы локализовал URL-адреса вот так:

http://localhost/Welcome

http://localhost/Bienvenue [приветственное слово на французском]

На моей стороне культура уже управлялась с помощью cookie и хорошо работала с классом CookieRequestCultureProvider.

Так что у меня есть эта информация и с локализацией на страницах все в порядке.

Мне удалось прописать все нужные мне маршруты. Оба приведенных выше примера работают и отображают страницу. Благодаря этому:

        public void Apply(ApplicationModel application)
        {
            foreach (var controller in application.Controllers)
            {
                foreach (var action in controller.Actions)
                {
                    var localizedRouteAttributes = action.Attributes.OfType<LocalizedRouteAttribute>().ToArray();
                    if (localizedRouteAttributes.Any())
                    {
                        foreach (var localizedRouteAttribute in localizedRouteAttributes)
                        {
                            var localizedVersions = GetLocalizedVersionsForARoute(localizedRouteAttribute.Name); // GetLocalizedVersionsForARoute contains all routes translated and group by culture.
                            foreach (var localizedVersion in localizedVersions)
                            {
                                if (!action.Selectors.Any(s => s.AttributeRouteModel.Template == localizedVersion.Template))
                                    action.Selectors.Add(new SelectorModel(action.Selectors.First()) { AttributeRouteModel = localizedVersion });
                            }
                        }
                    }
                }
            }
        }

Таким образом, mvc берет последний регистр маршрута в Селекторах (если FR, он принимает маршрут FR). Я не могу управлять другими маршрутами с помощью этого фрагмента кода, потому что он загружается вместе с приложением. И не может работать с динамическим использованием (приложение позволяет менять язык, когда я хочу).

Заранее спасибо.


person Dams    schedule 24.05.2018    source источник


Ответы (2)


Я обнаружил, что этот пример проекта работает: https://github.com/tomasjurasek/AspNetCore.Mvc.Routing.Localization

После настройки вы можете пометить маршруты с помощью

[LocalizedRoute("culture", "RouteName")]

Сделайте это для каждой культуры, для которой требуется уникальное имя, и динамический маршрут, который он создает, будет преобразован в правильное действие и выполнит его. У него также есть помощник тега для создания переведенных ссылок, хотя, если вы хотите использовать Url.Action или Html.ActionLink, я считаю, что вам нужно создать методы расширения, которые учитывают культуру, чтобы заставить их работать в полной мере.

В вашем случае, если вы хотите, чтобы они были на уровне маршрута, а не на уровне / culture / Controller / Action, может потребоваться дополнительная работа, но это может быть для вас полезной отправной точкой.

person Tridus    schedule 02.09.2020

посмотрите этот небольшой пример, я надеюсь вам помочь :)

1) в вашем контроллере:

[RoutePrefix("/")]
public HomeController : Controller {


    [HttpGet]
    [Route("Welcome")]
    public ActionResult Index() {
        return View(); 
    }
}

И включите его в таблице маршрутов "routes.MapMvcAttributeRoutes ();" как это

public class RouteConfig {

    public static void RegisterRoutes(RouteCollection routes) {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        //enable attribute routing
        routes.MapMvcAttributeRoutes();

        //convention-based routes
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = "" }
        );
    }
}

Я предлагаю прочитать эту статью по этому URL-адресу: https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/

если у вас есть другие вопросы, вы можете задать мне

person Ahmed Oumezzine    schedule 25.05.2018
comment
Спасибо за ответ. :) Но это не то, что я хочу. Я уже использовал RouteAttribute. Но идея состоит в том, чтобы получить несколько URL-адресов для одного и того же маршрута. Например: ›localhost / Добро пожаловатьlocalhost / Bienvenue Например. - person Dams; 07.06.2018