vue3项目实现全局国际化

embedded/2024/9/19 22:56:17/ 标签: vue

本文主要梳理vue3项目实现全项目格式化,例如在我前面文章使用若依创建vue3的项目中,地址:若依搭建vue3项目在导航栏中切换,页面中所有的组件的默认语言随之切换,使用的组件库依旧是element-plus,搭配vue-i18n插件

文章目录

  • 基础准备
      • 引入插件vue-i18n
  • 实现示例流程
      • 1. 创建国际化文件
      • 2. 全局引入(main.js)
      • 3. App组件配置
      • 4. 在导航栏navbar.vue组件切换逻辑
      • 5. 在首页示例展示效果


基础准备

vuei18n_8">引入插件vue-i18n

安装插件

npm i vue-i18n

【注】安装过程中报错
npm ERR! Cannot read properties of null (reading ‘matches‘)
解决方案:
先清除npm缓存:

npm cache clean --force

再使用pnpm进行安装(未安装的话就npm i pnpm一下即可)

pnpm i vue-i18n

或者在package.json文件中直接添加 “vue-i18n”: “^10.0.1”,版本,在进行重新进行npm install一下也可以
在这里插入图片描述

实现示例流程

主要使用的element-plus组件库中的el-config-provider组件进行配置,饿了么团队针对国际化已经做了相应的语言包,只需要改变组件中的locale属性来进行切换即可,官方示例地址:国际化

1. 创建国际化文件

在src文件目录下创建locales文件夹,文件夹下创建:en.js,i18n.js,zh-cn.js三个文件
【en.js文件】

export default {button: {confirm: 'Confirm',login: 'Login',title1: 'table',title2: 'pagination'}
};

【zh-cn.js文件】

export default {button: {confirm: '确认',login: '登录',title1: '表格',title2: '分页'}
};

【i18n.js文件】

// i18n配置
import { createI18n } from "vue-i18n";
import zh from "./zh-cn";
import en from "./en";// 创建i18n
const i18n = createI18n({locale: localStorage.getItem("language") || "zh", // 语言标识globalInjection: true, // 全局注入,可以直接使用$t// 处理报错: Uncaught (in promise) SyntaxError: Not available in legacy mode (at message-compiler.esm-bundler.js:54:19)legacy: false,messages: {zh,en}
});export default i18n;

解析:

  • locale属性:用于控制语言的标识,默认中文,此处使用了localStorage本地储存,方便全局且页面刷新都可以保持选中值
  • globalInjection属性:全局注入,可以直接使用$t函数,国际化主要分两块,一个是elementUI的默认文本就是el-config-provider组件可以直接控制、另一个是页面元素的展示文本,其中页面元素就需要 $t函数来进行手动编写,所以globalInjection属性值为true,非常重要
  • legacy属性:处理报错,默认false或者不使用也可
  • messages属性:切换文本的主要内容值,当locale的属性切换,所对应的语言的文本展示

2. 全局引入(main.js)

在入口文件main.js文件中进行引入,方便全局使用,

import i18n from './locales/i18n';
app.use(i18n);
app.mount('#app');

3. App组件配置

在app.vue组件中的router-view使用el-config-provider组件包裹,这样全局页面元素使用element-plus的组件都可以全局一次性控制

<template><el-config-provider :locale="elLocale"><router-view /></el-config-provider>
</template>
<script setup>
import zh from 'element-plus/dist/locale/zh-cn.mjs'
import en from 'element-plus/dist/locale/en.mjs'
import i18n from '@/locales/i18n'const elLocale = computed(() => {return i18n.global.locale.value === 'en' ? en : zh
})
</script>

vue_116">4. 在导航栏navbar.vue组件切换逻辑

切换按钮:

 <el-button @click="translate('zh')">切换为中文</el-button><el-button @click="translate('en')">切换为英文</el-button>

切换逻辑:

import i18n from '@/locales/i18n'function translate(lang) {localStorage.setItem('language', lang)i18n.global.locale.value = lang
}

5. 在首页示例展示效果

示例组件:
直接使用$t函数直接双向绑定

<template><div class="page-container"><el-divider>{{ $t('button.title1') }}</el-divider><el-table :data="[]"style="width: 100%"><el-table-column prop="date"label="Date" /><el-table-column prop="name"label="Name" /><el-table-column prop="address"label="Address" /></el-table><el-divider>{{ $t('button.title2') }}</el-divider><el-pagination :total="100" /><el-button type="primary">{{ $t('button.login') }}</el-button></div>
</template><script setup>
</script>
<style lang="scss" scoped>
.page-container {width: 100%;height: calc(100vh - 84px);background-color: #edeff5;
}
</style>

效果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【注】vscode有一个插件:du-i18n,由于项目中需要替换的地方太多,如果手动自定义语言包工作量太大,所以推荐一个vscode插件(du-i18n),它支持一键扫描中文,并提取到指定文件生成对应的语言包对象


http://www.ppmy.cn/embedded/113309.html

相关文章

Java应用压测工具JMeter

目录 1、下载JMeter 2、配置环境变量 3、配置语音 4、使用 1、下载JMeter Apache JMeter - Apache JMeter™ 千万别下载这个&#xff0c;会报错、 千万别下载这个&#xff0c;会报错、 千万别下载这个&#xff0c;会报错 下载这个&#xff0c;失败多下载几次 2、配置环…

中国数据中心服务器CPU行业发展概述

2024中国服务器CPU行业概览&#xff1a;信创带动服务器CPU国产化 AA体系是一种基于ARM指令系统和Android操作系统的体系结构&#xff0c;主要用于移动设备。与Wintel体系不同&#xff0c;AA体系中CPU厂商对芯片或系统厂商进行指令系统或IP核授权&#xff0c;操作系统厂商提供基…

【乐企-业务篇】开票前置校验服务-规则链服务接口实现(纳税人基本信息)

开票前置校验服务-规则链服务接口实现(纳税人基本信息) 代码 import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3

C++使用Socket编程实现一个简单的HTTP服务器

C使用Socket编程实现一个简单的HTTP服务器 在现代网络编程中&#xff0c;HTTP服务器是一个非常重要的组件。通过实现一个简单的HTTP服务器&#xff0c;可以帮助我们更好地理解网络通信的基本原理。本文将详细介绍如何使用C进行Socket编程&#xff0c;实现一个简单的HTTP服务器…

Cartographer源码理解

一、前言 最近一个半月&#xff0c;利用空余时间对Cartographer源码进行了简单的阅读&#xff0c;在这里做了个简单梳理&#xff0c;和大家分享交流。 cartographer源码量其实是有点大的&#xff0c;逐行逐句去解释实在是有心无力了&#xff0c;而且已经有大佬做了类似的事情…

macOS Sequoia 正式版(24A335)黑苹果/Mac/虚拟机系统镜像

“ 以下内容来自于黑果魏叔官网” 镜像特点 完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引导分区&#xff08;如有需要&#xff0c;可以自行直接替换opencore分区文件为…

JVM 性能优化与调优-ZGC(Z Garbage Collector)

JVM 性能优化与调优——ZGC&#xff08;Z Garbage Collector&#xff09; 在 JVM 性能优化中&#xff0c;垃圾收集器的选择和调优至关重要。垃圾收集器&#xff08;Garbage Collector, GC&#xff09;负责回收不再使用的对象所占用的内存&#xff0c;以便应用程序可以高效使用…

算法入门-贪心1

第八部分&#xff1a;贪心 409.最长回文串&#xff08;简单&#xff09; 给定一个包含大写字母和小写字母的字符串 s &#xff0c;返回通过这些字母构造成的最长的回文串 的长度。 在构造过程中&#xff0c;请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串…

docker_持久化存储

Docker Volumes 单机部署 要在 Docker 中使用 Volumes&#xff08;卷&#xff09; 来实现持久化存储&#xff0c;步骤非常简单。以下是具体的操作方法&#xff1a; 创建一个 Docker Volume 你可以通过 Docker CLI 来创建卷。执行以下命令创建一个名为 my_volume 的卷&#xf…

单片机中为什么要使用5v转3.3v,不直接使用3.3V电压

5V和3.3V是常见的电压水平&#xff0c;在技术上都有其特定的应用场景。为了保护电路、提升效能和确保系统的稳定运行&#xff0c;经常需要将5V转换为3.3V。 1.为什么要5V来供电 使用5V是因为部分传感器需要5V的供电&#xff0c;并且我们数据线一般都输出5V电压&#xff0c;而…

Web3入门指南:从基础概念到实际应用

Web3&#xff0c;即“去中心化的第三代互联网”&#xff0c;正在逐步改变我们对互联网的传统认知。从最初的静态网页&#xff08;Web1.0&#xff09;到互动平台和社交媒体为主的互联网&#xff08;Web2.0&#xff09;&#xff0c;Web3的目标是让用户重新掌握对数据和数字资产的…

leetcode 四数相加||

1.题目要求: 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a;0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0示例 1&#xff1a;输入&#xff1a;nums1 …

Hutool 使用详解

Hutool 是一个 Java 工具包&#xff0c;它为开发者提供了一系列实用的工具类和方法&#xff0c;帮助简化开发工作。本文将详细介绍 Hutool 的主要功能和使用方法&#xff0c;帮助开发者更好地利用这个强大的工具包。 目录 Hutool 简介Hutool 的安装与配置常用工具类介绍 字符…

【MySQL】MySQL中JDBC编程——MySQL驱动包安装——(超详解)

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解Java中JDBC编程&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;【MySQL】MySQL索引与事务的透析——&#xff08;超详解&#xff09;-CSDN博客 &#x1f308;感兴趣的小伙伴看一看小编主页&a…

Renesas R7FA8D1BH (Cortex®-M85)控制SHT20

目录 概述 1 硬件接口介绍 2 SHT20模块 2.1 SHT20简介 2.2 SHT-20模块电路 3 I2C接口实现 3.1 FSP配置I2C 3.2 I2C驱动程序实现 4 SHT20驱动程序 4.1 SHT20驱动代码结构 4.2 源代码文件 5 测试 5.1 测试功能介绍 5.2 测试代码实现 5.3 运行代码 概述 本文主要介…

安卓显示驱动

安卓显示驱动是用于在Android设备上提供图形和视频显示的底层软件组件。 显示驱动在Android系统中扮演着至关重要的角色&#xff0c;它们负责将图形和视频内容从系统内存传输到显示屏上。这些驱动程序确保了用户界面、图像、视频和游戏等视觉元素的正常显示。以下是关于安卓显…

详解QT插件机制

Qt插件机制允许将功能模块化为独立的插件,从而在运行时动态加载和卸载这些模块。这种机制对于扩展应用程序、插件架构和动态功能添加非常有用 插件机制 插件的基本概念 插件: 在Qt中,插件是实现特定接口的动态库(DLL或so文件),这些接口由Qt插件框架定义。插件可以被应用程序…

java,深拷贝和浅拷贝

在 Java 中&#xff0c;深拷贝&#xff08;Deep Copy&#xff09;和浅拷贝&#xff08;Shallow Copy&#xff09;是对象拷贝的两种方式&#xff0c;主要区别在于它们如何处理对象的内部引用。 目录 一、浅拷贝&#xff08;Shallow Copy&#xff09; 实现方式 二、深拷贝&…

【数据结构初阶】顺序结构二叉树(堆)接口实现超详解

文章目录 1.树1. 1 树的概念与结构1. 2 树的相关术语1. 3 树的表示1. 4 树形结构实际运用场景 2.二叉树2. 1 概念与结构2. 2 特殊的二叉树2. 2. 1 满二叉树2. 2. 2 完全二叉树 2. 3 二叉树存储结构2. 3. 1 顺序结构2. 3. 2 链式结构 3. 实现顺序结构二叉树&#xff08;小堆&…

Go语言并发编程:从理论到实践

并发是计算机科学领域中的一个核心概念&#xff0c;但对于不同的人来说&#xff0c;它可能意味着不同的东西。除了“并发”之外&#xff0c;你可能还听说过“异步”、“并行”或“多线程”等术语。一些人认为这些词是同义的&#xff0c;而另一些人则严格区分它们。如果我们要花…