翻译asp.net mvc 2应用程序?

时间:2010-09-11 23:17:09

标签: asp.net-mvc-2 routing translation

我希望这是一个相当简单的问题,但我对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这样的路由会起作用吗?这没有意义,所以我猜不是。那么我如何让这些路线在某个地方引领?我在哪里放置翻译的视图?

2 个答案:

答案 0 :(得分:2)

我认为从长远来看,使用资源文件会更容易,而不是很难实现。

有关详细信息,请查看此link

这里有一个快速的how to

以下是使用solutions在.Net MVC中使用资源的一些问题。

答案 1 :(得分:1)

重新编写网址,就像你说的/喜欢它读取 - language / controllername / actionname

它所谓的 - 你需要专注于理解它是在路线定义的这一点:

new { language = "en", controller = "Home", action = "Index", id = "" }

{controller} / {action},匹配相应的控制器和操作,就像之前一样。语言和id与您定义的操作方法中的参数匹配。那些也可以是(视图)模型的属性,如果这是方法中的参数。

我认为mvc中的语言并没有自动挂钩,因此您必须明确决定如何处理它。一种方法是让您的操作方法在每个语言的子文件夹中返回一个视图,或者将该语言作为文件名的一部分添加。

另一种方法是在路径中定义一个处理程序,用于设置线程ui文化,就像在经典的asp.net中一样。从那时起,您可以像使用klabranche链接一样使用asp.net mvc资源。

相关问题