From 0fe9a7ba45fb9e27768dac5ee04d9e4e42de4ced Mon Sep 17 00:00:00 2001
From: chrisgarrity <chrisg@media.mit.edu>
Date: Fri, 21 Jul 2017 11:46:13 -0400
Subject: [PATCH] localeData cleanup

move all locale data (react-intl/locale-data and gui messages) into locale.js. This also makes switching to an external node package easier because the package just needs to export the same thing as locale.js.
---
 scripts/generate-locale-messages.js           |  3 +--
 .../language-selector/language-selector.jsx   |  4 ++--
 src/languages.json                            |  5 ----
 src/locale.js                                 | 23 +++++++++++++++++++
 src/reducers/intl.js                          | 13 +++++------
 5 files changed, 32 insertions(+), 16 deletions(-)
 delete mode 100644 src/languages.json
 create mode 100644 src/locale.js

diff --git a/scripts/generate-locale-messages.js b/scripts/generate-locale-messages.js
index 6534d25e2..fb6bf359a 100755
--- a/scripts/generate-locale-messages.js
+++ b/scripts/generate-locale-messages.js
@@ -42,12 +42,11 @@ Missing locales are ignored, react-intl will use the default messages for them.
 const fs = require('fs');
 const path = require('path');
 const mkdirp = require('mkdirp');
-const languages = require('../src/languages.json');
 
+const locales = ['en', 'es', 'fr'];
 const LANG_DIR = './translations/';
 const MSGS_DIR = './locale/';
 
-const locales = Object.keys(languages);
 let messages = locales.reduce((collection, lang) => {
     let langMessages = {};
     try {
diff --git a/src/components/language-selector/language-selector.jsx b/src/components/language-selector/language-selector.jsx
index febf81645..81f2b596d 100644
--- a/src/components/language-selector/language-selector.jsx
+++ b/src/components/language-selector/language-selector.jsx
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
 import React from 'react';
 
 import Box from '../box/box.jsx';
-import languages from '../../languages.json';
+import languages from '../../locale.js';
 import languageIcon from './language-icon.svg';
 import styles from './language-selector.css';
 
@@ -27,7 +27,7 @@ const LanguageSelector = ({
                         key={locale}
                         value={locale}
                     >
-                        {languages[locale]}
+                        {languages[locale].name}
                     </option>
                 ))}
             </select>
diff --git a/src/languages.json b/src/languages.json
deleted file mode 100644
index f621c71d7..000000000
--- a/src/languages.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-    "en": "English",
-    "es": "Español",
-    "fr": "Français"
-}
diff --git a/src/locale.js b/src/locale.js
new file mode 100644
index 000000000..ad3fcff79
--- /dev/null
+++ b/src/locale.js
@@ -0,0 +1,23 @@
+import localeDataEn from 'react-intl/locale-data/en';
+import localeDataEs from 'react-intl/locale-data/es';
+import localeDataFr from 'react-intl/locale-data/fr';
+
+import messages from '../locale/messages.json'; // eslint-disable-line import/no-unresolved
+
+export default {
+    en: {
+        name: 'English',
+        localeData: localeDataEn,
+        messages: messages.en
+    },
+    es: {
+        name: 'Español',
+        localeData: localeDataEs,
+        messages: messages.es
+    },
+    fr: {
+        name: 'Français',
+        localeData: localeDataFr,
+        messages: messages.fr
+    }
+};
diff --git a/src/reducers/intl.js b/src/reducers/intl.js
index 5117801cb..51bce5e56 100644
--- a/src/reducers/intl.js
+++ b/src/reducers/intl.js
@@ -1,26 +1,25 @@
 import {addLocaleData} from 'react-intl';
 import {updateIntl as superUpdateIntl} from 'react-intl-redux';
-import languages from '../languages.json';
-import messages from '../../locale/messages.json'; // eslint-disable-line import/no-unresolved
-
 import {IntlProvider, intlReducer} from 'react-intl-redux';
 
-Object.keys(languages).forEach(locale => {
+import locales from '../locale.js';
+
+Object.keys(locales).forEach(locale => {
     // TODO: will need to handle locales not in the default intl - see www/custom-locales
-    import(`react-intl/locale-data/${locale}`).then(data => addLocaleData(data));
+    addLocaleData(locales[locale].localeData);
 });
 
 const intlInitialState = {
     intl: {
         defaultLocale: 'en',
         locale: 'en',
-        messages: messages.en
+        messages: locales.en.messages
     }
 };
 
 const updateIntl = locale => superUpdateIntl({
     locale: locale,
-    messages: messages[locale] || messages.en
+    messages: locales[locale].messages || locales.en.messages
 });
 
 export {
-- 
GitLab