diff --git a/website/client/src/app.vue b/website/client/src/app.vue index 31b6a912b4..d6174f9ac2 100644 --- a/website/client/src/app.vue +++ b/website/client/src/app.vue @@ -406,7 +406,10 @@ export default { this.$store.state.isUserLoaded = true; Analytics.setUser(); Analytics.updateUser(); - + return axios.get('/api/v4/i18n/browser-script', { language: this.user.preferences.language }); + }).then(() => { + const i18nData = window && window['habitica-i18n']; + this.$loadLocale(i18nData); this.hideLoadingScreen(); // Adjust the timezone offset diff --git a/website/client/src/libs/i18n.js b/website/client/src/libs/i18n.js index 35d0233f37..7079d7e4eb 100644 --- a/website/client/src/libs/i18n.js +++ b/website/client/src/libs/i18n.js @@ -4,28 +4,32 @@ import moment from 'moment'; import i18n from '@/../../common/script/i18n'; +function loadLocale (i18nData) { + // Load i18n strings + i18n.strings = i18nData.strings; + + // Load Moment.js locale + const { language } = i18nData; + + if (language && i18nData.momentLang && language.momentLangCode) { + // Make moment available under `window` so that the locale can be set + window.moment = moment; + + // Execute the script and set the locale + const head = document.getElementsByTagName('head')[0]; + const script = document.createElement('script'); + script.type = 'text/javascript'; + script.text = i18nData.momentLang; + head.appendChild(script); + moment.locale(language.momentLangCode); + } +} + export default { install (Vue, { i18nData }) { - if (i18nData) { - // Load i18n strings - i18n.strings = i18nData.strings; + if (i18nData) loadLocale(i18nData); - // Load Moment.js locale - const { language } = i18nData; - - if (language && i18nData.momentLang && language.momentLangCode) { - // Make moment available under `window` so that the locale can be set - window.moment = moment; - - // Execute the script and set the locale - const head = document.getElementsByTagName('head')[0]; - const script = document.createElement('script'); - script.type = 'text/javascript'; - script.text = i18nData.momentLang; - head.appendChild(script); - moment.locale(language.momentLangCode); - } - } + Vue.prototype.$loadLocale = loadLocale; Vue.prototype.$t = function translateString (...args) { return i18n.t.apply(null, [...args]);