ASP MVC 4多语言路由交换机

时间:2013-09-24 08:46:02

标签: asp.net-mvc asp.net-mvc-4 multilingual

我有一个多语言MVC应用程序,我按如下方式定义路由(默认路由为/{lang}/{controller}/{action}):

routes.MapRoute("FAQEN", "{lang}/frequently-asked-questions/", new { controller = "Home", action = "FAQ", lang = "en" }, new { lang = "en" });
routes.MapRoute("FAQNL", "{lang}/veelgestelde-vragen/", new { controller = "Home", action = "FAQ", lang = "nl" }, new { lang = "nl" });

这会产生网址

  • mywebsite.com/en/frequently-asked-questions
  • mywebsite.com/nl/veelgestelde-vragen

在我网站的页脚中,有一个语言开关,其工作方式如下:

<a href="@Url.Action("Language", "Home", new { returnUrl = Request.Url.PathAndQuery })">Switch language</a>

因此,当有人点击此操作从EN转到NL时,returnUrl就是例如/en/frequently-asked-questions。目前,我使用带字符串翻译的数组将frequently-asked-questions字符串翻译为veelgestelde-vragen。这个解决方案的问题是我必须维护两个只有相同内容的对象;路由和带字符串翻译的数组。有没有更简单的方法来解决这个问题?例如,是否可以将字符串/en/frequently-asked-questions转换回FAQ中的HomeController操作,然后获取FAQ操作的NL路由?

2 个答案:

答案 0 :(得分:0)

在您的家庭/语言行动中,您需要设置当前的文化。

您可以查看此链接 “To set the culture and UI culture for an ASP.NET Web page programmatically

答案 1 :(得分:0)

看看this blogpost。您不需要控制器中的语言部分,您可以使用resx文件来翻译网址。