我正在尝试本地化我的应用程序的 URL。不幸的是,大多数页面都向我展示了应用程序本地化的示例,例如:
这不是我想要的。我想本地化这样的 URL:
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 路由)。我无法通过这段代码管理其他路线,因为它已随应用程序一起加载。并且不能动态使用(应用程序允许在我想要的时候更改语言)。
相关分类