在URL或会话或其他中存储语言

时间:2009-02-08 05:03:25

标签: c# asp.net internationalization multilingual

我正在开发一个多语言网站,并想知道存储用户所选语言的最佳方式是什么?

通过QueryString还是应该在Session ..还是其他任何选项?

6 个答案:

答案 0 :(得分:7)

在任何其他答案中未提及的另一个考虑因素是Search Engine Friendliness。如果您为每种语言使用不同的网址,例如

http://{en|cy}.example.com/subdir/ or http://example.com/{en|cy}/subdir) 
然后搜索引擎可以使用多种语言为您的网站编制索引。

答案 1 :(得分:2)

我认为这在很大程度上取决于您的应用程序如何处理(希望处理)用户语言。如果您的用户必须登录到您的网站,那么您可能在某处拥有一个帐户设置页面,其中包含相应的用户个人资料对象或类似的内容。在这种情况下,我猜你会在数据库中保存这些设置,当用户回到你的站点时,你会以某种方式(即从cookie)获取用户信息,从数据库加载用户配置文件对象。由于我认为在这种情况下最适合,所以这些信息将保存在一个会话中。 如果您的用户不必登录,那么您基本上无法直接识别它们,我会将语言设置存储在cookie中。这为您的用户提供了一个价值,当他稍后回来时,他将始终以他的首选语言找到该网站(假设他没有删除cookie并且cookie的生命周期足够长)。 作为第三种可能性,您可以根据其默认浏览器设置识别用户语言(就像上面提到的“正则表达式”一样)。

正如我所说,这实际上取决于您的应用程序的需求。你需要记住的是

  • 使用服务器内存将存储在会话中的对象保留在服务器端。因此,如果您不需要它们,请不要在内存中保留无用的东西。但是,会话对象适合存储与用户访问和配置相关的数据。
  • 存储在Cookie中的数据或Viewstate对象在客户端浏览器和Web服务器之间来回发送。因此,这会导致额外的流量,并可能会降低性能。

再见

答案 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,请将其存储在会话或视图状态中。

凯文的回答“个人资料属性”是一种简单的方法,让您已建立的图书馆为您轻松完成繁重的工作。