当前位置: 首页 > news >正文

vue3项目实现全局国际化

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

文章目录

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


基础准备

引入插件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>

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),它支持一键扫描中文,并提取到指定文件生成对应的语言包对象

相关文章:

vue3项目实现全局国际化

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

Oracle 19c异常恢复—ORA-01209/ORA-65088---惜分飞

由于raid卡bug故障,导致文件系统异常,从而使得数据库无法正常启动,客户找到我之前已经让多人分析,均未恢复成功,查看alert日志,发现他们恢复的时候尝试resetlogs库,然后报ORA-600 kcbzib_kcrsds_1错误 2024-09-15T17:07:32.55321508:00 alter database open resetlogs 2024-09-…...

【Webpack--000】了解Webpack

&#x1f913;&#x1f60d;Sam9029的CSDN博客主页:Sam9029的博客_CSDN博客-前端领域博主 &#x1f431;‍&#x1f409;若此文你认为写的不错&#xff0c;不要吝啬你的赞扬&#xff0c;求收藏&#xff0c;求评论&#xff0c;求一个大大的赞&#xff01;&#x1f44d;* &#x…...

开源 AI 智能名片链动 2+1 模式 S2B2C 商城小程序与社交电商的崛起

摘要&#xff1a;本文深入探讨了社交电商迅速发展壮大的原因&#xff0c;并分析了开源 AI 智能名片链动 21 模式 S2B2C 商城小程序在社交电商中的重要作用。通过对传统电商与社交电商的对比&#xff0c;以及对各发展因素的剖析&#xff0c;阐述了该小程序如何为社交电商提供新的…...

在线IP代理检测:保护您的网络安全

在互联网飞速发展的今天&#xff0c;越来越多的人开始意识到网络安全和隐私保护的重要性。在线IP代理检测工具作为一种有效的网络安全手段&#xff0c;能够帮助用户识别和检测IP代理的使用情况&#xff0c;从而更好地保护个人隐私和数据安全。本文将详细介绍在线IP代理检测的相…...

【算法】BFS—解开密码锁的最少次数

题目 一个密码锁由 4 个环形拨轮组成&#xff0c;每个拨轮都有 10 个数字&#xff1a; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 。每个拨轮可以自由旋转&#xff1a;例如把 9 变为 0&#xff0c;0 变为 9 。每次旋转都只能旋转一个拨轮的一位数字。 锁的初始数字为 0000 &#xff0c;一个…...

非守护线程会阻止JVM的终止吗

非守护线程会阻止JVM的终止。在Java中&#xff0c;线程分为守护线程&#xff08;Daemon Threads&#xff09;和非守护线程&#xff08;Non-Daemon Threads&#xff0c;也被称为用户线程&#xff09;。这两种线程在JVM终止时表现出不同的行为。 非守护线程是JVM中执行程序主要逻…...

Grafana面板-linux主机详情(使用标签过滤主机监控)

1. 采集器添加labels标签区分业务项目 targets添加labels &#xff08;模板中使用的project标签&#xff09; … targets: [‘xxxx:9100’] labels: project: app2targets: [‘xxxx:9100’] labels: project: app1 … 2. grafana面板套用 21902 模板 演示...

MYSQL数据库基础篇——DDL

DDL&#xff1a;DDL是数据定义语言&#xff0c;用来定义数据库对象。 一.DDL操作数据库 1.查询 ①查询所有数据库 输入&#xff1b; 得到结果&#xff1a; ②查询当前数据库 输入&#xff1b; 例如执行下面语句&#xff1a; 2.创建 输入 然后展示数据库即可得到结果&…...

Springboot 集成 Swing

背景 Springboot 在 Java 给 Java 开发带来了极大的便利&#xff0c;那么如何把它集成到 Swing GUI 编程项目中&#xff0c;使得 GUI 编程更加高效&#xff1f;本人简单做了一下尝试&#xff0c;完成一个 demo &#xff0c;贴出来供大家参考 具体步骤 创建一个 spring boot …...

枚举算法总结

枚举算法&#xff08;Enumeration Algorithm&#xff09;是一种简单而直接的算法设计策略&#xff0c;它通过列出问题的所有可能情况&#xff0c;逐一进行验证&#xff0c;直到找到问题的解。这种算法适用于问题的解空间不是太大&#xff0c;可以通过遍历所有情况来找到答案的情…...

编译 Android 11源码

参考小米6 lineageos官方编译文档&#xff1a;https://wiki.lineageos.org/devices/sagit/build 单独编译 framework 以LineageOS18.1&#xff08;Android 11&#xff09;为例&#xff1a; 1、在源码根目录执行&#xff1a; make framework-minus-apex 2、用生成的framewo…...

时间复杂度计算 递归(solve2 后续)

原帖 最近校内比较忙&#xff0c;更新缓慢&#xff0c;致歉。 这里函数每次都需要遍历 h h h 和 m m m 之间的数&#xff08;复杂度 O ( n ) O(n) O(n)&#xff09;&#xff0c;所以和 solve1 略有不同。仍然假设 T ⁡ ( n ) \operatorname{T}(n) T(n) 表示 m − h 1 n…...

Nginx:高性能Web服务器与反向代理的深度剖析

Nginx&#xff1a;高性能Web服务器与反向代理的深度剖析 Nginx&#xff08;发音为“engine X”&#xff09;是一款轻量级但功能强大的Web服务器和反向代理服务器&#xff0c;以其高并发处理能力、低内存占用和灵活的扩展性在互联网项目中得到了广泛应用。本文将深入探讨Nginx…...

JavaSE - 面向对象编程03

01 多态 01_01 认识多态 01_02 多态的好处和缺点 【1】好处&#xff1a;① 可以解耦合&#xff0c;扩展性更强&#xff0c;父类引用指向的子类对象可以随时切换&#xff0c;而后面的逻辑代码并不需要更改。 ② 使用父类引用可以作为方法的形参或返回类型来接收一切子类对象。…...

变电站缺陷数据集8307张,带xml标注和txt标注,可以直接用于yolo训练

变电站缺陷数据集8307张&#xff0c; 带xml标注和txt标注&#xff0c;可以直接用于yolo训练&#xff0c;赠附五个脚本 变电站缺陷数据集 数据集概述 变电站缺陷数据集是一个专门针对变电站设备和环境缺陷检测的图像数据集。该数据集包含了8307张经过标注的图像&#xff0c;旨…...

Redis的存储原理和数据模型

一、Redis是单线程还是多线程呢&#xff1f; 我们通过跑redis的代码&#xff0c;查看运行的程序可以得知&#xff0c;Redis本身其实是个多线程&#xff0c;其中包括redis-server&#xff0c;bio_close_file&#xff0c;bio_aof_fsync&#xff0c;bio_lazy_free&#xff0c;io_t…...

Linux 文件与目录操作命令详解

文章目录 前言创建文件1. touch2. vim 文件内容显示3. cat4. more5. less6. head7. tail 文件&#xff08;目录&#xff09;复制、删除和移动8. cp9. rm10. mv 压缩文件与解压缩11. gzip12. zip 和 unzip 创建目录13. mkdir 删除目录14. rmdir 改变工作目录15. cd16. pwd 显示目…...

MySQL篇(窗口函数/公用表达式(CTE))

目录 讲解一&#xff1a;窗口函数 一、简介 二、常见操作 1. sumgroup by常规的聚合函数操作 2. sum窗口函数的聚合操作 三、基本语法 1. Function(arg1,..., argn) 1.1. 聚合函数 sum函数&#xff1a;求和 min函数 &#xff1a;最小值 1.2. 排序函数 1.3. 跨行函数…...

408算法题leetcode--第七天

283. 移动零 283. 移动零思路&#xff1a;代码中注释阐述时间&#xff1a;O(n)&#xff1b;空间&#xff1a;O(1) class Solution { public:void moveZeroes(vector<int>& nums) {// 简单思路&#xff1a;用一个辅助数组&#xff0c;将非0元素复制到里面// 双指针&…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

java+webstock

maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...

边缘计算设备全解析:边缘盒子在各大行业的落地应用场景

随着工业物联网、AI、5G的发展&#xff0c;数据量呈爆炸式增长。但你有没有想过&#xff0c;我们生成的数据&#xff0c;真的都要发回云端处理吗&#xff1f;其实不一定。特别是在一些对响应时间、网络带宽、数据隐私要求高的行业里&#xff0c;边缘计算开始“火”了起来&#…...

【VLAs篇】02:Impromptu VLA—用于驱动视觉-语言-动作模型的开放权重和开放数据

项目描述论文标题Impromptu VLA&#xff1a;用于驱动视觉-语言-动作模型的开放权重和开放数据 (Impromptu VLA: Open Weights and Open Data for Driving Vision-Language-Action Models)研究问题自动驾驶的视觉-语言-动作 (VLA) 模型在非结构化角落案例场景中表现不佳&#xf…...

奈飞工厂官网,国内Netflix影视在线看|中文网页电脑版入口

奈飞工厂是一个专注于提供免费Netflix影视资源的在线播放平台&#xff0c;致力于为国内用户提供的Netflix热门影视内容。该平台的资源与Netflix官网基本同步&#xff0c;涵盖电影、电视剧、动漫和综艺等多个领域。奈飞工厂的界面简洁流畅&#xff0c;资源分类清晰&#xff0c;方…...

Vue3项目实现WPS文件预览和内容回填功能

技术方案背景&#xff1a;根据项目需要&#xff0c;要实现在线查看、在线编辑文档&#xff0c;并且进行内容的快速回填&#xff0c;根据这一项目背景&#xff0c;最终采用WPS的API来实现&#xff0c;接下来我们一起来实现项目功能。 1.首先需要先准备好测试使用的文档&#xf…...

2. Web网络基础 - 协议端口

深入解析协议端口与netstat命令&#xff1a;网络工程师的实战指南 在网络通信中&#xff0c;协议端口是服务访问的门户。本文将全面解析端口概念&#xff0c;并通过netstat命令实战演示如何监控网络连接状态。 一、协议端口核心知识解析 1. 端口号的本质与分类 端口范围类型说…...