gpt4 book ai didi

c# - 如何在 MVC 应用程序中处理多种语言?

转载 作者:行者123 更新时间:2023-11-30 16:03:19 27 4
gpt4 key购买 nike

我已经设置了我的应用程序,以便根据路由器识别的模式从不同的 RESX 文件中读取内容。根据 URL 的第一部分,每个页面都可以使用特定语言访问。

routes.MapRoute(
name: "Localization",
url: "{lang}/{controller}/{action}/{id}", ...
);

当我在没有规范的情况下进行测试时,我得到了我的 Lingo.REXS 的英文版本,当我输入 se 时,我得到了瑞典语版本,即 Lingo.se.RESX .到目前为止一切都很好。

但是,我不确定如何让用户控制语言的设置。我不希望它是自动的,也不希望它基于浏览器的设置、地理数据等假设。我基本上想要三个标志(img 控件)以某种方式神奇地设置该用户(或至少该浏览器) session) 是可路由的,前缀与所点击的标志的语言相对应。

所以,我们有/se/Home/About 和/ge/Home/About。用户点击德国国旗 - 我们如何将他们路由到后者?如果他们点击瑞典国旗 - 我们如何将他们路由到前者?

我已经用 this blog 验证过但它并没有解决如何根据点击的标志图像路由到某种语言的实际问题。我还找到了 this blog但我根本不明白他们是怎么做到的。我看到一堆对数据库的调用,所以我怀疑它不是基于 RESX 文件(我的理解是这是正确的方法),尽管也有一些对 @TestResource 的引用。

现在我很困惑和不确定。有什么建议或说明吗?

最佳答案

MVC 有一个有点不直观的特性,使这变得非常容易。 MVC automatically reuses any route values从请求。因此,您所有的 URL 都会自动“继承”文化 - 无需在 ActionLink 中明确指定。

唯一的异常(exception)是在语言选择期间。但是您可以利用这种相同的路由行为在您的 _Layout.cshtml 中构建一个通用的页眉或页脚。当前页面具有的任何路由值都将被继承 - 您需要做的就是指定 Controller 、操作和区域性。

@{ 
var routeValues = this.ViewContext.RouteData.Values;
var controller = routeValues["controller"] as string;
var action = routeValues["action"] as string;
}
<ul>
<li>@Html.ActionLink("Swedish", @action, @controller, new { lang = "se" }, new { rel = "alternate", hreflang = "se" })</li>
<li>@Html.ActionLink("English", @action, @controller, new { lang = "en" }, new { rel = "alternate", hreflang = "en" })</li>
</ul>

如前所述,页面上的所有其他链接将自动从当前上下文传递一种文化,因此它们将自动保持在同一文化中。在这些情况下,没有理由明确传递文化。

@ActionLink("About", "About", "Home")

对于上述链接,如果当前 URL 是 /Home/Contact,则生成的链接将是 /Home/About。如果当前 URL 是 /en/Home/Contact,则链接将生成为 /en/Home/About

引用:ASP.NET MVC 5 culture in route and url

关于c# - 如何在 MVC 应用程序中处理多种语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36523572/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com