通过页面添加国际化数据,实现vue的国际化

element ui

  • 写在前面
  • 1. 原有的vue的国际化处理
    • 1.1 语言文件
    • 1.2 lang的index.js
    • 1.3 入口文件导入
    • 1.3 应用
  • 2. 通过页面添加国际化数据
    • 2.1 做法
    • 2.2 lang的index.js文件修改
    • 2.3 需要注意的点
  • 总结
  • 写在最后

写在前面

需求:在系统的国际化管理页面添加国际化数据,实现系统的国际化

1. 原有的vue的国际化处理

1.1 语言文件

lang目录下的en文件(相对应的英文)

import user from "./user";
import log from "./log";
import role from "./role";
export default {// 操作按钮button: {search: 'Search',reset: 'Reset',remove: 'Remove',batchRemove: 'Remove',detail: 'Detail',edit: 'Edit',close: 'Close',cancel: 'Cancel',submit: 'Submit',save: 'Save',confirm: 'Confirm',management: 'Management',create: 'Create',modify: 'Modify',open: 'Open',packUp: 'PackUp',check: 'Check',back: 'Back',import: 'Import',export: 'Export',send: "Send Eph",sendMacro: 'Send Macro',ok:'OK',erase:'Erase',calc: 'Calc',resend: 'Resend File',copy:'Copy',paste:'Paste',visible: 'Visible Columns',delete:'Delete All',},// 常用commonColumn: {startTime: 'Start Time',endTime: 'End Time',yes: 'Yes',no: 'No',selectPlaceholder: 'Please select',inputPlaceholder: 'Please enter',operation: 'Operation',status: 'Status',type: 'Type',name: 'Name',englishName: 'English Name',value: 'Value',code: 'Code',sort: 'Sort',selectDelete: 'Please select Delete',createdDate: 'Created Date',all: 'All',setDefault: 'Set Default',noData: 'None',colon: ':',logDetail: 'Log Detail',language: 'Language',systemParameterConfig:'System Parameter Config',},// 平台管理主页home: {deviceMonitor:'Device Monitoring',centralMonitor:'Central Monitoring',macro: 'Macro Configuration',planList:'Plan List',createPlan:'Create Plan',comeBackHome: 'Back To Home',personalCenter: 'Personal Center',clearCache: 'Clear Cache',changePassword: 'Change Password',taskManage: 'Manage Task',fullscreen: 'Fullscreen',exitFullscreen: 'Exit Fullscreen',deviceManage:'Equipment Resource',systemParameterConfig:'System Parameter Config',},// 用户管理user,// 日志管理log,// 角色管理role,
}

zh文件(相对应的中文)

import user from "./user";
import log from "./log";
import role from "./role";
export default {// 操作按钮button: {search: '查 询',reset: '重 置',remove: '删 除',batchRemove: '删 除',detail: '详 情',edit: '编 辑',close: '关 闭',cancel: '取 消',submit: '提 交',save: '保 存',confirm: '确 定',management: '管理',create: '新 建',modify: '修 改',open: '展开',packUp: '收起',check: '查看',back: '返 回',import: '导 入',export: '导 出',send: "发送EPH",sendMacro: '下发宏',ok:'确认',erase:'清除',calc: '计算',resend: '重新下发文件',copy:'复制',paste:'粘贴',visible: '显隐列',delete:'删除所有'},// 常用commonColumn: {startTime: '开始时间',endTime: '结束时间',yes: '是',no: '否',selectPlaceholder: '请选择',inputPlaceholder: '请输入',operation: '操作',status: '状态',type: '类型',name: '名称',englishName: '英文名',value: '值',code: '编码',sort: '序号',selectDelete: '请选择删除项',createdDate: '创建时间',all: '全部',setDefault: '设为默认',noData: '无',colon: ':',logDetail: '日志详情',language: '系统语言',systemParameterConfig:'系统参数配置',},// 平台管理主页home: {deviceMonitor:'设备监控框图',centralMonitor:'集中监控界面',macro: '设置宏配置',planList:'计划列表界面',createPlan:'新建计划界面',comeBackHome: '回到主页',personalCenter: '个人中心',clearCache: '清除缓存',changePassword: '修改密码',taskManage: '任务管理',fullscreen: '全屏',exitFullscreen: '退出全屏',deviceManage:'设备资源管理',systemParameterConfig:'系统参数配置',},// 用户管理user,// 日志管理log,// 角色管理role,}

1.2 lang的index.js

import Vue from 'vue'
import VueI18n from 'vue-i18n'
import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui 英文包
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN' // element-ui 中文包
import enLocale from './en/index'
import zhLocale from './zh/index'
import Cookies from 'js-cookie'Vue.use(VueI18n)const messages = {en: {...enLocale,...elementEnLocale},zh: {...zhLocale,...elementZhLocale}
}const i18n = new VueI18n({// 设置语言 en || zhlocale: Cookies.get('language') || 'en',// 设置文本内容messages
})export default i18n

1.3 入口文件导入

import Vue from 'vue'import Cookies from 'js-cookie'import 'normalize.css/normalize.css' // A modern alternative to CSS resetsimport Element from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'import App from './App.vue'
import router from './router'
import store from './store'import { i18n } from './lang'; // Internationalization
import Axios from 'axios'Vue.use(Element, { size: Cookies.get('size') || 'medium', i18n: (key, value) => i18n.t(key, value) })
Vue.config.productionTip = falsenew Vue({router,store,i18n, // 语言国际化render: h => h(App)}).$mount('#app')

1.3 应用

注: 以$t(‘login.username’)这种方式切换中英文

<template><div class="manage"><div class="manageList"><!-- 操作栏 --><div class="title"><el-row><el-col :span="16"><el-form inline :model="searchParams"><el-form-item prop="loginId"><el-input v-model="searchParams.loginId" :placeholder="$t('login.username')" clearable /></el-form-item><el-form-item prop="name"><el-input v-model="searchParams.name" :placeholder="$t('user.username')" clearable /></el-form-item><el-form-item><el-button class="light-blue-btn" icon="el-icon-search" @click="searchClick">{{ $t('button.search') }}</el-button><el-button class="reset-button" icon="el-icon-refresh" @click="resetFun">{{ $t('button.reset') }}</el-button></el-form-item></el-form></el-col><el-col :span="8" style="text-align: right;"><el-buttonclass="green-btn"icon="el-icon-plus"@click="addUser"v-if="saveEnable">{{ $t('button.create') }}</el-button></el-col></el-row></div><!-- 表格 --><div class="tableList"><el-table:data="userListData"@selection-change="handleSelectionChange"height="100%"width="100%"@row-click="detail"class="elTableStyle"><el-table-column prop="loginId" :label="$t('login.username')" align="center" :show-overflow-tooltip="true" /><el-table-column prop="name" :label="$t('user.username')" align="center" :show-overflow-tooltip="true" /><el-table-column:label="$t('commonColumn.operation')"width="500"align="center"v-if="saveEnable || resetEnable"><template slot-scope="scope"><el-buttontype="text"icon="el-icon-edit":disabled="user.id === scope.row.id"@click.stop="edit(scope.row)"v-if="saveEnable">{{ $t('button.edit') }}</el-button><el-buttontype="text"icon="el-icon-edit":disabled="user.id === scope.row.id"@click.stop="resetPw(scope.row)"v-if="resetEnable">{{ $t('user.resetPassword') }}</el-button><el-buttontype="text"icon="el-icon-edit":disabled="user.id === scope.row.id"@click.stop="changePw(scope.row)"v-if="USER_LOGINID === $store.getters.user.loginId">{{ $t('home.changePassword') }}</el-button><el-buttontype="text"icon="el-icon-delete":disabled="USER_LOGINID === scope.row.loginId || user.id === scope.row.id"@click.stop="remove([scope.row])"v-if="deleteEnable">{{ $t('button.remove') }}</el-button></template></el-table-column></el-table></div><pagination :total="table.total" :page.sync="table.page" :limit.sync="table.size" @pagination="searchFun" /></div></div>
</template>

2. 通过页面添加国际化数据

现在的需求:不在是将国际化数据在文件里面,而是在系统上的页面添加数据即可。

CREATE TABLE `internationalize`  (`id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`code_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`zh_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`en_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`version_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;SET FOREIGN_KEY_CHECKS = 1;

直接在这个页面添加数据,即可实现国际化,而不需要去更改内部文件
在这里插入图片描述

2.1 做法

既然lang的index.js中从文件读取数据去实现国际化,我为了最大程度不影响其他代码,我想着更改这个文件的读取方式**(数据是从后台读取,然后将后端数据转换为 VueI18n 所需的格式,在数据加载完成后,重新设置 i18n 实例)**,这样不就改一下这个文件就能摒弃掉哪些配置文件,并且不需要变动其他代码。

2.2 lang的index.js文件修改

/* eslint-disable indent */
/* eslint-disable eol-last */
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui 英文包
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN' // element-ui 中文包
import { internationalize } from '@/api/system'
import Cookies from 'js-cookie'Vue.use(VueI18n)let messages = {en: {...elementEnLocale},zh: {...elementZhLocale}
}// 初始化国际化信息
async function loadLocaleData() {try {// 后端国际化数据接口,记得放行   const response = await internationalize.findAll();const localeData = response.data;if (response.status === 1) { // 检查状态是否成功localeData.forEach(item => {// 将后端数据转换为 VueI18n 所需的格式messages.en[item.code] = item.en; // 为英文消息设置messages.zh[item.code] = item.zh; // 为中文消息设置});// 在数据加载完成后,重新设置 i18n 实例i18n.setLocaleMessage('en', messages.en);i18n.setLocaleMessage('zh', messages.zh);} else {console.error('Failed to load locale data: ');}} catch (error) {console.error('Failed to load locale data:');}
}const i18n = new VueI18n({// 设置语言 en || zhlocale: Cookies.get('language') || 'en',// 设置文本内容messages
})// 调用方法加载国际化数据
loadLocaleData();// export default i18n;
export { i18n, loadLocaleData };

入口文件不需要变化

2.3 需要注意的点

   // 在修改和添加数据时,需要重新加载国际化数据,实时获取最新数据import {loadLocaleData} from '@/lang'// vue中添加和修改internationalize.saveUpdate(form).then((res) => {_this.$message({type: 'success',message: res.message})_this.visible = false;_this.getList();// 重新加载国际化数据loadLocaleData(); // 你需要导入 loadLocaleData 函数并调用它}

总结

写这篇博客主要的目的是让自己更深刻,有回忆点,然后就是分享自己的做法;有需要的根据自己的需求进行修改

写在最后

如果此文对您有所帮助,请帅戈靓女们务必不要吝啬你们的Zan,感谢!!不懂的可以在评论区评论,有空会及时回复。

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

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

相关文章

我想电脑批量管理 30 台苹果手机,怎么操作更简单方便呢?

在如今的数字化时代&#xff0c;手机已经成为了我们日常生活中不可或缺的一部分。无论是工作还是娱乐&#xff0c;我们都需要使用各种各样的应用软件来满足自己的需求。 而对于那些需要管理大量苹果手机设备的企业来说&#xff0c;如何高效地完成这些任务就成了一个重要问题。…

三款计算服务器配置→如何选择科学计算服务器?

科学计算在众多领域都扮演着关键角色&#xff0c;无论是基础科学研究还是实际工程应用&#xff0c;强大的计算能力都是不可或缺的。而选择一台合适的科学计算服务器&#xff0c;对于确保科研和工作的顺利进行至关重要。 首先&#xff0c;明确自身需求是重中之重。要仔细考虑计算…

六个方向比较分析:ChatGPT-o1-preview与 ChatGPT-4o在论文写作辅助上的差异

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术研究和论文撰写的领域&#xff0c;人工智能助手正变得越来越重要。随着技术的不断进步&#xff0c;ChatGPT-o1-preview和ChatGPT-4o作为两个先进的语言模型&#xff0c;在辅助论文…

文件上传漏洞及安全

文件上传 文件上传安全指的是攻击者通过利用上传实现后门的写入连接后门进行权限控制的安全问题&#xff0c;对于如何确保这类安全问题&#xff0c;一般会从原生态功能中的文件内容&#xff0c;文件后缀&#xff0c;文件类型等方面判断&#xff0c;但是漏洞可能不仅在本身的代码…

C++学习路线(二十二)

构造函数 构造函数作用 在创建一个新的对象时&#xff0c;自动调用的函数&#xff0c;用来进行“初始化”工作:对这个对象内部的数据成员进行初始化。 构造函数特点 1.自动调用(在创建新对象时&#xff0c;自动调用) 2.构造函数的函数名&#xff0c;和类名相同 3.构造函数…

Pytorch学习--如何下载及使用Pytorch中自带数据集,如何把数据集和transforms联合在一起使用

一、标准数据集使用 pytorch官网–标准数据集 这里以CIFAR10数据集为例&#xff1a;CIFAR10 下载数据集 代码&#xff1a; import torchvision train_datatorchvision.datasets.CIFAR10(root"datasets",trainTrue,downloadTrue) test_datatorchvision.datasets.…

盘古信息制造数字化优才计划 | 解决人才困境 赋能智能制造

在中国制造2025的大背景下&#xff0c;制造业正以前所未有的速度向数字化、智能化转型。在这场深刻的变革中&#xff0c;人才作为核心驱动力&#xff0c;其重要性日益凸显。作为全球领先的制造运营管理工业软件供应商&#xff0c;盘古信息深知构建制造人才生态的重要性&#xf…

EasyExcel_动态表头的导入导出

文章目录 前言一、EasyExcel二、使用步骤1.引入jar包2.数据准备2.1 数据库 3.方法实例3.1 无实体的导入3.1.1 Controller3.1.2 Service3.1.3 Listener3.1.4 Utils3.1.5 无实体导入数据返回说明 3.2 无实体的导出3.2.1 无实体导出数据(这里只贴出关键代码,Service代码处理)3.2.2…

Kafka Tool(Offset Explorer)在windows下配置访问kerberos认证Kafka

Author : Spinach | GHB Link : http://blog.csdn.net/bocai8058文章目录 前言准备配置文件配置软件参数及启动 前言 Offset Explorer&#xff08;以前称为Kafka Tool&#xff09;是一个用于管理和使用Apache Kafka集群的图形用户界面&#xff08;GUI&#xff09;应用程序。…

登录时用户名密码加密传输(包含前后端代码)

页面输入用户名密码登录过程中&#xff0c;如果没有对用户名密码进行加密处理&#xff0c;可能会导致传输过程中数据被窃取&#xff0c;就算使用https协议&#xff0c;在浏览器控制台的Request Payload中也是能直接看到传输的明文&#xff0c;安全感是否还是不足。 大致流程&a…

FreeRTOS代码规范(3)

数据类型 portmacro.h : 在里面定义了Free RTOS 用到的相关数据类型 在 CM-3 内核中 short类型是16位&#xff0c;long 类型是32位 在 portmacro.h 中有两个最基本的数据类型 &#xff1a; Base type_t Tick type_t 这两个数据类型的存在是基于执行效率考虑的&#xff0c;…

如何使用 NumPy 和 Matplotlib 进行数据可视化

如何使用 NumPy 和 Matplotlib 进行数据可视化 在数据科学领域&#xff0c;NumPy 和 Matplotlib 是 Python 中最常用的两个库。NumPy 用于科学计算和数据处理&#xff0c;而 Matplotlib 提供了丰富的图表工具来展示数据。本文将介绍如何将这两个库结合使用&#xff0c;轻松进行…

腾讯会议pc端3.29.11开启悬浮窗口

之前是&#xff1a;pc端每次最小化&#xff0c;它就自动收回到任务栏里了 版本&#xff1a;3.29.11 解决办法&#xff1a; 打开腾讯会议&#xff0c;点击左上角的【头像】。 单击【设置】。 选择【显示当前说话者】来管理麦克风浮窗。 再进入会议&#xff0c;点击最小化一哈&…

中小企业设备资源优化:Spring Boot系统实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

RabbitMQ常见问题持续汇总

文章目录 消息分发不公平分发限流-basic.qos主要功能使用场景示例代码 消费者默认concurrency数量prefetch和concurrency结合&#xff1f; spring.rabbitmq.template.retry.enabledtrue和spring.rabbitmq.listener.simple.retry.enabledtrue有什么区别1. spring.rabbitmq.templ…

Appium环境搭建全流程(含软件)

目录 1.node.js的安装 1--中文下载地址 2--node.js设置镜像源 2.安装appium 1--全局安装appium 2--安装驱动 uiautomator2 3--查看插件的命令 4--安装 images插件 5--安装 execute-driver 插件 6--安装 relaxed-caps插件 7--安装 universal-xml 插件 3.python安装 1--python下…

Excel功能区变灰是什么原因造成?怎么解决?

Microsoft Excel是广泛使用的电子表格软件&#xff0c;但有时用户可能会遇到功能区变灰的问题&#xff0c;这可能导致功能无法使用&#xff0c;影响工作效率和用户体验。本文将深入探讨Excel功能区灰色的原因及解决方案&#xff0c;帮助读者快速解决这一问题。 一、Excel功能区…

Windows 使用命令行开启热点(无线网卡连接下)

winr 打开命令提示符框&#xff08;管理员模式&#xff09;在cmd中输入 netsh wlan show drivers 检查无线网卡是否已插入继续输入 ssid后面是wifi名称&#xff0c;key后面是密码&#xff0c;可以自行更改 netsh wlan set hostednetwork modeallow ssidWDW keyWDWWDWWDW 设置热…

开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现推理加速的正确姿势-Gradio

一、前言 目前&#xff0c;Qwen模型已经升级到了2.5版本。无论是语言模型还是多模态模型&#xff0c;它们都是在大规模的多语言和多模态数据上进行预训练的&#xff0c;并通过高质量的数据进行后期微调&#xff0c;以更好地符合人类的需求。 Gradio作为一个强大的工具&#xff…

APP专项测试-冷启动-流量-电量-内存

1、响应时间 1.1怎么获取冷启动时间&#xff08;热启动&#xff0c;就是后台不关后台再次打开&#xff09; 方法一 1.2怎么获取包名 与 启动页 方法三soloPi&#xff1a;启动时间(用户角度出发&#xff0c;页面差异进行计算时间)&#xff1a; 然后默认配置。点击开始录制 1开…