欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

NodeJS 實現多語言的示例代碼

 更新時間:2018年09月11日 11:25:07   作者:pandashen  
這篇文章主要介紹了NodeJS 實現多語言的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

什么是多語言?

我們平時訪問一些文檔類型的網站時,經??梢钥吹巾撁嬗疑辖怯幸粋€下拉框用來選擇當前頁面支持的語言,并在選中后將整個網頁的內容切換為選中的語言,這就是項目中的多語言,多語言可以根據瀏覽器請求發(fā)送的語言類型在服務器進行設置,也可以在請求服務器時返回多種語言,并根據權重和瀏覽器的支持情況進行選擇和渲染。

功能描述

在本文中我們通過客戶端向服務器發(fā)送請求告訴服務器客戶端所支持的語言及權重,服務器檢索語言包并根據客戶端發(fā)送的語言類型和權重返回對應語言的內容。

在這個過程中客戶端向服務器發(fā)送請求需要使用請求頭 Accept-Language,值中設置語言類型和權重,語言與語言之間使用 , 隔開,語言與權重之間使用 ; 隔開,權重用 q 表示,與值用 = 隔開,如果權重值為 1 則可省略(最大值),值的格式為 zh-CN, zh;q=0.7, en;q=0.8, fr;q=0.1。

服務器響應時,應通過響應頭告訴瀏覽器返回的內容為何種語言,響應頭為 Content-Language, 值的格式為 zh-CN, en,多個語言之間使用 , 隔開。

服務器的實現

文件:server.js

const http = require("http");
const querystring = require("querystring");

// 語言包
let languagesPackage = {
  "zh-CN": "你好",
  en: "Hello",
  fr: "Bonjour"
};

// 默認語言為英語
languagesPackage.defaultLanguage = "en";

// 創(chuàng)建服務器
let server = http.createServer((req, res) => {
  // 獲取請求頭中的語言和權重
  let languages = req.headers["accept-language"];

  // 如果客戶端設置了語言
  if (languages) {
    // 解析語言為 [{ name: 'zh-CN', q: 1 }, { name: 'en', q: '0.8' }] 格式
    let lans = languages
      .split(",")
      .map(lang => {
        let [name, q = 1] = Object.keys(
          querystring.parse(lang.tirm(), ";q=")
        );
        return { name, q };
      })
      .sort((a, b) => b.q - a.q); // 并按照權重逆序排序

    // 循環(huán)檢測 languagesPackage 是否存在客戶端的語言
    for (let i = 0; i < lans.length; i++) {
      let { name } = lans[i];
      let content = languagesPackage[name];

      // 如果存在直接設置響應頭并返回內容
      if (content) {
        res.setHeader("Content-Type", name);
        return res.end(content);
      }
    }
  }

  // 如果客戶端沒設置語言活語言找不到時返回服務器設置的默認語言
  res.setHeader("Content-Type", languagesPackage.defaultLanguage);
  res.end(languagesPackage[languagesPackage.defaultLanguage]);
});

server.listen(3000, () => {
  console.log("server start 3000");
});

其實上面服務器和客戶端配合實現多語言的思路就是客戶端向服務器發(fā)送 Accept-Language 告訴服務器需要的語言和權重,服務器解析后根據權重從大到小排序,然后循環(huán)判斷語言包中是否含有客戶端需要的語言,如果有,則中斷循環(huán)直接設置響應頭和返回對應內容,如果不存在客戶端的需要的語言或者客戶端沒有向后臺發(fā)送 Accept-Language 則返回服務器默認設置的語言類型和內容。

驗證多語言

為了方便我們使用 curl 模擬客戶端向服務器發(fā)送請求查看返回內容是否正確,之所以使用 curl 是因為只發(fā)送驗證的請求,方便設置 Accept-Language 請求頭,更靈活的控制多語言的類型和權重。

啟動服務器 server.js,打開命令行窗口,輸入下面的命令執(zhí)行,查看返回命令行響應體中的內容和設置的語言是否對應。

復制代碼 代碼如下:
curl -v --header “Accept-Language: zh-CN, zh;q=0.7, en;q=0.8, fr;q=0.1” http://localhost:3000

總結

這樣我們就實現了一個簡單的多語言,其實真正的多語言在服務器是需要做繁瑣的解析和性能優(yōu)化的(只解析界面有的單詞返回,保證響應體中的內容最?。?,在前端可以通過 JavaScript 的庫 il8n(國際化語言包)來實現。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Node.js、Socket.IO和GPT-4構建AI聊天機器人的項目實踐

    Node.js、Socket.IO和GPT-4構建AI聊天機器人的項目實踐

    本文主要介紹了Node.js、Socket.IO和GPT-4構建AI聊天機器人的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • 命令行批量截圖Node腳本示例代碼

    命令行批量截圖Node腳本示例代碼

    這篇文章主要給大家介紹了關于命令行批量截圖Node腳本的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-01-01
  • 新入門node.js必須要知道的概念(必看篇)

    新入門node.js必須要知道的概念(必看篇)

    下面小編就為大家?guī)硪黄氯腴Tnode.js必須要知道的概念(必看篇)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • NestJS系列核心概念之Module模塊示例詳解

    NestJS系列核心概念之Module模塊示例詳解

    這篇文章主要為大家介紹了NestJS系列核心概念之Module模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • 詳解用node.js實現簡單的反向代理

    詳解用node.js實現簡單的反向代理

    本篇文章主要介紹了詳解用node.js實現簡單的反向代理,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • node.js去水印方法實例分析

    node.js去水印方法實例分析

    這篇文章主要介紹了node.js去水印方法,結合實例形式分析了node.js基于第三方平臺實現去水印的相關交互與操作技巧,需要的朋友可以參考下
    2023-04-04
  • nodejs實現UDP組播示例方法

    nodejs實現UDP組播示例方法

    這篇文章主要介紹了nodejs實現UDP組播示例方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • 淺談node.js中間件有哪些類型

    淺談node.js中間件有哪些類型

    這篇文章主要介紹了node.js中間件有哪些類型,對中間件感興趣的同學,可以參考下
    2021-04-04
  • Node.JS獲取GET,POST數據之queryString模塊使用方法詳解

    Node.JS獲取GET,POST數據之queryString模塊使用方法詳解

    本文將詳細介紹nodeJS中的queryString模塊使用方法,包括Node.JS獲取GET,POST數據的方法,需要的朋友可以參考下
    2020-02-02
  • 純異步nodejs文件夾(目錄)復制功能

    純異步nodejs文件夾(目錄)復制功能

    這篇文章主要介紹了純異步nodejs文件夾(目錄)復制功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09

最新評論