我正在开发一个多语言网站,想知道存储用户选择的语言的最佳方式是什么?
通过 QueryString 还是应该在 Session.. 或任何其他选项中?
我正在开发一个多语言网站,想知道存储用户选择的语言的最佳方式是什么?
通过 QueryString 还是应该在 Session.. 或任何其他选项中?
其他任何答案中未提及的另一个考虑因素是搜索引擎友好性。如果您为每种语言使用不同的网址,例如
http://{en|cy}.example.com/subdir/ 或http://example.com/ {en|cy}/subdir)然后搜索引擎可以用多种语言为您的网站编制索引。
我认为这在很大程度上取决于您的应用程序如何处理(希望处理)用户语言。如果您的用户必须登录到您的站点,那么您可能在某个地方有一个帐户设置页面,其中包含适当的用户配置文件对象或类似的东西。在这种情况下,我猜您会将这些设置保存在数据库中,当用户返回您的站点时,您会以某种方式(即从 cookie)获取用户信息,然后从数据库中加载您的用户配置文件对象。这些信息将保存在一个会话中,因为我认为这最适合这种情况。如果您的用户不必登录,因此您基本上无法直接识别他们,我会将语言设置存储在 cookie 中。这为您的用户提供了这样的价值,即当他稍后回来时,他将始终以他的首选语言找到该网站(假设他没有 t 删除 cookie 并且 cookie 的生命周期足够长)。作为第三种可能性,您可以根据用户的默认浏览器设置来识别用户语言(就像上面提到的“正则表达式”)。
正如我所说,这实际上取决于您的应用程序的需求。你必须记住的是
再见
如果您考虑这种情况,其中用户浏览了“en”中的一系列页面并且语言信息存储在 cookie 会话中并且页面已被缓存(http、浏览器、应用程序)..
当用户将语言切换到“cy”时,当前页面会发生变化,但是当用户跳回到他们之前访问过的页面时(标题缓存已过期但尚未过期),它会加载“en”中的页面,因为查询字符串没有说明语言 - 因为它以该语言提供内容。
用户不太可能想要如此频繁地更改语言 - 但作为开发人员,这是一个应该处理的场景。
任何想法请随时大喊。
配置文件属性是专门创建的,允许您存储特定于用户的首选项。这将是存储此类数据的好地方。
当浏览器发出您可以使用的请求时,会传递一个属性。此属性在您的代码中通过引用来引用:
Request.UserLanguages // returns an array
或者,您可以提示用户指定首选语言,并将其保存在 cookie 中。
在您的 Page.Load 处理程序中放置如下内容:
string prefLan;
if(Request.Cookies["preferedLanguage"] != null)
prefLan = Server.HtmlEncode(Request.Cookies["preferedLanguage"].Value);
Querystring 不适合这样做,除非它最初是从查询字符串中读取并存储在其他地方的。
将其存储在 cookie 中,或者如果 cookie 已关闭,则将其存储在 session 或 viewstate 中。
Kevin 的回答“配置文件属性”是一种简单的方法,可以让已建立的库以最少的努力为您完成繁重的工作。