我希望这是一个相当简单的问题,但我对MVC很新,并且无法清楚地看到它应该如何完成。我有一个网站,我需要翻译成另一种语言。我试图搜索这个,但我发现的是关于如何在resx文件中处理字符串等的相当复杂的翻译。这可能是以后的事情,但是现在我想要的是能够让用户切换语言(通过我可以放在母版页中的链接),然后根据该选择让不同的页面以不同的语言显示。 / p>
从我的搜索来看,这似乎可以通过某种方式路由来实现。正如另一篇文章所述:
routes.MapRoute(
"Default",
"{language}/{controller}/{action}/{id}",
new { language = "en", controller = "Home", action = "Index", id = "" }
);
主页面切换链接:
<li><%= Html.ActionLink(
"Spanish",
ViewContext.RouteData.Values["action"].ToString(),
new { language = "es" })%></li>
<li><%= Html.ActionLink(
"French",
ViewContext.RouteData.Values["action"].ToString(),
new { language = "fr" })%></li>
<li><%= Html.ActionLink(
"English",
ViewContext.RouteData.Values["action"].ToString(),
new { language = "en" })%></li>
我可以试试这个,但我不明白的是,这会创造什么类型的路线?是“language / controllername / actionname”吗?如果是这样,它会在哪里领先?我的意思是,通常只有一个控制器和一个动作,我只有一个控制器和一个视图,只要该视图存在就可以工作。但这是什么语言?它只是一个文件夹,所以如果我有一个文件夹说en-GB / Home这样的路由会起作用吗?这没有意义,所以我猜不是。那么我如何让这些路线在某个地方引领?我在哪里放置翻译的视图?
答案 0 :(得分:2)
答案 1 :(得分:1)
重新编写网址,就像你说的/喜欢它读取 - language / controllername / actionname
它所谓的 - 你需要专注于理解它是在路线定义的这一点:
new { language = "en", controller = "Home", action = "Index", id = "" }
{controller} / {action},匹配相应的控制器和操作,就像之前一样。语言和id与您定义的操作方法中的参数匹配。那些也可以是(视图)模型的属性,如果这是方法中的参数。
我认为mvc中的语言并没有自动挂钩,因此您必须明确决定如何处理它。一种方法是让您的操作方法在每个语言的子文件夹中返回一个视图,或者将该语言作为文件名的一部分添加。
另一种方法是在路径中定义一个处理程序,用于设置线程ui文化,就像在经典的asp.net中一样。从那时起,您可以像使用klabranche链接一样使用asp.net mvc资源。