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