我有一个多语言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" });
这会产生网址
在我网站的页脚中,有一个语言开关,其工作方式如下:
<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路由?
答案 0 :(得分:0)
在您的家庭/语言行动中,您需要设置当前的文化。
您可以查看此链接 “To set the culture and UI culture for an ASP.NET Web page programmatically”
答案 1 :(得分:0)
看看this blogpost。您不需要控制器中的语言部分,您可以使用resx文件来翻译网址。