如何在 Next.js 中使用 i18n 处理国际化问题

阅读时长 7 分钟读完

随着互联网技术的不断发展,越来越多的网站和应用程序需要支持多语言,以便更好地服务全球用户。在前端开发中,使用 i18n 处理国际化问题是必不可少的技能之一。本文将介绍如何在 Next.js 中使用 i18n 处理国际化问题。

什么是 i18n?

i18n 是国际化的缩写,其中的数字 18 表示中间有 18 个字母。i18n 的作用是处理多语言支持,使得网站和应用程序可以轻松地适应不同的语言和地区。i18n 包括文本翻译、日期和时间格式、货币单位等多方面的内容。

Next.js 中的 i18n

Next.js 是一个基于 React 的服务端渲染框架,提供了丰富的特性和插件,使得开发具有多语言支持的应用程序变得更加容易。在 Next.js 中,我们可以使用多种插件来实现国际化功能。

next-i18next

next-i18next 是一个 Next.js 的 i18n 插件,提供了许多便捷的功能,如多语言路由、多语言组件、语言切换等。使用 next-i18next 可以大大简化国际化的开发工作。

安装和配置 next-i18next

首先,我们需要安装 next-i18next:

然后,在 Next.js 应用程序的根目录下,创建一个 i18n.js 文件。在 i18n.js 文件中,我们需要配置对应的 i18n 配置项。例如:

-- -------------------- ---- -------
-- -------

----- ----------- - -------------------------------

-------------- - --- -------------
  -- --- ---- --- ------ ----
  ---------------- -----
  --------------- ------ -----
--

在上面的示例代码中,我们指定了默认语言为英语,其他支持的语言为法语和德语。通过配置 NextI18Next 对象,我们可以指定多个语言,设置默认语言,以及使用多种插件,如 multi-language-routing、language-detector、backend-connector 等。

使用 next-i18next

当我们完成了 i18n 配置之后,就可以在 Next.js 中使用 i18n 了。例如,我们可以在 pages 目录中的页面组件中使用 i18n:

-- -------------------- ---- -------
------ - -------------- - ---- --------------

-------- ------ -
  ----- - - - - ------------------------
  
  ------ -
    -----
      ---------------------
      -------------------------
    ------
  -
-

在上面的示例代码中,我们调用了 useTranslation 钩子函数来获取翻译内容。useTranslation 接受一个参数,表示要翻译的语言,例如常见的 'common'、'home'、'about' 等。调用 t 函数来获取对应 key 对应的翻译结果。

还可以将 i18n 和 React 组件一起使用:

-- -------------------- ---- -------
------ ---- ---- -----------
------ - -------------- - ---- --------------

-------- ----- -
  ----- - - - - ------------------------

  ------ -
    -----
      ----
        ----
          ----- ---------
            ------------------
          -------
        -----
        ----
          ----- --------------
            -------------------
          -------
        -----
      -----
    ------
  -
-

在上面的示例代码中,我们使用 i18n 对导航栏进行多语言支持。使用 Link 包裹的 a 标签中的文本是通过 t 函数获取翻译结果,从而实现了多语言的效果。

react-i18next

react-i18next 是一个 React 的 i18n 库,提供了与 React 组件深度集成的翻译 API。react-i18next 需要我们手动完成国际化的配置,但是功能非常强大,可以满足更加定制化的需求。

安装和配置 react-i18next

首先,我们需要安装 react-i18next:

然后,在 Next.js 应用程序的根目录下,创建一个 i18n.js 文件。与之前的 next-i18next 的配置方式不同,react-i18next 需要手动完成配置信息。例如:

-- -------------------- ---- -------
-- -------

------ ---- ---- ----------
------ - ---------------- - ---- ----------------

----
  ----------------------
  -------
    ---------- -
      --- -
        ------------ -
          -------- -------- -- -- -----
          -------------- ----- -- - ---- --- ----- ----- --- --------
        -
      --
      --- -
        ------------ -
          -------- ---------- --- --- -------------
          -------------- ----- --- --- ----------- -- ------------- --------- ----- -- --------
        -
      --
      --- -
        ------------ -
          -------- ----------- --- ------ -----
          -------------- ----- --- ---- --------- --- ----- --- ------- ----------
        -
      -
    --
    ---- -----
    ------------ -----

    -------------- -
      ------------ -----
    -
  ---

在上面的示例代码中,我们定义了一个 i18n 对象,并完成了初始化配置。资源根据语言和 key 来定义,例如 'en.translation.title' 表示英语环境下的 title 标题。在初始化配置中,我们设置了默认语言为英语,支持的其他语言为法语和德语。

使用 react-i18next

当我们完成了 i18n 配置之后,就可以在 Next.js 中使用 react-i18next 了。例如,我们可以在 components 目录中的组件中使用 i18next:

在上面的示例代码中,我们调用了 useTranslation 钩子函数来获取翻译内容。不同于 next-i18next,使用 react-i18next 不需要指定语言参数。在组件中通过 t 函数获取对应 key 对应的翻译结果。

还可以通过 Translation 组件来直接翻译 React 组件:

在上面的示例代码中,我们使用 Translation 组件来直接传递一个 t 函数,以获取对应的翻译结果。这样就可以在组件内部使用 i18n 来进行翻译了。

总结

在本文中,我们介绍了如何在 Next.js 中使用 i18n 处理国际化问题。通过 next-i18next 和 react-i18next,我们可以快速地构建多语言网站和应用程序。希望本文对您有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f45db3f6b2d6eab3d69476

纠错
反馈