decide.nolog.cz/app/instance-initializers/i18n.js

66 lines
1.4 KiB
JavaScript
Raw Normal View History

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);
moment.changeLocale(locale);
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;
}