在现代的全球化社会中,跨语言应用的需求愈发普遍,而 express-i18n 是一个常用的国际化 (i18n) 中间件,它可以让开发者快速实现多语言支持的功能。本文将会详细讲解如何使用 express-i18n 进行国际化。
一、安装
使用 npm 安装 express-i18n:
npm install express-i18n --save
二、基础使用
首先,我们需要在 Express 应用中引入 express-i18n 模块:
const express = require('express'); const i18n = require('express-i18n'); const app = express();
接着,我们可以在 app 对象上使用 i18n.init() 方法来初始化国际化中间件:
app.use(i18n.init);
现在我们需要创建一个 messages 目录,用来存放不同语言版本的文本。
接着,在我们的 Express 中间件中使用 req 对象的 locale 方法来指定本次请求使用的语言:
app.use((req, res, next) => { req.setLocale('zh-CN'); next(); });
这里我们使用了 'zh-CN' 作为默认语言,此时使用中间件已经可以实现基本的国际化了,比如在控制器中返回字符时,使用 i18n.t() 方法对文本进行翻译:
app.get('/', (req, res) => { const message = req.t('hello'); res.send(message); });
在 messages 目录下创建一个 zh-CN.json 文件,将希望翻译的文本以键值对形式存放,比如:
{ "hello": "你好世界!" }
现在打开浏览器发送 GET 请求到我们的应用:
http://localhost:3000
我们将会得到翻译后的文本 “你好世界!”。
国际化实现的基本流程如上。接下来,我们将介绍一些其他常用的功能。
三、多语言支持
除了默认语言,我们通常会希望应用能够支持更多的语言,这项工作可以参考下方的示例代码:
-- -------------------- ---- ------- ------------------- -- --------- ---------------- -------- ------ -------- --- -- ------ ------------- ---- ----- -- - ----------------------- ------- --- ------------ ----- ---- -- - ----- ------- - --------------- ------------------ ---展开代码
在 i18n.configure() 方法中设置 locales 列表,并在 req.setLocale() 方法中指定默认语言即可。
四、使用变量
我们可能需要将一些变量插入到语言翻译的文本中,比如:
app.get('/hello/:name', (req, res) => { const message = req.t('hello_name', { name: req.params.name }); res.send(message); });
在 messages/zh-CN.json 中添加:
{ "hello_name": "你好,{{name}}!" }
{{name}} 即为传递进来的变量,最后将会得到形如 “你好,张三!” 的语句。
五、动态语言设置
我们也可以让用户动态选择语言,修改上述的示例代码如下:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---- - ------------------------ ----- --- - ---------- ------------------- ---------------- -------- ------ --------- -------------- -------- ---------- ----------------------- ---------- ------- --- ------------ ----- ---- -- - ----- ----------- - --------------- -- ------------- - --------------------------- - ----- ------- - --------------- ----- --------- - ------------------ ------------------- - -------- --------- --- ---展开代码
在请求中加入 lang 参数控制当前的语言,同时 i18n.getLocales() 方法可以获取所有支持的语言。
加入这些搭配后,我们就能让用户在切换至不同语言版本的页面时得到更好的浏览、使用体验。
六、总结
本文介绍了如何基于 npm 包 express-i18n 实现应用的国际化,并逐一介绍了一些常用的功能。希望读者在实际项目中能够充分利用 express-i18n 这个实用的国际化中间件。
七、示例代码
完整示例代码可在 GitHub 上查找:https://github.com/MaxLee1994/express-i18n-example。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/75119