2

所以我对 asp.net mvc 有点陌生,我正在构建一个多语言的网站,但我不想一直将 LanguageId 传递给每个特定于语言的对象的每个构造函数。在整个系统中将此 ID 存储在 asp.net mvc 中的最佳方法是什么?我相信对于用户来说,它被存储在一个 cookie 中,但这是正确的方法吗?

此外 languageId 来自数据库,所有语言特定标签也存储在数据库中而不是资源文件中

4

3 回答 3

4

老实说,我不得不不同意 Darin(在多线程多服务器环境中,这可能会造成问题)。

我会为此推荐一个 cookie,当用户在上次访问后再次进入您的网站时,它很容易被拾取。

于 2013-01-30T21:47:31.110 回答
0

如果您的登录是会话驱动的,您可以将您的登录存储language-id在会话对象中。每次用户登录时都可以填充此对象。如果会话丢失,登录也会丢失。

如果您使用 Cookie 登录,请将其存储language-id在 cookie 中。

或者,考虑将 LanguageID 作为路线的一部分。

routes.MapRoute(
    "New",
    "{lang}/{controller}/{action}/{id}",
    new { lang = "en", controller = "Home", action = "Index", id = UrlParameter.Optional },
    new { lang = "en|de|it|es|fr" }
);

用户登录后,立即重定向到包含语言作为路由一部分的路由。用于@Url.actionlink呈现您的链接。它们将始终包含语言 ID。

于 2013-01-31T01:04:20.557 回答
0

对于您的特定问题采取稍微不同的方法,并使用可通过HttpRequest.UserLanguages获得的浏览器语言怎么样?

那么就不需要传递任何东西,因为你可以在任何你可以得到Request对象的地方得到这个,例如在你的控制器中,它会是Request.UserLanguages

于 2013-01-31T02:01:37.787 回答