ste*_*jnl 11 globalization asp.net-mvc localization asp.net-mvc-routing
很难找到这个具体问题的答案,所以生病了:
我们希望建立完全语言特定的网址
www.mysite.com/EN
www.mysite.com/DE
这是在RouteConfig中完成的
url: "{language}/{controller}/{action}/{id}"
但接下来是棘手的部分:
www.mysite.com/EN/Categories
www.mysite.com/DE/Kategorien
即使控制器名称以多种语言显示,但指向同一个控制器.这甚至可能吗?
Hus*_*vic 16
嗯,这部分是可能的(仅限语言部分).使用不同语言的控制器名称绝对是一个有趣的点,但我认为很难实现这一点.想想像阿拉伯语和希伯来语这样的Bidi语言会是什么样子.使用不同语言的控制器可能是一个好主意,但是你会为自己造成破坏,我相信你必须改变底层的MVC结构来实现这一点.
语言变化部分很简单,可以像下面这样完成.
你可能想要看的是全球化.基本上语言部分对应于当前线程UI文化.您需要的是以下内容:
定义一个路线,如下所示:
var lang = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;
routes.MapRoute(
    name: "Default",
    url: "{language}/{controller}/{action}/{id}",
    defaults: new { language = lang, controller = "Home", 
                    action = "Index", id = UrlParameter.Optional }
 );
注册Application_AcquireRequestState并定义如下:
protected void Application_AcquireRequestState()
{
    var routes = RouteTable.Routes;
    var httpContext = Request.RequestContext.HttpContext;
    if (httpContext == null) return;
    var routeData = routes.GetRouteData(httpContext);
    var language = routeData.Values["language"] as string;
    var cultureInfo = new CultureInfo(language);
    System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo;
    System.Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo;
}
虽然CurrentUICulture您需要切换语言从资源文件加载信息,但您也应该将其更改CurrentCulture为相同CultureInfo;
最后,确保您具有相应的资源文件和回退资源文件.
我使用了Name属性,CultureInfo所以德语将是de-DE,英语en-US等.这应该可以解决问题.
如果您需要更多信息,我可以上传一个示例MVC项目供您检查.
更新:一种做你想做的事情的粗略方法是将路段的顺序反转为这样的:
routes.MapRoute(
    name: "NewDefault",
    url: "{language}/{id}/{action}/{controller}",
    defaults: new { language = lang, controller = "Home", action = "Index", id = "Category"}
);
这样您就可以提出以下请求http://www.your_url.com/de/Kategorien.在这种情况下,Kategorien映射到id而不是控制器.您的控制器保留英语或德语(取决于您的命名方式),但用户可以看到不同的语言.在后台,您的视图可能是这样的:
public ActionResult Index(string id, string categoryName)
{
    // Fetch data based on category name (categoryName)
    return View();
}
您可以将其他信息作为参数传递,但是您需要调整路线,使其类似于:{language}/{category}/{subcategory}/{action}/{controller}
只要知道从长远来看这可能会导致颈部疼痛,如果你试试这个,那么一定要把它记录下来.
| 归档时间: | 
 | 
| 查看次数: | 11241 次 | 
| 最近记录: |