TT#55909 i18n: After first login the current selected language shows "unknown"

Change-Id: I4ee74d78e33030149cfa4067603a35c6c98b6010
changes/46/28346/3
Hans-Peter Herzog 7 years ago
parent be8ece395b
commit 1fc7d7c848

File diff suppressed because it is too large Load Diff

@ -33,6 +33,7 @@
<q-popover ref="languagePopover"> <q-popover ref="languagePopover">
<csc-user-menu <csc-user-menu
:language-label="languageLabel" :language-label="languageLabel"
:language-labels="languageLabels"
@change-language="changeLanguage" @change-language="changeLanguage"
/> />
</q-popover> </q-popover>
@ -188,7 +189,10 @@
} from 'quasar-framework' } from 'quasar-framework'
import CscMainMenu from "./MainMenu" import CscMainMenu from "./MainMenu"
import CscUserMenu from "./UserMenu" import CscUserMenu from "./UserMenu"
import { i18n } from "../../i18n" import {
getLanguageLabel
} from "../../i18n";
export default { export default {
name: 'default', name: 'default',
data() { data() {
@ -278,7 +282,9 @@
'hasSendFaxFeature', 'hasSendFaxFeature',
'userDataRequesting', 'userDataRequesting',
'userDataSucceeded', 'userDataSucceeded',
'changeSessionLocaleState' 'changeSessionLocaleState',
'locale',
'languageLabels'
]), ]),
...mapGetters('communication', [ ...mapGetters('communication', [
'createFaxState', 'createFaxState',
@ -331,15 +337,9 @@
return classes; return classes;
}, },
languageLabel() { languageLabel() {
let i18nLocale = i18n.locale.split('-')[0]; return this.$t('language', {
let locale = 'Unknown'; language: getLanguageLabel(this.locale)
if (i18nLocale === 'en') { });
locale = 'English';
}
else if (i18nLocale === 'fr') {
locale = 'français';
}
return this.$t('language', {language: locale});
} }
}, },
methods: { methods: {

@ -70,7 +70,8 @@
</q-collapsible> </q-collapsible>
<q-collapsible <q-collapsible
:opened="isCallBlocking" :opened="isCallBlocking"
intend icon="block" intend
icon="block"
:label="$t('navigation.callBlocking.title')" :label="$t('navigation.callBlocking.title')"
> >
<q-side-link <q-side-link

@ -3,28 +3,24 @@
no-border no-border
link link
highlight highlight
class="csc-toolbar-btn-popover" class="csc-language-selection csc-toolbar-btn-popover"
> >
<q-collapsible <q-collapsible
ref="languageCollapsible" ref="languageCollapsible"
:label="languageLabel" :label="languageLabel"
class="csc-collapsible-menu" intend
> >
<q-list <q-item
no-border v-for="(language, index) in languageLabels"
@click="changeLanguage(language[0])"
:key="index"
highlight highlight
link
> >
<q-item <q-item-main
v-for="(language, index) in languages" :label="language[1]"
@click="changeLanguage(language[0])" />
class="csc-subitem" </q-item>
:key="index"
>
<q-item-main
:label="language[1]"
/>
</q-item>
</q-list>
</q-collapsible> </q-collapsible>
</q-list> </q-list>
</template> </template>
@ -34,30 +30,29 @@
QList, QList,
QItem, QItem,
QItemMain, QItemMain,
QCollapsible QCollapsible,
QItemSide,
QSideLink
} from 'quasar-framework' } from 'quasar-framework'
export default { export default {
name: 'csc-user-menu', name: 'csc-user-menu',
props: [ props: [
'languageLabel' 'languageLabel',
'languageLabels'
], ],
data () { data () {
return { return {}
languages: [
['en', 'English'],
['fr', 'français']
]
}
}, },
components: { components: {
QList, QList,
QItem, QItem,
QItemMain, QItemMain,
QCollapsible QCollapsible,
QItemSide,
QSideLink
}, },
methods: { methods: {
changeLanguage(language) { changeLanguage(language) {
console.log(language);
this.$emit('change-language', language); this.$emit('change-language', language);
this.$refs.languageCollapsible.close(); this.$refs.languageCollapsible.close();
} }
@ -66,4 +61,7 @@
</script> </script>
<style lang="stylus" rel="stylesheet/stylus"> <style lang="stylus" rel="stylesheet/stylus">
.csc-language-selection
.q-item-side-right
color white
</style> </style>

@ -3,18 +3,36 @@ import Vue from 'vue'
import VueI18n from 'vue-i18n' import VueI18n from 'vue-i18n'
import localeEn from './locales/en' import localeEn from './locales/en'
import localeFr from './locales/fr' import localeFr from './locales/fr'
import { SessionStorage } from 'quasar-framework' import {
SessionStorage
} from 'quasar-framework'
Vue.use(VueI18n); Vue.use(VueI18n);
export const locales = { export const defaultLocale = 'en-US';
en: localeEn,
fr: localeFr if(!SessionStorage.has('locale')) {
}; SessionStorage.set('locale', navigator.language);
}
export const i18n = new VueI18n({ export const i18n = new VueI18n({
locale: SessionStorage.get.item('locale') || navigator.language || navigator.userLanguage, locale: SessionStorage.get.item('locale'),
fallbackLocale: 'en', fallbackLocale: defaultLocale,
messages: locales messages: {
'en-US': localeEn,
'fr': localeFr
}
}); });
export function getLanguageLabels() {
let languageLabels = [];
Object.keys(i18n.messages).forEach((locale)=>{
languageLabels.push([locale, i18n.messages[locale].languageLabel]);
});
return languageLabels;
}
export function getLanguageLabel(locale) {
return i18n.messages[locale].languageLabel;
}

@ -10,6 +10,7 @@
"loggedInAs": "Logged in as", "loggedInAs": "Logged in as",
"notFound" : "404 Not Found", "notFound" : "404 Not Found",
"language": "Language ({language})", "language": "Language ({language})",
"languageLabel": "English",
"buttons": { "buttons": {
"cancel": "Cancel", "cancel": "Cancel",
"save": "Save", "save": "Save",

@ -9,6 +9,7 @@
"sendFax": "Envoyer un Fax", "sendFax": "Envoyer un Fax",
"loggedInAs": "Connecté en tant que", "loggedInAs": "Connecté en tant que",
"notFound": "Erreur 404", "notFound": "Erreur 404",
"languageLabel": "français",
"buttons": { "buttons": {
"cancel": "Annuler", "cancel": "Annuler",
"save": "Enregistrer", "save": "Enregistrer",

@ -15,7 +15,8 @@ import CommunicationModule from './communication'
import VoiceboxModule from './voicebox' import VoiceboxModule from './voicebox'
import ConferenceModule from './conference' import ConferenceModule from './conference'
import { import {
i18n i18n,
getLanguageLabels
} from '../i18n'; } from '../i18n';
import RtcEnginePlugin from "../plugins/rtc-engine"; import RtcEnginePlugin from "../plugins/rtc-engine";
import CallPlugin from "../plugins/call"; import CallPlugin from "../plugins/call";
@ -90,6 +91,10 @@ export const store = new Vuex.Store({
store.commit('call/inputNumber'); store.commit('call/inputNumber');
}, errorVisibilityTimeout); }, errorVisibilityTimeout);
}); });
},
function initI18n(store) {
store.commit('user/setLanguageLabels', getLanguageLabels());
store.commit('user/changeSessionLocaleSucceeded', i18n.locale);
} }
] ]
}); });

@ -37,7 +37,8 @@ export default {
rtcEngineInitError: null, rtcEngineInitError: null,
sessionLocale: null, sessionLocale: null,
changeSessionLocaleState: RequestState.initiated, changeSessionLocaleState: RequestState.initiated,
changeSessionLocaleError: null changeSessionLocaleError: null,
languageLabels: []
}, },
getters: { getters: {
isLogged(state) { isLogged(state) {
@ -129,6 +130,12 @@ export default {
}, },
changeSessionLocaleState(state) { changeSessionLocaleState(state) {
return state.changeSessionLocaleState; return state.changeSessionLocaleState;
},
locale(state) {
return state.sessionLocale;
},
languageLabels(state) {
return state.languageLabels;
} }
}, },
mutations: { mutations: {
@ -193,7 +200,6 @@ export default {
state.changeSessionLocaleError = null; state.changeSessionLocaleError = null;
}, },
changeSessionLocaleSucceeded(state, locale) { changeSessionLocaleSucceeded(state, locale) {
i18n.locale = locale;
state.sessionLocale = locale; state.sessionLocale = locale;
state.changeSessionLocaleState = RequestState.succeeded; state.changeSessionLocaleState = RequestState.succeeded;
state.changeSessionLocaleError = null; state.changeSessionLocaleError = null;
@ -201,6 +207,9 @@ export default {
changeSessionLocaleFailed(state, error) { changeSessionLocaleFailed(state, error) {
state.changeSessionLocaleState = RequestState.failed; state.changeSessionLocaleState = RequestState.failed;
state.changeSessionLocaleError = error; state.changeSessionLocaleError = error;
},
setLanguageLabels(state, languageLabels) {
state.languageLabels = languageLabels;
} }
}, },
actions: { actions: {
@ -260,13 +269,12 @@ export default {
context.commit('changeSessionLocaleRequesting'); context.commit('changeSessionLocaleRequesting');
try { try {
SessionStorage.set('locale', locale); SessionStorage.set('locale', locale);
i18n.locale = locale;
context.commit('changeSessionLocaleSucceeded', locale);
} }
catch(error) { catch(error) {
context.commit('changeSessionLocaleFailed', error); context.commit('changeSessionLocaleFailed', error);
} }
finally {
context.commit('changeSessionLocaleSucceeded', locale);
}
} }
} }
}; };

Loading…
Cancel
Save