当前位置:首页 > React

react 实现国际化

2026-01-27 14:44:44React

使用 react-i18next 实现国际化

react-i18next 是基于 i18next 的 React 国际化库,提供完整的国际化解决方案

安装依赖包:

npm install i18next react-i18next i18next-http-backend i18next-browser-languagedetector

创建 i18n 配置文件(i18n.js):

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import Backend from 'i18next-http-backend';
import LanguageDetector from 'i18next-browser-languagedetector';

i18n
  .use(Backend)
  .use(LanguageDetector)
  .use(initReactI18next)
  .init({
    fallbackLng: 'en',
    debug: true,
    interpolation: {
      escapeValue: false,
    }
  });

export default i18n;

创建语言资源文件

在 public 目录下创建 locales 文件夹,结构如下:

public/
  locales/
    en/
      translation.json
    zh/
      translation.json

示例英文翻译文件(en/translation.json):

{
  "welcome": "Welcome to our application",
  "changeLanguage": "Change language"
}

在组件中使用翻译

使用 useTranslation hook:

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

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

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

  return (
    <div>
      <h1>{t('welcome')}</h1>
      <button onClick={() => changeLanguage('en')}>English</button>
      <button onClick={() => changeLanguage('zh')}>中文</button>
    </div>
  );
}

使用 Trans 组件处理复杂翻译

对于包含 HTML 或变量的复杂翻译:

import { Trans } from 'react-i18next';

function ComplexComponent() {
  return (
    <Trans i18nKey="complexText">
      This is a <strong>complex</strong> text with <a href="#">link</a>
    </Trans>
  );
}

对应的翻译文件需要:

{
  "complexText": "This is a <1>complex</1> text with <2>link</2>"
}

服务端渲染支持

对于 Next.js 等 SSR 框架,需要额外配置:

import { I18nextProvider } from 'react-i18next';
import i18n from './i18n';

function MyApp({ Component, pageProps }) {
  return (
    <I18nextProvider i18n={i18n}>
      <Component {...pageProps} />
    </I18nextProvider>
  );
}

命名空间支持

对于大型项目可以使用命名空间分隔翻译:

i18n.init({
  ns: ['common', 'home', 'about'],
  defaultNS: 'common'
});

使用命名空间翻译:

const { t } = useTranslation('home');
t('home:welcome');

动态加载语言包

优化性能可以按需加载语言包:

react 实现国际化

i18n.use(Backend).init({
  backend: {
    loadPath: '/locales/{{lng}}/{{ns}}.json'
  }
});

标签: react
分享给朋友:

相关文章

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Context中…

react如何部署

react如何部署

部署 React 应用的常见方法 使用静态服务器部署 React 应用在构建后会生成静态文件,可以直接通过静态服务器部署。常用的静态服务器包括 Nginx、Apache 等。 运行构建命令生成静态文…

如何运行react

如何运行react

运行 React 项目的步骤 安装 Node.js 和 npm 确保系统已安装 Node.js(包含 npm)。可通过官网 Node.js 下载并安装最新稳定版本。安装完成后,验证版本: node…

react如何检测

react如何检测

检测 React 应用的方法 使用 PropTypes 进行类型检查 PropTypes 是 React 内置的类型检查工具,用于验证组件的 props 是否符合预期。在开发环境中,PropTypes…