summaryrefslogtreecommitdiffstats
path: root/front/odiparpack/app/containers/LanguageProvider/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'front/odiparpack/app/containers/LanguageProvider/index.js')
-rw-r--r--front/odiparpack/app/containers/LanguageProvider/index.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/front/odiparpack/app/containers/LanguageProvider/index.js b/front/odiparpack/app/containers/LanguageProvider/index.js
new file mode 100644
index 0000000..666240d
--- /dev/null
+++ b/front/odiparpack/app/containers/LanguageProvider/index.js
@@ -0,0 +1,51 @@
+/*
+ *
+ * LanguageProvider
+ *
+ * this component connects the redux state language locale to the
+ * IntlProvider component and i18n messages (loaded from `app/translations`)
+ */
+
+import React from 'react';
+import PropTypes from 'prop-types';
+import { connect } from 'react-redux';
+import { createSelector } from 'reselect';
+import { IntlProvider } from 'react-intl';
+
+import { makeSelectLocale } from './selectors';
+
+export class LanguageProvider extends React.PureComponent {
+ // eslint-disable-line react/prefer-stateless-function
+ render() {
+ return (
+ <IntlProvider
+ locale={this.props.locale}
+ key={this.props.locale}
+ messages={this.props.messages[this.props.locale]}
+ >
+ {React.Children.only(this.props.children)}
+ </IntlProvider>
+ );
+ }
+}
+
+LanguageProvider.propTypes = {
+ locale: PropTypes.string.isRequired,
+ messages: PropTypes.object.isRequired,
+ children: PropTypes.element.isRequired,
+};
+
+const mapStateToProps = createSelector(makeSelectLocale(), locale => ({
+ locale,
+}));
+
+function mapDispatchToProps(dispatch) {
+ return {
+ dispatch,
+ };
+}
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps,
+)(LanguageProvider);