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



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



这种文化已经在我这边用 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 路由)。
我无法通过这段代码管理其他路线,因为它已随应用程序一起加载。并且不能使用动态使用(应用程序允许在我需要时更改语言)。

提前致谢。

最佳答案

我发现这个示例项目有效:https://github.com/tomasjurasek/AspNetCore.Mvc.Routing.Localization
设置完成后,您可以使用

[LocalizedRoute("culture", "RouteName")]
为每个您想要一个唯一名称的文化执行此操作,它创建的动态路线将转换为正确的操作并执行它。它还有一个用于创建翻译链接的标签助手,但如果您想使用 Url.Action 或 Html.ActionLink,我发现您必须创建将文化考虑在内的扩展方法才能使它们完全工作。
在您的情况下,希望它们在路由级别而不是/culture/Controller/Action 可能需要做更多的工作,但这对您来说可能是一个有用的起点。

关于c# - asp mvc 核心 url 本地化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50515641/

10-12 17:05
查看更多