electron+vue3全家桶+vite项目搭建【六】集成vue-i18n 国际化

这篇具有很好参考价值的文章主要介绍了electron+vue3全家桶+vite项目搭建【六】集成vue-i18n 国际化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注意

已发现 9.2.2版本的vue-i18n 如果使用cnpm安装,打包会报错,使用npm或者pnpm安装依赖没有问题

引入

如果需要多语言支持,那么最好在项目搭建之初我们就集成好国际化

vue i18n官网

demo项目地址
关于多窗口国际化不同步更新状态的问题解决方案

1.引入依赖

npm install vue-i18n@9

2.集成vue i18n

1.我们现在src下面创建locals目录,里面创建packages目录,然后分别创建en.ts和zh-cn.ts

// src\locales\package\en.ts
export default {
  // app相关文本
  app: {
    title: 'demo'
  },
};
// src\locales\package\zh-cn.ts
export default {
  // app相关文本
  app: {
    title: '精彩案例'
  },
};

2.我们在locals目录下创建index.ts

// src\locales\index.ts
import { createI18n } from 'vue-i18n';
import zhCn from './package/zh-cn';
import en from './package/en';
import CacheUtils from '@utils/cacheUtils';

// 创建 i18n
const i18n = createI18n({
  legacy: false, // 解决Not available in legacy mode报错
  globalInjection: true, // 全局模式,可以直接使用 $t
  locale: 'zhCn',
  messages: {
    zhCn,
    en
  }
});

export default i18n;

目录结构如图所示:

electron+vue3全家桶+vite项目搭建【六】集成vue-i18n 国际化

3.调整main.ts

// src\main.ts
import i18n from './locales';

// ...
// 配置国际化
app.use(i18n)

3.测试代码

接着我们在HelloWorld页面补充国际化代码:

// src\components\HelloWorld.vue
<template>
  <h1>{{ $t('app.title') }}</h1>
</template>

显示效果如图所示:

  • 并且随着我们切换 i18n的 locale字段,可以看到文本自动变成对应语言

electron+vue3全家桶+vite项目搭建【六】集成vue-i18n 国际化

4.封装多语言切换组件

我们知道只要改变i18n的locale的值就能修改应用的语言,那么我们完全可以基于element-plus封装一个多语言切换的组件:

// src\components\Language.vue
<template>
  <el-dropdown @command="handleCommand">
    <span class="el-dropdown-link">
      {{ currentLang == 'zhCn' ? '中文' : 'English' }}
      <el-icon class="el-icon--right">
        <arrow-down />
      </el-icon>
    </span>
    <template #dropdown>
      <el-dropdown-menu>
        <el-dropdown-item command="zhCn" :disabled="currentLang == 'zhCn'">中文</el-dropdown-item>
        <el-dropdown-item command="en" :disabled="currentLang == 'en'">English</el-dropdown-item>
      </el-dropdown-menu>
    </template>
  </el-dropdown>
</template>

<script lang="ts" setup>
import { ArrowDown } from '@element-plus/icons-vue'
import { useI18n } from 'vue-i18n';
import { computed } from 'vue';

const i18n = useI18n()

// 计算属性获取i18n的值
const currentLang = computed(() => i18n.locale.value)

// 切换语言
function handleCommand(command: string) {
  i18n.locale.value = command
}

</script>
<style scoped>
.example-showcase .el-dropdown-link {
  cursor: pointer;
  color: var(--el-color-primary);
  display: flex;
  align-items: center;
}
</style>

5.测试多语言切换

我们在HelloWorld.vue文件中引入多语言插件:

electron+vue3全家桶+vite项目搭建【六】集成vue-i18n 国际化
运行查看效果:

electron+vue3全家桶+vite项目搭建【六】集成vue-i18n 国际化

6.优化代码

我们可以发现不管是文本的使用还是组件的封装,都存在着大量的魔法值,假如后续调整了语言字段,改动将是巨大的,那么其实我们是可以正对映射关系封装一个kv对象的:

// src\locales\LangMap.ts

export default {
  /**key - value 形式关联所有语言和对应描述 */
  languageMap: new Map([
    ["zhCn", "中文"],
    ["en", "English"],
  ]),

  /**所有属性路径描述 */
  app_title: 'app.title'
}

在helloWOrld中我们可以这样调用
electron+vue3全家桶+vite项目搭建【六】集成vue-i18n 国际化

我们调整语言切换组件文章来源地址https://www.toymoban.com/news/detail-411401.html

<template>
  <el-dropdown @command="handleCommand">
    <span class="el-dropdown-link">
      {{ langMap.languageMap.get(currentLang) }}
      <el-icon class="el-icon--right">
        <arrow-down />
      </el-icon>
    </span>
    <template #dropdown>
      <el-dropdown-menu>
        <el-dropdown-item :command="langEntry[0]" :key="langEntry[0]" :disabled="currentLang == langEntry[0]"
          v-for="langEntry in langMap.languageMap.entries()">{{
            langEntry[1] }}</el-dropdown-item>
      </el-dropdown-menu>
    </template>
  </el-dropdown>
</template>

<script lang="ts" setup>
import { ArrowDown } from '@element-plus/icons-vue'
import { useI18n } from 'vue-i18n';
import { computed } from 'vue';
import langMap from '../locales/LangMap'

const i18n = useI18n()
// 计算属性获取i18n的值
const currentLang = computed(() => i18n.locale.value)

// 切换语言
function handleCommand(command: string) {
  i18n.locale.value = command
}

</script>
<style scoped>
.example-showcase .el-dropdown-link {
  cursor: pointer;
  color: var(--el-color-primary);
  display: flex;
  align-items: center;
}
</style>

到了这里,关于electron+vue3全家桶+vite项目搭建【六】集成vue-i18n 国际化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • electron+vue3全家桶+vite项目搭建【16.1】electron多窗口,pinia状态同步,扩展store方法,主动同步pinia的状态【推荐】

    demo项目地址 我们之前写了一个自动同步pinia状态的插件,可以参考如下文章 electron+vue3全家桶+vite项目搭建【16】electron多窗口,pinia状态无法同步更新问题解决 这里面有一个较大的弊端,就是pinia中的store,只要其中的某个属性修改,就会触发这个store的全量更新,当我们有一

    2024年02月11日
    浏览(51)
  • 现有的vue3+ts+vite项目集成electron

    Electron是使用JavaScript,HTML和CSS构建跨平台的桌面应用程序框架。 Electron兼容Mac、Windows和Linux,可以构建出三个平台的应用程序。 安装依赖 原来有一个vue3+ts+vite+pnpm的项目,其中sub-modules是子项目,web是主入口项目,项目结构如下: 需要将其转换成Electron项目,只需要在原来

    2024年02月12日
    浏览(40)
  • vue3+vite+ts项目集成科大讯飞语音识别(项目搭建过程以及踩坑记录)

    🐱 个人主页: 不叫猫先生 🙋‍♂️ 作者简介:前端领域新星创作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏:vue3从入门到精通、TypeScript从入门到实践 📢 资料领取:前端进阶资料以及文中源码可以找我免费领取 🔥 前端

    2023年04月09日
    浏览(34)
  • 基于Electron24+Vite4+Vue3搭建桌面端应用

    一说到创建桌面应用,就不得不提及Electron和Tauri框架。这次给大家主要分享的是基于electron最新版本整合vite4.x构建vue3桌面端应用程序。 之前也有使用vite2+vue3+electronc创建桌面端项目,不过  vue-cli-plugin-electron-builder  脚手架插件构建的项目electron版本只有13.x。如今electron版本

    2024年02月06日
    浏览(38)
  • 快速搭建Electron+Vite3+Vue3+TypeScript5脚手架 (无需梯子,快速安装Electron)

    Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发经验(这段话是来自官网)。 根据vite官网文档 项目创建完成后进

    2024年02月02日
    浏览(79)
  • 使用vue3+vite+elctron构建小项目介绍Electron进程间通信

    进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责,因此 IPC 是执行许多常见任务的唯一方法,例如从 UI 调用原生 API 或从原生菜单触发 Web 内容的更改。 在 Electron 中,进程使用 ipcM

    2024年02月06日
    浏览(40)
  • vite+ vue3(现有项目或者新项目)+electron打包教程,以及electron代码热重载页面(保姆级教程),一文带你走完全过程

      1.删掉type这个字段,不然会报错  2.然后加上\\\"main\\\": \\\"electron/main.js\\\",  3.在scripts字段中加入启动electron的命令:如下图 5.这时候你去打开控制台输入输入npm run start会得到一片空白,展示如下页面 1.因为现在监听的是vue打包后的dist文件夹中的index.html 2.我就不教你们怎么打开那个

    2024年02月11日
    浏览(36)
  • vue3+vite项目集成mars3d

    创建一个项目 yarn create vite // vue - ts 安装依赖 yarn add vite-plugin-mars3d -D yarn add mars3d 控制台警告 warning \\\" mars3d@3.5.0\\\" has unmet peer dependency \\\"@turf/turf@^6.5.0\\\". warning \\\" mars3d@3.5.0\\\" has unmet peer dependency \\\"mars3d-cesium@~1.103.1\\\". 安装 yarn add  @turf/turf mars3d-cesium 修改 vite.config.ts 修改srcApp.vue 就可

    2024年02月15日
    浏览(28)
  • Vue3+Vite项目搭建

    技术栈:vue3+ts+vite+vue-router+element-plus+pinia 为什么选择vite而不是vue-cli: vite 是一个基于 Vue3 单文件组件的非打包开发服务器,它做到了本地快速开发启动: 快速的冷启动,不需要等待打包操作; 即时的热模块更新,替换性能和模块数量的解耦让更新飞起; 真正的按需编译,

    2024年02月08日
    浏览(29)
  • vite搭建vue3项目

    参考视频 创建一个项目名称的文件夹 执行命令:npm init -y 快速的创建一个默认的包信息 安装vite: npm i vite -D -D开发环境的依赖 安装vue,现在默认是vue3. 执行命令: npm i vue -D/-S都可以 创建index.html文件,src=“入口js文件” ,添加id=\\\"app\\\"挂载点 创建src目录下的js入口文件main.js 创建

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包