diff --git a/scripts/generate-locale-messages.js b/scripts/generate-locale-messages.js
index 6534d25e276fb98afc3d297c4a0893127336aad9..fb6bf359a23db0c4dc583476fc18896befe8683a 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 febf81645f75c9c86308fad77fe4571340799669..81f2b596d1649b45791d9088414f64187008772c 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 f621c71d7083cf9b76b3a081aeebc5b5afba929a..0000000000000000000000000000000000000000
--- 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 0000000000000000000000000000000000000000..ad3fcff79710fa84116934935a5953d9f83119f3
--- /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 5117801cb140d193235c17f26f14e15c8541e2f0..51bce5e56350756287d12bf9273f2b2e1edf5ba8 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 {