i18n - 本地化 Node.js 应用

i18n - 本地化 Node.js 应用

虽然觉得是自己经验不足导致的这个模块使用起来有点折腾,不过,还是记录下…

以 express.js 应用为例,在 package.json 中添加 dependencies:

"i18n": "*"

app.js 中:

var express = require('express'),
    i18n = require('i18n');

i18n.configure({ locales:[‘en-US’, ‘zh-CN’, ‘zh-TW’], // setup some locales - other locales default to en_US silently defaultLocale: ‘zh-CN’, directory: ‘./i18n’, // i18n 翻译文件目录,我的是 i18n, 可以写成其他的。 updateFiles: false, indent: “\t”, extension: ‘.js’ // 由于 JSON 不允许注释,所以用 js 会方便一点,也可以写成其他的,不过文件格式是 JSON });

app.configure(function() {

[...]

// default: using 'accept-language' header to guess language settings
app.use(i18n.init);

[...]

});

路由控制:

app.get('/', function(req, res){
    var greeting = res.__('Hello');
});

EJS 模板:

<%= __('Hello') %>

i18n.configure 部分的 locales 里是可用语言列表,i18n 会在对应的 directory 下寻找以该语言命名的 json 文件(如果 extension 设置为其他的那么就会寻找对应后缀名的文件)。

例如 defaultLocale 设置为 zh-CN,i18n目录下的 zh-CN.js 文件内容为:

{
    "Hello": "Hello, world!"
}

那么上文中的 res.__('Hello')<%= __('Hello') %> 将返回 Hello, world!

简单吧?更详细的文档在 npmjs 上可以找到。

另外还有一个模块是 Mozilla 的,叫做 i18n-abide。一开始我也试了这个不过估计我能力还不够… gettext() 总是报错未定义 QAQ


3 回复

i18n - 本地化 Node.js 应用

在开发多语言支持的应用程序时,国际化(i18n)是一个非常重要的功能。本文将介绍如何在 Node.js 应用中实现本地化,特别是使用 i18n 模块来处理不同语言的文本。

安装 i18n 模块

首先,你需要在你的项目中安装 i18n 模块。你可以在项目的 package.json 文件中添加依赖项:

{
  "name": "your-app-name",
  "version": "1.0.0",
  "dependencies": {
    "i18n": "^0.8.3"
  }
}

然后运行 npm install 来安装它。

配置 i18n

接下来,我们需要配置 i18n 模块。假设你使用的是 Express.js 框架,你可以在 app.js 文件中进行如下配置:

var express = require('express'),
    i18n = require('i18n');

// 配置 i18n
i18n.configure({
    locales: ['en-US', 'zh-CN', 'zh-TW'],  // 支持的语言列表
    defaultLocale: 'zh-CN',               // 默认语言
    directory: './i18n',                  // 存储翻译文件的目录
    updateFiles: false,                   // 是否更新翻译文件,默认为false
    indent: "\t",                         // 缩进格式
    extension: '.js'                      // 翻译文件的扩展名
});

var app = express();

// 使用 i18n 中间件
app.use(i18n.init);

// 路由定义
app.get('/', function(req, res) {
    var greeting = res.__('Hello');  // 获取翻译后的文本
    res.send(greeting);
});

// 启动应用
app.listen(3000, () => {
    console.log('App is running on port 3000');
});

创建翻译文件

在上述配置中,我们指定了翻译文件存储在 ./i18n 目录下。假设我们的默认语言是 zh-CN,那么在 i18n/zh-CN.js 文件中应该包含以下内容:

module.exports = {
    "Hello": "你好,世界!"
};

同样地,对于其他语言,你可以创建相应的文件,如 i18n/en-US.js

module.exports = {
    "Hello": "Hello, world!"
};

在模板中使用翻译

如果你使用 EJS 作为模板引擎,可以在模板中这样使用翻译函数:

<%= __('Hello') %>

这将在渲染模板时输出翻译后的文本。

总结

通过以上步骤,你就可以轻松地在 Node.js 应用中实现基本的本地化功能。更多高级功能和详细文档可以参考 i18n 模块的官方文档。希望这些示例能帮助你快速入门并实现多语言支持。


如果要通过 accept-language 来判定使用的语言,那么就不用写 defaultLocale 了。

我这里是我写的 app 在配置文件里有默认语言的选项,我就给写上去了。

本地化 Node.js 应用可以通过 i18n 模块来实现。以下是一个简单的示例,展示了如何配置和使用 i18n 模块来实现多语言支持。

首先,在你的 package.json 中添加 i18n 依赖:

"dependencies": {
  "i18n": "^0.15.0"
}

然后,在你的 app.js 中进行配置:

const express = require('express');
const i18n = require('i18n');

// 配置 i18n
i18n.configure({
    locales: ['en-US', 'zh-CN', 'zh-TW'],
    defaultLocale: 'zh-CN',
    directory: './i18n',
    updateFiles: false,
    indent: "\t",
    extension: '.js'
});

const app = express();

// 使用 i18n 初始化中间件
app.use(i18n.init);

// 路由控制
app.get('/', (req, res) => {
    const greeting = req.__('Hello'); // 获取当前语言环境下的翻译
    res.send(greeting);
});

// 启动服务器
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

接下来,创建一个 i18n 目录,并在其中创建不同语言的 JSON 文件。例如,zh-CN.js 文件内容如下:

module.exports = {
    "Hello": "你好,世界!"
};

同样地,en-US.js 文件内容如下:

module.exports = {
    "Hello": "Hello, world!"
};

这样,当用户访问根路径时,应用将根据用户的浏览器语言设置自动选择合适的语言版本并返回相应的翻译文本。

如果你使用 EJS 作为模板引擎,可以在模板中直接使用 __ 函数来获取翻译文本:

<%= __('Hello') %>

这样就可以在页面中显示相应的翻译文本了。

回到顶部