回答
我認爲這很大程度上取決於您的應用程序如何處理(處理)用戶語言。如果您的用戶必須登錄到您的網站,那麼您可能有一個帳戶設置頁面,其中包含適當的用戶配置文件對象或類似的背後。在這種情況下,我猜你會將這些設置保存在數據庫中,並且當用戶返回到您的站點時,您會以某種方式獲取用戶信息(即來自cookie),則會從數據庫加載用戶配置文件對象。這些信息會保存在一個會話中,因爲我認爲這種情況最適合。 如果你的用戶不必登錄,所以你基本上不能直接識別它們,我會將語言設置存儲在一個cookie中。這給了你的用戶一個價值,即當他稍後回來時(假定他沒有刪除cookie並且cookie的生命週期足夠長),他總是會以他的首選語言找到該網站。 作爲第三種可能性,您可以根據其默認瀏覽器設置來識別用戶語言(就像上面提到的「正則表達式」一樣)。
正如我所說,這實際上取決於您的應用程序的需求。你必須記住的是,
- 存儲在會話中的對象保存在服務器端,使用服務器內存。所以如果你不需要它們,不要在內存中留下無用的東西。但會話對象適合存儲與用戶訪問和配置有關的數據。
- 存儲在Cookie中的數據或Viewstate對象在客戶端瀏覽器和Web服務器之間來回發送。所以這會導致額外的流量並可能降低性能。
再見
如果您認爲此方案,其中一個用戶瀏覽一系列頁面中的「恩」和語言信息存儲在cookie的會話和頁面已經被緩存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被關閉,則將其存儲在會話或視圖狀態中。
凱文的回答「個人資料屬性」是一個簡單的方法,讓一個已建立的圖書館爲您盡力而爲,盡最大努力。
(HTTP,瀏覽器,應用程序) ..
當用戶將語言切換到「cy」時,當前頁面會發生變化,但是當用戶跳回到他們以前訪問過的頁面時(頁眉緩存過期未到期)會在「en」中加載頁面,因爲查詢字符串沒有聲明語言 - 因爲它以該語言提供內容。
不太可能用戶想要頻繁更換語言 - 但作爲開發人員,應該處理它的場景。
任何想法請隨時留言。
在其他答案中沒有提及的另一個考慮因素是搜索引擎友善程度。如果您爲每種語言使用不同的網址,例如
http://{en|cy}.example.com/subdir/ or http://example.com/ {en|cy}/subdir),那麼搜索引擎可以使用多種語言爲您的網站編制索引。
- 1. 如何存儲JavaScript代碼或其他語言的代碼,並使用URL
- 2. 術語用法URI或URL或其他?
- 3. 緩存或存儲會話?
- 4. 在多語言網站上存儲選定語言的位置:會話/ cookie或url?
- 5. Memcache,Mongodb或其他數據庫存儲鋰會話
- 6. Enum,PList或其他存儲?
- 7. 使用Rails或其他語言
- 8. 在ASP.Net Cookie或會話狀態中存儲會話信息?
- 9. 將Cookie存儲到Cookie或會話中?
- 10. Tensorflow eval()無會話或將變量移動到其他會話
- 11. 緩存或會話?
- 12. Python langdetect:只在一種語言或其他語言之間進行選擇
- 13. Silverstripe會話或URL參數
- 14. 如何支持在Azure的Blob存儲其他的語言嗎?
- 15. 在SQL Server 2008中存儲其他語言並檢索返回
- 16. 操縱在MATLAB或任何其他語言的數學函數
- 17. 在RPG(或其他ILE語言)中進行自動化測試
- 18. 在PHP(或其他語言可能)中不操作位
- 19. Ruby或其他語言在Parrot上跑得更快嗎?
- 20. SQL注入指南在Java(或任何其他語言)
- 21. 你認識C或其他語言的在線編譯器嗎?
- 22. 閱讀PDF在C#或任何其他語言
- 23. 在ubuntu上用php或其他語言編輯文件
- 24. 如何在c#或其他語言中使用pop3或IMap協議?
- 25. 將類對象存儲到EEPROM或其他存儲器
- 26. 如何通過AppleScript或其他腳本語言獲取Dropbox共享鏈接URL?
- 27. C#(或任何其他語言)的複雜裝修新語言功能
- 28. atoi()其他語言
- 29. PHP Codeigniter多語言網站使用會話變量來存儲語言密鑰
- 30. 在TypeScript類中存儲「this」(或以其他方式保存)
其實我認爲這將是「使用這種方法的原因」。它還有一個好處,就是當用戶爲網站書籤時,他會得到正確的語言,而不依賴於過期的數據(cookies/sessions/cache/etc ...) – Cohen 2012-10-05 08:51:00