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
|
2017-11-02 19:36:09 +01:00
|
|
|
import { languages } from './config/languages.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) {
|
2017-08-23 11:20:43 +02:00
|
|
|
console.error(`Unable to load "${language}" translation. Please make sure "${language}.json" file exists in "admin/public/app/translations" folder.`); // eslint-disable-line no-console
|
2017-08-14 15:22:42 +02:00
|
|
|
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) {
|
2018-05-14 16:11:58 +02:00
|
|
|
console.warn(`⚠️ It looks like the language "${language}" is not supported by "react-intl" module.`); // eslint-disable-line no-console
|
2017-08-14 15:22:42 +02:00
|
|
|
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
|
|
|
};
|