React.js+i18next实现国际化

安装第三方依赖库

npm install i18next -D
npm install react-i18next -D

编写语言文件 

export const cn = {
    lang: '简体中文',
    login: {
        code: '验证码',
        username: '用户名',
        password: '密码',
        oldPassword: '原密码',
        newPassword: '新密码',
        confirmPassword: '确认密码'
    },
    message: {
        remindUsername: '请输入用户名',
        remindPassword: '请输入密码',
        remindOldPassword: '请原输入密码',
        remindNewPassword: '请输入新密码',
        remindConfirmPassword: '请输入确认密码',
        remindCode: '请输入验证码',
        errorMenu: '获取用户菜单失败,请重试!',
        loginError: '登陆失效,请重新登陆',
        notNull: '不能为空',
        delSuccess: '删除成功',
        delError: '删除失败',
        tryAgain: '请重试',
        getError: '获取数据失败'
    },
    btn: {
        login: '登陆',
        forgotPassword: '忘记密码',
        updatePassword: '修改密码',
        search: '搜索',
        del: '删除',
        add: '新增',
        close: '关闭',
        reset: '清除搜索条件'
    }
}

编写工具类引入并使用语言模块

i18n/index.js

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next'; 
import { en } from '../locales/en_US';
import { cn } from '../locales/zh_CN';
import { tw } from '../locales/zh_TW';

const resources = {
    en: {
        translation: en
    },
    cn: {
        translation: cn
    },
    tw: {
        translation: tw
    }
}

i18n.use(initReactI18next) 
    .init({
        resources,
        lng: localStorage.language || 'cn',
        fallbackLng:'cn',
        interpolation: {
            escapeValue: false, 
        }
    });


export default i18n;

实现语言切换

需要使用到react-i18next种的withTranslation,这里通过注释的方法使用@withTranslation(),结合i18n种的changeLanguage方法实现,这里和使用react17版本的开发有区别,同时需要使用的localStorage来配合使用

代码如下

import { withTranslation } from 'react-i18next';
import i18n from '../../i18n/index'
@withTranslation()
class HeaderBar extends React.Component {
    

    constructor(props) {
        super(props)
        this.state= {
            defaultLanguage: localStorage.language || 'cn',
            defaultValue: localStorage.language==='en'?'English':localStorage.language==='tw'?'繁體中文':'简体中文'
        }
    }  

    @autobind
    changeLanguage(e) {
        this.setState({
            defaultLanguage: e
        });
        i18n.changeLanguage(e, function(v) {
            localStorage.setItem('language', e);
        });
    }
    render() {
        <div>
            ...
            <Select onChange={this.changeLanguage} style={{width: 100, color: '#FFFFFF'}} 
               defaultValue={this.state.defaultValue} bordered={false}>
               <Option value="cn" style={{color: '#333333'}}>简体中文</Option>
               <Option value="tw" style={{color: '#333333'}}>繁體中文</Option>
               <Option value="en" style={{color: '#333333'}}>English</Option>
            </Select>
            ...
        </div>  
    }
}

如何引用

其实很简单,import i18n from '../../i18n/index',使用我们自己写的i18n的工具类

<span>{i18n.t('common.administration')}</span>

<div style={{height: 40, lineHeight: '40px', textAlign: 'left', fontSize: 16}}><span>{i18n.t('common.operate')}</span></div>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪山上的小灰熊

谢谢支持哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值