当前位置:首页 > React

react 如何使用 i18n

2026-01-25 22:51:14React

安装依赖

在React项目中引入i18n功能需要安装react-i18nexti18next库。通过npm或yarn添加依赖:

npm install react-i18next i18next
# 或
yarn add react-i18next i18next

初始化配置

创建i18n配置文件(通常命名为i18n.jsi18n.ts),初始化i18next实例并配置语言资源:

react 如何使用 i18n

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';

i18n.use(initReactI18next).init({
  resources: {
    en: {
      translation: {
        welcome: "Welcome",
        buttonText: "Click me"
      }
    },
    zh: {
      translation: {
        welcome: "欢迎",
        buttonText: "点击我"
      }
    }
  },
  lng: 'en', // 默认语言
  fallbackLng: 'en', // 回退语言
  interpolation: {
    escapeValue: false // React已处理XSS防护
  }
});

export default i18n;

在组件中使用

通过useTranslation钩子或withTranslation高阶组件访问翻译内容:

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('zh')}>{t('buttonText')}</button>
    </div>
  );
}

动态加载语言包

对于大型项目,建议按需加载语言文件以避免初始包过大:

react 如何使用 i18n

// i18n.js配置修改
i18n.use(initReactI18next).init({
  lng: 'en',
  fallbackLng: 'en',
  interpolation: { escapeValue: false },
  backend: {
    loadPath: '/locales/{{lng}}/{{ns}}.json' // 从public/locales加载
  }
});

命名空间管理

通过命名空间分割大型翻译文件:

// 配置多个命名空间
resources: {
  en: {
    common: { /* 通用翻译 */ },
    dashboard: { /* 仪表盘相关 */ }
  }
}

// 组件中使用指定命名空间
const { t } = useTranslation('dashboard');

类型安全(TypeScript)

为翻译键提供类型定义:

declare module 'react-i18next' {
  interface CustomTypeOptions {
    resources: {
      translation: typeof enTranslations;
    };
  }
}

分享给朋友:

相关文章

react 如何分页

react 如何分页

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

react如何验证

react如何验证

表单验证方法 在React中验证表单数据通常使用以下几种方式: 内置HTML5验证 利用HTML5原生表单验证属性如required、pattern等,结合form.noValidate属性禁用浏览…

react如何折叠

react如何折叠

在 React 中实现折叠功能 使用 useState 管理折叠状态 通过 useState 定义一个状态变量来控制折叠面板的显示与隐藏。例如: const [isCollapsed, setIsC…

如何读react源码

如何读react源码

理解React源码的结构 React源码托管在GitHub上,主要分为几个核心模块:react、react-dom、react-reconciler等。react包包含核心API和组件逻辑,react…

react如何重新加载

react如何重新加载

重新加载当前页面 在React中重新加载当前页面可以通过window.location.reload()方法实现。该方法会强制浏览器重新加载当前URL,类似于按下F5刷新页面。 const relo…

react如何激活跟踪

react如何激活跟踪

激活 React 跟踪的方法 React 跟踪通常指性能监控、状态变更追踪或用户行为分析。以下是几种常见场景的激活方式: 使用 React DevTools React DevTools 是官方…