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/

目录
相关文章
|
3月前
|
自然语言处理 算法 测试技术
模型的多语言能力
【10月更文挑战第6天】模型的多语言能力
|
自然语言处理 JavaScript Python
中文语言大模型体验小记
中文语言大模型体验小记
225 0
|
机器学习/深度学习 自然语言处理 测试技术
中科院计算所推出多语言大模型「百聆」,我们已经上手聊起来了
中科院计算所推出多语言大模型「百聆」,我们已经上手聊起来了
678 0
|
编解码 人工智能 自然语言处理
开源AltDiffusion-m18 ,18种语言文图生成all in one
开源AltDiffusion-m18 ,18种语言文图生成all in one
164 0
|
移动开发 自然语言处理 小程序
前端不使用 i18n,如何优雅的实现多语言?
前端不使用 i18n,如何优雅的实现多语言?
前端不使用 i18n,如何优雅的实现多语言?
|
自然语言处理 架构师 开发者
多语言|学习笔记
快速学习多语言。
118 0
多语言|学习笔记
|
Rust 自然语言处理 算法
【算法】2103. 环和杆(多语言实现)
总计有 n 个环,环的颜色可以是红、绿、蓝中的一种。这些环分布穿在 10 根编号为 0 到 9 的杆上。 给你一个长度为 2n 的字符串 rings ,表示这 n 个环在杆上的分布。rings 中每两个字符形成一个 颜色位置对 ,用于描述每个环: 第 i 对中的 第一个 字符表示第 i 个环的 颜色('R'、'G'、'B')。 第 i 对中的 第二个 字符表示第 i 个环的 位置,也就是位于哪根杆上('0' 到 '9')。 例如,"R3G2B1" 表示:共有 n == 3 个环,红色的环在编号为 3 的杆上,绿色的环在编号为 2 的杆上,蓝色的环在编号为 1 的杆上。
【算法】2103. 环和杆(多语言实现)
|
自然语言处理 开发者
多语言| 学习笔记
快速学习多语言。
|
自然语言处理
QtApplets-国际化多语言设置
QtApplets-国际化多语言设置
160 0
QtApplets-国际化多语言设置
|
机器学习/深度学习 自然语言处理 Linux
0语料下,如何通过「贴标签」获得更好的多语言翻译效果
作者:吴礼蔚、程善伯 来自火山翻译团队的研究者通过研究发现,不同语言标签对多语言 Zero-shot 翻译的巨大影响,并在数据相差很大的三个不同的数据集上进行了实验,验证了不同语言标签对多语言 Zero-shot 翻译确实存在巨大影响,并且表明 T-ENC 在 Zero-shot 上优于其他语言标签。
179 0
0语料下,如何通过「贴标签」获得更好的多语言翻译效果