【React】使用react-intl-universa国际化

我在做一个项目时有国际化的要求,查询后发现可以使用阿里的 react-intl-universal

先安装到项目里

yarn add react-intl-universal

在项目中使用时发现 将国际化内容放在 react-redux的Provider里会导致bug,组件延迟变化,所以我在最外层又套了一个antd框架提供的 ConfigProvider 具体使用如下

在app.js入口文件中

。
。
。
// 国际化
import { ConfigProvider } from 'antd';
import intl from 'react-intl-universal';
import { emit } from "./common/utils/emit";
import locales from './locales/locales';
class App extends Component {

  constructor(props) {
    super(props);
    this.state = {
      antdLang: locales.en_US,  // 语言状态
    }
  }
  componentDidMount() {
    emit.on('change_language', lang => this.loadLocales(lang)); // 监听语言改变事件
    this.loadLocales(); // 初始化语言
  }
  loadLocales(lang = 'en-US') {
    intl.init({
      currentLocale: lang,  // 设置初始语音
      locales,
    }).then(() => {
      this.setState({
        antdLang: lang === 'zh-CN' ? locales.zh_CN : locales.en_US
      });
    });
  }


  render(){
    return (
     //放在这里
      
         //将redux保存在local中
          
        
      
    
  );
  }
}

export default App;

在Header中设置一个Select来切换语言

// 国际化语言切换
import intl from 'react-intl-universal';
import { emit } from "../utils/emit";

const { Option } = Select;

  //国际化监听器
  function handleLangChange(val){
      // 发送消息
      emit.emit('change_language', val);
  };

  render() {
。
。
。
//切换语言
  
。
。
。

emit.js


import EventEmitter from 'events'
const emit = new EventEmitter(); 
export { emit };

然而 这样子在比如table的colums中引用时失败了 

于是参考https://blog.csdn.net/chenqk_123/article/details/102858073

设置了一个中间件来调用

你可能感兴趣的:(React,前端)