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