asp.net-mvc – 可以在ASP.NET MVC中本地化URL /路由吗?
|
我正在与客户合作,希望我们的网络应用程序中的URL是法语.我是一名英语开发人员,我们也有英文客户.这是一个有趣的问题,但ASP.NET MVC框架不支持它. 这是场景.路线… 具体实施例 也会支持 法语URL 通用实例 也需要支持 法语URL 所以在MVC我的区域,控制器和操作都需要有英文和法文翻译. 显然,如果我要将所有我的控制器,视图和动作名称硬编码为法语,那么可维护性将是一个巨大的问题.有没有本地化浏览器中提供的路由,而不这样做?请记住,应用程序中有很多不同的路线.一对夫妇每个都有少数控制器,每个都有很多动作? 谢谢, 编辑 public class LocalizedControllerFactory : DefaultControllerFactory
{
public override IController CreateController(RequestContext requestContext,string controllerName)
{
if (string.IsNullOrEmpty(controllerName))
throw new ArgumentNullException("controllerName");
if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "fr")
{
controllerName = this.ReplaceControllerName(requestContext,controllerName);
this.ReplaceActionName(requestContext);
this.ReplaceAreaName(requestContext);
}
return base.CreateController(requestContext,controllerName);
}
private string ReplaceControllerName(RequestContext requestContext,string controllerName)
{
// would use the language above to pick the propery controllerMapper. For now just have french
Dictionary<string,string> controllerMapper = new Dictionary<string,string>()
{
{"frenchControllerA","englishControllerA"},{"frenchControllerB","englishControllerB"}
};
return this.ReplaceRouteValue(requestContext,"controller",controllerMapper);
}
private void ReplaceAreaName(RequestContext requestContext)
{
// would use the language above to pick the propery areaMapper. For now just have french
Dictionary<string,string> areaMapper = new Dictionary<string,string>()
{
{"frenchAreaX","englishAreaX"},{"frenchAreaY","englishAreaY"}
};
this.ReplaceRouteValue(requestContext,"area",areaMapper);
}
private void ReplaceActionName(RequestContext requestContext)
{
// would use the language above to pick the propery actionMapper. For now just have french
Dictionary<string,string> actionMapper = new Dictionary<string,string>()
{
{"frenchAction1","englishAction1"},{"frenchAction2","englishAction2"}
};
this.ReplaceRouteValue(requestContext,"action",actionMapper);
}
private string ReplaceRouteValue(RequestContext requestContext,string paramName,Dictionary<string,string> translationLookup)
{
if (requestContext.RouteData.Values[paramName] == null)
{
return null;
}
string srcRouteValue = requestContext.RouteData.Values[paramName] as string;
if (srcRouteValue != null && translationLookup.ContainsKey(srcRouteValue))
{
requestContext.RouteData.Values[paramName] = translationLookup[srcRouteValue];
}
return requestContext.RouteData.Values[paramName] as string;
}
}
一个体面的开始.如果我本地化在Url中的ControllerName和ActionName,它将会找到并呈现正确的View.但是我有以下问题. 区域名称不能翻译 RedirectToAction或Html.ActionLink 解决方法以下博客包含一个完整的解决方案这个确切的问题.它实际上是一个非常优雅的解决方案,我强烈推荐.https://blog.maartenballiauw.be/post/2010/01/26/translating-routes-(aspnet-mvc-and-webforms).html 注意让它适用于AREAs我不得不将以下扩展方法添加到他的“TranslatedRouteCollectionExtensions.cs”类中: public static Route MapTranslatedRoute(this AreaRegistrationContext areaContext,string name,string url,object defaults,object routeValueTranslationProviders,bool setDetectedCulture)
{
TranslatedRoute route = new TranslatedRoute(
url,new RouteValueDictionary(defaults),new RouteValueDictionary(routeValueTranslationProviders),setDetectedCulture,new MvcRouteHandler());
route.DataTokens["area"] = areaContext.AreaName;
// disabling the namespace lookup fallback mechanism keeps this areas from accidentally picking up
// controllers belonging to other areas
bool useNamespaceFallback = (areaContext.Namespaces == null || areaContext.Namespaces.Count == 0);
route.DataTokens["UseNamespaceFallback"] = useNamespaceFallback;
areaContext.Routes.Add(route);
return route;
}
然而,即使是这样,一个具有AREA的翻译路由也可以被读取和解释,所生成的路由似乎总是包含一个英文的AREA名称,但本地化其他的一切. 我被引导到一个博客通过ASP.NET MVC Forums问同样的问题 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Reference.svcmap:无法加载文件或程序集Micros
- asp.net – IIS 7.5和ASP .NET 2.0
- ASP.NET Core 2.0 WebApi全局配置及日志实例
- asp.net – Session Timeout .NET
- asp.net-mvc – MVC4 Razor – @ Html.DisplayFor没有绑定到
- asp.net-mvc-4 – 从beta版升级后的Autofac / MVC4 / WebAp
- asp.net-mvc – MVC视图中的多个表单:ModelState应用于所有
- asp.net-mvc – 为什么LINQ to Entities不能识别方法’Syst
- asp.net – App_Data文件夹中的图像未显示在浏览器中
- asp.net – MVC 4数据注释“显示”属性
- asp.net-mvc – 在多个表单上指定验证摘要
- asp.net – 如何告诉IIS 6将.NET版本设置为2.0(不
- Asp.NET 生成静态页面并分页的代码
- asp.net – 如何获取SignalR用户连接ID在外线中心
- asp.net-mvc – 在ASP.NET MVC 3中路由静态文件,
- asp.net-mvc – Razor中()(括号)和{}(大括号)之间
- asp.net – 模型在表单发布到控制器时始终为NULL
- asp.net-mvc-3 – 在MVC3中禁用HTML.TextAreaFor
- asp.net核心身份提取并保存外部登录令牌并添加对
- asp.net-mvc – 运行Asp.Net Mvc作为OWIN中间件?
