【前端】国际化实现过程

过程

安装依赖,配置,当点击中英文切换按钮时候,全局变换,element-plus组件也需要中英文切换。
确定初始化的语言在setting中,页面加载会读取里面的语言走一次语言的初始化配置,后面就是按钮切换

代码

仅供参考
安装

 "vue-i18n": "^9.10.1",

main.js

import i18n from '@/lang/index' // 国际化
app.use(i18n) //中英切换

src下新建文件夹lang,再新建package文件夹同级别index.js

import { createI18n } from 'vue-i18n'
import Elp_ZhCn from 'element-plus/dist/locale/zh-cn.mjs'
import Elp_en from 'element-plus/dist/locale/en.mjs'// 本地语言包
import enLocale from './package/en.json'
import zhCnLocale from './package/zh-cn.json'const messages = {// 'zh-cn': {//   ...zhCnLocale// },zh: {...zhCnLocale,...Elp_ZhCn,},en: {...enLocale,...Elp_en,},
}const i18n = createI18n({legacy: false,locale: window.localStorage.getItem('language') || 'zh',messages: messages,
})export default i18n

package下的en.json和zh-cn.json,类似下面

  "days": "天","days": "days",

一开始确认默认的语言.main.js中配置ep的

<template><el-config-provider :locale="appStore.locale" :size="appStore.size"><router-view /></el-config-provider>
</template>
<script setup>
import { ElConfigProvider } from 'element-plus'
import { useAppStore } from '@/store/modules/app.js'
const appStore = useAppStore()console.log('ep的语言为:', appStore.locale.name)
</script>

走小仓库app.js

import { defineStore } from 'pinia'
import { useStorage } from '@vueuse/core'
import defaultSettings from '@/setting'// 导入 Element Plus 中英文语言包
import zhCn from 'element-plus/es/locale/lang/zh-cn'
import en from 'element-plus/es/locale/lang/en'// setup
export const useAppStore = defineStore('app', () => {// stateconst device = useStorage('device', 'desktop')const size = useStorage('size', defaultSettings.size)console.log('🚀初始化的 ~ useAppStore ~ defaultSettings.language:', defaultSettings.language)const language = useStorage('language', defaultSettings.language)console.log('🚀初始化的 ~ useAppStore ~ language:', language)const sidebarStatus = useStorage('sidebarStatus', 'closed')const sidebar = reactive({opened: sidebarStatus.value !== 'closed',withoutAnimation: false,})// const documentTitle = useStorage('documentTitle', defaultSettings.title);document.title = defaultSettings.titleconst activeTopMenu = useStorage('activeTop', '')/*** 根据语言标识读取对应的语言包*/const locale = computed(() => {if (language?.value == 'en') {return en} else {return zhCn}})// actionsfunction toggleSidebar() {sidebar.opened = !sidebar.openedsidebar.withoutAnimation = falseif (sidebar.opened) {sidebarStatus.value = 'opened'} else {sidebarStatus.value = 'closed'}}function closeSideBar(withoutAnimation) {sidebar.opened = falsesidebar.withoutAnimation = withoutAnimationsidebarStatus.value = 'closed'}function openSideBar(withoutAnimation) {sidebar.opened = truesidebar.withoutAnimation = withoutAnimationsidebarStatus.value = 'opened'}function toggleDevice(val) {device.value = val}function changeSize(val) {size.value = val}/*** 切换语言** @param val*/function changeLanguage(val) {language.value = val}/*** 混合模式顶部切换*/function changeTopActive(val) {activeTopMenu.value = val}return {device,sidebar,language,locale,size,activeTopMenu,toggleDevice,changeSize,changeLanguage,toggleSidebar,closeSideBar,openSideBar,changeTopActive,}
})

其中setting是自定义的配置

// import logo from '@/assets/images/error_images/401.png' // 使用相对路径导入图片
//用于项目logo|标题配置
export default {title: 'Lucky_Star', //项目的标题logo: '/logo.svg', //项目public下的// logo: logo, //项目logo设置logoHidden: true, //logo组件是否隐藏设置language: 'zh', // zh| enfixedHeader: true,tagsView: false,sidebarLogo: true,
}

按钮切换

import i18n from '@/lang'import { useAppStore } from '@/store/modules/app.js'
import { useI18n } from 'vue-i18n'
const { locale } = useI18n()
const appStore = useAppStore()const changeLanZ = () => {console.log('切为中文')locale.value = 'zh'i18n.global.locale.value = 'zh'appStore.changeLanguage('zh')
}const changeLanE = () => {locale.value = 'en'console.log('切为英文')i18n.global.locale.value = 'en'appStore.changeLanguage('en')
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/755261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧拉角与横滚-俯仰-偏航角(RPY)

围绕欧拉角和横滚-俯仰-偏航角这两个术语存在很多混淆。这源于教科书和论文中截然不同的、看似权威的定义。 欧拉旋转定理&#xff08;1775 年&#xff09;指出&#xff0c;一个 3D 坐标系相对于另一个坐标系的方向可以用“围绕三个轴的连续旋转来描述&#xff0c;因此没有两个…

泰迪智能科技携手华北电力大学理学院共建“校外实践基地”

3月15日&#xff0c;华北电力大学数理学院教学副主任史会峰、科研副主任王涛、概率教研室副主任解西阳莅临泰迪智能科技产教融合实训基地开展“华北电力大学校外实践教学基地”签约揭牌仪式。泰迪智能科技董事长张良均、支持中心负责人王宏刚、外联部吴桂锋进行接待。 活动伊始…

395. 至少有 K 个重复字符的最长子串

Problem: 395. 至少有 K 个重复字符的最长子串 文章目录 思路解题方法复杂度Code 思路 这是一道关于字符串处理的问题&#xff0c;我们需要找到至少有 K 个重复字符的最长子串。我们可以使用滑动窗口的方法来解决这个问题。我们可以设置一个窗口&#xff0c;然后不断地移动这个…

蓝桥杯练习题——贡献法(隔板法)

1.孤独的照片 思路 孤独的区间一定有一头孤独的牛&#xff0c;考虑每头牛对区间的贡献是多少 #include<iostream> using namespace std; const int N 5e5 10; int n; string s;int main(){cin>>n>>s;long long res 0;for(int i 0; i < n; i){int l…

shell脚本-grep、sed、awk三剑客

文章目录 介绍基本正则表达式正则表达式的基本组成部分案例 grep用法案例 sed流编辑器awk&#xff1a;报告生成器案例 awk区块原理区域构成awk 的执行流程 awk高级使用1. AWK 变量2. AWK 内置变量 awk操作符1. 算数操作符2. 赋值操作符3. 布尔值4. 比较操作符5. 逻辑操作符 awk…

关于“如何系统学习Python”的一下顽皮的想法

我对Python的学习&#xff0c;大概经历了这几个步骤&#xff1a; 1、找受热捧的性价比极高的书籍&#xff08;即经典的&#xff09;。多找几本&#xff0c;对比着学。有一本漫画类型的日本写的Python书&#xff0c;教会了我如何安装Python&#xff08;即专业人士常说的让人听不…

gPTP简介

1、gPTP&#xff08;generalized precision time protocol&#xff09;广义时钟同步协议 gPTP&#xff08;generalized precision time protocol&#xff09;广义时钟同步协议&#xff0c;即IEEE 802.1AS协议。它是IEEE 1588协议的延伸&#xff0c;可以为TSN提供全局精准…

M3C芯片——支持工业级HMI应用,集成2D加速、4路串口及2路CAN

M3C芯片是一款基于 RISC-V 的高性能、国产自主、工业级高清显示与智能控制 MCU&#xff0c;配备强大的 2D 图形加速处理器、PNG/JPEG 解码引擎、丰富的接口&#xff0c;支持工业宽温&#xff0c;具有高可靠性、高开放性&#xff0c;可广泛应用于工业自动化控制、HMI人机交互、 …

RPC学习笔记一

什么是RPC RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种用于实现分布式系统中不同计算机或进程之间进行通信和调用的技术和模式。 在传统的过程调用中&#xff0c;当一个程序需要调用另一个程序的函数或方法时&#xff0c;通常是在同一台…

Python条件语句深度解析:从基础到应用的全面指南

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 &#x1f4d8; 一、引言 &#x1f4dd; 二、…

如何申请https证书

目录 第一步先选择合适的证书类型&#xff1a; 第二步在填写自己需要保护的域名信息&#xff1a; 第三步验证域名所有权&#xff08;或者是单位组织信息、详细组织单位业务详情&#xff09;&#xff1a; 第四步验证完成后证书会正常签发&#xff1a; 第五步将下载完成的证书…

一款基于 SpringCloud 开发的AI聊天机器人系统,已对接GPT-4.0,非常强大

简介 一个基于SpringCloud的Chatgpt机器人&#xff0c;已对接GPT-3.5、GPT-4.0、百度文心一言、stable diffusion AI绘图、Midjourney绘图。用户可以在界面上与聊天机器人进行对话&#xff0c;聊天机器人会根据用户的输入自动生成回复。同时也支持画图&#xff0c;用户输入文本…

swagger3快速使用

目录 &#x1f37f;1.导入依赖 &#x1f32d;2.添加配置文件 &#x1f9c2;3.添加注解 &#x1f96f;4.访问客户端 1.导入依赖 引入swagger3的依赖包 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artif…

RealBasicVSR使用记录

对各种场景图片、视频超分结果都很不错的模型。 paper&#xff1a;https://arxiv.org/pdf/2111.12704.pdf code&#xff1a;https://github.com/ckkelvinchan/RealBasicVSR 一、使用步骤 1. git clone https://github.com/ckkelvinchan/RealBasicVSR.git 2. 我的环境已安装…

主机与windows虚拟机远程桌面实现方法

目录 一、虚拟机相关配置1. 配置虚拟机网络2. 打开虚拟机远程桌面功能3. 配置虚拟机用户与分组 二、主机相关配置 当无法通过共享文件夹实现主机与windows虚拟机文件共享时&#xff0c;可以通过主机与虚拟机远程桌面的方法实现文件的共享传输。本文主要介绍主机与虚拟机远程桌面…

01.Linked-List-Basic

1. 链表简介 1.1 链表定义 链表&#xff08;Linked List&#xff09;&#xff1a;一种线性表数据结构。它使用一组任意的存储单元&#xff08;可以是连续的&#xff0c;也可以是不连续的&#xff09;&#xff0c;来存储一组具有相同类型的数据。 简单来说&#xff0c;「链表」…

5G安全技术新突破!亚信安全5G安全迅龙引擎正式发布

5G专网应用飞速增长&#xff1a;2020年5G专网数量800个&#xff0c;2021年2300个&#xff0c;2022年5325个&#xff0c;2023年已经超过16000个&#xff0c;5G与垂直行业的融合快速加深&#xff0c;5G带来的变革正加速渗透至各行各业。 5G网络出现安全问题&#xff0c;将是异常严…

Vue关键字important强制指定样式优先级

width: 187px !important; 这行代码中使用了 !important 关键字&#xff0c;它的作用是强制指定样式优先级&#xff0c;即使存在其他样式规则也可以确保该样式被应用。 在这个例子中&#xff0c;width: 187px !important; 表示要将元素的宽度设置为 187 像素&#xff0c;并且…

【原创】手动安装open-webui,非官方docker安装方法,可汉化ui

open-webui是一个为LLMs&#xff08;大型语言模型&#xff09;设计的友好型Web用户界面&#xff0c;支持Ollama和OpenAI兼容的API。它提供了直观的聊天界面、响应式设计、快速响应性能、简易安装、代码语法高亮、Markdown和LaTeX支持、本地RAG集成、Web浏览能力、提示预设支持、…

初识JavaScript

1、JavaScript实现 JavaScript包含一下几个部分&#xff1a; 核心&#xff08;ECMAScript&#xff09;文档对象模型&#xff08;DOM&#xff09;游览器对象模型&#xff08;BOM&#xff09; 1.1ECMScript ECMAScript,即ECMA-262定义的语言&#xff0c;并不局限于web游览器&…