2009-11-12 90 views
2

我有一個來自世界各地的許多人的網站。整個事情是UTF-8,所以人們可以自由地提交內容並以他們希望的任何語言發言 - 從希臘語到英語。基於瀏覽器和URL組合的自動檢測語言文件與PHP

現在,用戶無法控制的唯一內容是用於導航和註冊說明等內置網站語言。這些字符串在語言文件中,但很容易翻譯。

因此,現在我需要知道如何構建一個系統,該系統將嘗試自動檢測用戶首選語言,同時仍然允許更改該語言。

最簡單的方法做到這一點is to checkAccept-Language標題users browser sends。大多數瀏覽器將以用戶所需的語言進行安裝 - 即使這樣他們也可以在設置中更改語言。

The problem is網吧用戶可能想要更改這些設置,但無法或用戶可能無法勝任網絡甚至不瞭解他們。在另一個國家的某臺計算機上拍攝一位愚蠢的美國遊客。 (我可以笑他們,因爲我是一個)。

所以這些人需要更好的方式改變語言包裝他們不能重寫瀏覽器。爲了回答這個問題,我想我可以實現一個基於URL的系統,如site.com/en_us/...site.com/fr_ca/...

好吧,這裏是我將如何想象它的工作。

  • 新UserA即將到來。
  • 我的網站沒有發現任何區域設置cookie
  • 着眼於和解析接受語言頭
  • 檢查現有郎目錄(以確保我支持fr_ca!)
  • 套與語言Cookie作爲fr_ca
  • 重定向用戶site.com/fr_ca

  • 用戶A現在加載site.com/fr_ca

  • 我的網站發現區域的cookie
  • 區域設置cookie的URL區域設置相匹配
  • 用戶必須要這個區域
  • 繼續加載頁面

  • 用戶B獲取鏈接,從用戶A指向site.com/fr_ca

  • 用戶B加載頁面,我的網站沒有發現區域的cookie

這裏是我在哪裏丟失的下一步做什麼

  • 我的網站發現用戶B的瀏覽器說EN_US所以它重定向他們 或
  • 我的網站創建一個區域的cookie fr_ca,用戶將要訪問EN_US改變這種狀況。

這似乎是一個非常穩固的方式來處理語言檢測,所以我知道是否說註冊或註冊?

回答

2

我會去「我的網站發現UserB瀏覽器說en_us所以它重定向他們」,因爲這將是一個新的訪問者的行爲 - 如果你沒有任何語言切換器。

在另一方面,如果你提供地方語言切換的良好可見塊 - 然後我會使用「我的網站創建一個區域的cookie FR和用戶將要訪問EN更改「,因爲」錯誤的語言「可以很容易地切換。

總的來說,我建議實施可見的語言切換 - 如果一切都失敗了,這是最可靠的回退,您的法國訪客在希臘語中看到一個網站。

然後,這些角色可以被分配到語言協商的各個層面:

  1. (最低優先級)的cookie報告訪問者的喜好
  2. 時,有沒有餅乾,接受語言告訴使用的語言
  3. 當沒有接受語言(或者您不支持它)時,在URL中有語言說明符時使用默認語言
  4. (最高優先級) - 使用該語言,無論cookie/accept的值是什麼語言
0

請記住,阿拉伯語言從右到左書寫時幾乎沒有問題,因此您必須在大多數標籤中定義書寫方向。此外,我會使語言參數嚴格,而不是使用en_USen__GB使用en參數,因爲它們之間沒有太大的區別。

+0

這是一個簡單的CSS修復,可以通過語言環境啓用 - 所以我不認爲這是一個問題。 – Xeoncross 2009-11-12 20:23:04

1

這是我做的方式...

總是有網站,用戶可以切換語言上佔有一席之地。語言按鈕應該加載它們當前所在的頁面,並將Cookie設置爲該語言。

要測試加載的語言......

// cookie exists, they know what language they want 
if cookie exists load that language 

// cookie doesn't exist - its expired or this is their first visit 
elseif accept-language is set, load that language; set cookie 

// no accept-language present 
else load some default language; set cookie 

說在法國講英語的人來到你的網站。

  • 沒有cookie存在,但接受語言是法語。

  • 法文被加載,cookie被設置。

  • 用戶看到語言切換器並選擇英語。英語加載和Cookie設置爲他在網站上的剩餘時間。

如果在瀏覽器中不接受cookie,則在查詢字符串中傳遞lang = [lang]並在檢查cookie後檢查該cookie。

+0

良好的大綱,您的想法的好處是,我不必亂七八糟的URL的東西,所以如果用戶也想翻譯頁面內容 - 然後谷歌翻譯也可以工作,因爲只有一個網址集。 – Xeoncross 2009-11-12 20:25:34

+0

這不是「寧靜」,但我發現在網址中添加/ lang /會使事情複雜化很多。 – Galen 2009-11-12 20:31:48

+0

@galen關於在URL中放置語言沒有什麼不可靠的。事實上,建議同時擁有:一個是指「可協商資源」 - 與語言無關的抽象實體,另一個是指特定於語言的資源。 – 2014-08-01 12:19:36

1

我會讓語言指示符儘可能透明。這意味着我會像你建議的那樣將它放入網址中,而不是放在cookie中。如果有必要,用戶可以在URL中找到它。

現在,如果語言指示符丟失,您可以在Accept-Language或其他條件上進行語言協商,並將用戶重定向到請求資源的特定語言表示。

此外,您可以對每個請求進行語言協商,並將URL中請求的語言與已協商的語言進行比較。如果它們不同,則可以顯示一條消息,即首選語言的表示也可用。

+0

如果我使用'en.domain.com'格式而不是'domain.com/en',那麼怎麼辦?這可能有助於解決用戶心智上的差異,並且在使用MicroMVC和CodeIgniter等框架時也可以實現更清晰的URL。 – Xeoncross 2009-11-12 20:42:22

+0

等一下,要使用'en.domain.com'格式,服務器必須設置虛擬主機,這可能無法在共享主機上進行。所以從頭開始。 – Xeoncross 2009-11-12 20:43:58