vue3中英文切换

1.安装

npm i vue-i18n@next

2.使用:main.ts

// 使用i18n
import i18n from "@/i18n";
app.use(i18n)

3.创建src/i18n/language/en.ts和zh.ts文件

en.ts

export default {
  menus: {
    '/': 'home',
    Home: 'Home',
    home: 'home',
    users: 'users list',
    roles: 'roles list',
    rights: 'permission list',
    goods: 'product list',
    params: 'sorting list',
    categories: 'goods category',
    orders: 'order list',
    reports: 'data report'
  },
  login: {
    title: 'user login',
    btnTitle: 'login'
  },
  dialog: {
    deleteTitle: 'Are you sure you want to delete the user '
  },
  table: {
    username: 'username',
    email: 'email',
    mobile: 'mobile',
    role_name: 'role name',
    mg_state: 'state',
    create_time: 'create_time',
    action: 'action',
    search: 'search',
    adduser: 'add user',
    placeholder: 'Please enter a user name to search for'
  },
  message: {
    updeteSuccess: 'update successfully'
  },
  driver: {
    doneBtnText: 'done',
    closeBtnText: 'close',
    nextBtnText: 'next',
    prevBtnText: 'prev',
    guideBtn: 'guidebtn',
    hamburgerBtn: 'hamburgerBtn',
    fullScreen: 'fullScreen'
  }
}

zh.ts

export default {
  menus: {
    '/': '首页',
    Home: '首页',
    home: '首页',
    users: '用户列表',
    roles: '角色列表',
    rights: '权限列表',
    goods: '商品列表',
    params: '分类参数',
    categories: '商品分类',
    orders: '订单列表',
    reports: '数据报表'
  },
  login: {
    title: '用户登录',
    btnTitle: '登录'
  },
  dialog: {
    deleteTitle: '确定要删除用户'
  },
  table: {
    username: '姓名',
    email: '邮箱',
    mobile: '手机',
    role_name: '角色',
    mg_state: '状态',
    create_time: '创建时间',
    action: '操作',
    search: '搜索',
    adduser: '添加用户',
    placeholder: '请输入搜索的用户姓名'
  },
  message: {
    updeteSuccess: '更新成功'
  },
  driver: {
    doneBtnText: '完成',
    closeBtnText: '关闭',
    nextBtnText: '下一步',
    prevBtnText: '上一步',
    guideBtn: '引导按钮',
    hamburgerBtn: '汉堡按钮',
    fullScreen: '全屏按钮'
  }
}

4.创建src/i18n/language/index.ts文件引入zh、en文件

import en from './en'
import zh from './zh'

export default {
  en,
  zh,
}

//监听当前的语言
export const watchLang= (...cbs: object[])=>{
  watch(
    ()=>store.getters.lang,
    ()=>{
      cbs.forEach((cb:any)=>cb(store.getters.lang))
      console.log(store.getters.lang);
    },
    {deep:true,immediate:true})
}

5.新建src/i18n/index.ts文件

import {createI18n} from "vue-i18n";
import messages from '@/i18n/language/index'

const getCurrentLanguage = () => {
  const UAlang = navigator.language    // 默认设置中文 zh-CN
  const langCode = UAlang.indexOf('zh') !== -1 ? 'zh' : 'en'
  localStorage.setItem('lang', langCode)
  return langCode
}

const i18n = createI18n({
  legacy: false,
  globalInjection: true,
  locale: getCurrentLanguage() || 'zh',
  messages
})
export default i18n

6.使用 

<template>
  <div>{{ $t('menus.home') }}</div>
  <el-dropdown @command="handleCommand">
    <span class="el-dropdown-link">
      <svg-icon icon="language"></svg-icon>
    </span>
    <template #dropdown>
      <el-dropdown-menu class="header-new-drop">
        <el-dropdown-item command="zh" :disabled="currentLanguage=='zh'">
          简体中文
        </el-dropdown-item>
        <el-dropdown-item command="en" :disabled="currentLanguage=='en'">
          English
        </el-dropdown-item>
      </el-dropdown-menu>
    </template>
  </el-dropdown>
</template>

<script lang="ts" setup>
import { ElMessage } from 'element-plus'
import {useI18n} from 'vue-i18n'
import {computed} from "vue";
import {useStore} from "vuex";

const i18n = useI18n()
const store = useStore()

const currentLanguage = computed(()=> i18n.locale.value)
const handleCommand = (lang: string) => {
  i18n.locale.value = lang
  store.commit('app/changeLang', lang)
  localStorage.setItem('lang', lang)
}
</script>

将lang值放到store/modules/app.ts中 

state: () => ({
  lang: localStorage.getItem('lang' || 'zh'),  // 中英文切换
}),
mutations: {
  changeLang(state: any, lang: string){
    state.lang = lang
  }
},

使用

1.标签中使用:

$t('menus.home')

2. ts中使用

import i18n from "@/i18n";
import {watchLang} from '@/i18n/language/index.ts'

const t = i18n.global.t
const initDriver = ()=>{
   driver=new Driver({
    opacity: 0.75,
    animate: false,  // 否则图标消失
    padding: 10,
    allowClose: true, //禁止点击外部关闭
    overlayClickNext: false,  //如果它在覆盖上移动到下一步,请单击
    doneBtnText: t('driver.doneBtnText'), // 完成按钮标题
    closeBtnText: t('driver.closeBtnText'), // 关闭按钮标题
    stageBackground: '#fff', // 引导对话的背景色
    nextBtnText: t('driver.nextBtnText'), // 下一步按钮标题
    prevBtnText: t('driver.prevBtnText'), // 上一步按钮标题
  })
}
//监听lang
watchLang(initDriver)

3.引入useI18n使用i18n

import {useI18n} from "vue-i18n";
const i18n = useI18n()

 ElMessage({
    message: i18n.t('message.updateSuccess'),
    type: 'success'
  })

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在Vue 3应用程序中实现全局中英文切换,可以使用Vue I18n库。这个库可以让你轻松地实现国际化和本地化。 以下是实现步骤: 1. 首先,安装Vue I18n库。可以使用npm或yarn来安装: ``` npm install vue-i18n --save ``` 或 ``` yarn add vue-i18n ``` 2. 创建一个i18n.js文件并在其中设置i18n配置。在这个文件中,你需要设置默认的语言和翻译,以及一些i18n选项。 ```javascript import { createI18n } from 'vue-i18n' import en from './locales/en.json' import zh from './locales/zh.json' const i18n = createI18n({ locale: 'en', fallbackLocale: 'en', messages: { en, zh } }) export default i18n ``` 在上面的代码中,我们从"./locales/"目录中导入了en.json和zh.json文件,这些文件包含了我们的翻译。我们还设置了默认的语言为英语(en)和回退语言为英语(fallbackLocale: 'en')。 3. 在你的Vue应用程序的入口文件main.js中导入i18n.js文件并将其应用到Vue实例中。 ```javascript import { createApp } from 'vue' import i18n from './i18n' import App from './App.vue' createApp(App).use(i18n).mount('#app') ``` 在上面的代码中,我们使用Vue.createApp()创建了一个新的Vue实例,并使用i18n插件将i18n配置应用到Vue实例中。 4. 在你的Vue组件中使用i18n。可以使用$t()函数来获取翻译。 ```html <template> <div> <h1>{{ $t('title') }}</h1> <p>{{ $t('message') }}</p> </div> </template> <script> export default { name: 'HelloWorld', mounted() { console.log(this.$t('message')) } } </script> ``` 在上面的代码中,我们使用了$t()函数来获取'title'和'message'的翻译。如果当前的语言设置为英语,$t('title')将返回"Hello World",$t('message')将返回"Welcome to my Vue app!"。 5. 最后,你需要提供一个切换语言的方法,以便用户可以在应用程序中切换语言。你可以通过在i18n实例中设置locale属性来实现这一点。 ```javascript <i18n> { "title": "Hello World", "message": "Welcome to my Vue app!", "switch_language": "Switch Language", "current_language": "Current Language: " } </i18n> <template> <div> <h1>{{ $t('title') }}</h1> <p>{{ $t('message') }}</p> <button @click="switchLanguage">{{ $t('switch_language') }}</button> <p>{{ $t('current_language') }}{{ $i18n.locale }}</p> </div> </template> <script> export default { name: 'HelloWorld', methods: { switchLanguage() { if (this.$i18n.locale === 'en') { this.$i18n.locale = 'zh' } else { this.$i18n.locale = 'en' } } } } </script> ``` 在上面的代码中,我们在Vue组件中定义了一个switchLanguage()方法,当用户点击"Switch Language"按钮时,该方法将切换当前语言。我们还在模板中添加了一个显示当前语言的文本,以便用户知道当前的语言是什么。 以上就是实现Vue 3全局中英文切换的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值