2016-08-21 14:31:39 +02:00
|
|
|
import Ember from 'ember';
|
|
|
|
|
|
|
|
const { getOwner } = Ember;
|
|
|
|
|
2015-11-20 02:18:19 +01:00
|
|
|
export default {
|
|
|
|
name: 'i18n',
|
2016-08-12 20:08:49 +02:00
|
|
|
initialize(appInstance) {
|
|
|
|
const i18n = appInstance.lookup('service:i18n');
|
2016-01-28 23:48:14 +01:00
|
|
|
const availableLocales = i18n.get('locales');
|
2015-12-07 22:21:38 +01:00
|
|
|
|
2016-08-21 14:31:39 +02:00
|
|
|
i18n.addObserver('locale', i18n, localeChanged);
|
|
|
|
i18n.set('locale', getLocale(availableLocales));
|
2015-11-20 02:18:19 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
function getLocale(availableLocales) {
|
2016-01-28 23:48:14 +01:00
|
|
|
const methods = [
|
2016-08-21 14:31:39 +02:00
|
|
|
getSavedLocale,
|
2015-12-07 22:21:38 +01:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2016-08-21 14:31:39 +02:00
|
|
|
function getSavedLocale() {
|
|
|
|
let { localStorage } = window;
|
2015-11-20 02:18:19 +01:00
|
|
|
|
2016-08-21 14:31:39 +02:00
|
|
|
// test browser support
|
|
|
|
if (!localStorage) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
return localStorage.getItem('locale');
|
|
|
|
}
|
|
|
|
|
|
|
|
function saveLocale(locale) {
|
|
|
|
let { localStorage } = window;
|
|
|
|
|
|
|
|
// test browser support
|
|
|
|
if (!localStorage) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
localStorage.setItem('locale', locale);
|
|
|
|
}
|
|
|
|
|
|
|
|
function localeChanged() {
|
|
|
|
let locale = this.get('locale');
|
|
|
|
getOwner(this).lookup('service:moment').changeLocale(locale);
|
|
|
|
saveLocale(locale);
|
2015-11-20 02:18:19 +01:00
|
|
|
}
|