如何在Vue上重新加载页面时阻止i18n恢复默认语言环境?

问题描述 投票:0回答:1

我正在使用i18n在Vue上翻译我的应用程序。我创建了一个组件名称LocaleChanger,以允许用户更改应用程序语言。我在两个不同的地方使用它:在登录页面和仪表板页面中。

默认语言环境语言是西班牙语。我在登录页面中,将语言更改为英语,然后登录并推送至仪表板。语言仍然是英语。但是,如果我重新加载页面,语言将变为西班牙语。如何阻止这种情况的发生?

这是我的组件

<template>
  <v-menu offset-y>
      <template v-slot:activator="{ on }">
        <v-btn class="transparent" rounded outlined v-on="on">
          <v-icon class="pr-3">mdi-web</v-icon> 
           {{  $store.getters.getAppLanguage }}
          <v-icon class="pl-3">mdi-menu-down</v-icon> 
        </v-btn>
      </template>

      <v-list>
        <v-list-item-group>
          <v-list-item
            v-for="(item, i) in items"
            :key="i"
            @click="setLanguage(item)"
          >
            <v-list-item-content class="text-center">
              <v-list-item-title v-text="item.text"></v-list-item-title>
            </v-list-item-content>
          </v-list-item>
        </v-list-item-group>
      </v-list>
    </v-menu>
</template>

<script>
export default {
  name: 'LocaleChanger',
  data () {
    return {
      selectedLanguage: this.$store.getters.getAppLanguage,
      items: [
        {
          text: 'ES',
        },
        {
          text: 'EN',
        },
      ],
    }
  },
  methods: {
    // Set local i18n language acording to the language user has selected 
    setLanguage (item) {
      if (item.text == 'ES') {
        i18n.locale = 'es'
        this.$store.commit('setAppLanguage', 'ES')
      } else if (item.text == 'EN') {
        i18n.locale = 'en'
        this.$store.commit('setAppLanguage', 'EN')     
      }
    },
  },
}
</script>

还有这个i18n.js

Vue.use(VueI18n)

const messages = {
  en: {
    ...require('@/locales/en.json'),
    $vuetify: en,
  },
  es: {
    ...require('@/locales/es.json'),
    $vuetify: es,
  },
}

export default new VueI18n({
  locale: process.env.VUE_APP_I18N_LOCALE || 'es',
  fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en',
  messages,
})

vue.js internationalization persistence
1个回答
1
投票

您可以使用localstorage保留信息。

在您的商店中,尝试从appLanguage中获取localStorage

export default new Vuex.Store({
  state: {
    appLanguage: localStorage.getItem("appLanguage") || process.env.VUE_APP_I18N_LOCALE || 'es'
  },
  getters: {
    getAppLanguage: (state) => state.appLanguage
  },
  mutations: {
    setAppLanguage(state, language) {
      state.appLanguage = language;
      localStorage.setItem("language", language); // Whenever we change the appLanguage we save it to the localStorage
    }
  }
})

然后使用商店中的值初始化localStorage

import store  from "./store.js";

export default new VueI18n({
  locale: store.getters.appLanguage,
  messages,
})

https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

© www.soinside.com 2019 - 2024. All rights reserved.