vue3使用i18n实现国际化与动态切换语言

简介: vue3使用i18n实现国际化与动态切换语言

https://kazupon.github.io/vue-i18n/zh/started.html#javascript


  • 安装依赖: npm install vue-i18n@next
    "vue-i18n": "^9.2.0-beta.33"
  • 创建i18n/index.js

import { createI18n } from 'vue-i18n'
// 国际化语言资源
const messages = {
  // 英文
  en: {
    login: {
      loginBtn: 'login',
      pwdBtn: 'password'
    }
  },
  // 中文
  zh: {
    login: {
      loginBtn: '登录',
      pwdBtn: '密码'
    }
  }
}
/**
 * 获取
 * @returns {string}
 */
function getLocal () {
  // 如果缓存中存在,则直接返回
  const myLocale = localStorage.getItem('my_locale')
  if (myLocale) {
    return myLocale
  }
  // 否则读取当前网页语言
  const localName = navigator.language.indexOf('zh') !== -1 ? 'zh' : 'en'
  // 设置缓存
  localStorage.setItem('my_locale', localName)
  return localName
}
// 创建i18n实例
export const i18n = createI18n({
  locale: getLocal(),
  messages
})
  • main.js

import { i18n } from '@/i18n'
app.use(i18n)
  • 使用: {{$t('xx.xx')}}

<el-button type="primary" @click="handleLogin">{{$t('login.loginBtn')}}</el-button>
      <el-button type="info" @click="changeType">{{ tips }}{{$t('login.pwdBtn')}}</el-button>


image.png


  • 动态变更语言: i18n.global.locale = lang

<el-button type="success" @click="changeLanguage">变更语言</el-button>
import { i18n } from '@/i18n'
const changeLanguage = () => {
  console.log('i18n.global.locale', i18n.global.locale)
  const lang = i18n.global.locale === 'en' ? 'zh' : 'en'
  localStorage.setItem('my_locale', lang)
  i18n.global.locale = lang
}



  • 把国际化资源文件单独拎出来
  • en.js

export default {
  login: {
    loginBtn: 'login',
    pwdBtn: 'password'
  }
}
  • zh.js

export default {
  login: {
    loginBtn: '登录',
    pwdBtn: '密码'
  }
}
  • i18n/index.js

import zh from '@/i18n/zh'
import en from '@/i18n/en'
// 国际化语言资源
const messages = {
  // 英文
  en: {
    ...en
  },
  // 中文
  zh: {
    ...zh
  }
}


相关文章
|
15天前
|
JavaScript 前端开发 索引
「Vue3系列」Vue3 条件语句/循环语句
在 Vue 3 中,你可以使用条件语句来动态地控制模板中的渲染内容。Vue 提供了多种方式来实现条件渲染,包括 `v-if`、`v-else-if`、`v-else` 和 `v-show` 指令。
31 0
|
16天前
Vue3框架中让table合计居中对齐
Vue3框架中让table合计居中对齐
|
16天前
Vue3 子/父组件相互调用
Vue3 子/父组件相互调用
33 0
|
16天前
|
JavaScript
vue3 使用element plus 打包时 报错
vue3 使用element plus 打包时 报错
22 0
|
13天前
|
JavaScript 前端开发 数据安全/隐私保护
Vue3——如何实现页面访问拦截
Vue3——如何实现页面访问拦截
|
16天前
Vue3 子传父 暴露数据 defineExpose
Vue3 子传父 暴露数据 defineExpose
Vue3 子传父 暴露数据 defineExpose
|
6天前
|
JavaScript 算法 前端开发
vue3和vue2的区别都有哪些
【4月更文挑战第15天】Vue3与Vue2在响应式系统(Proxy vs. Object.defineProperty)、组件模块化(Composition API vs. Options API)、数据变化检测(Reactive API vs. $watch)、虚拟DOM算法(基于迭代 vs. 基于递归)及Tree-Shaking支持上存在显著差异。Vue3的改进带来了更好的性能和灵活性,适合追求新技术的项目。Vue2则因其成熟稳定,适合维护大型项目。选择版本需根据项目需求、团队情况和技术追求来决定。
12 0
|
7天前
|
JavaScript
vue3+vite项目配置ESlint
vue3+vite项目配置ESlint
12 0
|
7天前
乾坤子应用配置(vue3+vite)
乾坤子应用配置(vue3+vite)
13 0
vue3中使用router路由实现跳转传参
vue3中使用router路由实现跳转传参