10

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

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

4

6 回答 6

7

其他任何答案中未提及的另一个考虑因素是搜索引擎友好性。如果您为每种语言使用不同的网址,例如

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

于 2009-12-29T11:52:15.563 回答
2

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

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

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

再见

于 2009-02-08T07:15:21.617 回答
2

如果您考虑这种情况,其中用户浏览了“en”中的一系列页面并且语言信息存储在 cookie 会话中并且页面已被缓存(http、浏览器、应用程序).​​.

当用户将语言切换到“cy”时,当前页面会发生变化,但是当用户跳回到他们之前访问过的页面时(标题缓存已过期但尚未过期),它会加载“en”中的页面,因为查询字符串没有说​​明语言 - 因为它以该语言提供内容。

用户不太可能想要如此频繁地更改语言 - 但作为开发人员,这是一个应该处理的场景。

任何想法请随时大喊。

于 2009-06-08T17:00:14.190 回答
1

配置文件属性是专门创建的,允许您存储特定于用户的首选项。这将是存储此类数据的好地方。

于 2009-02-08T05:08:42.137 回答
1

当浏览器发出您可以使用的请求时,会传递一个属性。此属性在您的代码中通过引用来引用:

Request.UserLanguages // returns an array

或者,您可以提示用户指定首选语言,并将其保存在 cookie 中。

在您的 Page.Load 处理程序中放置如下内容:

string prefLan;    
if(Request.Cookies["preferedLanguage"] != null)
        prefLan = Server.HtmlEncode(Request.Cookies["preferedLanguage"].Value);
于 2009-02-08T05:14:11.517 回答
0

Querystring 不适合这样做,除非它最初是从查询字符串中读取并存储在其他地方的。

将其存储在 cookie 中,或者如果 cookie 已关闭,则将其存储在 session 或 viewstate 中。

Kevin 的回答“配置文件属性”是一种简单的方法,可以让已建立的库以最少的努力为您完成繁重的工作。

于 2009-02-08T05:25:47.390 回答