首页 > 解决方案 > asp mvc 核心 url 本地化

问题描述

我正在尝试本地化我的应用程序的 URL。不幸的是,大多数页面都向我展示了应用本地化的示例,例如:

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

这不是我想要的。我会像这样本地化 URL:

http://localhost/欢迎

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 取 Selectors 中的最后一个路由寄存器(如果是 FR,则取 FR 路由)。我无法通过这段代码管理其他路线,因为它与应用程序一起加载。并且不能用于动态使用(该应用程序允许在我需要时更改语言)。

提前致谢。

标签: c#asp.net-coreurl-routingasp.net-core-localization

解决方案


我发现这个示例项目有效:https ://github.com/tomasjurasek/AspNetCore.Mvc.Routing.Localization

设置好后,您可以使用

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

为您想要一个唯一名称的每种文化执行此操作,它创建的动态路线将转换为正确的操作并执行它。它还有一个用于创建翻译链接的标签助手,但如果你想使用 Url.Action 或 Html.ActionLink,我发现你必须创建将文化考虑在内的扩展方法才能让它们充分发挥作用。

在您的情况下,希望它们在路由级别而不是 /culture/Controller/Action 可能需要更多的工作,但这对您来说可能是一个有用的起点。


推荐阅读