leiwuhen-67's blog leiwuhen-67's blog
首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)

我的公众号

首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)
  • React

    • 使用React脚手架快速搭建项目
    • hooks之useEffect
    • React之事件绑定及简写方式
    • React之props传值并对其进行限制
    • React之Refs的基本使用
    • React之生命周期钩子
    • React之key的使用
    • React之代理服务器配置
    • React之封装全局Loading组件
    • React之消息的发布-订阅(pubsub-js)
    • React之Redux的基本使用
    • React之react-redux的基本使用
    • React之redux的数据持久化存储
    • React之路由懒加载
    • React之Render Props的使用
    • React之createBrowserRouter
    • React之路径别名@配置
    • React之craco打包优化配置
    • React之项目国际化
    • React之postcss-pxtorem移动端适配
    • React之使用vite创建项目
    • React之ts类型标注汇总
    • React之使用 ant design搭建后台管理之踩坑
    • React之路由切换动画
    • React之使用vite创建组件库并发布到npm
    • React之项目打包部署到nginx
    • React之自定义组件添加className与style
  • React Native

  • 《React》笔记
  • React
心欲无痕
2024-04-03

React之项目国际化

在做项目的时候,有时候要做多语言的,引入国际化,如果自己手动实现的话会是非常棘手的一件事儿,这里可以借助第三方库来实现,这里用到了两个库,i18next(提供了翻译的基本能力)和 react-i18next(是 i18next 的一个插件,用来降低 react 的使用成本)

1、安装第三方库

// 如果安装失败,可能是因为版本的原因,可以强制安装(--force)或者安装低版本的
npm install i18next react-i18next
1
2

2、创建需要翻译的语言文件,如中文 zh.js 和英文 en.js 文件

// /src/locales/language/zh.js
const zh = {
  home: {
    title: "首页",
  }
};
export default zh;


// /src/locales/language/en.js
const en = {
  home: {
    title: "Home",
  }
}
export default en;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

3、创建初始化语言文件,并在项目入口文件 index.js 中直接引入即可

// /src/locales/index.js
import { initReactI18next } from "react-i18next";
import i18n from "i18next";
import zh from './language/zh';
import en from './language/en';

i18n.use( initReactI18next ).init( {
  resources: {
    en: {
      translation: {
        ...en
      }
    },
    zh: {
      translation: {
        ...zh
      }
    }
  },
  // interpolation: {  
  //   escapeValue: false // 不要做转义
  // },
  lng: "en", // 默认语言
  fallbackLng: "en", // 如果当前语言没有对应的翻译,将使用该语言作为备用
})

// /src/index.js
import "./locales/index"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

4、创建组件,在组件中使用。

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

export default function Translation () {
  const { i18n, t } = useTranslation()
  const changeLanguage = (language) => {
    i18n.changeLanguage(language)  // 切换语言
  }
  return (
    <>
      <p>当前语言:{ i18n.language }</p>
      <p>当前内容:{ t( 'home.title' ) }</p>
      <button onClick={() => changeLanguage('zh')}>切换为中文</button>
      <button onClick={() => changeLanguage('en')}>切换为英文</button>
    </>
  )
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
编辑 (opens new window)
上次更新: 7/1/2024, 4:56:33 PM
React之craco打包优化配置
React之postcss-pxtorem移动端适配

← React之craco打包优化配置 React之postcss-pxtorem移动端适配→

Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式