返回

揭秘Next.js 13的App路由国际化秘诀

前端

为你的 Next.js 13 应用打造多元化的语言体验

在全球化的数字时代,创建支持多种语言的包容性网站应用已成为发展的必经之路。作为一款强大的 React 框架,Next.js 13 让你轻松添加国际化支持,让你的应用触达更广泛的用户群体。

准备工作

要开始,请确保你的项目已安装 next-i18next 包,这是一个专门用于 Next.js 国际化的库。使用以下命令进行安装:

npm install --save next-i18next

国际化配置

接下来,创建 i18n.js 文件,用于配置国际化设置。指定支持的语言和相应的翻译文件:

module.exports = {
  i18n: {
    locales: ['en', 'es', 'fr'],
    defaultLocale: 'en',
  },
}

创建翻译文件

为每个支持的语言创建 .json 格式的翻译文件,文件名与语言代码对应。例如,en.json 对应英语,es.json 对应西班牙语。翻译文件中,逐一列出需要翻译的字符串及其对应译文:

{
  "title": {
    "en": "Next.js Internationalization",
    "es": "Internacionalización de Next.js",
    "fr": "Internationalisation de Next.js"
  },
  "content": {
    "en": "Next.js makes it easy to add internationalization support to your applications.",
    "es": "Next.js facilita la adición de soporte de internacionalización a tus aplicaciones.",
    "fr": "Next.js facilite l'ajout d'une prise en charge de l'internationalisation à vos applications."
  }
}

使用国际化组件

配置完毕后,使用国际化组件在你的应用中显示翻译内容:

  • <Trans> 组件: 用于翻译文本内容,接受 i18nKey 属性,指定要翻译的字符串键:
<Trans i18nKey="title" />
  • <Link> 组件: 用于翻译链接,接受 href 属性(指定链接 URL)和 i18nKey 属性(指定要翻译的链接文本键):
<Link href="/about" i18nKey="about">About</Link>

动态语言切换

使用 useTranslation 钩子动态切换语言:

import { useTranslation } from 'next-i18next';

const MyComponent = () => {
  const { t, i18n } = useTranslation();

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

  return (
    <div>
      <h1>{t('title')}</h1>
      <button onClick={() => changeLanguage('es')}>Spanish</button>
      <button onClick={() => changeLanguage('fr')}>French</button>
    </div>
  );
};

export default MyComponent;

结语

按照这些步骤,你可以轻松为你的 Next.js 13 应用添加国际化支持。这将让你轻松地覆盖多种语言,吸引更广泛的受众。

常见问题解答

  1. 为什么需要为我的应用添加国际化支持?

    • 为了覆盖更广泛的受众,满足全球用户的需求。
  2. 除了 Next.js 13,还有哪些其他方法可以为我的 React 应用添加国际化支持?

    • 使用 react-i18nextreact-intl 等库。
  3. 我可以用哪些工具来翻译我的应用内容?

    • Google 翻译、DeepL、AWS Translate 等机器翻译工具。
  4. 如何处理需要动态翻译的内容(例如用户输入)?

    • 使用 useTranslation 钩子获取当前语言环境,然后进行翻译。
  5. 我的应用中已有一些使用硬编码文本的内容,如何将其转换为可翻译内容?

    • 使用搜索和替换工具或提取工具(例如 react-i18next-extract)。