Set i18n locale when changing route

pull/5028/head
Angel Fernando Quiroz Campos 2 years ago
parent 24edd0e647
commit 489b4ce031
  1. 17
      assets/vue/App.vue
  2. 64
      assets/vue/composables/locale.js

@ -50,6 +50,8 @@ import { useSecurityStore } from "./store/securityStore"
import { usePlatformConfig } from "./store/platformConfig"
import Toast from "primevue/toast"
import { useNotification } from "./composables/notification"
import { useLocale } from "./composables/locale"
import { useI18n } from "vue-i18n"
const apolloClient = new ApolloClient({
link: createHttpLink({
@ -62,6 +64,7 @@ provide(DefaultApolloClient, apolloClient)
const route = useRoute()
const router = useRouter()
const i18n = useI18n()
const layout = computed(() => {
const queryParams = new URLSearchParams(window.location.search)
@ -161,4 +164,18 @@ axios.interceptors.response.use(
const platformConfigurationStore = usePlatformConfig()
platformConfigurationStore.initialize()
watch(
() => route.params,
() => {
const { appLocale } = useLocale()
if (i18n.locale.value !== appLocale.value) {
i18n.locale.value = appLocale.value
}
},
{
inmediate: true
}
)
</script>

@ -0,0 +1,64 @@
import {usePlatformConfig} from "../store/platformConfig";
import {useSecurityStore} from "../store/securityStore";
import {useCidReqStore} from "../store/cidReq";
import {computed, ref} from "vue";
export function useLocale() {
const platformConfigStore = usePlatformConfig()
const securityStore = useSecurityStore()
const cidReqStore = useCidReqStore()
const localeList = computed(() => {
const list = {};
const platformLocale = platformConfigStore.getSetting('language.platform_language')
if (platformLocale) {
list['platform_lang'] = platformLocale
}
const userLocale = securityStore.user ? securityStore.user.locale : null
if (userLocale) {
list['user_profil_lang'] = userLocale
}
const courseLocale = cidReqStore.course ? cidReqStore.course.courseLanguage : null
if (courseLocale) {
list['course_lang'] = courseLocale
}
// @todo check language from request
//list['user_selected_lang'] = ?
return list
});
const priorityList = [
'language_priority_1',
'language_priority_2',
'language_priority_3',
'language_priority_4',
]
const appLocale = ref('')
for (const setting of priorityList) {
const priority = platformConfigStore.getSetting(`language.${setting}`)
if (priority && localeList.value[priority]) {
appLocale.value = localeList.value[priority]
break
}
}
if (!appLocale.value) {
appLocale.value = document.querySelector('html').lang
}
return {
appLocale
}
}
Loading…
Cancel
Save