translate-redux.jsx 1.46 KB
Newer Older
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
import React from 'react';
import { connect } from 'react-redux';
import LanguageHelper from './LanguageHelper';

const languages = LanguageHelper.availableLanguages();

export default function translate(key) {
  return (Component) => {
    class TranslationComponent extends React.Component {
      render() {
        let strings = null;
        let language = null;
        // Revisar que venga un lenguaje en el estado de redux
        if (typeof (this.props.language) !== 'undefined') {
          language = languages[this.props.language];
        }
        // Revisar que el lenguaje en redux esté disponible
        if (typeof (language) !== 'undefined' && language !== null) {
          strings = language[key];
        }
        // Revisar que el subdiccionario esté disponible
        if (typeof (strings) !== 'undefined' && strings !== null) {
          return <Component {...this.props} {...this.state} strings={strings} />;
        }
        // Si algo falla, devolver el componente sin modificar
        return <Component {...this.props} {...this.state} />;
      }
    }

    TranslationComponent.propTypes = {
      language: React.PropTypes.string,
    };

    // Se asume que el estado de redux tiene un string llamado "language",
    // inicializado en un componente padre.
    function mapStateToProps(state) {
      return {
        language: state.language,
      };
    }

    // Inyectar los props de redux
    return connect(mapStateToProps)(TranslationComponent);
  };
}