fix(language): load locale during build of app.vue

This commit is contained in:
SabreCat
2021-11-18 11:00:01 -06:00
parent 30a5c3f91b
commit c7c17dbb55
2 changed files with 27 additions and 20 deletions

View File

@@ -406,7 +406,10 @@ export default {
this.$store.state.isUserLoaded = true; this.$store.state.isUserLoaded = true;
Analytics.setUser(); Analytics.setUser();
Analytics.updateUser(); 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(); this.hideLoadingScreen();
// Adjust the timezone offset // Adjust the timezone offset

View File

@@ -4,28 +4,32 @@
import moment from 'moment'; import moment from 'moment';
import i18n from '@/../../common/script/i18n'; 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 { export default {
install (Vue, { i18nData }) { install (Vue, { i18nData }) {
if (i18nData) { if (i18nData) loadLocale(i18nData);
// Load i18n strings
i18n.strings = i18nData.strings;
// Load Moment.js locale Vue.prototype.$loadLocale = loadLocale;
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.$t = function translateString (...args) { Vue.prototype.$t = function translateString (...args) {
return i18n.t.apply(null, [...args]); return i18n.t.apply(null, [...args]);