JavaScript (Node.js) 中的国际化 (i18n):i18next 库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

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 等。



嵌套键和命名空间

推荐