NodeJS 实现多语言

node-translation:多语言翻译库 @ aminnairi /翻译 多语言翻译库。 用法 一般的 "use strict" ; const translate = Translation . create ( { language : navigator . language || "" , translations : { "Hello {person}, did you finish the {project} project?" : { "fr-FR" : "Salut {person}, est-ce que tu as fini le projet {project} ?" , "es-ES" : "Hola {person}, ¿has terminado el proyecto {project}?" } } } ) ; const person = "Joh 立即下载

在这里插入图片描述

什么是多语言?


阅读原文


我们平时访问一些文档类型的网站时,经常可以看到页面右上角有一个下拉框用来选择当前页面支持的语言,并在选中后将整个网页的内容切换为选中的语言,这就是项目中的多语言,多语言可以根据浏览器请求发送的语言类型在服务器进行设置,也可以在请求服务器时返回多种语言,并根据权重和浏览器的支持情况进行选择和渲染。


功能描述

在本文中我们通过客户端向服务器发送请求告诉服务器客户端所支持的语言及权重,服务器检索语言包并根据客户端发送的语言类型和权重返回对应语言的内容。

在这个过程中客户端向服务器发送请求需要使用请求头 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";

// 创建服务器
const 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); // 并按照权重逆序排序

        // 循环检测 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");
});

其实上面服务器和客户端配合实现多语言的思路就是客户端向服务器发送 Accept-Language 告诉服务器需要的语言和权重,服务器解析后根据权重从大到小排序,然后循环判断语言包中是否含有客户端需要的语言,如果有,则中断循环直接设置响应头和返回对应内容,如果不存在客户端的需要的语言或者客户端没有向后台发送 Accept-Language 则返回服务器默认设置的语言类型和内容。


验证多语言

为了方便我们使用 curl 模拟客户端向服务器发送请求查看返回内容是否正确,之所以使用 curl 是因为只发送验证的请求,方便设置 Accept-Language 请求头,更灵活的控制多语言的类型和权重。

启动服务器 server.js,打开命令行窗口,输入下面的命令执行,查看返回命令行响应体中的内容和设置的语言是否对应。

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


总结

这样我们就实现了一个简单的多语言,其实真正的多语言在服务器是需要做繁琐的解析和性能优化的(只解析界面有的单词返回,保证响应体中的内容最小),在前端可以通过 JavaScript 的库 il8n(国际化语言包)来实现。


NodeJS 实现多语言的示例代码 什么是多语言? 我们平时访问一些文档类型的网站时,经常可以看到页面右上角有一个下拉框用来选择当前页面支持的语言,并在选中后将整个网页的内容切换为选中的语言,这就是项目中的多语言,多语言可以根据浏览器请求发送的语言类型在服务器进行设置,也可以在请求服务器时返回多种语言,并根据权重和浏览器的支持情况进行选择和渲染。 功能描述 在本文中我们通过客户端向服务器发送请求告诉服务器客户端所支持的语言及权重,服务器检索语言包并根据客户端发送的语言类型和权重返回对应语言的内容。 在这个过程中客户端向服务器发送请求需要使用请求头 Accept-Language,值中设置语言类型和权重,语言与语言之间使用 , 立即下载

相关推荐

数据工程师——ETL

文章摘要 ETL(数据抽取、转换、加载)是数据处理的核心流程,负责将分散数据源整合为高质量数据。ETL与ELT的主要区别在于转换步骤顺序,分别适用于不同规模数据场景。数据仓库通过ETL从多个数据源集成数据,支持分析决策。维度建模中的事实表记录业务指标,维度表提供上下文信息。缓慢变化维度(SCD)处理随时间变化的维度数据,常见类型包括直接覆盖型、新增版本型等。数据清洗解决数据缺失、重复、错误等问题,确保数据质量。数据血缘记录数据流转路径,便于问题排查和影响分析。常用ETL工具如Kettle通过转换和作业实现数

weixin_45729710的博客 1559

基于NodeJS的HTTP server Plus 4:多语言(Accept-Language/Content-Language)

什么是多语言?我们平时访问一些文档类型的网站时,经常可以看到页面右上角有一个下拉框用来选择当前页面支持的语言,并在选中后将整个网页的内容切换为选中的语言,这就是项目中的多语言,多语言可以根据浏览器请求发送的语言类型在服务器进行设置,也可以在请求服务器时返回多种语言,并根据权重和浏览器的支持情况进行选择和渲染。功能描述在本文中我们通过客户端向服务器发送请求告诉服务器客户端所支持的语言及权重,服务器检...

weixin_33888907的博客 1028

Canoe Panel基础功能介绍

CANoe Panel 是 Vector CANoe 软件中用于设计图形化操作界面的功能模块。用户可以在面板上添加合适的控件,实时的改变信号或者变量的值

m0_56208280的博客 1950

HTTP头--Accept-Language

HTTP头–Accept-Language 简介 Accept-Language:表示浏览器所支持的语言。 当我们在开发国际化的网站时,后端接口的信息需要根据用户所使用的语言返回对应的内容。作为后端我需要前端在请求头的Accept-Language属性声明需要返回的语言。 格式 Accept-Language: lange-range[weight] 示例 Accept-Language: zh-...

勿在浮沙筑高台 2万+

YOLOv11改进策略【Head/分割头】| 结合CVPR-2024 中的DynamicConv 动态卷积 改进分割头, 优化模型(独家改进)

在大规模视觉预训练中,通常模型的性能受到数据、参数和FLOP三个关键因素的影响。一般来说,模型的参数数量越多,FLOP也越高,但在移动设备等对计算资源有限制的场景下,需要低FLOP的模型同时又希望模型能从大规模预训练中受益。传统的方法很难在增加参数的同时保持低FLOP,因此需要一种新的设计来解决这个问题,模块应运而生。

Limiiiing的博客 2310

在 SAP ABAP 里可靠地对接 FTP 服务器:从连接、命令到传输与排错的完整实战

本文详细介绍了在SAP ABAP中实现FTP文件交换的完整技术方案。文章首先解析了FTP协议的双连接特性(控制连接与数据连接),强调保持控制连接的重要性。随后详细说明了ABAP中FTP操作的四步标准流程:建立连接(包含HTTP_SCRAMBLE加密)、执行命令、断开连接和关闭RFC通道。文章提供了实战案例代码,演示如何将FTP文件复制到应用服务器再读取进内表处理,特别指出后台作业与前台操作的关键差异。最后总结了常见错误排查要点,包括连接模型、路径设置和资源释放等问题。全文通过SAP标准函数模块的调用顺序、典

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 308

HTTP协议分析

http请求由三部分组成,分别是:请求行、消息报头、请求正文 HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。 1、常用的HTTP方法有哪些? GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服...

AAAhxz的博客 493

Cesium 实战 04 - 标绘功能系列之画点(draw point)

Cesium 实战 - 标绘功能之画点(draw point)。

非科班Java出身GISer的博客 1084

nodejs html多语言切换,利用 nodejs 自动生成 Android 语言包实现应用内切换多语言的方案...

Android 默认的多语言支持在 Android 工程的 res 目录下,通过定义对应的语言文件夹名称就可以实现多语言支持// 手动切换语言Resources resources = getResources();Configuration config = resources.getConfiguration();DisplayMetrics dm = resources.getDisplay...

weixin_42556197的博客 467

Vue3 - Element Plus 组件库 Tabs 标签页右侧区域插入按钮,<el-tabs> / <el-tab-pane> 选项卡组件右侧自定义插槽内容教程(右边区域添加自定义按钮功能区)

vue3,elementplus,tabs选项卡如何在插槽按钮,tabs标签页组件怎么自定义右侧内容,vue3elementplustabs组件右侧插槽按钮,element-plus在el-tabs组件的最右侧添加按钮,如何在选项卡右边加入按钮搜索框等内容,哪个属性能在tab选项卡右侧插入自定义按钮,在el-tabs组件最右侧添加按钮,vue3el-tabs组件怎么自定义右侧插槽内容,Tabs标签页右侧自定义插槽,ElementPlusTab右边加按钮,el-tabs组件自定义右侧按钮,在E

🏆 前端领域优质创作者 7016

DeepCAD: 使用深度自监督学习技术在Python中进行钙成像去噪的全面指南

钙成像是一种用于观察神经活动的技术,通过检测细胞内钙离子的变化来推断神经元的活动。由于其高时空分辨率和对活体组织的适应性,钙成像已经成为神经科学研究中的重要工具。然而,钙成像数据往往伴随着各种噪声,这些噪声可能来自于设备、生物样本或环境。为了获得准确的神经活动信息,去噪是非常关键的。深度自监督学习是一种使用未标记数据进行训练的机器学习方法。与传统的监督学习不同,它不需要大量的标记数据,而是通过学习数据的内部结构和模式来提取有用的特征。DeepCAD是一个基于深度自监督学习的钙成像去噪工具。

qq_38334677的博客 757

HTTP头Accept-Language信息

Content-Language 是一个 entity header (实体消息首部),用来说明访问者希望采用的语言或语言组合,这样的话用户就可以根据自己偏好的语言来定制不同的内容。 举个例子,假如设置了这样一条消息首部( "Content-Language: de-DE" ),那么说明这份文件是为说德语的人提供的(当然这并不意味着文件本身就是用德语写的。比如,它可能是为说德语的人开设的英语教程...

h3110n3w0r1d 5万+

Python爬虫:抓取餐饮平台顾客评分与评价的完整教程

本文介绍了如何使用Python爬虫技术抓取餐饮平台上的餐厅评分和评论数据。我们通过三种主要的抓取方法:静态网页抓取(requests)、动态网页抓取(Selenium)和API抓取,展示了如何抓取餐饮平台的数据。还介绍了如何使用pandas对抓取的数据进行存储、清洗、分析,并进行可视化和情感分析。通过本文的学习,您应该能够掌握如何使用Python爬虫抓取餐饮平台的评论数据,并将这些数据应用于市场分析、顾客反馈和服务优化等领域。

2201_76125261的博客 1144

nodejs html多语言切换,NodeJS 实现多语言

什么是多语言?我们平时访问一些文档类型的网站时,经常可以看到页面右上角有一个下拉框用来选择当前页面支持的语言,并在选中后将整个网页的内容切换为选中的语言,这就是项目中的多语言,多语言可以根据浏览器请求发送的语言类型在服务器进行设置,也可以在请求服务器时返回多种语言,并根据权重和浏览器的支持情况进行选择和渲染。功能描述在本文中我们通过客户端向服务器发送请求告诉服务器客户端所支持的语言及权重,服务器检...

weixin_39926613的博客 419

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Thrift--实现NodeJS和Java间通信

Thrift–实现NodeJS和Java间通信 Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。 它采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中,如 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, S...

cceking的博客 3560

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Crawlab集成开发:多语言爬虫接入指南

Crawlab集成开发:多语言爬虫接入指南 【免费下载链接】crawlab Distributed web crawler admin platform for spiders management regardless of languages and frameworks. 分布式爬虫管理平台,支持任何语言和框架 ...

gitblog_00436的博客 1694

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

skill-sample-nodejs-fact多语言支持:如何为15种语言本地化Alexa技能

skill-sample-nodejs-fact是一个构建Alexa事实技能的开源项目,支持多达15种语言的本地化适配。通过该项目,开发者可以轻松创建能够理解和响应用户多语言指令的Alexa技能,覆盖全球主要语言市场。 ## 多语言支持概览:覆盖15种语言的本地化方案 该项目提供了全面的多语言支持,包含15种语言的本地化文件,覆盖了世界主要语言区域。这些语言文件位于项目的`models`目录下

gitblog_00383的博客 393

【亲测免费】 探索Google的Node.js翻译库:`nodejs-translate`

[![GitHub Star](https://img.shields.io/github/stars/googleapis/nodejs-translate?style=social)](https://github.com/googleapis/nodejs-translate) 在快速发展的全球数字化环境中,跨语言沟通变得至关重要。Google的`nodejs-translate`是一个强

gitblog_00077的博客 1793

nodejs c++ addon插件的应用场景

高精度计算,如浮点数 多线程并行计算 直接操作硬件 在Nodejs里调用已有的C++的包,而Nodejs自身没有对应的包或者效率不如C++,如视频格式转换。 在多语言开发的项目中,需要用开发可被多种语言共同使用的类库。Nodejs,Java,Python,Go都支持调用C++的类库。 ...

pengpengzhou的博客 585

Vdebug支持的7种编程语言:从Ruby到NodeJS的调试实战

Vdebug是一款强大的多语言DBGP调试客户端,专为Vim编辑器设计,支持PHP、Python、Perl、Ruby等多种编程语言,让开发者在Vim中即可享受专业的调试体验。无论是前端还是后端开发,Vdebug都能提供一致且高效的调试流程,帮助开发者快速定位并解决代码中的问题。 ## 🚀 核心功能概览 Vdebug作为Vim的调试插件,提供了丰富的调试功能,包括设置断点、单步执行、变量监视、

gitblog_01037的博客 920

【AI自动化】VSCode+Playwright+codegen+nodejs自动化脚本生成

Playwright 是由Microsoft开发的一个开源的跨浏览器自动化测试库,它支持Chromium、WebKit和Firefox浏览器,可用于测试现代Web应用。Playwright提供可靠的端到端测试能力,能够模拟用户与网页的真实交互。

BenZ_X的专栏 959

python PHP java nodejs加油站服务系统 小程序

首页推荐会按用户相似行为推荐,比如用户1购买商品A和商品B,用户2购买商品C,然后用户3登录购买商品A,那么此时用户3的行为跟用户1是最像的(因为他们都买了商品A),系统就会先推荐商品B,而不是推荐商品C。最短路线算法可以帮助确定最佳的配送路径。

QQ_188083800的博客 1046

Nodejs.dev学习平台构建:完整的内容组织与导航系统

Nodejs.dev学习平台是基于Gatsby.js、React.js、TypeScript和Remark构建的Node.js官方学习资源中心,提供了系统化的Node.js知识体系和直观的用户导航体验。本文将深入解析该平台的内容组织结构与导航系统实现,帮助开发者快速掌握平台使用方法并理解其设计理念。 ## 学习平台的内容架构设计 📚 Nodejs.dev学习平台采用层次化内容组织方式,将所有

gitblog_00073的博客 310

基于NodeJS+Vue+MySQL的在线编程笔试平台设计实现

在线编程笔试平台是集题库管理、考试创建、在线编辑与自动判题于一体的技术系统,其核心难点在于高并发下的异步判题处理与安全隔离。采用NodeJS的事件驱动与非阻塞IO模型,能够高效应对多用户同时提交代码的并发场景;Vue负责构建交互密集的答题界面,实现题目切换、倒计时与结果实时回传;MySQL则通过合理表结构存储题目、考试与提交记录,支撑成绩统计等关联查询。判题引擎通过子进程隔离、超时限制与资源约束保障执行安全,并借助任务队列控制并发规模,避免服务过载。该系统适用于校园招聘、企业内部技术测评及毕业设计等场景,从

weixin_29587015的博客 345
上一篇: NodeJS 服务器数据处理(表单、json 字符串和普通字符串)
下一篇: NodeJS 服务器实现 gzip 压缩
Panda Shen
博客等级 码龄10年 18粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值