React中使用react-i18next切换中英文

在React中,使用react-i18nexti18next切换中英文

Store文件数据初始化
  • 首先安装redux依赖包
  • 通过redux对数据状态管理,通过派发changeLanguageActionCreator来切换中英文状态
export const CHANGE_LANGUAGE = "change_language";

export const changeLanguageActionCreator = (languageCode) => {
    return {
        type: CHANGE_LANGUAGE,
        payload: languageCode
    }
}
  • 数据初始化,在reducer对数据初始化,以及操作
import {CHANGE_LANGUAGE } from './languageAction'

const defaultState = {
    language:"zh",
    languageList:[
        {name:"中文",code:"zh"},
        {name:"Englist",code:"en"},
    ]
}

export default (state =defaultState,action ) => {
    console.log(action,'action')
    switch (action.type) {
        case CHANGE_LANGUAGE:
            return {
                ...state,
                language: action.payload
            }
        default:
            return state
    }
}
  • store文件配置
import { createStore,combineReducers } from 'redux'

import language from './language/languageReducer'

// 创建reducer对象
const allReducer = {
    language
}

// 合并
const rootReducer  = combineReducers(allReducer)

// 创建store实例

const store = createStore(rootReducer)

export default store
  • 然后在index.js文件引入,首先安装一个react-redux依赖包
  • 这样在全局都可以获取到store里面的数据
import { Provider } from 'react-redux'
import store from './redux/store'
<React.StrictMode>
    <Provider store={store}>
      <App /> 
    </Provider>
  </React.StrictMode>,
配置中英文文件
  • 首页安装 i18nextreact-i18next两个依赖包
  • zh.json文件,对中文初始化
{
    "title": "学习React",
    "home": "首页",
    "about": "关于我们",
    "more": "更多"
}
  • en.json文件,对英文初始化
{
    "title": "study React",
    "home": "Home",
    "about": "About us",
    "more": "More"
}
  • config.js文件配置项
import i18n from 'i18next'
import { initReactI18next } from 'react-i18next'

import translation_en from "./en.json";
import translation_zh from "./zh.json";


const resources = {
    en: {
        translation: translation_en
    },
    zh: {
        translation:translation_zh
    }
}

i18n.use(initReactI18next).init({
    resources,
    lng: 'zh',
    interpolation: {
        escapeValue: false
    }
})

export default i18n
  • 这样中英文文件已经配置好了,然后在index.js文件引入即可
    import './i18n/config'
页面中使用
  • 通过前面的配置项,然后我们在页面中就可以直接使用
  • 所有的都是使用react hooks语法编写
  • 通过引入react-redux中的useSelector来获取store文件的数据。
  • 通过useDispatch派发事件,把值传递给action来修改renducer中的数据
  • 通过react-i18next提供的useTranslation来显示
import React from 'react'
import {BrowserRouter as Router,Link } from 'react-router-dom'
import './App.css';
import {  Typography, Menu, Dropdown } from "antd";
import { changeLanguageActionCreator } from './redux/language/languageAction'
import { useDispatch,useSelector } from 'react-redux'
import { useTranslation } from 'react-i18next'


function App() {
  const language = useSelector(state => state.language.language)
  const languageList = useSelector(state => state.language.languageList)
  const dispatch = useDispatch()
  const { t } = useTranslation()
  
  const menuClickHandler = (e) => {
    dispatch(changeLanguageActionCreator(e.key))
  }

  return (
    <div className="App">
      <Router>
        <header>
          <div>
            <Typography.Text>{t("title")}</Typography.Text>
            <Dropdown.Button
              style={{ marginLeft: 15 }}
              overlay = {
                <Menu onClick={menuClickHandler}>
                  {
                    languageList.map(l => {
                      return <Menu.Item key={l.code}>{l.name}</Menu.Item>
                    })
                  }
                </Menu>
              }
            >
              { language == 'zh' ? '中文' : 'Englist' }
            </Dropdown.Button>
          </div>
          <ul>
            <li><Link to="/">{t("home")}</Link></li>
            <li><Link to="/about">{t("about")}</Link></li>
            <li><Link to="/More">{t("more")}</Link></li>
          </ul>
          
        </header>
        <div className="container">
          内容显示区域
        </div>
      </Router>
    </div>
  );
}

export default App;

  • 通过````menuClickHandler点击事件触发中英文切换,在reducer文件调用i18n提供的changeLanguage```事件即可
import i18n from 'i18next'  //语言切换
export default (state =defaultState,action ) => {
    console.log(action,'action')
    switch (action.type) {
        case CHANGE_LANGUAGE:
            i18n.changeLanguage(action.payload)  //改变语言
            return {
                ...state,
                language: action.payload
            }
        default:
            return state
    }
}
  • 以上就是中英文切换所有的代码

关注公众号: 回复 “加群”,即可加入前端交流群

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 react-i18next 进行中英文切换,需要先安装 react-i18next 和 i18next 两个模块。可以使用以下命令安装: ``` npm install react-i18next i18next ``` 然后,在你的应用程序创建一个 i18n 实例,并且设置默认语言和翻译文本。例如: ```javascript import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; i18n.use(initReactI18next).init({ resources: { en: { translation: { hello: 'Hello', world: 'World', }, }, zh: { translation: { hello: '你好', world: '世界', }, }, }, lng: 'en', fallbackLng: 'en', interpolation: { escapeValue: false, }, }); ``` 在这个例子,我们创建了一个 i18n 实例,并且设置了两种语言(英文和文),以及翻译文本。默认语言是英文,fallbackLng 指定了如果当前语言不存在时要回退到的语言。 接下来,在你的组件使用 `useTranslation` 钩子函数来获取翻译文本,并且使用 `i18n.changeLanguage` 方法来切换语言。例如: ```jsx import React from 'react'; import { useTranslation } from 'react-i18next'; function Example() { const { t, i18n } = useTranslation(); const changeLanguage = (lng) => { i18n.changeLanguage(lng); }; return ( <div> <h1>{t('hello')}</h1> <p>{t('world')}</p> <button onClick={() => changeLanguage('en')}>English</button> <button onClick={() => changeLanguage('zh')}>文</button> </div> ); } export default Example; ``` 在这个例子,我们使用 `useTranslation` 钩子函数获取翻译文本,然后在组件渲染翻译文本和切换语言的按钮。点击按钮时,调用 `changeLanguage` 方法来切换语言。 通过这种方式,你就可以使用 react-i18next 在你的应用程序实现中英文切换

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值