前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《vue3+ts+element-plus 后台管理系统系列》之国际化

《vue3+ts+element-plus 后台管理系统系列》之国际化

作者头像
星宇大前端
发布2021-03-02 14:31:07
2.4K0
发布2021-03-02 14:31:07
举报
文章被收录于专栏:大宇笔记

vue3-composition-admin 是一个管理端模板解决方案,它是基于vue3,ts和element-plus,项目都是以composition api风格编写。

国际化主要是利用 vue-i18n-next ,是因为项目使用composition api风格,需要最新兼容。

国际化目录


在这里插入图片描述
在这里插入图片描述

思路理解


  1. 准备好语言包messages,包含自己建的en.ts,zh-cn.ts 和 element-plus语言包
  2. 当前选择locale
  3. 创建i18n
  4. 放在 plugins 自动加载

代码实现


1. 导入生成Message 语言包

代码语言:javascript
复制
import elementEnLocale from 'element-plus/lib/locale/lang/en'
import elementZhLocale from 'element-plus/lib/locale/lang/zh-cn'
// User defined lang
import enLocale from './en'
import zhLocale from './zh-cn'


const messages = {
  en: {
    ...enLocale,
    ...elementEnLocale
  },
  'zh-cn': {
    ...zhLocale,
    ...elementZhLocale
  }
}

2. 获取当前语言

选择语言存储在cookie,getLanguage读取。

代码语言:javascript
复制
export const getLocale = () => {
  //读取cookie存入的当前语言
  const cookieLanguage = getLanguage()
  //如果有返回当前语言
  if (cookieLanguage) {
    return cookieLanguage
  }
  //如果没有,获取系统语言
  const language = navigator.language.toLowerCase()
  //获取messages 语言 遍历
  const locales = Object.keys(messages)
  for (const locale of locales) {
  	//如果messsage 包里面有系统语言返回
    if (language.indexOf(locale) > -1) {
      return locale
    }
  }

  // 默认语言 简体中文
  return 'zh-cn'
}

3. 创建i18n实例,并使用

代码语言:javascript
复制
const i18n = createI18n({
  locale: getLocale(),
  messages: messages
})

export default i18n
代码语言:javascript
复制
 app.use(i18n)

4.使用国际化语言

模板:

代码语言:javascript
复制
<template>
  {{ t('key') }}
</template>

ts:

代码语言:javascript
复制
setup() {
    const { t } = useI18n()
    return {
      t
    }
}

尝试直接写 $t() 也是可以的。

5.切换语言

代码语言:javascript
复制
import { useStore } from '@/store'
import { computed, defineComponent, reactive, toRefs } from 'vue'
import { AppActionTypes } from '@/store/modules/app/action-types'
import { useI18n } from 'vue-i18n'
import { ElMessage } from 'element-plus'
type Language = {
    name: string
    value: string
}

export default defineComponent({
  setup() {
    const store = useStore()
    const { locale } = useI18n()
    const state = reactive({
      languages: [{ name: 'en', value: 'en' }, { name: '中文', value: 'zh-cn' }] as Array<Language>,
      handleSetLanguage: (lang: string) => {
        locale.value = lang
        store.dispatch(AppActionTypes.ACTION_SET_LANGUAGE, lang)
        ElMessage({
          message: 'Switch Language Success',
          type: 'success'
        })
      }
    })
    const language = computed(() => {
      return store.state.app.language
    })
    return {
      ...toRefs(state),
      language
    }
  }
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 国际化目录
  • 思路理解
  • 代码实现
    • 1. 导入生成Message 语言包
      • 2. 获取当前语言
        • 3. 创建i18n实例,并使用
          • 4.使用国际化语言
            • 5.切换语言
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档