Skip to content

语言切换使用的是 vue-i18n 9.x 版本

官方文档: https://vue-i18n.intlify.dev

官方仓库:https://github.com/intlify/vue-i18n-next

i8n 的引用已经注册到全局:window['$t'],注册位置:src\components\I18n\index.vue,并在 app.vue 中注册。

vue
<template></template>

<script lang="ts" setup>
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
window['$t'] = t
</script>

直接渲染使用方式(看个人习惯):

vue
<template>
{{ $t('login.form_account') }}
</template>
<script lang="ts" setup>
const t = window['$t']
</script>

函数传递使用方式:

vue
<template></template>
<script lang="ts" setup>
import { PropType } from 'vue'
import { renderLang } from '@/utils'
const list = [
  {
    label: renderLang('global.r_edit'),
    key: 'edit',
  }
]
</script>

renderLang 内容:

ts
/**
 * * render 语言
 *  @param lang 语言标识
 *  @param set 设置项
 *  @param tag 要渲染成的标签
 */
export const renderLang = (lang: string, set = {}, tag = 'span') => {
  return () => h(tag, set, { default: () => window['$t'](lang) })
}

GoView 配置位置在:src\i18n\index.ts

ts
// 默认配置语言
import { lang } from '@/settings/designSetting'
import { createI18n } from 'vue-i18n' //引入vue-i18n组件
// 获取本地存储
import { getLocalStorage } from '@/utils'
// 本地存储名
import { StorageEnum }from '@/enums/storageEnum'
// 切换枚举
import { LangEnum } from '@/enums/styleEnum'
import { LangStateType } from '@/store/modules/langStore/langStore.d'
// 中文
import zh from './zh/index'
// 英文
import en from './en/index'

const langStorage: LangStateType = getLocalStorage(StorageEnum.GO_LANG_STORE)

// 语言数组
export const langList = [
  {
    label: '中文',
    key: LangEnum.zh
  },
  {
    label: 'English',
    key: LangEnum.en
  }
]

const i18n = createI18n({
  locale: langStorage?.lang || lang,
  fallbackLocale: langStorage?.lang || lang,
  messages: {
    [LangEnum.zh]: zh,
    [LangEnum.en]: en
  }
})

export default i18n

修改语言使用 Pinia-Store,位置:src\store\modules\langStore\langStore.ts

ts
import { defineStore } from 'pinia'
import { lang } from '@/settings/designSetting'
import { LangStateType } from './langStore.d'
import { LangEnum } from '@/enums/styleEnum'
import i18n from '@/i18n/index'
import { setLocalStorage, getLocalStorage, reloadRoutePage } from '@/utils'
import { StorageEnum } from '@/enums/storageEnum'
import { useSettingStore } from '@/store/modules/settingStore/settingStore'
const settingStore = useSettingStore()

const { GO_LANG_STORE } = StorageEnum

const storageLang: LangStateType = getLocalStorage(GO_LANG_STORE)

// 语言
export const useLangStore = defineStore({
  id: 'useLangStore',
  state: (): LangStateType =>
    storageLang || {
      lang,
    },
  getters: {
    getLang(): LangEnum {
      return this.lang
    }
  },
  actions: {
    // 修改语言
    changeLang(lang: LangEnum): void {
      if (this.lang === lang) return
      this.lang = lang
      i18n.global.locale = lang
      setLocalStorage(GO_LANG_STORE, this.$state)

      if (settingStore.getChangeLangReload) {
        reloadRoutePage()
      }
    }
  }
})

本文档内容版权属于 GoView 作者,保留所有权利 | 备案号 京ICP备2021034585号-1