vue3 i18n 多语言切换

vue3中实现多语言切换

  1. 下载插件 npm install vue-i18n@next,@next表示安装i18n 最新的 vue3的版本
  2. 创建 language 文件夹,并创建 i18n.ts

i18n.ts 文件示例

js 复制代码
// i18n.ts
 
import { createI18n } from 'vue-i18n'
import zh from './zh'
import en from './en'

const i18n = createI18n({
    legacy: false, // 使用CompotitionAPI必须添加这条.
    locale: 'zh', // 默认语言
    // fallbackLocale: 'en', // 默认第二语言
    messages: {
        zh,
        en
    }
})

export default i18n

zh.ts 文件示例

js 复制代码
//.ts
export default {
  header: {
    langLable: '选择语言',
    langZH: '中文',
    langEN: '英文',
  },
  setting: {
    settingsModuleMenuTree: {
      General: '常规设置',
      Account: '账号设置',
      Email: '邮箱设置',
      Calendar: '日历设置',
      Interface: '界面布局',
      Keyboard: '快捷键设置',
      Extended: '扩展功能',
      About: '关于SEmail...',
    },
    homeText: '显示名称',
    mineText: '个人中心'
  },
}

en.ts 文件示例

js 复制代码
//en.ts
export default {
  header: {
    langLable: 'Select Language',
    langZH: 'Chinese',
    langEN: 'English',
  },
  setting: {
    settingsModuleMenuTree:{
      General: 'General Settings',
      Account: 'Account Settings',
      Email: 'Email settings',
      Calendar: 'Calendar Settings',
      Interface: 'Interface Layout',
      Keyboard: 'Keyboard shortcuts',
      Extended: 'Extended functionality',
      About: 'About SEmail',
    },
    homeText: 'homepage',
    mineText: 'Personal Center'
  },
}
  1. main.ts 中注册 i18n
js 复制代码
1.  // main.ts
1.  import i18n from './language/i18n'
1.
1.  const app = createApp(App)
1.  ...
1.  app.use(i18n) // 挂载语言包
  1. 点击按钮切换语言
js 复制代码
<template>
	<div>
		 <el-select :placeholder="t('header.langLable')" style="width:155px">
              <el-option :label="t('header.langZH')" value="zh" @click="changeLanguage('zh')" />
              <el-option :label="t('header.langEN')" value="en" @click="changeLanguage('en')" />
            </el-select>
	</div>
</template>
js 复制代码
<script lang = 'ts' setup>
import { useI18n } from 'vue-i18n'
const { locale, t } = useI18n()

const changeLanguage = (value: string) => {
	locale.value = value
}
<script>
  1. 在需要文字说明的组件中使用
js 复制代码
// 使用的 xxx.vue
<script setup lang="ts">
    import { useI18n } from "vue-i18n";
    const { t } = useI18n()
</script>
 
<template>
     <p>{{t('setting.homeText') }} </p>
     <el-form-item :label="t('setting.homeText') + ':'">
        <el-input v-model="accountAppDisplay" placeholder="界面上, 显示的名称" />
     </el-form-item>
</template>
js 复制代码
<span>{{$t("setting.homeText")}}</span>

注意,$t()是个函数,"setting.homeText"是它的参数,是一个字符串,相当于传入了对象的key值。
如果需要动态绑定怎么办呢,比如,我们循环渲染,如下段代码所示:

js 复制代码
{{$t('setting.settingsModuleMenuTree.' + item.value)}}
js 复制代码
<template>
  <div>
    <el-menu class="menu">
            <el-menu-item v-for="(item, idx) in settingsModuleMenuTree" :index="idx + ''" class="menu-item">
              {{$t('setting.settingsModuleMenuTree.' + item.value)}}
            </el-menu-item>
          </el-menu>
  </div>
</template>
<script setup lang="ts">
    import { useI18n } from "vue-i18n";
    const { t } = useI18n()
    
    const settingsModuleMenuTree = ref<any[]>([]);
    settingsModuleMenuTree.value = [
      { name: "常规设置", value: 'General' },
      { name: "账号设置", value: 'Account' },
      { name: "邮箱设置", value: 'Email' },
      { name: "日历设置", value: 'Calendar' },
      { name: "界面布局", value: 'Interface' },
      { name: "快捷键设置", value: 'Keyboard' },
      { name: "扩展功能", value: 'Extended' },
      { name: "关于SEmail...", value: 'About' },
    ];
</script>
相关推荐
zhanshuo9 分钟前
不依赖框架,如何用 JS 实现一个完整的前端路由系统
前端·javascript·html
火柴盒zhang10 分钟前
websheet在线电子表格(spreadsheet)在集团型企业财务报表中的应用
前端·html·报表·合并·spreadsheet·websheet·集团财务
khalil12 分钟前
基于 Vue3实现一款简历生成工具
前端·vue.js
拾光拾趣录19 分钟前
浏览器对队头阻塞问题的深度优化策略
前端·浏览器
用户81221993672220 分钟前
[已完结]后端开发必备高阶技能--自研企业级网关组件(Netty+Nacos+Disruptor)
前端
万少24 分钟前
2025中了 聊一聊程序员为什么都要做自己的产品
前端·harmonyos
abigale032 小时前
webpack+vite前端构建工具 -11实战中的配置技巧
前端·webpack·node.js
专注API从业者3 小时前
构建淘宝评论监控系统:API 接口开发与实时数据采集教程
大数据·前端·数据库·oracle
Joker`s smile3 小时前
Chrome安装老版本、不同版本,自制便携版本用于前端调试
前端·chrome
weixin_416639973 小时前
爬虫工程师Chrome开发者工具简单介绍
前端·chrome·爬虫