基本上我想通过以下方案实现多语言网站:
MVC文件夹结构如下:
- Areas
- Channel1
- Controllers
- Content
- Views
- en-us
- View1.cshtml
- View2.cshtml
- zh-cn
- View1.cshtml
- View2.cshtml
<b>- Special.cshtml</b>
- Channel2
....(similar folder structure)
- ....
我认为必须有一种方法可以将“en-us”定义为像{lang}这样的参数,并在区域外的默认控制器中做出决定 - 但是我是asp.net MVC的新手,我该怎么办?是什么?
答案 0 :(得分:0)
这是一篇很棒的文章,提供了有关如何在ASP.NET MVC 3上实现全球化的实用建议
答案 1 :(得分:0)
没有很好的方法可以做到这一点,但这是可能的。首先,你需要重新安排你的观点 - 他们仍然需要一个控制器。假设您拥有的文件(View1.cshtml
和View2.cshtml
)存在于您的家庭控制器中。把它们放在这里:
- Views
- Home
- en-us
- View1.cshtml
- View2.cshtml
- zh-cn
- View1.cshtml
- View2.cshtml
然后,为Global.asax.cs
中的视图创建自定义路线:
routes.MapRoute(
"MultiLingual",
"{lang}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", lang="en-us", id = UrlParameter.Optional }
);
最后,在您的家庭控制器(或任何想要放入视图的控制器)中,使用lang
参数确定要使用的视图:
public ActionResult View1( string lang, int? id ) {
return View( lang + "/View1" );
}
public ActionResult View2( string lang, int? id ) {
return View( lang + "/View2" );
}
我试过这个并且它有效,但它感觉非常笨重,而且不是很干(至少在动作中)。任何人都有更好的方法吗?
答案 2 :(得分:0)
您可以随时编写自己的视图引擎,根据内容查看文件夹。ThemedViewengine that does just that有代码。