translate-context.jsx 1.23 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
import { default as React } from 'react'
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 contexto
        if (typeof(this.context.language) !== 'undefined') {
          language = languages[this.context.language]
        }
        // Revisar que el lenguaje en el contexto 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} />
      }
    }

    // Este contexto se configura en el componente padre, usando getChildContext
    TranslationComponent.contextTypes = {
      language: React.PropTypes.string
    }

    return TranslationComponent
  }
}