2015-10-18 93 views
2

我一直試圖讓momentjs正確檢測瀏覽器語言並本地化時間顯示。 (按照Locale detection with Moment.js在Chrome中檢索瀏覽器語言

但我一直在使用chrome獲取正確的語言環境時遇到了一些問題。

看起來好像chrome在navigator.languages中爲我的瀏覽器配置了正確的語言列表,但navigator.language正在返回完全不同的內容。

enter image description here

我猜任我有鍍鉻設置錯誤(這似乎不太可能給出正確的語言都在navigator.languages)或選擇瀏覽器的語言是不完全正確的方法是什麼?

我應該用不同的方式獲得除window.navigator.userLanguage || window.navigator.language以外的語言嗎?

+0

zh-CN是適當的語言/語言環境,它代表英國英國。 – Wobbles

+0

語言完全獨立於「語言環境」。但不要告訴W3C。 – RobG

回答

4

W3C draft指出:

  • navigator.language是用戶的 「首選語言」 或"plausible language"。這不一定與navigator.languages[0]相同。
  • navigator.languages列出了「用戶的首選語言,首選語言最優先」。預計與Accept-Language標題具有相同的值。

通過的在虛擬機快速試驗的長相,navigator.languages[0]導致最準確的結果,navigator.language作爲OS的語言。

它看起來好像"en-GB"你得到是指語言的用戶的,而"en-NZ"是指用戶區域(數&日期/時間格式)。

由於這仍然是一份草稿,因此您得到的結果可能隨實施而變化。

+0

關於'它看起來好像你所獲得的'en-GB'是指用戶的語言',你知道這個價值是從哪裏來的嗎?我的瀏覽​​器或操作系統似乎都沒有設置到英國,他們都被設置爲新西蘭。這聽起來有點像我應該優先從語言中使用語言,儘管聽起來有點奇怪。此外,我的標題還聲明NZ'Accept-Language:en-NZ,en; q = 0.8' –

+0

「en」是一種語言,「GB」和「NZ」是區域。將兩者合爲一個單詞(語言,地區或語言環境)會造成很大的混淆。回到黑暗時代,這種設置被稱爲「語言」和「區域偏好」。 「locale」的使用是一個相對較近的誤稱:它指的是一個地方,通常是一個小區域,如村莊或地標小於5平方公里。 – RobG

+0

@LukeMcGregor因爲moment.js沒有en-NZ的任何日期格式,所以你可能必須自己添加它們(或者使用en-GB)。我的意思是使用「Accept-Header」的第一部分似乎最準確,而'navigator.language'不一定相同。 @RobG是的,嚴格來說,「en-US」不是一種語言,而是一種方言。因此,「顏色」(en-US)和「顏色」(en-GB)之間的區別。例如,C#將這稱爲「文化」,這是我找到的最好的描述。文化可能因語言/翻譯基礎(GB/US)和格式基礎(DD/MM/YYYY與MM/DD/YYYY)而異。 –