1. 程式人生 > >各瀏覽器對 navigator 物件中幾個與語言相關的屬性的返回值存在差異

各瀏覽器對 navigator 物件中幾個與語言相關的屬性的返回值存在差異

轉載自:http://www.w3help.org/zh-cn/causes/BX2040

標準參考

問題描述

各瀏覽器對 navigator 物件中幾個與語言相關的屬性(language、userLanguage、browserLanguage、 systemLanguage)的返回值存在很大的差異。

造成的影響

由於不同瀏覽器對這幾個屬性的返回值有很大差異,同時返回的有效值的大小寫也有差異。若在獲取當前瀏覽器語言的時候沒有考慮到這些差異則可能造成相容性問題。

受影響的瀏覽器

所有瀏覽器

問題分析

首先檢視一下 navigator 物件中的這幾個與 language 相關的屬性。

navigator 物件包含有關瀏覽器的資訊。沒有應用於 navigator 物件的公開標準,不過所有瀏覽器都支援該物件。但是其內部一些屬性及其返回值在各瀏覽器並不統一。

  • language:返回當前的瀏覽器語言(來自 Mozilla Developer Center)
  • userLanguage:返回作業系統設定的自然語言(來自 MSDN)
  • browserLanguage:返回當前的瀏覽器語言(來自 MSDN)
  • systemLanguage:返回當前作業系統的預設語言(來自 MSDN)

對於瀏覽器,Mozilla Developer Center 中的 language 屬性與 MSDN 中的 browserLanguage 屬性描述很像。

分析以下程式碼:

<script>
document.write('navigator.language:'+navigator.language);
document.write('<br>navigator.userLanguage:'+navigator.userLanguage);
document.write('<br>navigator.browserLanguage:'+navigator.browserLanguage);
document.write('<br>navigator.systemLanguage:'+navigator.systemLanguage);
</script>

程式碼中打印出了各瀏覽器對於這 4 個屬性返回值的情況:

IE6 IE7 IE8 Firefox Chrome Safari Opera
navigator.language undefined zh-CN zh-CN
navigator.userLanguage zh-cn undefined zh-cn
navigator.browserLanguage zh-cn undefined zh-cn
navigator.systemLanguage zh-cn undefined undefined

解決方案

可以使用下面的程式碼獲取當前瀏覽器語言:

(navigator.language || navigator.browserLanguage).toLowerCase()