首页
Preview

使用 express-intlayer(i18n) 国际化 Express 后端API

为什么需要为后端引入国际化?

为后端引入国际化可以帮助应用程序更有效地与全球用户群交流。通过提供用户偏好的语言内容,不仅可以改善用户体验,还能提高应用的可访问性。以下是一些具体的理由:

  1. 本地化错误信息:用用户的母语显示错误信息,减少困惑和压力。
  2. 多语言内容支持:为电商网站或内容管理系统提供多语言的内容获取。
  3. 本地化邮件和通知:通过用户偏好的语言发送事务性邮件、营销活动或推送通知,提高用户参与度。
  4. 优化用户沟通:通过本地语言发送 SMS、系统警报或界面更新,提升沟通效果。
  5. 全球化应用的必要性:尊重文化差异,让应用服务更广泛的用户群,便于国际化发展。

什么是 express-intlayer

express-intlayer 是一款专为 Express 应用设计的中间件,能够轻松实现后端的国际化,具有以下特点:

  • 易于设置:基于用户的语言环境(Locale)返回本地化响应。
  • 支持 TypeScript:利用静态类型管理翻译键,减少错误。
  • 灵活配置:支持通过 HTTP 头、Cookie 等方式自定义语言环境的检测方法。

使用步骤

第一步:安装依赖

通过包管理工具安装 express-intlayer 和其核心依赖 intlayer

npm install intlayer express-intlayer
pnpm add intlayer express-intlayer
yarn add intlayer express-intlayer

第二步:配置语言支持

在项目根目录下创建 intlayer.config.ts 文件,用于定义支持的语言和默认语言:

import { Locales, type IntlayerConfig } from "intlayer";

const config: IntlayerConfig = {
    internationalization: {
        locales: [
            Locales.ENGLISH,   // 英语
            Locales.CHINESE_SIMPLIFIED_CHINA, // 简体中文
        ],
        defaultLocale: Locales.ENGLISH, // 默认语言为英语
    },
    middleware: {
        headerName: "custom-locale-header",
        cookieName: "custom-locale-cookie",
    },
};

export default config;

以上示例支持英语、法语、墨西哥西班牙语和西班牙西班牙语,并将默认语言设置为英语。

第三步:集成到 Express 应用

在 Express 应用中引入并使用 express-intlayer 中间件:

import express, { type Express } from "express";
import { intlayer, t } from "express-intlayer";

const app: Express = express();

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

// 示例路由:返回本地化内容
app.get("/", (_req, res) => {
  res.send(
    t({
     en: "Hello, welcome to our application!",
     "zh-CN": "你好,欢迎使用我们的应用!",
    })
  );
});

// 示例路由:返回本地化错误信息
app.get("/error", (_req, res) => {
  res.status(500).send(
    t({
       en: "An error occurred. Please try again later.",
       "zh-CN": "发生了一个错误,请稍后再试。",
    })
  );
});

app.listen(3000, () => {
  console.info("Server is running on port 3000");
});

核心逻辑

  • 语言检测:默认使用 Accept-Language 头来检测用户语言。
  • 翻译方法t() 函数根据检测到的语言返回相应的翻译内容。
  • 回退机制:当请求的语言不被支持时,会使用默认语言。

第四步:自定义语言检测逻辑

它还与各种环境中的任何国际化解决方案无缝工作,包括浏览器和 API 请求。您可以自定义中间件以通过标头或 cookie 检测区域:

import { Locales, type IntlayerConfig } from "intlayer";

const config: IntlayerConfig = {
  middleware: {
    headerName: "custom-locale-header",
    cookieName: "custom-locale-cookie",
  },
};

export default config;

默认情况下,express-intlayer Accept-Language 标头以确定客户端的首选语言。 访问 http://localhost:3000/ 时,express-intlayer 会根据请求头的 Accept-Language 自动切换语言。使用 Postman 或其他 API 客户端:你可以手动设置Accept-Language请求头来模拟不同的语

image.png

image.png

第五步:TypeScript 加强型国际化

express-intlayer 的 TypeScript 支持能有效提升开发效率和代码质量:

  1. 类型安全:在编译时检测翻译键是否缺失。
  2. 更高的可维护性:方便管理和更新翻译内容。
  3. 生成类型声明文件:默认生成 ./types/intlayer.d.ts 文件,确保翻译内容的准确性。

在项目的 tsconfig.json 中添加以下配置以包含生成的类型文件:

{
  "include": ["./types/intlayer.d.ts"]
}

第六与其他框架的兼容性

express-intlayer 能与 intlayer 生态系统中的其他工具很好地配合使用,包括:

  • react-intlayer:适用于 React 应用程序的国际化解决方案。
  • next-intlayer:为 Next.js 应用程序提供国际化支持。

这种集成能够确保整个技术栈(从后端到前端)国际化策略的一致性,让多语言支持变得更加高效、统一。

总结

express-intlayer 是为 Express 应用实现国际化的绝佳工具。它简单易用,支持 TypeScript 并提供灵活的配置方式,使得为用户提供本地化内容和服务更加高效。

通过引入国际化,您可以提升用户体验,为应用的全球化发展奠定基础。

参考:Intlayer 官方文档:https://intlayer.org/zh/doc/concept/how-works-intlayer

版权声明:本文内容由TeHub注册用户自发贡献,版权归原作者所有,TeHub社区不拥有其著作权,亦不承担相应法律责任。 如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

点赞(0)
收藏(0)
Hedy
大家好!我是一位前端开发工程师,拥有6年以上的前端开发经验。我熟练掌握HTML、CSS、JavaScript等语言,能够灵活运用各种前端框架,如Vue、React、Uniapp、Flutter等。我注重理论与实践相结合,能够为学员提供丰富的案例和实践项目,并以生动、易懂的语言为学员讲解前端开发的核心知识和技能。我不仅注重传授技能,更关注学员的职业发展,希望通过我的教学,帮助学员成为一名优秀的前端开发工程师。

评论(0)

添加评论