Next.js 的国际化(i18n)实践指南

本文为翻译作品,原文链接:Internationalization (i18n) in Next.js: A Comprehensive Guide

介绍

对于许多 Web 应用程序来说,触及全世界范围内的受众是一个重要目标。为了满足来自不同地区和语言的用户的需求,你需要实施国际化(i18n)。Next.js 是一个流行的 React 框架,使创建多语言网站变得相对简单。在这份全面的指南中,我们将逐步探索 Next.js 中的 i18n 最佳实践。

什么是国际化(i18n)?

国际化,常缩写为 i18n(因为在"i"和"n"之间有 18 个字母),是指设计和开发软件应用程序或网站以适应不同语言和地区的过程。它涉及将内容翻译成用户所在地区的语言、按用户地区的格式设置日期、数字和货币。

设置 Next.js 项目

如果你还没有开始,首先创建一个新的 Next.js 项目。你可以使用以下命令:

perl 复制代码
npx create-next-app my-i18n-app
cd my-i18n-app

选择一个 i18n 库

接下来,你需要选择一个 i18n 库来帮助进行语言管理。react-i18next 是一个受欢迎的选择,它与 React 和 Next.js 配合得很好。

安装它及其对等依赖项:

复制代码
npm install i18next react-i18next

项目结构

为 i18n 组织你的项目结构。在项目根目录下创建一个 locales 目录来保存你的翻译文件。在 locales 内部,为每种支持的语言创建子目录,例如,en 代表英语,es 代表西班牙语。

这是一个示例项目结构:

arduino 复制代码
my-i18n-app/
  ├── components/
  ├── locales/
  │   ├── en/
  │   │   ├── common.json
  │   │   └── home.json
  │   └── es/
  │       ├── common.json
  │       └── home.json
  ├── pages/
  ├── ...

翻译内容

在语言目录中(例如,enes)创建 JSON 文件来保存翻译数据。例如,在 locales/en/home.json 中,你可能有:

json 复制代码
{
  "welcome": "Welcome to our website!",
  "aboutUs": "About Us",
  "contact": "Contact"
}

对于西班牙语版本在 locales/es/home.json 中:

json 复制代码
{
  "welcome": "¡Bienvenidos a nuestro sitio web!",
  "aboutUs": "Sobre Nosotros",
  "contact": "Contacto"
}

集成 i18n

现在,将 i18n 集成到你的 Next.js 应用中。在你的项目根目录创建一个 i18n.js 文件:

javascript 复制代码
// i18n.js
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';

i18n
  .use(initReactI18next) // 将 i18n 传递给 react-i18next
  .init({
    resources: {
      en: {
        common: require('./locales/en/common.json'),
        home: require('./locales/en/home.json')
      },
      es: {
        common: require('./locales/es/common.json'),
        home: require('./locales/es/home.json')
      }
    },
    lng: 'en', // 默认语言
    fallbackLng: 'en', // 如果选择的语言不可用,则回退到这个语言
    interpolation: {
      escapeValue: false // 允许 HTML 标签的插值
    }
  });

export default i18n;

实现语言切换

你可以在你的应用中添加一个语言切换器,允许用户在语言之间切换。创建一个语言切换组件:

javascript 复制代码
// components/LanguageSwitcher.js
import { useTranslation } from 'react-i18next';

function LanguageSwitcher() {
  const { i18n } = useTranslation();

  const changeLanguage = (lng) => {
    i18n.changeLanguage(lng);
  };

  return (
    <div>
      <button onClick={() => changeLanguage('en')}>English</button>
      <button onClick={() => changeLanguage('es')}>Español</button>
    </div>
  );
}

export default LanguageSwitcher;

使用翻译

现在,你可以在你的组件中使用翻译。从 react-i18next 导入 useTranslation 钩子并使用它来访问翻译内容。

javascript 复制代码
// components/Home.js
import { useTranslation } from 'react-i18next';

function Home() {
  const { t } = useTranslation('home');

  return (
    <div>
      <h1>{t('welcome')}</h1>
      <p>{t('aboutUs')}</p>
      <p>{t('contact')}</p>
    </div>
  );
}

export default Home;

总结

在你的 Next.js 应用程序中实现 i18n,可以让你的内容对全球受众可访问。通过遵循这份全面的指南,你已经学会了如何设置多语言支持、组织翻译以及将 i18n 库集成到你的项目中。有了这些工具,无论你的用户偏好哪种语言,你的 Web 应用都可以触及并吸引他们。

相关推荐
摸着石头过河的石头3 分钟前
手把手教你入门 MCP:模型上下文协议与 Trae IDE 中的实践
前端·mcp
德育处主任3 分钟前
p5.js 3D 形状 "预制工厂"——buildGeometry ()
前端·javascript·canvas
Mintopia5 分钟前
React 牵手 Ollama:本地 AI 服务对接实战指南
前端·javascript·aigc
Mintopia23 分钟前
Next.js 全栈开发基础:在 pages/api/*.ts 中创建接口的艺术
前端·javascript·next.js
小妖66627 分钟前
react-router 怎么设置 basepath 设置网站基础路径
前端·react.js·前端框架
xvmingjiang33 分钟前
Element Plus 中 el-input 限制为数值输入的方法
前端·javascript·vue.js
XboxYan1 小时前
借助CSS实现自适应屏幕边缘的tooltip
前端·css
极客小俊1 小时前
iconfont 阿里巴巴免费矢量图标库超级好用!
前端
小杨 想拼1 小时前
使用js完成抽奖项目 效果和内容自定义,可以模仿游戏抽奖页面
前端·游戏
yvvvy1 小时前
🐙 Git 从入门到面试能吹的那些事
前端·trae