js判斷當前系統語言、瀏覽器語言


  當涉及到多語言國際化的項目時,首次加載頁面時則需根據用戶當前的系統語言或瀏覽器語言 進行相應的展示。
 一、navigator對象

  Navigator 對象包含有關瀏覽器的信息。根據MDN Navigator的介紹,Navigator參數可兼容各大瀏覽器。

  其中,navigator.language和navigator.languages 兩個屬性中 包含了瀏覽器的相關語言信息:

  

 

 

 我們一般采用language屬性,如果是“zh-CN”,則代表當前的瀏覽器是中文的環境。

 :navigator.language僅可代表瀏覽器語言,並不能代表當前系統語言.。

  有時會存在這種情況,在windows中的chrome或者Firefox瀏覽器在系統語言為英文的環境中,navigator.language仍舊是“zh-CN”,即通過js只能夠獲取瀏覽器的屬性系統,而獲取不到系統的語言類型。
驗證:1、在chrome瀏覽器中設置語言環境,選擇 使用英語顯示界面,此時 英語自動被移動置為第一位語言 ,這時查看屬性發現navigator.language獲取到了第一個語言含有“en”字段的了。
  原因:

  

  綜上可知:navigator.language 代表的不是瀏覽器的語言,而是用戶更偏好的語言。

二、如何獲取系統語言呢?

  國際化項目中一般都有一個 用戶可以自行切換語言的按鈕,當 用戶的chrome語言設置為中文,而在使用的項目中 選擇把頁面切換為英語界面時,此時 如果想獲取 語言 就需要 同時判斷 瀏覽器語言和當前操作語言了。
  

 

 

   這時 一般會把項目當前語言存入 本地緩存或cookie中,下述代碼為 如何從cookie中獲取語言:

//獲取cookie中的默認語言
export const getCookieLang = function() {
  let strcookie = document.cookie; //獲取cookie字符串
  let arrcookie = strcookie.split(";"); //分割
  let cookieLang = "";
  for (let i = 0; i < arrcookie.length; i++) {
    let arr = arrcookie[i].split("=");
    //當cookie語言相關的鍵名為:org.springframework.web.servlet.i18n.CookieLocaleResolver.LOCALE
    if (
      arr &&
      arr[0].trim() ==
        "org.springframework.web.servlet.i18n.CookieLocaleResolver.LOCALE"
    ) {
      cookieLang = arr[1];
      break;
    }
  }
  return cookieLang;
};

獲取瀏覽器語言:

// 獲取瀏覽器默認語言
export const getBrowserLang = function() {
  let browserLang = navigator.language
    ? navigator.language
    : navigator.browserLanguage;
  let defaultBrowserLang = "";
  if (
    browserLang.toLowerCase() === "us" ||
    browserLang.toLowerCase() === "en" ||
    browserLang.toLowerCase() === "en_us"
  ) {
    defaultBrowserLang = "en_US";
  } else {
    defaultBrowserLang = "zh_CN";
  }
  return defaultBrowserLang;
};

此時,當前系統語言 通過 cookie存儲的語言和瀏覽器語言同時判斷:

// 獲取當前系統語言(首先從cookie里獲取,默認為瀏覽器當前的語言)
let cookieLang = getCookieLang();
cookieLang = cookieLang === "en" || cookieLang === "us" ? "en_US" : cookieLang;
const lang = cookieLang || getBrowserLang();
console.log(lang)        //這里的lang代表當前項目使用的語言

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM