59 lines
1.4 KiB
JavaScript
Raw Normal View History

2016-08-18 11:41:13 +02:00
/**
* i18n.js
*
2016-10-13 20:53:33 +02:00
* This will setup the i18n language files and locale data for your plugin.
2016-08-18 11:41:13 +02:00
*
*/
2017-08-14 15:22:42 +02:00
import { addLocaleData } from 'react-intl';
import { reduce } from 'lodash';
2016-08-18 11:41:13 +02:00
2017-08-14 15:22:42 +02:00
// Import config
import { languages } from '../../config/admin.json';
2016-08-18 11:41:13 +02:00
2017-08-14 15:22:42 +02:00
/**
* Try to require translation file.
*
* @param language {String}
*/
2017-08-16 19:27:56 +02:00
const requireTranslations = language => {
2017-08-14 15:22:42 +02:00
try {
2017-08-16 19:27:56 +02:00
return require(`./translations/${language}.json`); // eslint-disable-line global-require
2017-08-14 15:22:42 +02:00
} catch (error) {
console.error(`Unable to load "${language}" translation. Please make sure "${language}.json" file exists in "admin/public/app/translations" folder.`);
return false;
}
2016-08-18 11:41:13 +02:00
};
2017-08-14 15:22:42 +02:00
/**
* Try to require the language in `react-intl` locale data
* and add locale data if it has been found.
*
* @param language {String}
*/
2017-08-16 19:27:56 +02:00
const addLanguageLocaleData = language => {
2017-08-14 15:22:42 +02:00
try {
2017-08-16 19:27:56 +02:00
const localeData = require(`react-intl/locale-data/${language}`); // eslint-disable-line global-require
2017-08-14 15:22:42 +02:00
addLocaleData(localeData);
return true;
} catch (error) {
console.error(`It looks like the language "${language}" is not supported by "react-intl" module.`);
return false;
}
2016-10-13 19:31:29 +02:00
};
2017-08-14 15:22:42 +02:00
/**
* Dynamically generate `translationsMessages object`.
*/
const translationMessages = reduce(languages, (result, language) => {
const obj = result;
obj[language] = requireTranslations(language);
addLanguageLocaleData(language);
return obj;
}, {});
2016-10-13 19:31:29 +02:00
export {
2017-08-14 15:22:42 +02:00
languages,
2016-10-13 19:31:29 +02:00
translationMessages,
2016-08-18 11:41:13 +02:00
};