JavaScript (Node.js) 中的国际化 (i18n):i18next 库
国际化(缩写为 i18n,源自英文 "internationalization",其中 18 代表首字母 "i" 和尾字母 "n" 之间的字母数)是一个软件设计和开发过程,旨在使软件能够适应不同的语言和地区特性,而无需修改源代码。在现代 Node.js 网络开发中,创建多语言应用程序是进入全球市场的必要条件。
在 JavaScript(包括 Node.js)生态系统中,实现 i18n 最流行且最强大的库之一是 i18next。它提供了灵活的架构、对多种翻译文件格式的支持、插值、复数形式以及上下文翻译。在本文中,我们将详细介绍如何在服务器端安装、配置和使用 i18next。
安装与引入
要在 Node.js 项目中开始使用 i18next,请通过 npm 安装该库:
npm install i18next同时建议安装 i18next-fs-backend 包,用于从文件系统加载翻译文件:
npm install i18next-fs-backend安装后,创建一个初始化文件,例如 i18n.js:
const i18next = require('i18next');const Backend = require('i18next-fs-backend');
i18next.use(Backend).init({ lng: 'ru', // 默认语言 fallbackLng: 'en', // 备用语言 backend: { loadPath: './locales/{{lng}}/{{ns}}.json' // 翻译文件的路径 }, interpolation: { escapeValue: false // 不对 HTML 进行转义(适用于 Node.js) }});
module.exports = i18next;翻译文件结构
在项目根目录下创建 locales 文件夹。在其中为每种语言创建一个子文件夹(例如 en、ru、de)。在每个子文件夹中放置 JSON 格式的翻译文件。通常每种语言使用一个 translation.json 文件,但也可以为了模块化而将其拆分为多个命名空间(namespaces)。
文件 locales/ru/translation.json 示例:
{ "welcome": "欢迎来到我们的网站!", "greeting": "你好,{{name}}!", "items": "{{count}} 个元素", "items_plural": "{{count}} 个元素", "menu": { "home": "首页", "about": "关于我们", "contact": "联系方式" }}文件 locales/en/translation.json 示例:
{ "welcome": "Welcome to our website!", "greeting": "Hello, {{name}}!", "items": "{{count}} item", "items_plural": "{{count}} items", "menu": { "home": "Home", "about": "About", "contact": "Contact" }}i18next 的主要功能
简单翻译
使用 t() 函数(来自 "translate")获取翻译:
const i18next = require('./i18n');
// 异步初始化(在实际项目中请等待初始化完成)i18next.t('welcome'); // "欢迎来到我们的网站!"(如果 lng: 'ru')变量插值
使用双花括号将动态值插入字符串中:
i18next.t('greeting', { name: '阿列克谢' });// 结果:"你好,阿列克谢!"复数形式
库会根据语言规则自动选择正确的复数形式。为此,请添加带有 _plural 后缀的键:
i18next.t('items', { count: 1 }); // "1 个元素"i18next.t('items', { count: 5 }); // "5 个元素"对于英语,规则更简单(一个元素是 item,多个是 items)。对于俄语,i18next 使用内置的复数规则,这些规则考虑了数字 1、2-4、5-20 等。