81 # 多语言

简介: 81 # 多语言

多语言实现方案

1、一个完整多个路径来实现多语言

2、前端来实现多语言(先配置好两种语言,动态切换内容),比如 i18nvue-i18n

3、服务端的 header 来实现切换多语言 accept-language: zh-CN,zh;q=0.9

const fs = require("fs");
const path = require("path");
const url = require("url");
const http = require("http");
const querystring = require("querystring");
const messages = {
    en: {
        message: {
            hello: "hello world"
        }
    },
    "zh-CN": {
        message: {
            hello: "你好世界"
        }
    }
};
http.createServer((req, res) => {
    const { pathname } = url.parse(req.url, true);
    const absPath = path.join(__dirname, pathname);
    fs.stat(absPath, (err, statObj) => {
        if (err) return res.end("Not Found");
        console.log("absPath----->", absPath);
        let lans = req.headers["accept-language"];
        console.log("lans----->", lans); //  zh-CN,zh;q=0.9
        if (lans) {
            let r = querystring.parse(lans, ",", ";");
            // 根据权重进行排序
            console.log("r----->", r); // { 'zh-CN': '', zh: 'q=0.9' }
            let arr = [];
            Object.keys(r).forEach((key) => {
                if (r[key] == "") {
                    arr.push({
                        name: key,
                        q: 1
                    });
                } else {
                    arr.push({
                        name: key,
                        q: r[key].split("=")[1]
                    });
                }
            });
            arr.sort((a, b) => b.q - a.q);
            console.log("arr----->", arr); // [ { name: 'zh-CN', q: 1 }, { name: 'zh', q: '0.9' } ]
            let msgObj = Object.create(null);
            for (let i = 0; i < arr.length; i++) {
                msgObj = messages[arr[i].name];
                if (msgObj) {
                    res.end(msgObj.message.hello);
                    break;
                }
            }
            if (!msgObj) {
                res.end(messages.en.message.hello);
            }
        } else {
            res.end(messages.en.message.hello);
        }
    });
}).listen(3000);

启动服务

nodemon language.js
curl -v --header "Accept-Language: zh-CN;q=0.9,en;q=0.8" http://localhost:3000/

curl -v --header "Accept-Language: zh-CN;q=0.9,en" http://localhost:3000/

目录
相关文章
|
存储 Java 开发工具
【Git】Git报错:This repositorysize xxMB, exceeds 1024.00 MB.
Git报错:This repositorysize xxMB, exceeds 1024.00 MB. 错误原因:这个版本库(包括wiki)大小为xxxx MB,超过了1024.00 MB。 如何解决呢?
758 0
|
8月前
|
人工智能 自然语言处理 Java
IDEA中使用DeepSeek满血版的手把手教程来了!
本文主要介绍阿里云推出的AI编码助手——通义灵码在代码编写、智能问答、bug修复等方面的功能。
IDEA中使用DeepSeek满血版的手把手教程来了!
|
人工智能 自然语言处理 开发者
通义灵码助力开学第一课!百万开发者首选的 AI 编码工具通义灵码是如何炼成的?
我们非常高兴的宣布,通义灵码插件下载量突破400万啦!
2036 4
通义灵码助力开学第一课!百万开发者首选的 AI 编码工具通义灵码是如何炼成的?
|
Linux 开发工具
【Linux】vim中批量化注释
【Linux】vim中批量化注释
174 0
【Linux】vim中批量化注释
|
12月前
|
存储 开发工具 数据安全/隐私保护
git报错The project you were looking for could not be found 解决方式
git报错The project you were looking for could not be found 解决方式
2980 1
|
开发框架 自然语言处理 Java
如何在Spring Boot中实现动态多语言支持
如何在Spring Boot中实现动态多语言支持
1388 3
|
存储 JavaScript 前端开发
vue使用navigator.mediaDevices.getUserMedia调用相机功能
vue使用navigator.mediaDevices.getUserMedia调用相机功能
2402 0
|
Web App开发 编解码 前端开发
盘点10个基于 Canvas 的优秀开源项目!
盘点10个基于 Canvas 的优秀开源项目!
1438 0