joyent-portal/frontend/src/intl.js

36 lines
905 B
JavaScript
Raw Normal View History

import qs from 'querystring';
import { addLocaleData } from 'react-intl';
2016-10-20 22:42:39 +03:00
export default (({
2016-10-20 22:42:39 +03:00
Locales = {},
ReactIntlLocaleData = {}
}) => {
const en = Locales['en-us'] || {};
Object.keys(ReactIntlLocaleData).forEach((lang) => {
addLocaleData(ReactIntlLocaleData[lang] || []);
});
// http://stackoverflow.com/a/38150585
const detectedLocale = (
qs.parse((document.location.search || '').replace(/^\?/, '')).locale ||
(navigator.languages && navigator.languages[0]) || // Chrome / Firefox
2016-10-20 22:42:39 +03:00
navigator.language || // All browsers
navigator.userLanguage || // IE <= 10
'en-US'
).toLowerCase();
const lang = detectedLocale.split(/-/)[0];
2016-10-24 16:11:50 +03:00
const locale = ReactIntlLocaleData[lang]
? (Locales[detectedLocale] ? detectedLocale : 'en-us')
: 'en-us';
2016-10-20 22:42:39 +03:00
return {
locale,
messages: {
...en,
...(Locales[locale] || {})
}
};
})(window);