2015-12-07 21:55:17 +01:00
|
|
|
/* global webshim */
|
|
|
|
|
2015-11-20 02:18:19 +01:00
|
|
|
export default {
|
|
|
|
name: 'i18n',
|
2016-01-28 23:48:14 +01:00
|
|
|
initialize({ container }) {
|
|
|
|
const i18n = container.lookup('service:i18n');
|
|
|
|
const availableLocales = i18n.get('locales');
|
|
|
|
const moment = container.lookup('service:moment');
|
|
|
|
const locale = getLocale(availableLocales);
|
2015-11-20 02:18:19 +01:00
|
|
|
|
|
|
|
i18n.set('locale', locale);
|
2015-11-23 13:32:40 +01:00
|
|
|
moment.changeLocale(locale);
|
2015-12-07 21:51:07 +01:00
|
|
|
webshim.activeLang(locale);
|
2015-12-07 22:21:38 +01:00
|
|
|
|
|
|
|
i18n.addObserver('locale', i18n, function() {
|
2016-01-28 23:48:14 +01:00
|
|
|
const locale = this.get('locale');
|
|
|
|
// give cookie a lifetime of one year
|
|
|
|
const maxAge = 60 * 60 * 24 * 356;
|
2015-12-07 22:21:38 +01:00
|
|
|
moment.changeLocale(locale);
|
|
|
|
webshim.activeLang(locale);
|
|
|
|
|
|
|
|
// save selected locale in cookie
|
2016-01-28 23:48:14 +01:00
|
|
|
document.cookie = `language=${locale};max-age=${maxAge};`;
|
2015-12-07 22:21:38 +01:00
|
|
|
});
|
2015-11-20 02:18:19 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
function getLocale(availableLocales) {
|
2016-01-28 23:48:14 +01:00
|
|
|
const methods = [
|
2015-12-07 22:21:38 +01:00
|
|
|
getLocaleFromCookie,
|
|
|
|
getLocaleByBrowser
|
2015-11-20 02:18:19 +01:00
|
|
|
];
|
2016-01-28 23:48:14 +01:00
|
|
|
let locale;
|
2015-11-20 02:18:19 +01:00
|
|
|
|
|
|
|
methods.any((method) => {
|
2016-01-28 23:48:14 +01:00
|
|
|
let l = method();
|
2015-11-20 02:18:19 +01:00
|
|
|
if (l && availableLocales.indexOf(l) !== -1) {
|
|
|
|
locale = l;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
if (locale) {
|
|
|
|
return locale;
|
|
|
|
} else {
|
|
|
|
return 'en';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function getLocaleByBrowser() {
|
2016-01-28 23:48:14 +01:00
|
|
|
return (window.navigator.userLanguage || window.navigator.language).split('-')[0];
|
2015-11-20 02:18:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function getLocaleFromCookie() {
|
2016-01-28 23:48:14 +01:00
|
|
|
let language;
|
2015-11-20 02:18:19 +01:00
|
|
|
|
2016-01-28 23:48:14 +01:00
|
|
|
const cookie = document.cookie.replace(' ', '').split(';');
|
|
|
|
cookie.forEach(function(t) {
|
|
|
|
let x = t.split('=');
|
|
|
|
if (x[0] === 'language') {
|
2015-11-20 02:18:19 +01:00
|
|
|
language = x[1];
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return language;
|
|
|
|
}
|