2024 如何使用 react-i18next 和 nextjs 本地化你的 React 应用

利用 i18next 进行基于 React 的国际化

国际化 (i18n) 对于扩展软件在全球市场的覆盖范围至关重要。i18next 是 JavaScript 生态系统中最有效的工具之一,可以实现此目的。本文探讨了 i18next,尤其是它与 React 的集成,并着重介绍了它的优势、与各种框架的兼容性以及增强本地化工作的技巧。

什么是 i18next?

i18next 是一个强大的 JavaScript 应用程序国际化框架。它简化了为 Web、移动和桌面应用程序添加多语言支持的过程。该框架允许动态的翻译管理,使应用程序更容易适应不同的语言和地区。

i18next 的优势

  • 易于集成

i18next 能够轻松集成到现有的项目中,并支持流行的 JavaScript 框架,例如 React、Angular 和 Vue。这种多功能性使其成为开发人员的首选。

  • 自定义和灵活性

i18next 采用模块化结构,允许开发人员仅使用他们需要的功能。这种高度的自定义确保框架能够满足各种项目需求。

  • 动态加载翻译

该框架支持动态加载翻译,通过按需获取必要的语言资源来优化性能。

  • 复数和语境化

i18next 内置支持处理复数和语境化,确保根据数量或语境提供准确的语言变化。

  • 支持各种文件格式

它支持多种用于存储翻译的文件格式,包括 JSON 和 YAML,允许灵活地选择最符合项目需求的格式。

  • 完善的生态系统

一个蓬勃发展的社区和完善的生态系统提供插件、扩展和支持,以增强和扩展 i18next 的功能,节省开发时间和精力。

  • 多种后端选项

i18next 支持各种用于存储和检索翻译的后端,例如内存、HTTP 和自定义后端,可以使用户与不同的存储解决方案集成。

  • 主动开发和维护

定期更新和改进使 i18next 能够紧跟网络开发中最佳实践和不断变化的需求。

React-i18next 集成

i18next 最受欢迎的集成之一是通过 react-i18next 绑定与 React 集成。这种组合允许在 React 组件中有效地进行国际化,便于动态语言切换和无缝的翻译管理。

通过设置 i18next 实例并使用必要的选项初始化它,在您的 React 应用程序(nextjs)中配置 i18next。

React-i18next 代码示例

以下是在 React 应用程序中设置和使用 react-i18next 的分步示例:

1. 安装依赖项

首先,安装 i18nextreact-i18nextnext-i18next 以从服务器加载翻译:

npm install i18next react-i18next next-i18next

2. 初始化 i18next

创建一个名为 next-i18next.config.js 的文件,用于配置和初始化 i18next:

// next-i18next.config.js
const path = require('path'); // 添加这行来定义 path
module.exports = {
  i18n: {
    defaultLocale: 'en',
    locales: ['en'],  // 在这里添加你的语言
    // localeDetection: false,  // 默认值为 true
  },
  localePath: path.resolve('./content/locales'),  // 这是你的 i18n 文件路径 
  // ns: ['common','componentFeature'],
  languageNames: {
    'en': '英语',
  },
}
// next.config.js
const { i18n } = require('./next-i18next.config')
module.exports = {
  reactStrictMode: true,
  async redirects() {
    return [

    ];
  },
  i18n,  // 添加这个 i18n 配置
};

3. 设置翻译文件

创建一个名为 locales 的目录,并在该目录下为每种语言(ende 等)创建子目录。在每个子目录中,创建一个名为 translation.json 的文件:

示例:

-content
  -locales
    -en
      -translation.json
      -'other file if you have'.json
    -de
      -translation.json
      -'other file if you have'.json

locales/en/translation.json

{
  "welcome": "欢迎",
  "description": "这是一个示例描述。"
}

locales/de/translation.json

{
  "welcome": "Willkommen",
  "description": "Dies ist eine Beispielbeschreibung."
}

4. 使用 I18nextProvider 包装您的应用程序

在您的主文件(如 index.jsApp.js_app.tsx)中,使用 appWithTranslation 包装您的应用程序:

import { appWithTranslation } from 'next-i18next';

function MyApp({ Component, pageProps }: AppProps) {
  return (
    ...
  );
}

export default appWithTranslation(MyApp)  // 这样包装

5. 在组件中使用翻译钩子

现在,您可以使用 useTranslation 钩子在您的组件中翻译字符串:

首先,您应该在页面级别的文件中使用 serverSideTranslations


export const getStaticProps: GetStaticProps = async ({ }) => {
  return {
    props: {
      ...(await serverSideTranslations(safeLocale, [
        'translation', 'other'
      ])),
    },
  };
};
export default function Price() {
      return (
        <div>
          <yourComponent/>
        </div>
    )
}

然后在您的组件中

import React from 'react';
import { useTranslation } from 'next-i18next';

const MyComponent = () => {
  const { t } = useTranslation('translation', 'other');  // 翻译是这里的默认值

  return (
    <div>
      <h1>{t('welcome')}</h1>
      <p>{t('description')}</p>
      <p>{t('other:yourcontent')}</p> // 使用不同的命名空间
    </div>
  );
};

export default MyComponent;

We use cookies

We use cookies to ensure you get the best experience on our website. For more information on how we use cookies, please see our cookie policy.

By clicking "Accept", you agree to our use of cookies.
Learn more aboutprivacyand terms.