React 中 react-i18next 切换语言( 项目国际化 )

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


一、安装依赖

需要同时安装 i18nextreact-i18next 依赖:

npm install react-i18next i18next --save

react-i18next 的 npm 地址


二、文件配置

src下新建i18n文件夹,以存放国际化相关配置
i18n中分别新建三个文件:

  • config.ts:对 i18n 进行初始化操作及插件配置

  • en.json:英文语言配置文件

  • zh.json:中文语言配置文件 src目录

1、config.ts

代码如下(示例):

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,
    // 默认语言  zh/en  中文/英文
    lng: 'zh',
    interpolation: {
        escapeValue: false,
    },
});

export default i18n;

2、zh.json

代码如下(示例):

{
        "language":"语言",
        "switch":"选择",
}

3、en.json

代码如下(示例):

{
   "language":"Language",
   "switch":"Switch",
}


三、使用

1、引用配置文件

在 page 的index.tsx中引用i18n的配置文件 :import '../i18n/config';

import Page1 from './page1';
import Page2 from './page2';
// 引用配置文件
import '../i18n/config';

export default function IndexPage() {
  return (
    <div>
      <Page1 />
      <Page2 />
    </div>
  );
}

2、在组件中使用

函数式组件 中使用useTranslationhook 来处理国际化

// Page1 函数式组件
import React from 'react';
// 引入 useTranslation 
import { useTranslation } from 'react-i18next';

const Page1: React.FC = () => {
  const { t } = useTranslation();
  return (
    <div>
      <p>这是Page1</p>
      <p>{t('language')}</p>
    </div>
  );
};

export default Page1;

类组件 中使用withTranslation 高阶函数(HOC) 来完成语言配置的数据注入

// Page2  类组件
import React from 'react';
// 引入HOC高阶函数 withTranslation 和 i18n 的ts类型定义 WithTranslation
import { withTranslation, WithTranslation } from 'react-i18next';

class ClassComponent extends React.Component<WithTranslation> {
  render() {
    const { t } = this.props;
    return (
    	<div>
     		<p>{t('language')}</p>
    	</div>
    );
  }
}
// withTranslation 完成语言配置数据注入
export const Page2 = withTranslation()(ClassComponent); 

3、切换语言

使用changeLanguage() config 中配置 切换语言

// 函数式组件
import React from 'react';
import { useTranslation, Trans } from 'react-i18next';

const Page1: React.FC = () => {
  const { t, i18n } = useTranslation();
  return (
    <div>
      <button onClick={() => i18n.changeLanguage(i18n.language == 'en' ? 'zh' : 'en')}>
        {i18n.language == 'en' ? 'zh' : 'en'}
      </button>
      <p>{t('language')}</p>
    </div>
  );
};

export default Page1;
//  类式组件
import i18n from 'i18next';

const changeLanguage= (val) => {
	i18n.changeLanguage(val); // 传入 'en' / 'zh'
};
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用 react-i18next 进行英文切换,需要先安装 react-i18nexti18next 两个模块。可以使用以下命令安装: ``` 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 在你的应用程序实现英文切换

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值