解决pinia中的i18n切换语言不生效的问题
  Z0pAq4icWGd6 2023年11月01日 63 0
Vue

在我的项目中,使用i18n切换语言后,会进行router.push来刷新页面。

但我发现写在store中的选项(我把它们用作下拉框组件的options,例如options="store.statusOption"),却并没有切换语言。它们需要我手动刷新页面后才能够切换语言。然而其它组件中的语言切换都很正常。

//修改之前
export const selectStore = defineStore('selectOption', {
  state: () => {
    return {
      ...
        statusOption: [
        {
          label: `${i18n.global.t('start')}`,
          value: 'ENABLE',
        },
        {
          label: `${i18n.global.t('stop')}`,
          value: 'DISABLE',
        },
      ],
    };
  },

个人理解:当翻译函数直接写在state中时,它们会在state初始化时执行,并将翻译的结果保存在状态数据中。这意味着在数据初始化之后,无论后续如何切换语言(即便进行了router.push),状态数据中的翻译结果不会自动更新。然而使用getters,就类似于computed属性,在访问时动态地执行。访问label时,执行了翻译函数,所以能够获取到切换语言后的值。

所以,如果写在state中,只有在刷新页面时,state重新初始化,才能让state中的翻译函数根据当前的locale正确执行。

//修改之后
export const selectStore = defineStore('selectOption', {
  state: () => {
    return {
      ...
    };
  },
   getters: {
    statusOption(){
      return [
        {
          label: `${i18n.global.t('start')}`,
          value: 'ENABLE',
        },
        {
          label: `${i18n.global.t('stop')}`,
          value: 'DISABLE',
        },
      ];
    },
  }

虽然解决方法很简单,却花了我不少时间捏。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  JZjRRktyDDvK   24天前   39   0   0 Vue
  onf2Mh1AWJAW   9天前   17   0   0 Vue
Z0pAq4icWGd6