2009-02-08 44 views
8

我正在開發一個多語言網站,並想知道什麼是存儲用戶選擇的語言的最佳方式?在URL或會話或其他存儲語言

要麼通過查詢字符串,要麼應該在會話..或任何其他選項?

回答

2

我認爲這很大程度上取決於您的應用程序如何處理(處理)用戶語言。如果您的用戶必須登錄到您的網站,那麼您可能有一個帳戶設置頁面,其中包含適當的用戶配置文件對象或類似的背後。在這種情況下,我猜你會將這些設置保存在數據庫中,並且當用戶返回到您的站點時,您會以某種方式獲取用戶信息(即來自cookie),則會從數據庫加載用戶配置文件對象。這些信息會保存在一個會話中,因爲我認爲這種情況最適合。 如果你的用戶不必登錄,所以你基本上不能直接識別它們,我會將語言設置存儲在一個cookie中。這給了你的用戶一個價值,即當他稍後回來時(假定他沒有刪除cookie並且cookie的生命週期足夠長),他總是會以他的首選語言找到該網站。 作爲第三種可能性,您可以根據其默認瀏覽器設置來識別用戶語言(就像上面提到的「正則表達式」一樣)。

正如我所說,這實際上取決於您的應用程序的需求。你必須記住的是,

  • 存儲在會話中的對象保存在服務器端,使用服務器內存。所以如果你不需要它們,不要在內存中留下無用的東西。但會話對象適合存儲與用戶訪問和配置有關的數據。
  • 存儲在Cookie中的數據或Viewstate對象在客戶端瀏覽器和Web服務器之間來回發送。所以這會導致額外的流量並可能降低性能。

再見

如果您認爲此方案,其中一個用戶瀏覽一系列頁面中的「恩」和語言信息存儲在cookie的會話和頁面已經被緩存
1

Profile properties是專門爲了讓您存儲用戶特定的偏好而創建的。這將是存儲這種數據的好地方。

0

有一個屬性在瀏覽器發出可以使用的請求時傳遞。該酒店在後面的代碼中引用通過引用:

Request.UserLanguages // returns an array 

或者,你可以提示用戶指定喜歡的語言,並將其保存在cookie中。

在你Page.Load處理程序把類似如下:

string prefLan;  
if(Request.Cookies["preferedLanguage"] != null) 
     prefLan = Server.HtmlEncode(Request.Cookies["preferedLanguage"].Value); 
0

查詢字符串是不是這個合適的地方,除非是從最初的查詢字符串讀取並存儲在別處。

將其存儲在cookie中,或者如果cookie被關閉,則將其存儲在會話或視圖狀態中。

凱文的回答「個人資料屬性」是一個簡單的方法,讓一個已建立的圖書館爲您盡力而爲,盡最大努力。

2

(HTTP,瀏覽器,應用程序) ..

當用戶將語言切換到「cy」時,當前頁面會發生變化,但是當用戶跳回到他們以前訪問過的頁面時(頁眉緩存過期未到期)會在「en」中加載頁面,因爲查詢字符串沒有聲明語言 - 因爲它以該語言提供內容。

不太可能用戶想要頻繁更換語言 - 但作爲開發人員,應該處理它的場景。

任何想法請隨時留言。

7

在其他答案中沒有提及的另一個考慮因素是搜索引擎友善程度。如果您爲每種語言使用不同的網址,例如

http://{en|cy}.example.com/subdir/ or http://example.com/ {en|cy}/subdir)
,那麼搜索引擎可以使用多種語言爲您的網站編制索引。

+0

其實我認爲這將是「使用這種方法的原因」。它還有一個好處,就是當用戶爲網站書籤時,他會得到正確的語言,而不依賴於過期的數據(cookies/sessions/cache/etc ...) – Cohen 2012-10-05 08:51:00

相關問題