From ca39aeadb7b19b2e854d5e2694e52b63ef9e8afe Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期二, 21 十一月 2023 14:35:00 +0800
Subject: [PATCH] 菜单/字典/系统配置增加双语

---
 ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml                  |  200 +++---
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java          |   12 
 ard-work/src/main/resources/mapper/device/ArdEquipExternalMapper.xml                 |    1 
 ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml                  |    6 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java      |   10 
 ard-work/src/main/resources/mapper/device/ArdEquipRadarMapper.xml                    |    2 
 ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties                        |  211 ++++++-
 ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java            |   14 
 ruoyi-admin/src/main/resources/i18n/messages_en_US.properties                        |  214 ++++++-
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java      |   11 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java |   68 +-
 ruoyi-admin/src/main/resources/i18n/messages.properties                              |  221 ++++++-
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysConfig.java        |   10 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java              |   11 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java |  111 ++--
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java     |  260 ++++-----
 ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml                    |  162 +++--
 ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml                      |   16 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java   |   20 
 19 files changed, 993 insertions(+), 567 deletions(-)

diff --git a/ard-work/src/main/resources/mapper/device/ArdEquipExternalMapper.xml b/ard-work/src/main/resources/mapper/device/ArdEquipExternalMapper.xml
index 06ddea5..0f52fe2 100644
--- a/ard-work/src/main/resources/mapper/device/ArdEquipExternalMapper.xml
+++ b/ard-work/src/main/resources/mapper/device/ArdEquipExternalMapper.xml
@@ -51,6 +51,7 @@
         <include refid="selectArdEquipExternalVo"/>
         <where>
             <if test="name != null  and name != ''">and c.name like '%'||#{name}||'%'</if>
+            <if test="ip != null  and ip != ''">and c.ip = #{ip}</if>
             <if test="type != null  and type != ''">and c.type = #{type}</if>
             <if test="factory != null  and factory != ''">and c.factory = #{factory}</if>
             <if test="deptId != null ">and (c.dept_id = #{deptId} OR c.dept_id IN ( SELECT t.dept_id FROM sys_dept t
diff --git a/ard-work/src/main/resources/mapper/device/ArdEquipRadarMapper.xml b/ard-work/src/main/resources/mapper/device/ArdEquipRadarMapper.xml
index 5338123..b5ba729 100644
--- a/ard-work/src/main/resources/mapper/device/ArdEquipRadarMapper.xml
+++ b/ard-work/src/main/resources/mapper/device/ArdEquipRadarMapper.xml
@@ -85,6 +85,8 @@
         left join ard_towers t on t.id = c.tower_id
         <where>
             <if test="towerId != null  and towerId != ''">and c.tower_id = #{towerId}</if>
+            <if test="ip != null  and ip != ''">and c.ip = #{ip}</if>
+            <if test="type != null  and type != ''">and c.type = #{type}</if>
             <if test="userId != null  and userId != ''">and c.user_id = #{userId}</if>
             <if test="deptId != null ">and (c.dept_id = #{deptId} OR c.dept_id IN ( SELECT t.dept_id FROM sys_dept t
                 WHERE cast(#{deptId} as varchar) = any(string_to_array(ancestors,',')) ))
diff --git a/ruoyi-admin/src/main/resources/i18n/messages.properties b/ruoyi-admin/src/main/resources/i18n/messages.properties
index 74756e9..92311d1 100644
--- a/ruoyi-admin/src/main/resources/i18n/messages.properties
+++ b/ruoyi-admin/src/main/resources/i18n/messages.properties
@@ -10,12 +10,9 @@
 user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
 role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
 user.logout.success=\u9000\u51FA\u6210\u529F
-
 length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4
-
 user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934
 user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26
- 
 user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF
 user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF
 user.login.success=\u767B\u5F55\u6210\u529F
@@ -23,11 +20,9 @@
 user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55
 user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
 user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
-
 ##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F
 upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01<br/>\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01
 upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26
-
 ##\u6743\u9650
 no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
 no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
@@ -35,11 +30,9 @@
 no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
 no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
 no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
-
 ##\u7EDF\u4E00\u8FD4\u56DE
 operation.failed=\u64CD\u4F5C\u5931\u8D25
 operation.success=\u64CD\u4F5C\u6210\u529F
-
 ##\u83DC\u5355
 menu.system=\u7CFB\u7EDF\u7BA1\u7406
 menu.monitor=\u7CFB\u7EDF\u76D1\u63A7
@@ -70,67 +63,197 @@
 menu.external=\u5916\u8054\u8BBE\u5907
 menu.videoFusion=\u89C6\u9891\u878D\u5408
 menu.tower=\u5854\u7BA1\u7406
-
 menu.alarmpoints=\u5174\u8DA3\u70B9\u7BA1\u7406
 menu.elecFence=\u7535\u5B50\u56F4\u680F
 menu.tube=\u7BA1\u7EBF\u7BA1\u7406
 menu.policeStation=\u8B66\u52A1\u5BA4\u7BA1\u7406
-
 menu.peopleAndCar=\u4EBA\u5458\u53CA\u8F66\u8F86\u7BA1\u7406
-
 menu.inspect=\u89C6\u9891\u5DE1\u68C0
 menu.inspectTask=\u89C6\u9891\u5DE1\u68C0\u4EFB\u52A1
 menu.inspectRecord=\u89C6\u9891\u5DE1\u68C0\u8BB0\u5F55
-
 menu.vtdu=\u6D41\u5A92\u4F53\u7BA1\u7406
 menu.vtduConfig=\u914D\u7F6E
 menu.vtduPullStream=\u62C9\u6D41
 menu.vtduPushStream=\u63A8\u6D41
-
-
 menu.test=\u6D4B\u8BD5\u9875
 menu.sdkTest=sdk\u6D4B\u8BD5\u9875
 menu.vtduTest=\u6D41\u5A92\u4F53\u6D4B\u8BD5\u9875
-
 menu.mqQueue=mq\u961F\u5217
 menu.minio=minio\u5B58\u50A8
 menu.minioEvent=\u5B58\u50A8\u4E8B\u4EF6
+menu.minioEventQuery=\u5B58\u50A8\u4E8B\u4EF6\u67E5\u8BE2
 menu.sysApi=\u7CFB\u7EDF\u63A5\u53E3
 menu.tiles3d=\u4E09\u7EF4\u5B9E\u666F
 
-
-menu.userQuery=\u7528\u6237\u67E5\u8BE2
-menu.userAdd=\u7528\u6237\u65B0\u589E
-menu.userEdit=\u7528\u6237\u4FEE\u6539
-menu.userRemove=\u7528\u6237\u5220\u9664
-menu.userExport=\u7528\u6237\u5BFC\u51FA
-menu.userImport=\u7528\u6237\u5BFC\u5165
+menu.alarmPermission=\u62A5\u8B66\u6743\u9650
+menu.appPermission=app\u6743\u9650
+menu.noGuideZone=noGuideZone
 menu.userResetPwd=\u91CD\u7F6E\u5BC6\u7801
-menu.roleQuery=\u89D2\u8272\u67E5\u8BE2
-menu.roleAdd=\u89D2\u8272\u65B0\u589E
-menu.roleEdit=\u89D2\u8272\u4FEE\u6539
-menu.roleRemove=\u89D2\u8272\u5220\u9664
-menu.roleExport=\u89D2\u8272\u5BFC\u51FA
-menu.menuQuery=\u83DC\u5355\u67E5\u8BE2
-menu.menuAdd=\u83DC\u5355\u65B0\u589E
-menu.menuEdit=\u83DC\u5355\u4FEE\u6539
-menu.menuRemove=\u83DC\u5355\u5220\u9664
-menu.deptQuery=\u90E8\u95E8\u67E5\u8BE2
-menu.deptAdd=\u90E8\u95E8\u65B0\u589E
-menu.deptEdit=\u90E8\u95E8\u4FEE\u6539
-menu.deptRemove=\u90E8\u95E8\u5220\u9664
-menu.postQuery=\u5C97\u4F4D\u67E5\u8BE2
-menu.postAdd=\u5C97\u4F4D\u65B0\u589E
-menu.postEdit=\u5C97\u4F4D\u4FEE\u6539
-menu.postRemove=\u5C97\u4F4D\u5220\u9664
-menu.postExport=\u5C97\u4F4D\u5BFC\u51FA
-menu.dictQuery=\u5B57\u5178\u67E5\u8BE2
-menu.dictAdd=\u5B57\u5178\u65B0\u589E
-menu.dictEdit=\u5B57\u5178\u4FEE\u6539
-menu.dictRemove=\u5B57\u5178\u5220\u9664
-menu.dictExport=\u5B57\u5178\u5BFC\u51FA
-menu.configQuery=\u53C2\u6570\u67E5\u8BE2
-menu.configAdd=\u53C2\u6570\u65B0\u589E
-menu.configEdit=\u53C2\u6570\u4FEE\u6539
-menu.configRemove=\u53C2\u6570\u5220\u9664
-menu.configExport=\u53C2\u6570\u5BFC\u51FA
\ No newline at end of file
+menu.accountUnlock=\u8D26\u6237\u89E3\u9501
+menu.batchForceOut=\u6279\u91CF\u5F3A\u9000
+menu.singleForceOut=\u5355\u6761\u5F3A\u9000
+menu.preview=\u9884\u89C8\u4EE3\u7801
+menu.generator=\u751F\u6210\u4EE3\u7801
+menu.query=\u67E5\u8BE2
+menu.add=\u65B0\u589E
+menu.edit=\u4FEE\u6539
+menu.remove=\u5220\u9664
+menu.export=\u5BFC\u51FA
+menu.import=\u5BFC\u5165
+
+##\u5B57\u5178\u7C7B\u578B
+dic.type.sys.user.sex=\u7528\u6237\u6027\u522B
+dic.type.sys.show.hide=\u83DC\u5355\u72B6\u6001
+dic.type.sys.normal.disable=\u7CFB\u7EDF\u5F00\u5173
+dic.type.sys.job.status=\u4EFB\u52A1\u72B6\u6001
+dic.type.sys.job.group=\u4EFB\u52A1\u5206\u7EC4
+dic.type.sys.yes.no=\u7CFB\u7EDF\u662F\u5426
+dic.type.sys.notice.type=\u901A\u77E5\u7C7B\u578B
+dic.type.sys.notice.status=\u901A\u77E5\u72B6\u6001
+dic.type.sys.oper.type=\u64CD\u4F5C\u7C7B\u578B
+dic.type.sys.common.status=\u7CFB\u7EDF\u72B6\u6001
+dic.type.camera.type=\u5149\u7535\u7C7B\u578B
+dic.type.well.type=\u6CB9\u4E95\u7C7B\u578B
+dic.type.work.state=\u8FD0\u884C\u72B6\u6001
+dic.type.factory=\u5382\u5546
+dic.type.tube.type=\u7BA1\u7EBF\u7C7B\u578B
+dic.type.radar.type=\u96F7\u8FBE\u7C7B\u578B
+dic.type.equip.type=\u5916\u8054\u8BBE\u5907\u7C7B\u578B
+dic.type.cameras.priority=\u76F8\u673A\u64CD\u63A7\u4F18\u5148\u7EA7
+dic.type.inspect.mode=\u5DE1\u68C0\u6A21\u5F0F
+dic.type.on.off=\u5F00\u5173
+dic.type.repeat.period=\u91CD\u590D\u5468\u671F
+dic.type.alarm.type=\u62A5\u8B66\u7C7B\u578B
+dic.type.storage.operate.type=\u5B58\u50A8\u4E8B\u4EF6\u7C7B\u578B
+dic.type.wall.type=\u7535\u5B50\u56F4\u680F\u7C7B\u578B
+dic.type.code.enabled=\u6D41\u5A92\u4F53\u8F6C\u7801\u5F00\u5173
+dic.type.change.code.mode=\u6D41\u5A92\u4F53\u89E3\u7801\u6A21\u5F0F
+##\u5B57\u5178\u6570\u636E
+dic.data.sys.user.sex.male=\u7537
+dic.data.sys.user.sex.female=\u5973
+dic.data.sys.user.sex.other=\u672A\u77E5
+dic.data.sys.show=\u663E\u793A
+dic.data.sys.hide=\u9690\u85CF
+dic.data.sys.normal=\u6B63\u5E38
+dic.data.sys.disable=\u505C\u7528
+dic.data.sys.job.status.normal=\u6B63\u5E38
+dic.data.sys.job.status.pause=\u6682\u505C
+dic.data.sys.job.group.default=\u9ED8\u8BA4
+dic.data.sys.job.group.system=\u7CFB\u7EDF
+dic.data.sys.yes=\u662F
+dic.data.sys.no=\u5426
+dic.data.sys.notice=\u7CFB\u7EDF\u901A\u77E5
+dic.data.sys.announcement=\u516C\u544A
+dic.data.sys.notice.status.normal=\u6B63\u5E38
+dic.data.sys.notice.status.close=\u5173\u95ED
+dic.data.sys.oper.type.other=\u5176\u4ED6
+dic.data.sys.oper.type.add=\u65B0\u589E
+dic.data.sys.oper.type.edit=\u4FEE\u6539
+dic.data.sys.oper.type.remove=\u5220\u9664
+dic.data.sys.oper.type.authorization=\u6388\u6743
+dic.data.sys.oper.type.export=\u5BFC\u51FA
+dic.data.sys.oper.type.import=\u5BFC\u5165
+dic.data.sys.oper.type.force.out=\u5F3A\u9000
+dic.data.sys.oper.type.gen=\u751F\u6210\u4EE3\u7801
+dic.data.sys.oper.type.clear=\u6E05\u7A7A\u6570\u636E
+dic.data.sys.common.status.success=\u6210\u529F
+dic.data.sys.common.status.fail=\u6210\u529F
+dic.data.camera.type.samll.camera=\u5C0F\u5149\u7535
+dic.data.camera.type.big.camera=\u5927\u5149\u7535
+dic.data.camera.type.nvr=\u7EC8\u7AEF
+dic.data.well.type.pump=\u62BD\u6CB9\u673A
+dic.data.well.type.ketou=\u78D5\u5934\u673A
+dic.data.work.state.normal=\u6B63\u5E38
+dic.data.work.state.exception=\u5F02\u5E38
+dic.data.equip.type.alarm=\u62A5\u8B66\u4E3B\u673A
+dic.data.equip.type.GPS=GPS
+dic.data.equip.type.gycgq=\u5DE5\u4E1A\u4F20\u611F\u5668
+dic.data.equip.type.person.position=\u4EBA\u5458\u5B9A\u4F4D
+dic.data.equip.type.personandcar=\u4EBA\u8F66\u8BC6\u522B
+dic.data.equip.type.access=\u95E8\u7981\u4E3B\u673A
+dic.data.equip.type.jcj=\u95F4\u62BD\u4E95\u7BA1\u7406
+dic.data.equip.type.tube.alarm=\u7BA1\u7EBF\u62A5\u8B66
+dic.data.equip.type.uav.platform=\u65E0\u4EBA\u673A\u4E91\u5E73\u53F0
+dic.data.tube.type.oil.pipe=\u6CB9\u7BA1
+dic.data.tube.type.water.pipe=\u6C34\u7BA1
+dic.data.tube.type.gas.pipe=\u71C3\u6C14\u7BA1
+dic.data.radar.type.h=H
+dic.data.radar.type.f=F
+dic.data.alarm.type=\u9884\u8B66\u544A\u8B66
+dic.data.cameras.priority.user1=\u7528\u6237\u4E00\u7EA7
+dic.data.cameras.priority.user2=\u7528\u6237\u4E8C\u7EA7
+dic.data.cameras.priority.user3=\u7528\u6237\u4E09\u7EA7
+dic.data.cameras.priority.sys.app.onekey=sys_app_onekey
+dic.data.cameras.priority.sys.access.control=sys_access_control
+dic.data.cameras.priority.sys.external=sys_external
+dic.data.cameras.priority.sys.radar.pump=sys_radar_pump
+dic.data.cameras.priority.sys.tube.leak=sys_tube_leak
+dic.data.cameras.priority.sys.radar.move=sys_radar_move
+dic.data.cameras.priority.sys.radar.fire=sys_radar_fire
+dic.data.cameras.priority.sys.radar.force=sys_radar_force
+dic.data.cameras.priority.sys.manual.inspection=sys_manual_inspection
+dic.data.cameras.priority.sys.auto.inspection=sys_auto_inspection
+
+dic.data.inspect.mode.auto=\u81EA\u52A8
+dic.data.inspect.mode.manual=\u624B\u52A8
+dic.data.on=\u5F00
+dic.data.off=\u5173
+dic.data.repeat.period.week=\u5468
+dic.data.repeat.period.day=\u65E5
+dic.data.repeat.period.hour=\u5C0F\u65F6
+dic.data.repeat.period.min=\u5206\u949F
+dic.data.alarm.type.elec.steal=\u76D7\u7535\u62A5\u8B66
+dic.data.alarm.type.radar=\u96F7\u8FBE\u62A5\u8B66
+dic.data.alarm.type.camera=\u901A\u7528\u5149\u7535
+dic.data.alarm.type.radar.fire=\u9632\u706B\u62A5\u8B66
+dic.data.alarm.type.external=\u5916\u8054\u62A5\u8B66
+dic.data.alarm.type.access=\u95E8\u7981\u62A5\u8B66
+dic.data.alarm.type.tube=\u7BA1\u7EBF\u6CC4\u6F0F
+dic.data.alarm.type.elec.fencee=\u7535\u5B50\u56F4\u680F
+dic.data.storage.operate.type.add=\u65B0\u589E
+dic.data.storage.operate.type.remove=\u5220\u9664
+dic.data.factory.hikvision=\u6D77\u5EB7
+dic.data.factory.dahua=\u5927\u534E
+dic.data.wall.type.no.entry=\u7981\u5165
+dic.data.wall.type.no.exit=\u7981\u51FA
+dic.data.code.enabled.on=\u8F6C\u7801
+dic.data.code.enabled.off=\u4E0D\u8F6C\u7801
+dic.data.change.code.mode.gpu=GPU\u786C\u89E3\u7801
+dic.data.change.code.mode.cpu=CPU\u8F6F\u89E3\u7801
+
+##\u7CFB\u7EDF\u914D\u7F6E
+config.sys.index.skinName=\u4E3B\u6846\u67B6\u9875-\u9ED8\u8BA4\u76AE\u80A4\u6837\u5F0F\u540D\u79F0
+config.sys.user.initPassword=\u7528\u6237\u7BA1\u7406-\u8D26\u53F7\u521D\u59CB\u5BC6\u7801
+config.sys.index.sideTheme=\u4E3B\u6846\u67B6\u9875-\u4FA7\u8FB9\u680F\u4E3B\u9898
+config.sys.account.registerUser=\u8D26\u53F7\u81EA\u52A9-\u662F\u5426\u5F00\u542F\u7528\u6237\u6CE8\u518C\u529F\u80FD
+config.sys.account.captchaEnabled=\u8D26\u53F7\u81EA\u52A9-\u9A8C\u8BC1\u7801\u5F00\u5173
+config.uav=\u65E0\u4EBA\u673A\u5730\u5740
+config.HIKSuperBrain=\u6D77\u5EB7\u8D85\u8111\u5730\u5740
+config.origin=\u521D\u59CB\u4F4D\u7F6E
+config.CompanyMURL=\u516C\u53F8M\u670D\u52A1\u5730\u5740
+config.serverCode=\u670D\u52A1\u4EE3\u7801
+config.PneumaticLockIPAndPort=\u6C14\u52A8\u9501\u5730\u5740\u548C\u7AEF\u53E3
+config.shVideo=\u5174\u8DA3\u70B9\u89C6\u9891\u6807\u7B7E\u63A5\u53E3\u5730\u5740
+config.appAlarmPointsDistance=app\u4E0E\u5174\u8DA3\u70B9\u8DDD\u79BB
+config.dblocal=\u6570\u636E\u5E93\u6240\u5C5E
+config.31distance=\u4E09\u4E00\u5B9A\u8DDD
+config.31time=\u4E09\u4E00\u5B9A\u65F6
+config.radarUrl=radar\u670D\u52A1\u5668
+config.uavOriginPosition=\u65E0\u4EBA\u673A\u9ED8\u8BA4\u4F4D\u7F6E
+config.stealElecUrl=\u9632\u76D7\u7535\u6570\u636E\u63A5\u53E3
+config.ws=websocket\u5730\u5740
+config.RongCloudAppSecret=\u878D\u4E91APP\u79D8\u94A5
+config.minioOut=minio\u5916\u7F51
+config.minioIn=minio\u5185\u7F51
+config.webrtcIP=webrtc\u5730\u5740
+config.indexIp=\u6A21\u578B\u5730\u5740\u4EE3\u7406ip
+config.gis=GIS\u6570\u636E\u7F51\u7EDC\u670D\u52A1\u5730\u5740
+config.eqHealthPassword=\u8BBE\u5907\u5065\u5EB7\u5BC6\u7801
+config.eqHealthAccount=\u8BBE\u5907\u5065\u5EB7\u8D26\u53F7
+config.eqHealthUrl=\u8BBE\u5907\u5065\u5EB7\u65B0\u63A5\u53E3\u5730\u5740
+config.health=\u8BBE\u5907\u5065\u5EB7\u5730\u5740
+config.refreshTime=\u62A5\u8B66\u5237\u65B0\u65F6\u95F4
+config.dayNightTime=\u5149\u7535\u65E5\u591C\u5207\u6362\u65F6\u95F4
+config.rongyun=\u878D\u4E91IP
+config.RongCloudAppKey=\u878D\u4E91APP\u952E
+config.syCarPT=\u4E09\u4E00\u5E73\u53F0ip
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties b/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties
index d5b5aef..c7a163f 100644
--- a/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties
+++ b/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties
@@ -74,60 +74,194 @@
 menu.elecFence=elecFence
 menu.tube=tube
 menu.policeStation=policeStation
-
 menu.peopleAndCar=peopleAndCar
-
 menu.inspect=inspect
 menu.inspectTask=inspectTask
 menu.inspectRecord=inspectRecord
 menu.vtdu=vtdu
 menu.vtduConfig=vtduConfig
-menu.vtduPullStream=pullStream
-menu.vtduPushStream=pushStream
-
+menu.vtduPullStream=vtduPullStream
+menu.vtduPushStream=vtduPushStream
 menu.test=test
 menu.sdkTest=sdkTest
 menu.vtduTest=vtduTest
-
 menu.mqQueue=mqQueue
 menu.minio=minio
 menu.minioEvent=minioEvent
 menu.sysApi=sysApi
 menu.tiles3d=tiles3d
 
-menu.userQuery=userQuery
-menu.userAdd=userAdd
-menu.userEdit=userEdit
-menu.userRemove=userRemove
-menu.userExport=userExport
-menu.userImport=userImport
+menu.alarmPermission=alarmPermission
+menu.appPermission=appPermission
+menu.noGuideZone=noGuideZone
 menu.userResetPwd=userResetPwd
-menu.roleQuery=roleQuery
-menu.roleAdd=roleAdd
-menu.roleEdit=roleEdit
-menu.roleRemove=roleRemove
-menu.roleExport=roleExport
-menu.menuQuery=menuQuery
-menu.menuAdd=menuAdd
-menu.menuEdit=menuEdit
-menu.menuRemove=menuRemove
-menu.deptQuery=deptQuery
-menu.deptAdd=deptAdd
-menu.deptEdit=deptEdit
-menu.deptRemove=deptRemove
-menu.postQuery=postQuery
-menu.postAdd=postAdd
-menu.postEdit=postEdit
-menu.postRemove=postRemove
-menu.postExport=postExport
-menu.dictQuery=dictQuery
-menu.dictAdd=dictAdd
-menu.dictEdit=dictEdit
-menu.dictRemove=dictRemove
-menu.dictExport=dictExport
-menu.configQuery=configQuery
-menu.configAdd=configAdd
-menu.configEdit=configEdit
-menu.configRemove=configRemove
-menu.configExport=configExport
+menu.accountUnlock=accountUnlock
+menu.batchForceOut=batchForceOut
+menu.singleForceOut=singleForceOut
+menu.codePreview=preview
+menu.codeGen=generator
+menu.query=query
+menu.add=add
+menu.edit=edit
+menu.remove=remove
+menu.export=export
+menu.import=import
 
+
+##\u5B57\u5178\u7C7B\u578B
+dic.type.sys.user.sex=userSex
+dic.type.sys.show.hide=menuStatus
+dic.type.sys.normal.disable=systemSwitches
+dic.type.sys.job.status=jobStatus
+dic.type.sys.job.group=jobGroup
+dic.type.sys.yes.no=systemY/N
+dic.type.sys.notice.type=noticeType
+dic.type.sys.notice.status=noticeStatus
+dic.type.sys.oper.type=operType
+dic.type.sys.common.status=commonStatus
+dic.type.camera.type=cameraType
+dic.type.well.type=wellType
+dic.type.work.state=workState
+dic.type.factory=factory
+dic.type.tube.type=tubeType
+dic.type.radar.type=radarType
+dic.type.equip.type=equipType
+dic.type.cameras.priority=camerasPriority
+dic.type.inspect.mode=inspectMode
+dic.type.on.off=switch
+dic.type.repeat.period=repeatPeriod
+dic.type.alarm.type=alarmType
+dic.type.storage.operate.type=storageOperateType
+dic.type.wall.type=wallType
+dic.type.code.enabled=codeSwitch
+dic.type.change.code.mode=codeMode
+##\u5B57\u5178
+dic.data.sys.user.sex.male=male
+dic.data.sys.user.sex.female=female
+dic.data.sys.user.sex.other=other
+dic.data.sys.show=show
+dic.data.sys.hide=hide
+dic.data.sys.normal=normal
+dic.data.sys.disable=disabled
+dic.data.sys.job.status.normal=normal
+dic.data.sys.job.status.pause=pause
+dic.data.sys.job.group.default=default
+dic.data.sys.job.group.system=system
+dic.data.sys.yes=yes
+dic.data.sys.no=no
+dic.data.sys.notice=notice
+dic.data.sys.announcement=announcement
+dic.data.sys.notice.status.normal=normal
+dic.data.sys.notice.status.close=close
+dic.data.sys.oper.type.other=other
+dic.data.sys.oper.type.add=add
+dic.data.sys.oper.type.edit=edit
+dic.data.sys.oper.type.remove=remove
+dic.data.sys.oper.type.authorization=authorization
+dic.data.sys.oper.type.export=export
+dic.data.sys.oper.type.import=import
+dic.data.sys.oper.type.force.out=forceLogout
+dic.data.sys.oper.type.gen=genCode
+dic.data.sys.oper.type.clear=clear
+dic.data.sys.common.status.success=success
+dic.data.sys.common.status.fail=fail
+dic.data.camera.type.samll.camera=samll
+dic.data.camera.type.big.camera=big
+dic.data.camera.type.nvr=nvr
+dic.data.well.type.pump=pump
+dic.data.well.type.ketou=ketou
+dic.data.work.state.normal=normal
+dic.data.work.state.exception=exception
+dic.data.equip.type.alarm=alarmHost
+dic.data.equip.type.GPS=GPS
+dic.data.equip.type.gycgq=gycgq
+dic.data.equip.type.person.position=personPosition
+dic.data.equip.type.personandcar=personandcar
+dic.data.equip.type.access=accessHost
+dic.data.equip.type.jcj=jcj
+dic.data.equip.type.tube.alarm=tubeAlarm
+dic.data.equip.type.uav.platform=uavPlatform
+dic.data.tube.type.oil.pipe=oilPipe
+dic.data.tube.type.water.pipe=waterPipe
+dic.data.tube.type.gas.pipe=gasPipe
+dic.data.radar.type.h=H
+dic.data.radar.type.f=F
+dic.data.alarm.type=Warning
+dic.data.cameras.priority.user1=userLevel1
+dic.data.cameras.priority.user2=userLevel2
+dic.data.cameras.priority.user3=userLevel3
+dic.data.cameras.priority.user4=userLevel4
+dic.data.cameras.priority.sys.app.onekey=sys_app_onekey
+dic.data.cameras.priority.sys.access.control=sys_access_control
+dic.data.cameras.priority.sys.external=sys_external
+dic.data.cameras.priority.sys.radar.pump=sys_radar_pump
+dic.data.cameras.priority.sys.tube.leak=sys_tube_leak
+dic.data.cameras.priority.sys.radar.move=sys_radar_move
+dic.data.cameras.priority.sys.radar.fire=sys_radar_fire
+dic.data.cameras.priority.sys.radar.force=sys_radar_force
+dic.data.cameras.priority.sys.manual.inspection=sys_manual_inspection
+dic.data.cameras.priority.sys.auto.inspection=sys_auto_inspection
+
+dic.data.inspect.mode.auto=auto
+dic.data.inspect.mode.manual=manual
+dic.data.on=on
+dic.data.off=off
+dic.data.repeat.period.week=week
+dic.data.repeat.period.day=day
+dic.data.repeat.period.hour=hour
+dic.data.repeat.period.min=min
+dic.data.alarm.type.elec.steal=elecSteal
+dic.data.alarm.type.radar=radarAlarm
+dic.data.alarm.type.camera=camera
+dic.data.alarm.type.radar.fire=fireAlarm
+dic.data.alarm.type.external=externalAlarm
+dic.data.alarm.type.access=accessAlarm
+dic.data.alarm.type.tube=tubeLeak
+dic.data.alarm.type.elec.fencee=elecFencee
+dic.data.storage.operate.type.add=add
+dic.data.storage.operate.type.remove=remove
+dic.data.factory.hikvision=hikvision
+dic.data.factory.dahua=dahua
+dic.data.wall.type.no.entry=noEntry
+dic.data.wall.type.no.exit=noExit
+dic.data.code.enabled.on=transcoding
+dic.data.code.enabled.off=noTranscoding
+dic.data.change.code.mode.gpu=GPUHardwareDecoding
+dic.data.change.code.mode.cpu=CPUSoftwareDecoding
+
+##\u7CFB\u7EDF\u914D\u7F6E
+config.sys.index.skinName=skinName
+config.sys.user.initPassword=initPassword
+config.sys.index.sideTheme=sideTheme
+config.sys.account.registerUser=registerUser
+config.sys.account.captchaEnabled=captchaEnabled
+config.uav=uav
+config.HIKSuperBrain=HIKSuperBrain
+config.origin=origin
+config.CompanyMURL=CompanyMURL
+config.serverCode=serverCode
+config.PneumaticLockIPAndPort=PneumaticLockIPAndPort
+config.shVideo=shVideo
+config.appAlarmPointsDistance=appAlarmPointsDistance
+config.dblocal=dblocal
+config.31distance=31distance
+config.31time=31time
+config.radarUrl=radarUrl
+config.uavOriginPosition=uavOriginPosition
+config.stealElecUrl=stealElecUrl
+config.ws=ws
+config.RongCloudAppSecret=RongCloudAppSecret
+config.minioOut=minioOut
+config.minioIn=minioIn
+config.webrtcIP=webrtcIP
+config.indexIp=indexIp
+config.gis=gis
+config.eqHealthPassword=eqHealthPassword
+config.eqHealthAccount=eqHealthAccount
+config.eqHealthUrl=eqHealthUrl
+config.health=health
+config.refreshTime=refreshTime
+config.dayNightTime=dayNightTime
+config.rongyun=rongyun
+config.RongCloudAppKey=RongCloudAppKey
+config.syCarPT=syCarPT
diff --git a/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties b/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties
index dc46505..4338b05 100644
--- a/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties
+++ b/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties
@@ -70,66 +70,195 @@
 menu.external=\u5916\u8054\u8BBE\u5907
 menu.videoFusion=\u89C6\u9891\u878D\u5408
 menu.tower=\u5854\u7BA1\u7406
-
 menu.alarmpoints=\u5174\u8DA3\u70B9\u7BA1\u7406
 menu.elecFence=\u7535\u5B50\u56F4\u680F
 menu.tube=\u7BA1\u7EBF\u7BA1\u7406
 menu.policeStation=\u8B66\u52A1\u5BA4\u7BA1\u7406
-
 menu.peopleAndCar=\u4EBA\u5458\u53CA\u8F66\u8F86\u7BA1\u7406
-
 menu.inspect=\u89C6\u9891\u5DE1\u68C0
 menu.inspectTask=\u89C6\u9891\u5DE1\u68C0\u4EFB\u52A1
 menu.inspectRecord=\u89C6\u9891\u5DE1\u68C0\u8BB0\u5F55
-
 menu.vtdu=\u6D41\u5A92\u4F53\u7BA1\u7406
 menu.vtduConfig=\u914D\u7F6E
 menu.vtduPullStream=\u62C9\u6D41
 menu.vtduPushStream=\u63A8\u6D41
-
 menu.test=\u6D4B\u8BD5\u9875
 menu.sdkTest=sdk\u6D4B\u8BD5\u9875
 menu.vtduTest=\u6D41\u5A92\u4F53\u6D4B\u8BD5\u9875
-
 menu.mqQueue=mq\u961F\u5217
 menu.minio=minio\u5B58\u50A8
 menu.minioEvent=\u5B58\u50A8\u4E8B\u4EF6
 menu.sysApi=\u7CFB\u7EDF\u63A5\u53E3
 menu.tiles3d=\u4E09\u7EF4\u5B9E\u666F
 
-
-menu.userQuery=\u7528\u6237\u67E5\u8BE2
-menu.userAdd=\u7528\u6237\u65B0\u589E
-menu.userEdit=\u7528\u6237\u4FEE\u6539
-menu.userRemove=\u7528\u6237\u5220\u9664
-menu.userExport=\u7528\u6237\u5BFC\u51FA
-menu.userImport=\u7528\u6237\u5BFC\u5165
+menu.alarmPermission=\u62A5\u8B66\u6743\u9650\u83DC\u5355
+menu.appPermission=app\u6743\u9650
+menu.noGuideZone=noGuideZone
 menu.userResetPwd=\u91CD\u7F6E\u5BC6\u7801
-menu.roleQuery=\u89D2\u8272\u67E5\u8BE2
-menu.roleAdd=\u89D2\u8272\u65B0\u589E
-menu.roleEdit=\u89D2\u8272\u4FEE\u6539
-menu.roleRemove=\u89D2\u8272\u5220\u9664
-menu.roleExport=\u89D2\u8272\u5BFC\u51FA
-menu.menuQuery=\u83DC\u5355\u67E5\u8BE2
-menu.menuAdd=\u83DC\u5355\u65B0\u589E
-menu.menuEdit=\u83DC\u5355\u4FEE\u6539
-menu.menuRemove=\u83DC\u5355\u5220\u9664
-menu.deptQuery=\u90E8\u95E8\u67E5\u8BE2
-menu.deptAdd=\u90E8\u95E8\u65B0\u589E
-menu.deptEdit=\u90E8\u95E8\u4FEE\u6539
-menu.deptRemove=\u90E8\u95E8\u5220\u9664
-menu.postQuery=\u5C97\u4F4D\u67E5\u8BE2
-menu.postAdd=\u5C97\u4F4D\u65B0\u589E
-menu.postEdit=\u5C97\u4F4D\u4FEE\u6539
-menu.postRemove=\u5C97\u4F4D\u5220\u9664
-menu.postExport=\u5C97\u4F4D\u5BFC\u51FA
-menu.dictQuery=\u5B57\u5178\u67E5\u8BE2
-menu.dictAdd=\u5B57\u5178\u65B0\u589E
-menu.dictEdit=\u5B57\u5178\u4FEE\u6539
-menu.dictRemove=\u5B57\u5178\u5220\u9664
-menu.dictExport=\u5B57\u5178\u5BFC\u51FA
-menu.configQuery=\u53C2\u6570\u67E5\u8BE2
-menu.configAdd=\u53C2\u6570\u65B0\u589E
-menu.configEdit=\u53C2\u6570\u4FEE\u6539
-menu.configRemove=\u53C2\u6570\u5220\u9664
-menu.configExport=\u53C2\u6570\u5BFC\u51FA
\ No newline at end of file
+menu.accountUnlock=\u8D26\u6237\u89E3\u9501
+menu.batchForceOut=\u6279\u91CF\u5F3A\u9000
+menu.singleForceOut=\u5355\u6761\u5F3A\u9000
+menu.preview=\u9884\u89C8\u4EE3\u7801
+menu.generator=\u751F\u6210\u4EE3\u7801
+menu.query=\u67E5\u8BE2
+menu.add=\u65B0\u589E
+menu.edit=\u4FEE\u6539
+menu.remove=\u5220\u9664
+menu.export=\u5BFC\u51FA
+menu.import=\u5BFC\u5165
+##\u5B57\u5178\u7C7B\u578B
+dic.type.sys.user.sex=\u7528\u6237\u6027\u522B
+dic.type.sys.show.hide=\u83DC\u5355\u72B6\u6001
+dic.type.sys.normal.disable=\u7CFB\u7EDF\u5F00\u5173
+dic.type.sys.job.status=\u4EFB\u52A1\u72B6\u6001
+dic.type.sys.job.group=\u4EFB\u52A1\u5206\u7EC4
+dic.type.sys.yes.no=\u7CFB\u7EDF\u662F\u5426
+dic.type.sys.notice.type=\u901A\u77E5\u7C7B\u578B
+dic.type.sys.notice.status=\u901A\u77E5\u72B6\u6001
+dic.type.sys.oper.type=\u64CD\u4F5C\u7C7B\u578B
+dic.type.sys.common.status=\u7CFB\u7EDF\u72B6\u6001
+dic.type.camera.type=\u5149\u7535\u7C7B\u578B
+dic.type.well.type=\u6CB9\u4E95\u7C7B\u578B
+dic.type.work.state=\u8FD0\u884C\u72B6\u6001
+dic.type.factory=\u5382\u5546
+dic.type.tube.type=\u7BA1\u7EBF\u7C7B\u578B
+dic.type.radar.type=\u96F7\u8FBE\u7C7B\u578B
+dic.type.equip.type=\u5916\u8054\u8BBE\u5907\u7C7B\u578B
+dic.type.cameras.priority=\u76F8\u673A\u64CD\u63A7\u4F18\u5148\u7EA7
+dic.type.inspect.mode=\u5DE1\u68C0\u6A21\u5F0F
+dic.type.on.off=\u5F00\u5173
+dic.type.repeat.period=\u91CD\u590D\u5468\u671F
+dic.type.alarm.type=\u62A5\u8B66\u7C7B\u578B
+dic.type.storage.operate.type=\u5B58\u50A8\u4E8B\u4EF6\u7C7B\u578B
+dic.type.wall.type=\u7535\u5B50\u56F4\u680F\u7C7B\u578B
+dic.type.code.enabled=\u6D41\u5A92\u4F53\u8F6C\u7801\u5F00\u5173
+dic.type.change.code.mode=\u6D41\u5A92\u4F53\u89E3\u7801\u6A21\u5F0F
+##\u5B57\u5178
+dic.data.sys.user.sex.male=\u7537
+dic.data.sys.user.sex.female=\u5973
+dic.data.sys.user.sex.other=\u672A\u77E5
+dic.data.sys.show=\u663E\u793A
+dic.data.sys.hide=\u9690\u85CF
+dic.data.sys.normal=\u6B63\u5E38
+dic.data.sys.disable=\u505C\u7528
+dic.data.sys.job.status.normal=\u6B63\u5E38
+dic.data.sys.job.status.pause=\u6682\u505C
+dic.data.sys.job.group.default=\u9ED8\u8BA4
+dic.data.sys.job.group.system=\u7CFB\u7EDF
+dic.data.sys.yes=\u662F
+dic.data.sys.no=\u5426
+dic.data.sys.notice=\u7CFB\u7EDF\u901A\u77E5
+dic.data.sys.announcement=\u516C\u544A
+dic.data.sys.notice.status.normal=\u6B63\u5E38
+dic.data.sys.notice.status.close=\u5173\u95ED
+dic.data.sys.oper.type.other=\u5176\u4ED6
+dic.data.sys.oper.type.add=\u65B0\u589E
+dic.data.sys.oper.type.edit=\u4FEE\u6539
+dic.data.sys.oper.type.remove=\u5220\u9664
+dic.data.sys.oper.type.authorization=\u6388\u6743
+dic.data.sys.oper.type.export=\u5BFC\u51FA
+dic.data.sys.oper.type.import=\u5BFC\u5165
+dic.data.sys.oper.type.force.out=\u5F3A\u9000
+dic.data.sys.oper.type.gen=\u751F\u6210\u4EE3\u7801
+dic.data.sys.oper.type.clear=\u6E05\u7A7A\u6570\u636E
+dic.data.sys.common.status.success=\u6210\u529F
+dic.data.sys.common.status.fail=\u6210\u529F
+dic.data.camera.type.samll.camera=\u5C0F\u5149\u7535
+dic.data.camera.type.big.camera=\u5927\u5149\u7535
+dic.data.camera.type.nvr=\u7EC8\u7AEF
+dic.data.well.type.pump=\u62BD\u6CB9\u673A
+dic.data.well.type.ketou=\u78D5\u5934\u673A
+dic.data.work.state.normal=\u6B63\u5E38
+dic.data.work.state.exception=\u5F02\u5E38
+dic.data.equip.type.alarm=\u62A5\u8B66\u4E3B\u673A
+dic.data.equip.type.GPS=GPS
+dic.data.equip.type.gycgq=\u5DE5\u4E1A\u4F20\u611F\u5668
+dic.data.equip.type.person.position=\u4EBA\u5458\u5B9A\u4F4D
+dic.data.equip.type.personandcar=\u4EBA\u8F66\u8BC6\u522B
+dic.data.equip.type.access=\u95E8\u7981\u4E3B\u673A
+dic.data.equip.type.jcj=\u95F4\u62BD\u4E95\u7BA1\u7406
+dic.data.equip.type.tube.alarm=\u7BA1\u7EBF\u62A5\u8B66
+dic.data.equip.type.uav.platform=\u65E0\u4EBA\u673A\u4E91\u5E73\u53F0
+dic.data.tube.type.oil.pipe=\u6CB9\u7BA1
+dic.data.tube.type.water.pipe=\u6C34\u7BA1
+dic.data.tube.type.gas.pipe=\u71C3\u6C14\u7BA1
+dic.data.radar.type.h=H
+dic.data.radar.type.f=F
+dic.data.alarm.type=\u9884\u8B66\u544A\u8B66
+dic.data.cameras.priority.user1=\u7528\u6237\u4E00\u7EA7
+dic.data.cameras.priority.user2=\u7528\u6237\u4E8C\u7EA7
+dic.data.cameras.priority.user3=\u7528\u6237\u4E09\u7EA7
+dic.data.cameras.priority.sys.app.onekey=sys_app_onekey
+dic.data.cameras.priority.sys.access.control=sys_access_control
+dic.data.cameras.priority.sys.external=sys_external
+dic.data.cameras.priority.sys.radar.pump=sys_radar_pump
+dic.data.cameras.priority.sys.tube.leak=sys_tube_leak
+dic.data.cameras.priority.sys.radar.move=sys_radar_move
+dic.data.cameras.priority.sys.radar.fire=sys_radar_fire
+dic.data.cameras.priority.sys.radar.force=sys_radar_force
+dic.data.cameras.priority.sys.manual.inspection=sys_manual_inspection
+dic.data.cameras.priority.sys.auto.inspection=sys_auto_inspection
+
+dic.data.inspect.mode.auto=\u81EA\u52A8
+dic.data.inspect.mode.manual=\u624B\u52A8
+dic.data.on=\u5F00
+dic.data.off=\u5173
+dic.data.repeat.period.week=\u5468
+dic.data.repeat.period.day=\u65E5
+dic.data.repeat.period.hour=\u5C0F\u65F6
+dic.data.repeat.period.min=\u5206\u949F
+dic.data.alarm.type.elec.steal=\u76D7\u7535\u62A5\u8B66
+dic.data.alarm.type.radar=\u96F7\u8FBE\u62A5\u8B66
+dic.data.alarm.type.camera=\u901A\u7528\u5149\u7535
+dic.data.alarm.type.radar.fire=\u9632\u706B\u62A5\u8B66
+dic.data.alarm.type.external=\u5916\u8054\u62A5\u8B66
+dic.data.alarm.type.access=\u95E8\u7981\u62A5\u8B66
+dic.data.alarm.type.tube=\u7BA1\u7EBF\u6CC4\u6F0F
+dic.data.alarm.type.elec.fencee=\u7535\u5B50\u56F4\u680F
+dic.data.storage.operate.type.add=\u65B0\u589E
+dic.data.storage.operate.type.remove=\u5220\u9664
+dic.data.factory.hikvision=\u6D77\u5EB7
+dic.data.factory.dahua=\u5927\u534E
+dic.data.wall.type.no.entry=\u7981\u5165
+dic.data.wall.type.no.exit=\u7981\u51FA
+dic.data.code.enabled.on=\u8F6C\u7801
+dic.data.code.enabled.off=\u4E0D\u8F6C\u7801
+dic.data.change.code.mode.gpu=GPU\u786C\u89E3\u7801
+dic.data.change.code.mode.cpu=CPU\u8F6F\u89E3\u7801
+
+##\u7CFB\u7EDF\u914D\u7F6E
+config.sys.index.skinName=\u4E3B\u6846\u67B6\u9875-\u9ED8\u8BA4\u76AE\u80A4\u6837\u5F0F\u540D\u79F0
+config.sys.user.initPassword=\u7528\u6237\u7BA1\u7406-\u8D26\u53F7\u521D\u59CB\u5BC6\u7801
+config.sys.index.sideTheme=\u4E3B\u6846\u67B6\u9875-\u4FA7\u8FB9\u680F\u4E3B\u9898
+config.sys.account.registerUser=\u8D26\u53F7\u81EA\u52A9-\u662F\u5426\u5F00\u542F\u7528\u6237\u6CE8\u518C\u529F\u80FD
+config.sys.account.captchaEnabled=\u8D26\u53F7\u81EA\u52A9-\u9A8C\u8BC1\u7801\u5F00\u5173
+config.uav=\u65E0\u4EBA\u673A\u5730\u5740
+config.HIKSuperBrain=\u6D77\u5EB7\u8D85\u8111\u5730\u5740
+config.origin=\u521D\u59CB\u4F4D\u7F6E
+config.CompanyMURL=\u516C\u53F8M\u670D\u52A1\u5730\u5740
+config.serverCode=\u670D\u52A1\u4EE3\u7801
+config.PneumaticLockIPAndPort=\u6C14\u52A8\u9501\u5730\u5740\u548C\u7AEF\u53E3
+config.shVideo=\u5174\u8DA3\u70B9\u89C6\u9891\u6807\u7B7E\u63A5\u53E3\u5730\u5740
+config.appAlarmPointsDistance=app\u4E0E\u5174\u8DA3\u70B9\u8DDD\u79BB
+config.dblocal=\u6570\u636E\u5E93\u6240\u5C5E
+config.31distance=\u4E09\u4E00\u5B9A\u8DDD
+config.31time=\u4E09\u4E00\u5B9A\u65F6
+config.radarUrl=radar\u670D\u52A1\u5668
+config.uavOriginPosition=\u65E0\u4EBA\u673A\u9ED8\u8BA4\u4F4D\u7F6E
+config.stealElecUrl=\u9632\u76D7\u7535\u6570\u636E\u63A5\u53E3
+config.ws=websocket\u5730\u5740
+config.RongCloudAppSecret=\u878D\u4E91APP\u79D8\u94A5
+config.minioOut=minio\u5916\u7F51
+config.minioIn=minio\u5185\u7F51
+config.webrtcIP=webrtc\u5730\u5740
+config.indexIp=\u6A21\u578B\u5730\u5740\u4EE3\u7406ip
+config.gis=GIS\u6570\u636E\u7F51\u7EDC\u670D\u52A1\u5730\u5740
+config.eqHealthPassword=\u8BBE\u5907\u5065\u5EB7\u5BC6\u7801
+config.eqHealthAccount=\u8BBE\u5907\u5065\u5EB7\u8D26\u53F7
+config.eqHealthUrl=\u8BBE\u5907\u5065\u5EB7\u65B0\u63A5\u53E3\u5730\u5740
+config.health=\u8BBE\u5907\u5065\u5EB7\u5730\u5740
+config.refreshTime=\u62A5\u8B66\u5237\u65B0\u65F6\u95F4
+config.dayNightTime=\u5149\u7535\u65E5\u591C\u5207\u6362\u65F6\u95F4
+config.rongyun=\u878D\u4E91IP
+config.RongCloudAppKey=\u878D\u4E91APP\u952E
+config.syCarPT=\u4E09\u4E00\u5E73\u53F0ip
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
index 42fbd9c..7f25464 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
@@ -2,6 +2,7 @@
 
 import java.util.HashMap;
 import com.ruoyi.common.constant.HttpStatus;
+import com.ruoyi.common.utils.MessageUtils;
 import com.ruoyi.common.utils.StringUtils;
 
 /**
@@ -65,7 +66,8 @@
      */
     public static AjaxResult success()
     {
-        return AjaxResult.success("鎿嶄綔鎴愬姛");
+        String message = MessageUtils.message("operation.success");
+        return AjaxResult.success(message);
     }
 
     /**
@@ -74,8 +76,8 @@
      * @return 鎴愬姛娑堟伅
      */
     public static AjaxResult success(Object data)
-    {
-        return AjaxResult.success("鎿嶄綔鎴愬姛", data);
+    { String message = MessageUtils.message("operation.success");
+        return AjaxResult.success(message, data);
     }
 
     /**
@@ -131,7 +133,8 @@
      */
     public static AjaxResult error()
     {
-        return AjaxResult.error("鎿嶄綔澶辫触");
+        String message = MessageUtils.message("operation.failed");
+        return AjaxResult.error(message);
     }
 
     /**
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysConfig.java
index 79e16ab..1069400 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysConfig.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysConfig.java
@@ -24,7 +24,7 @@
     /** 鍙傛暟鍚嶇О */
     @Excel(name = "鍙傛暟鍚嶇О")
     private String configName;
-
+    private String configNameI18n;
     /** 鍙傛暟閿悕 */
     @Excel(name = "鍙傛暟閿悕")
     private String configKey;
@@ -59,6 +59,14 @@
         this.configName = configName;
     }
 
+    public String getConfigNameI18n() {
+        return configNameI18n;
+    }
+
+    public void setConfigNameI18n(String configNameI18n) {
+        this.configNameI18n = configNameI18n;
+    }
+
     @NotBlank(message = "鍙傛暟閿悕闀垮害涓嶈兘涓虹┖")
     @Size(min = 0, max = 100, message = "鍙傛暟閿悕闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
     public String getConfigKey()
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
index 738f12c..74b94dd 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
@@ -29,7 +29,8 @@
     /** 瀛楀吀鏍囩 */
     @Excel(name = "瀛楀吀鏍囩")
     private String dictLabel;
-
+    /** 瀛楀吀鏍囩鍥介檯鍖栨爣璇� */
+    private String dictLabelI18n;
     /** 瀛楀吀閿�� */
     @Excel(name = "瀛楀吀閿��")
     private String dictValue;
@@ -84,6 +85,14 @@
         this.dictLabel = dictLabel;
     }
 
+    public String getDictLabelI18n() {
+        return dictLabelI18n;
+    }
+
+    public void setDictLabelI18n(String dictLabelI18n) {
+        this.dictLabelI18n = dictLabelI18n;
+    }
+
     @NotBlank(message = "瀛楀吀閿�间笉鑳戒负绌�")
     @Size(min = 0, max = 100, message = "瀛楀吀閿�奸暱搴︿笉鑳借秴杩�100涓瓧绗�")
     public String getDictValue()
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
index e324fcf..3bcb84a 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
@@ -25,7 +25,7 @@
     /** 瀛楀吀鍚嶇О */
     @Excel(name = "瀛楀吀鍚嶇О")
     private String dictName;
-
+    private String dictNameI18n;
     /** 瀛楀吀绫诲瀷 */
     @Excel(name = "瀛楀吀绫诲瀷")
     private String dictType;
@@ -56,6 +56,14 @@
         this.dictName = dictName;
     }
 
+    public String getDictNameI18n() {
+        return dictNameI18n;
+    }
+
+    public void setDictNameI18n(String dictNameI18n) {
+        this.dictNameI18n = dictNameI18n;
+    }
+
     @NotBlank(message = "瀛楀吀绫诲瀷涓嶈兘涓虹┖")
     @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷绫诲瀷闀垮害涓嶈兘瓒呰繃100涓瓧绗�")
     @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "瀛楀吀绫诲瀷蹇呴』浠ュ瓧姣嶅紑澶达紝涓斿彧鑳戒负锛堝皬鍐欏瓧姣嶏紝鏁板瓧锛屼笅婊戠嚎锛�")
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
index 866f36e..ba9dea9 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
@@ -24,8 +24,8 @@
     /** 鑿滃崟鍚嶇О */
     private String menuName;
 
-    /** 鑿滃崟鑻辨枃鍚嶇О */
-    private String menuNameEnglish;
+    /** 鑿滃崟鍚嶇ОI18N */
+    private String menuNameI18n;
 
     /** 鐖惰彍鍗曞悕绉� */
     private String parentName;
@@ -86,12 +86,12 @@
         return menuName;
     }
 
-    public String getMenuNameEnglish() {
-        return menuNameEnglish;
+    public String getMenuNameI18n() {
+        return menuNameI18n;
     }
 
-    public void setMenuNameEnglish(String menuNameEnglish) {
-        this.menuNameEnglish = menuNameEnglish;
+    public void setMenuNameI18n(String menuNameI18n) {
+        this.menuNameI18n = menuNameI18n;
     }
 
     public void setMenuName(String menuName)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java
index 07523a1..c8d828c 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java
@@ -16,11 +16,15 @@
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         final String key = "language";
         //String language = "en_US";
-        String language = "zh_CN";
-        //String language = request.getHeader(key);
-        // 鍓嶇浼犻�掔殑language蹇呴』鏄痾h-CN鏍煎紡鐨勶紝涓棿鐨�-蹇呴』瑕佸畬鏁达紝涓嶈兘鍙紶閫抸h鎴杄n
-        log.debug("褰撳墠璇█={}",language);
-        Locale locale = new Locale(language.split("_")[0],language.split("_")[1]);
+        //String language = "zh_CN";
+        String language = request.getHeader(key);
+        if (language == null) {
+            //String language = "en_US";
+            language = "en_US";
+        }
+        // 鍓嶇浼犻�掔殑language蹇呴』鏄痾h_CN鏍煎紡鐨勶紝涓棿鐨刜蹇呴』瑕佸畬鏁达紝涓嶈兘鍙紶閫抸h鎴杄n
+        log.debug("褰撳墠璇█={}", language);
+        Locale locale = new Locale(language.split("_")[0], language.split("_")[1]);
         // 杩欐牱璧嬪�间互鍚庯紝MessageUtils.message鏂规硶灏变笉鐢ㄤ慨鏀逛簡
         LocaleContextHolder.setLocale(locale);
         return true;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
index 182b371..b82c02f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
@@ -7,6 +7,7 @@
 import javax.management.Query;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.common.utils.MessageUtils;
 import org.springframework.stereotype.Service;
 import com.ruoyi.common.annotation.DataSource;
 import com.ruoyi.common.constant.CacheConstants;
@@ -55,7 +56,14 @@
     {
         SysConfig config = new SysConfig();
         config.setConfigId(configId);
-        return configMapper.selectConfig(config);
+        SysConfig sysConfig = configMapper.selectConfig(config);
+        //鍥介檯鍖�
+        String message = MessageUtils.message("config." + sysConfig.getConfigNameI18n());
+        if(StringUtils.isNotEmpty(message))
+        {
+            sysConfig.setConfigName(message);
+        }
+        return sysConfig;
     }
 
     /**
@@ -107,7 +115,15 @@
     @Override
     public List<SysConfig> selectConfigList(SysConfig config)
     {
-        return configMapper.selectConfigList(config);
+        List<SysConfig> sysConfigs = configMapper.selectConfigList(config);
+        //鍥介檯鍖�
+        sysConfigs.stream().forEach(sysConfig -> {
+            String message = MessageUtils.message("config." + sysConfig.getConfigNameI18n());
+            if (StringUtils.isNotEmpty(message)) {
+                sysConfig.setConfigName(message);
+            }
+        });
+        return sysConfigs;
     }
 
     /**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
index fced569..37a1115 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
@@ -1,6 +1,9 @@
 package com.ruoyi.system.service.impl;
 
 import java.util.List;
+
+import com.ruoyi.common.utils.MessageUtils;
+import com.ruoyi.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.common.core.domain.entity.SysDictData;
@@ -10,62 +13,71 @@
 
 /**
  * 瀛楀吀 涓氬姟灞傚鐞�
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysDictDataServiceImpl implements ISysDictDataService
-{
+public class SysDictDataServiceImpl implements ISysDictDataService {
     @Autowired
     private SysDictDataMapper dictDataMapper;
 
     /**
      * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁
-     * 
+     *
      * @param dictData 瀛楀吀鏁版嵁淇℃伅
      * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
      */
     @Override
-    public List<SysDictData> selectDictDataList(SysDictData dictData)
-    {
-        return dictDataMapper.selectDictDataList(dictData);
+    public List<SysDictData> selectDictDataList(SysDictData dictData) {
+        List<SysDictData> sysDictDataList = dictDataMapper.selectDictDataList(dictData);
+        //鍥介檯鍖�
+        sysDictDataList.stream().forEach(sysDictData -> {
+            String message = MessageUtils.message("dic.data." + sysDictData.getDictLabelI18n());
+            if (StringUtils.isNotEmpty(message)) {
+                sysDictData.setDictLabel(message);
+            }
+        });
+        return sysDictDataList;
     }
 
     /**
      * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭�
-     * 
-     * @param dictType 瀛楀吀绫诲瀷
+     *
+     * @param dictType  瀛楀吀绫诲瀷
      * @param dictValue 瀛楀吀閿��
      * @return 瀛楀吀鏍囩
      */
     @Override
-    public String selectDictLabel(String dictType, String dictValue)
-    {
+    public String selectDictLabel(String dictType, String dictValue) {
         return dictDataMapper.selectDictLabel(dictType, dictValue);
     }
 
     /**
      * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅
-     * 
+     *
      * @param dictCode 瀛楀吀鏁版嵁ID
      * @return 瀛楀吀鏁版嵁
      */
     @Override
-    public SysDictData selectDictDataById(Long dictCode)
-    {
-        return dictDataMapper.selectDictDataById(dictCode);
+    public SysDictData selectDictDataById(Long dictCode) {
+        SysDictData sysDictData = dictDataMapper.selectDictDataById(dictCode);
+        //鍥介檯鍖�
+        String message = MessageUtils.message("dic.data." + sysDictData.getDictLabelI18n());
+        if(StringUtils.isNotEmpty(message))
+        {
+            sysDictData.setDictLabel(message);
+        }
+        return sysDictData;
     }
 
     /**
      * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅
-     * 
+     *
      * @param dictCodes 闇�瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID
      */
     @Override
-    public void deleteDictDataByIds(Long[] dictCodes)
-    {
-        for (Long dictCode : dictCodes)
-        {
+    public void deleteDictDataByIds(Long[] dictCodes) {
+        for (Long dictCode : dictCodes) {
             SysDictData data = selectDictDataById(dictCode);
             dictDataMapper.deleteDictDataById(dictCode);
             List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
@@ -75,16 +87,14 @@
 
     /**
      * 鏂板淇濆瓨瀛楀吀鏁版嵁淇℃伅
-     * 
+     *
      * @param data 瀛楀吀鏁版嵁淇℃伅
      * @return 缁撴灉
      */
     @Override
-    public int insertDictData(SysDictData data)
-    {
+    public int insertDictData(SysDictData data) {
         int row = dictDataMapper.insertDictData(data);
-        if (row > 0)
-        {
+        if (row > 0) {
             List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
             DictUtils.setDictCache(data.getDictType(), dictDatas);
         }
@@ -93,16 +103,14 @@
 
     /**
      * 淇敼淇濆瓨瀛楀吀鏁版嵁淇℃伅
-     * 
+     *
      * @param data 瀛楀吀鏁版嵁淇℃伅
      * @return 缁撴灉
      */
     @Override
-    public int updateDictData(SysDictData data)
-    {
+    public int updateDictData(SysDictData data) {
         int row = dictDataMapper.updateDictData(data);
-        if (row > 0)
-        {
+        if (row > 0) {
             List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
             DictUtils.setDictCache(data.getDictType(), dictDatas);
         }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
index a06b236..d0ddbf2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
@@ -5,6 +5,8 @@
 import java.util.Map;
 import java.util.stream.Collectors;
 import javax.annotation.PostConstruct;
+
+import com.ruoyi.common.utils.MessageUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -20,12 +22,11 @@
 
 /**
  * 瀛楀吀 涓氬姟灞傚鐞�
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysDictTypeServiceImpl implements ISysDictTypeService
-{
+public class SysDictTypeServiceImpl implements ISysDictTypeService {
     @Autowired
     private SysDictTypeMapper dictTypeMapper;
 
@@ -36,52 +37,60 @@
      * 椤圭洰鍚姩鏃讹紝鍒濆鍖栧瓧鍏稿埌缂撳瓨
      */
     @PostConstruct
-    public void init()
-    {
+    public void init() {
         loadingDictCache();
     }
 
     /**
      * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷
-     * 
+     *
      * @param dictType 瀛楀吀绫诲瀷淇℃伅
      * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
      */
     @Override
-    public List<SysDictType> selectDictTypeList(SysDictType dictType)
-    {
+    public List<SysDictType> selectDictTypeList(SysDictType dictType) {
         List<SysDictType> sysDictTypes = dictTypeMapper.selectDictTypeList(dictType);
+        //鍥介檯鍖�
+        sysDictTypes.stream().forEach(sysDictType -> {
+            String message = MessageUtils.message("dic.type." + sysDictType.getDictNameI18n());
+            if (StringUtils.isNotEmpty(message)) {
+                sysDictType.setDictName(message);
+            }
+        });
         return sysDictTypes;
     }
 
     /**
      * 鏍规嵁鎵�鏈夊瓧鍏哥被鍨�
-     * 
+     *
      * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅
      */
     @Override
-    public List<SysDictType> selectDictTypeAll()
-    {
+    public List<SysDictType> selectDictTypeAll() {
         return dictTypeMapper.selectDictTypeAll();
     }
 
     /**
      * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁
-     * 
+     *
      * @param dictType 瀛楀吀绫诲瀷
      * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅
      */
     @Override
-    public List<SysDictData> selectDictDataByType(String dictType)
-    {
+    public List<SysDictData> selectDictDataByType(String dictType) {
         List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
-        if (StringUtils.isNotEmpty(dictDatas))
-        {
+        if (StringUtils.isNotEmpty(dictDatas)) {
+            //鍥介檯鍖�
+            dictDatas.stream().forEach(dictData -> {
+                String message = MessageUtils.message("dic.data." + dictData.getDictLabelI18n());
+                if (StringUtils.isNotEmpty(message)) {
+                    dictData.setDictLabel(message);
+                }
+            });
             return dictDatas;
         }
         dictDatas = dictDataMapper.selectDictDataByType(dictType);
-        if (StringUtils.isNotEmpty(dictDatas))
-        {
+        if (StringUtils.isNotEmpty(dictDatas)) {
             DictUtils.setDictCache(dictType, dictDatas);
             return dictDatas;
         }
@@ -90,41 +99,43 @@
 
     /**
      * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅
-     * 
+     *
      * @param dictId 瀛楀吀绫诲瀷ID
      * @return 瀛楀吀绫诲瀷
      */
     @Override
-    public SysDictType selectDictTypeById(Long dictId)
-    {
-        return dictTypeMapper.selectDictTypeById(dictId);
+    public SysDictType selectDictTypeById(Long dictId) {
+        SysDictType sysDictType = dictTypeMapper.selectDictTypeById(dictId);
+        //鍥介檯鍖�
+        String message = MessageUtils.message("dic.type." + sysDictType.getDictNameI18n());
+        if(StringUtils.isNotEmpty(message))
+        {
+            sysDictType.setDictName(message);
+        }
+        return sysDictType;
     }
 
     /**
      * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅
-     * 
+     *
      * @param dictType 瀛楀吀绫诲瀷
      * @return 瀛楀吀绫诲瀷
      */
     @Override
-    public SysDictType selectDictTypeByType(String dictType)
-    {
+    public SysDictType selectDictTypeByType(String dictType) {
         return dictTypeMapper.selectDictTypeByType(dictType);
     }
 
     /**
      * 鎵归噺鍒犻櫎瀛楀吀绫诲瀷淇℃伅
-     * 
+     *
      * @param dictIds 闇�瑕佸垹闄ょ殑瀛楀吀ID
      */
     @Override
-    public void deleteDictTypeByIds(Long[] dictIds)
-    {
-        for (Long dictId : dictIds)
-        {
+    public void deleteDictTypeByIds(Long[] dictIds) {
+        for (Long dictId : dictIds) {
             SysDictType dictType = selectDictTypeById(dictId);
-            if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0)
-            {
+            if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0) {
                 throw new ServiceException(String.format("%1$s宸插垎閰�,涓嶈兘鍒犻櫎", dictType.getDictName()));
             }
             dictTypeMapper.deleteDictTypeById(dictId);
@@ -136,13 +147,11 @@
      * 鍔犺浇瀛楀吀缂撳瓨鏁版嵁
      */
     @Override
-    public void loadingDictCache()
-    {
+    public void loadingDictCache() {
         SysDictData dictData = new SysDictData();
         dictData.setStatus("0");
         Map<String, List<SysDictData>> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream().collect(Collectors.groupingBy(SysDictData::getDictType));
-        for (Map.Entry<String, List<SysDictData>> entry : dictDataMap.entrySet())
-        {
+        for (Map.Entry<String, List<SysDictData>> entry : dictDataMap.entrySet()) {
             DictUtils.setDictCache(entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList()));
         }
     }
@@ -151,8 +160,7 @@
      * 娓呯┖瀛楀吀缂撳瓨鏁版嵁
      */
     @Override
-    public void clearDictCache()
-    {
+    public void clearDictCache() {
         DictUtils.clearDictCache();
     }
 
@@ -160,24 +168,21 @@
      * 閲嶇疆瀛楀吀缂撳瓨鏁版嵁
      */
     @Override
-    public void resetDictCache()
-    {
+    public void resetDictCache() {
         clearDictCache();
         loadingDictCache();
     }
 
     /**
      * 鏂板淇濆瓨瀛楀吀绫诲瀷淇℃伅
-     * 
+     *
      * @param dict 瀛楀吀绫诲瀷淇℃伅
      * @return 缁撴灉
      */
     @Override
-    public int insertDictType(SysDictType dict)
-    {
+    public int insertDictType(SysDictType dict) {
         int row = dictTypeMapper.insertDictType(dict);
-        if (row > 0)
-        {
+        if (row > 0) {
             DictUtils.setDictCache(dict.getDictType(), null);
         }
         return row;
@@ -185,19 +190,17 @@
 
     /**
      * 淇敼淇濆瓨瀛楀吀绫诲瀷淇℃伅
-     * 
+     *
      * @param dict 瀛楀吀绫诲瀷淇℃伅
      * @return 缁撴灉
      */
     @Override
     @Transactional
-    public int updateDictType(SysDictType dict)
-    {
+    public int updateDictType(SysDictType dict) {
         SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId());
         dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType());
         int row = dictTypeMapper.updateDictType(dict);
-        if (row > 0)
-        {
+        if (row > 0) {
             List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType());
             DictUtils.setDictCache(dict.getDictType(), dictDatas);
         }
@@ -206,17 +209,15 @@
 
     /**
      * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓�
-     * 
+     *
      * @param dict 瀛楀吀绫诲瀷
      * @return 缁撴灉
      */
     @Override
-    public String checkDictTypeUnique(SysDictType dict)
-    {
+    public String checkDictTypeUnique(SysDictType dict) {
         Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId();
         SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType());
-        if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue())
-        {
+        if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) {
             return UserConstants.NOT_UNIQUE;
         }
         return UserConstants.UNIQUE;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
index 5c154b0..db3184c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
@@ -29,12 +29,11 @@
 
 /**
  * 鑿滃崟 涓氬姟灞傚鐞�
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysMenuServiceImpl implements ISysMenuService
-{
+public class SysMenuServiceImpl implements ISysMenuService {
     public static final String PREMISSION_STRING = "perms[\"{0}\"]";
 
     @Autowired
@@ -48,54 +47,53 @@
 
     /**
      * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃
-     * 
+     *
      * @param userId 鐢ㄦ埛ID
      * @return 鑿滃崟鍒楄〃
      */
     @Override
-    public List<SysMenu> selectMenuList(String userId)
-    {
+    public List<SysMenu> selectMenuList(String userId) {
         return selectMenuList(new SysMenu(), userId);
     }
 
     /**
      * 鏌ヨ绯荤粺鑿滃崟鍒楄〃
-     * 
+     *
      * @param menu 鑿滃崟淇℃伅
      * @return 鑿滃崟鍒楄〃
      */
     @Override
-    public List<SysMenu> selectMenuList(SysMenu menu, String userId)
-    {
+    public List<SysMenu> selectMenuList(SysMenu menu, String userId) {
         List<SysMenu> menuList = null;
         // 绠$悊鍛樻樉绀烘墍鏈夎彍鍗曚俊鎭�
-        if (SysUser.isAdmin(userId))
-        {
+        if (SysUser.isAdmin(userId)) {
             menuList = menuMapper.selectMenuList(menu);
-        }
-        else
-        {
+        } else {
             menu.getParams().put("userId", userId);
             menuList = menuMapper.selectMenuListByUserId(menu);
         }
+        //鍥介檯鍖�
+        menuList.stream().forEach(sysMenu -> {
+            String message = MessageUtils.message("menu." + sysMenu.getMenuNameI18n());
+            if (StringUtils.isNotEmpty(message)) {
+                sysMenu.setMenuName(message);
+            }
+        });
         return menuList;
     }
 
     /**
      * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺
-     * 
+     *
      * @param userId 鐢ㄦ埛ID
      * @return 鏉冮檺鍒楄〃
      */
     @Override
-    public Set<String> selectMenuPermsByUserId(String userId)
-    {
+    public Set<String> selectMenuPermsByUserId(String userId) {
         List<String> perms = menuMapper.selectMenuPermsByUserId(userId);
         Set<String> permsSet = new HashSet<>();
-        for (String perm : perms)
-        {
-            if (StringUtils.isNotEmpty(perm))
-            {
+        for (String perm : perms) {
+            if (StringUtils.isNotEmpty(perm)) {
                 permsSet.addAll(Arrays.asList(perm.trim().split(",")));
             }
         }
@@ -104,19 +102,16 @@
 
     /**
      * 鏍规嵁瑙掕壊ID鏌ヨ鏉冮檺
-     * 
+     *
      * @param roleId 瑙掕壊ID
      * @return 鏉冮檺鍒楄〃
      */
     @Override
-    public Set<String> selectMenuPermsByRoleId(Long roleId)
-    {
+    public Set<String> selectMenuPermsByRoleId(Long roleId) {
         List<String> perms = menuMapper.selectMenuPermsByRoleId(roleId);
         Set<String> permsSet = new HashSet<>();
-        for (String perm : perms)
-        {
-            if (StringUtils.isNotEmpty(perm))
-            {
+        for (String perm : perms) {
+            if (StringUtils.isNotEmpty(perm)) {
                 permsSet.addAll(Arrays.asList(perm.trim().split(",")));
             }
         }
@@ -125,20 +120,16 @@
 
     /**
      * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟
-     * 
+     *
      * @param userId 鐢ㄦ埛鍚嶇О
      * @return 鑿滃崟鍒楄〃
      */
     @Override
-    public List<SysMenu> selectMenuTreeByUserId(String userId)
-    {
+    public List<SysMenu> selectMenuTreeByUserId(String userId) {
         List<SysMenu> menus = null;
-        if (SecurityUtils.isAdmin(userId))
-        {
+        if (SecurityUtils.isAdmin(userId)) {
             menus = menuMapper.selectMenuTreeAll();
-        }
-        else
-        {
+        } else {
             menus = menuMapper.selectMenuTreeByUserId(userId);
         }
         return getChildPerms(menus, 0);
@@ -146,29 +137,26 @@
 
     /**
      * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭�
-     * 
+     *
      * @param roleId 瑙掕壊ID
      * @return 閫変腑鑿滃崟鍒楄〃
      */
     @Override
-    public List<Long> selectMenuListByRoleId(Long roleId)
-    {
+    public List<Long> selectMenuListByRoleId(Long roleId) {
         SysRole role = roleMapper.selectRoleById(roleId);
         return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly());
     }
 
     /**
      * 鏋勫缓鍓嶇璺敱鎵�闇�瑕佺殑鑿滃崟
-     * 
+     *
      * @param menus 鑿滃崟鍒楄〃
      * @return 璺敱鍒楄〃
      */
     @Override
-    public List<RouterVo> buildMenus(List<SysMenu> menus)
-    {
+    public List<RouterVo> buildMenus(List<SysMenu> menus) {
         List<RouterVo> routers = new LinkedList<RouterVo>();
-        for (SysMenu menu : menus)
-        {
+        for (SysMenu menu : menus) {
             RouterVo router = new RouterVo();
             router.setHidden("1".equals(menu.getVisible()));
             router.setName(getRouteName(menu));
@@ -177,14 +165,11 @@
             router.setQuery(menu.getQuery());
             router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
             List<SysMenu> cMenus = menu.getChildren();
-            if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()))
-            {
+            if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType())) {
                 router.setAlwaysShow(true);
                 router.setRedirect("noRedirect");
                 router.setChildren(buildMenus(cMenus));
-            }
-            else if (isMenuFrame(menu))
-            {
+            } else if (isMenuFrame(menu)) {
                 router.setMeta(null);
                 List<RouterVo> childrenList = new ArrayList<RouterVo>();
                 RouterVo children = new RouterVo();
@@ -195,9 +180,7 @@
                 children.setQuery(menu.getQuery());
                 childrenList.add(children);
                 router.setChildren(childrenList);
-            }
-            else if (menu.getParentId().intValue() == 0 && isInnerLink(menu))
-            {
+            } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) {
                 router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon()));
                 router.setPath("/");
                 List<RouterVo> childrenList = new ArrayList<RouterVo>();
@@ -217,27 +200,23 @@
 
     /**
      * 鏋勫缓鍓嶇鎵�闇�瑕佹爲缁撴瀯
-     * 
+     *
      * @param menus 鑿滃崟鍒楄〃
      * @return 鏍戠粨鏋勫垪琛�
      */
     @Override
-    public List<SysMenu> buildMenuTree(List<SysMenu> menus)
-    {
+    public List<SysMenu> buildMenuTree(List<SysMenu> menus) {
         List<SysMenu> returnList = new ArrayList<SysMenu>();
         List<Long> tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
-        for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
-        {
+        for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext(); ) {
             SysMenu menu = (SysMenu) iterator.next();
             // 濡傛灉鏄《绾ц妭鐐�, 閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣
-            if (!tempList.contains(menu.getParentId()))
-            {
+            if (!tempList.contains(menu.getParentId())) {
                 recursionFn(menus, menu);
                 returnList.add(menu);
             }
         }
-        if (returnList.isEmpty())
-        {
+        if (returnList.isEmpty()) {
             returnList = menus;
         }
         return returnList;
@@ -245,104 +224,102 @@
 
     /**
      * 鏋勫缓鍓嶇鎵�闇�瑕佷笅鎷夋爲缁撴瀯
-     * 
+     *
      * @param menus 鑿滃崟鍒楄〃
      * @return 涓嬫媺鏍戠粨鏋勫垪琛�
      */
     @Override
-    public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus)
-    {
+    public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus) {
         List<SysMenu> menuTrees = buildMenuTree(menus);
         return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
     }
 
     /**
      * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅
-     * 
+     *
      * @param menuId 鑿滃崟ID
      * @return 鑿滃崟淇℃伅
      */
     @Override
-    public SysMenu selectMenuById(Long menuId)
-    {
-        return menuMapper.selectMenuById(menuId);
+    public SysMenu selectMenuById(Long menuId) {
+        SysMenu sysMenu = menuMapper.selectMenuById(menuId);
+        //鍥介檯鍖�
+        String message = MessageUtils.message("menu." + sysMenu.getMenuNameI18n());
+        if(StringUtils.isNotEmpty(message))
+        {
+            sysMenu.setMenuName(message);
+        }
+        return sysMenu;
     }
 
     /**
      * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐�
-     * 
+     *
      * @param menuId 鑿滃崟ID
      * @return 缁撴灉
      */
     @Override
-    public boolean hasChildByMenuId(Long menuId)
-    {
+    public boolean hasChildByMenuId(Long menuId) {
         int result = menuMapper.hasChildByMenuId(menuId);
         return result > 0;
     }
 
     /**
      * 鏌ヨ鑿滃崟浣跨敤鏁伴噺
-     * 
+     *
      * @param menuId 鑿滃崟ID
      * @return 缁撴灉
      */
     @Override
-    public boolean checkMenuExistRole(Long menuId)
-    {
+    public boolean checkMenuExistRole(Long menuId) {
         int result = roleMenuMapper.checkMenuExistRole(menuId);
         return result > 0;
     }
 
     /**
      * 鏂板淇濆瓨鑿滃崟淇℃伅
-     * 
+     *
      * @param menu 鑿滃崟淇℃伅
      * @return 缁撴灉
      */
     @Override
-    public int insertMenu(SysMenu menu)
-    {
+    public int insertMenu(SysMenu menu) {
         return menuMapper.insertMenu(menu);
     }
 
     /**
      * 淇敼淇濆瓨鑿滃崟淇℃伅
-     * 
+     *
      * @param menu 鑿滃崟淇℃伅
      * @return 缁撴灉
      */
     @Override
-    public int updateMenu(SysMenu menu)
-    {
+    public int updateMenu(SysMenu menu) {
         return menuMapper.updateMenu(menu);
     }
 
     /**
      * 鍒犻櫎鑿滃崟绠$悊淇℃伅
-     * 
+     *
      * @param menuId 鑿滃崟ID
      * @return 缁撴灉
      */
     @Override
-    public int deleteMenuById(Long menuId)
-    {
+    public int deleteMenuById(Long menuId) {
         return menuMapper.deleteMenuById(menuId);
     }
 
     /**
      * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴
-     * 
+     *
      * @param menu 鑿滃崟淇℃伅
      * @return 缁撴灉
      */
     @Override
-    public String checkMenuNameUnique(SysMenu menu)
-    {
+    public String checkMenuNameUnique(SysMenu menu) {
         Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
         SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());
-        if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue())
-        {
+        if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) {
             return UserConstants.NOT_UNIQUE;
         }
         return UserConstants.UNIQUE;
@@ -350,16 +327,14 @@
 
     /**
      * 鑾峰彇璺敱鍚嶇О
-     * 
+     *
      * @param menu 鑿滃崟淇℃伅
      * @return 璺敱鍚嶇О
      */
-    public String getRouteName(SysMenu menu)
-    {
+    public String getRouteName(SysMenu menu) {
         String routerName = StringUtils.capitalize(menu.getPath());
         // 闈炲閾惧苟涓旀槸涓�绾х洰褰曪紙绫诲瀷涓虹洰褰曪級
-        if (isMenuFrame(menu))
-        {
+        if (isMenuFrame(menu)) {
             routerName = StringUtils.EMPTY;
         }
         return routerName;
@@ -367,27 +342,23 @@
 
     /**
      * 鑾峰彇璺敱鍦板潃
-     * 
+     *
      * @param menu 鑿滃崟淇℃伅
      * @return 璺敱鍦板潃
      */
-    public String getRouterPath(SysMenu menu)
-    {
+    public String getRouterPath(SysMenu menu) {
         String routerPath = menu.getPath();
         // 鍐呴摼鎵撳紑澶栫綉鏂瑰紡
-        if (menu.getParentId().intValue() != 0 && isInnerLink(menu))
-        {
+        if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) {
             routerPath = innerLinkReplaceEach(routerPath);
         }
         // 闈炲閾惧苟涓旀槸涓�绾х洰褰曪紙绫诲瀷涓虹洰褰曪級
         if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType())
-                && UserConstants.NO_FRAME.equals(menu.getIsFrame()))
-        {
+                && UserConstants.NO_FRAME.equals(menu.getIsFrame())) {
             routerPath = "/" + menu.getPath();
         }
         // 闈炲閾惧苟涓旀槸涓�绾х洰褰曪紙绫诲瀷涓鸿彍鍗曪級
-        else if (isMenuFrame(menu))
-        {
+        else if (isMenuFrame(menu)) {
             routerPath = "/";
         }
         return routerPath;
@@ -395,23 +366,17 @@
 
     /**
      * 鑾峰彇缁勪欢淇℃伅
-     * 
+     *
      * @param menu 鑿滃崟淇℃伅
      * @return 缁勪欢淇℃伅
      */
-    public String getComponent(SysMenu menu)
-    {
+    public String getComponent(SysMenu menu) {
         String component = UserConstants.LAYOUT;
-        if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu))
-        {
+        if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) {
             component = menu.getComponent();
-        }
-        else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu))
-        {
+        } else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) {
             component = UserConstants.INNER_LINK;
-        }
-        else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu))
-        {
+        } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) {
             component = UserConstants.PARENT_VIEW;
         }
         return component;
@@ -419,58 +384,53 @@
 
     /**
      * 鏄惁涓鸿彍鍗曞唴閮ㄨ烦杞�
-     * 
+     *
      * @param menu 鑿滃崟淇℃伅
      * @return 缁撴灉
      */
-    public boolean isMenuFrame(SysMenu menu)
-    {
+    public boolean isMenuFrame(SysMenu menu) {
         return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType())
                 && menu.getIsFrame().equals(UserConstants.NO_FRAME);
     }
 
     /**
      * 鏄惁涓哄唴閾剧粍浠�
-     * 
+     *
      * @param menu 鑿滃崟淇℃伅
      * @return 缁撴灉
      */
-    public boolean isInnerLink(SysMenu menu)
-    {
+    public boolean isInnerLink(SysMenu menu) {
         return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath());
     }
 
     /**
      * 鏄惁涓簆arent_view缁勪欢
-     * 
+     *
      * @param menu 鑿滃崟淇℃伅
      * @return 缁撴灉
      */
-    public boolean isParentView(SysMenu menu)
-    {
+    public boolean isParentView(SysMenu menu) {
         return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType());
     }
 
     /**
      * 鏍规嵁鐖惰妭鐐圭殑ID鑾峰彇鎵�鏈夊瓙鑺傜偣
-     * 
-     * @param list 鍒嗙被琛�
+     *
+     * @param list     鍒嗙被琛�
      * @param parentId 浼犲叆鐨勭埗鑺傜偣ID
      * @return String
      */
-    public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)
-    {
+    public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId) {
         List<SysMenu> returnList = new ArrayList<SysMenu>();
-        for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)
-        {
+        for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext(); ) {
             // 鍥介檯鍖栬浆鎹�
             SysMenu t = (SysMenu) iterator.next();
-            String message = MessageUtils.message("menu." + t.getMenuNameEnglish());
-            if(StringUtils.isNotEmpty(message))
-            {t.setMenuName(message);}
+            String message = MessageUtils.message("menu." + t.getMenuNameI18n());
+            if (StringUtils.isNotEmpty(message)) {
+                t.setMenuName(message);
+            }
             // 涓�銆佹牴鎹紶鍏ョ殑鏌愪釜鐖惰妭鐐笽D,閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣
-            if (t.getParentId() == parentId)
-            {
+            if (t.getParentId() == parentId) {
                 recursionFn(list, t);
                 returnList.add(t);
             }
@@ -480,19 +440,16 @@
 
     /**
      * 閫掑綊鍒楄〃
-     * 
+     *
      * @param list 鍒嗙被琛�
-     * @param t 瀛愯妭鐐�
+     * @param t    瀛愯妭鐐�
      */
-    private void recursionFn(List<SysMenu> list, SysMenu t)
-    {
+    private void recursionFn(List<SysMenu> list, SysMenu t) {
         // 寰楀埌瀛愯妭鐐瑰垪琛�
         List<SysMenu> childList = getChildList(list, t);
         t.setChildren(childList);
-        for (SysMenu tChild : childList)
-        {
-            if (hasChild(list, tChild))
-            {
+        for (SysMenu tChild : childList) {
+            if (hasChild(list, tChild)) {
                 recursionFn(list, tChild);
             }
         }
@@ -501,15 +458,12 @@
     /**
      * 寰楀埌瀛愯妭鐐瑰垪琛�
      */
-    private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t)
-    {
+    private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t) {
         List<SysMenu> tlist = new ArrayList<SysMenu>();
         Iterator<SysMenu> it = list.iterator();
-        while (it.hasNext())
-        {
+        while (it.hasNext()) {
             SysMenu n = (SysMenu) it.next();
-            if (n.getParentId().longValue() == t.getMenuId().longValue())
-            {
+            if (n.getParentId().longValue() == t.getMenuId().longValue()) {
                 tlist.add(n);
             }
         }
@@ -519,19 +473,17 @@
     /**
      * 鍒ゆ柇鏄惁鏈夊瓙鑺傜偣
      */
-    private boolean hasChild(List<SysMenu> list, SysMenu t)
-    {
+    private boolean hasChild(List<SysMenu> list, SysMenu t) {
         return getChildList(list, t).size() > 0;
     }
 
     /**
      * 鍐呴摼鍩熷悕鐗规畩瀛楃鏇挎崲
-     * 
+     *
      * @return 鏇挎崲鍚庣殑鍐呴摼鍩熷悕
      */
-    public String innerLinkReplaceEach(String path)
-    {
-        return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS, Constants.WWW, "." },
-                new String[] { "", "", "", "/" });
+    public String innerLinkReplaceEach(String path) {
+        return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, "."},
+                new String[]{"", "", "", "/"});
     }
 }
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
index b40ff8b..2f2b2fa 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
@@ -1,121 +1,139 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.system.mapper.SysConfigMapper">
-    
+
     <resultMap type="SysConfig" id="SysConfigResult">
-    	<id     property="configId"      column="config_id"      />
-        <result property="configName"    column="config_name"    />
-        <result property="configKey"     column="config_key"     />
-        <result property="configValue"   column="config_value"   />
-        <result property="configType"    column="config_type"    />
-        <result property="createBy"      column="create_by"      />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"      column="update_by"      />
-        <result property="updateTime"    column="update_time"    />
+        <id property="configId" column="config_id"/>
+        <result property="configName" column="config_name"/>
+        <result property="configNameI18n" column="config_name_i18n"/>
+        <result property="configKey" column="config_key"/>
+        <result property="configValue" column="config_value"/>
+        <result property="configType" column="config_type"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
     </resultMap>
-    
+
     <sql id="selectConfigVo">
-        select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark 
-		from sys_config
+        select config_id,
+               config_name,
+               config_name_i18n,
+               config_key,
+               config_value,
+               config_type,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               remark
+        from sys_config
     </sql>
-    
+
     <!-- 鏌ヨ鏉′欢 -->
-	<sql id="sqlwhereSearch">
-		<where>
-			<if test="configId !=null">
-				and config_id = #{configId}
-			</if>
-			<if test="configKey !=null and configKey != ''">
-				and config_key = #{configKey}
-			</if>
-		</where>
-	</sql>
-    
+    <sql id="sqlwhereSearch">
+        <where>
+            <if test="configId !=null">
+                and config_id = #{configId}
+            </if>
+            <if test="configKey !=null and configKey != ''">
+                and config_key = #{configKey}
+            </if>
+        </where>
+    </sql>
+
     <select id="selectConfig" parameterType="SysConfig" resultMap="SysConfigResult">
         <include refid="selectConfigVo"/>
         <include refid="sqlwhereSearch"/>
     </select>
-    
+
     <select id="selectConfigList" parameterType="SysConfig" resultMap="SysConfigResult">
         <include refid="selectConfigVo"/>
         <where>
-			<if test="configName != null and configName != ''">
-				AND config_name like ('%${configName}%')
-			</if>
-			<if test="configType != null and configType != ''">
-				AND config_type = #{configType}
-			</if>
-			<if test="configKey != null and configKey != ''">
-				AND config_key like ('%${configKey}%')
-			</if>
-			<if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
-				and create_time &gt;= to_timestamp(#{params.beginTime},'yyyy-MM-DD')
-			</if>
-			<if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-				and create_time &lt;= to_timestamp(#{params.endTime},'yyyy-MM-DD')
-			</if>
-		</where>
+            <if test="configName != null and configName != ''">
+                AND config_name like ('%${configName}%')
+            </if>
+            <if test="configType != null and configType != ''">
+                AND config_type = #{configType}
+            </if>
+            <if test="configKey != null and configKey != ''">
+                AND config_key like ('%${configKey}%')
+            </if>
+            <if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+                and create_time &gt;= to_timestamp(#{params.beginTime},'yyyy-MM-DD')
+            </if>
+            <if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+                and create_time &lt;= to_timestamp(#{params.endTime},'yyyy-MM-DD')
+            </if>
+        </where>
     </select>
-    
+
     <select id="selectConfigById" parameterType="Long" resultMap="SysConfigResult">
         <include refid="selectConfigVo"/>
         where config_id = #{configId}
     </select>
-	
+
     <select id="checkConfigKeyUnique" parameterType="String" resultMap="SysConfigResult">
         <include refid="selectConfigVo"/>
         where config_key = #{configKey} limit 1
     </select>
-    
+
     <insert id="insertConfig" parameterType="SysConfig">
         insert into sys_config (
-			<if test="configName != null and configName != '' ">config_name,</if>
-			<if test="configKey != null and configKey != '' ">config_key,</if>
-			<if test="configValue != null and configValue != '' ">config_value,</if>
-			<if test="configType != null and configType != '' ">config_type,</if>
-			<if test="createBy != null and createBy != ''">create_by,</if>
-			<if test="remark != null and remark != ''">remark,</if>
- 			create_time
+        <if test="configName != null and configName != '' ">config_name,</if>
+        <if test="configNameI18n != null and configNameI18n != '' ">config_name_i18n,</if>
+        <if test="configKey != null and configKey != '' ">config_key,</if>
+        <if test="configValue != null and configValue != '' ">config_value,</if>
+        <if test="configType != null and configType != '' ">config_type,</if>
+        <if test="createBy != null and createBy != ''">create_by,</if>
+        <if test="remark != null and remark != ''">remark,</if>
+        create_time
         )values(
-			<if test="configName != null and configName != ''">#{configName},</if>
-			<if test="configKey != null and configKey != ''">#{configKey},</if>
-			<if test="configValue != null and configValue != ''">#{configValue},</if>
-			<if test="configType != null and configType != ''">#{configType},</if>
-			<if test="createBy != null and createBy != ''">#{createBy},</if>
-			<if test="remark != null and remark != ''">#{remark},</if>
- 			now()
-		)
+        <if test="configName != null and configName != ''">#{configName},</if>
+        <if test="configNameI18n != null and configNameI18n != ''">#{configNameI18n},</if>
+        <if test="configKey != null and configKey != ''">#{configKey},</if>
+        <if test="configValue != null and configValue != ''">#{configValue},</if>
+        <if test="configType != null and configType != ''">#{configType},</if>
+        <if test="createBy != null and createBy != ''">#{createBy},</if>
+        <if test="remark != null and remark != ''">#{remark},</if>
+        now()
+        )
     </insert>
-	 
+
     <update id="updateConfig" parameterType="SysConfig">
-        update sys_config 
+        update sys_config
         <set>
             <if test="configName != null and configName != ''">config_name = #{configName},</if>
+            <if test="configNameI18n != null and configNameI18n != ''">config_name_i18n = #{configNameI18n},</if>
             <if test="configKey != null and configKey != ''">config_key = #{configKey},</if>
             <if test="configValue != null and configValue != ''">config_value = #{configValue},</if>
             <if test="configType != null and configType != ''">config_type = #{configType},</if>
             <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
             <if test="remark != null">remark = #{remark},</if>
- 			update_time = now()
+            update_time = now()
         </set>
         where config_id = #{configId}
     </update>
-	
+
     <delete id="deleteConfigById" parameterType="Long">
-        delete from sys_config where config_id = #{configId}
+        delete
+        from sys_config
+        where config_id = #{configId}
     </delete>
-    
+
     <delete id="deleteConfigByIds" parameterType="Long">
-        delete from sys_config where config_id in 
+        delete from sys_config where config_id in
         <foreach item="configId" collection="array" open="(" separator="," close=")">
-        	#{configId}
+            #{configId}
         </foreach>
     </delete>
 
     <select id="selectByType" parameterType="String" resultMap="SysConfigResult">
-        select * from sys_config where config_key = #{sysType}
+        select *
+        from sys_config
+        where config_key = #{sysType}
     </select>
-    
+
 </mapper>
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
index 2a27bb8..c402583 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
@@ -8,6 +8,7 @@
 		<id     property="dictCode"   column="dict_code"   />
 		<result property="dictSort"   column="dict_sort"   />
 		<result property="dictLabel"  column="dict_label"  />
+		<result property="dictLabelI18n"  column="dict_label_i18n"  />
 		<result property="dictValue"  column="dict_value"  />
 		<result property="dictType"   column="dict_type"   />
 		<result property="cssClass"   column="css_class"   />
@@ -21,7 +22,7 @@
 	</resultMap>
 	
 	<sql id="selectDictDataVo">
-        select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark 
+        select dict_code, dict_sort, dict_label,dict_label_i18n, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark
 		from sys_dict_data
     </sql>
 
@@ -76,6 +77,7 @@
  		<set>
  			<if test="dictSort != null">dict_sort = #{dictSort},</if>
  			<if test="dictLabel != null and dictLabel != ''">dict_label = #{dictLabel},</if>
+			<if test="dictLabelI18n != null and dictLabelI18n != ''">dict_label_i18n = #{dictLabelI18n},</if>
  			<if test="dictValue != null and dictValue != ''">dict_value = #{dictValue},</if>
  			<if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
  			<if test="cssClass != null">css_class = #{cssClass},</if>
@@ -97,6 +99,7 @@
  		insert into sys_dict_data(
  			<if test="dictSort != null">dict_sort,</if>
  			<if test="dictLabel != null and dictLabel != ''">dict_label,</if>
+			<if test="dictLabelI18n != null and dictLabelI18n != ''">dict_label_i18n,</if>
  			<if test="dictValue != null and dictValue != ''">dict_value,</if>
  			<if test="dictType != null and dictType != ''">dict_type,</if>
  			<if test="cssClass != null and cssClass != ''">css_class,</if>
@@ -109,6 +112,7 @@
  		)values(
  		    <if test="dictSort != null">#{dictSort},</if>
  		    <if test="dictLabel != null and dictLabel != ''">#{dictLabel},</if>
+			<if test="dictLabelI18n != null and dictLabelI18n != ''">#{dictLabelI18n},</if>
  			<if test="dictValue != null and dictValue != ''">#{dictValue},</if>
  			<if test="dictType != null and dictType != ''">#{dictType},</if>
  			<if test="cssClass != null and cssClass != ''">#{cssClass},</if>
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
index 6297966..d8b18db 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
@@ -1,105 +1,111 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.system.mapper.SysDictTypeMapper">
 
-	<resultMap type="SysDictType" id="SysDictTypeResult">
-		<id     property="dictId"     column="dict_id"     />
-		<result property="dictName"   column="dict_name"   />
-		<result property="dictType"   column="dict_type"   />
-		<result property="status"     column="status"      />
-		<result property="createBy"   column="create_by"   />
-		<result property="createTime" column="create_time" />
-		<result property="updateBy"   column="update_by"   />
-		<result property="updateTime" column="update_time" />
-	</resultMap>
-	
-	<sql id="selectDictTypeVo">
-        select dict_id, dict_name, dict_type, status, create_by, create_time, remark 
-		from sys_dict_type
+    <resultMap type="SysDictType" id="SysDictTypeResult">
+        <id property="dictId" column="dict_id"/>
+        <result property="dictName" column="dict_name"/>
+        <result property="dictNameI18n" column="dict_name_i18n"/>
+        <result property="dictType" column="dict_type"/>
+        <result property="status" column="status"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <sql id="selectDictTypeVo">
+        select dict_id, dict_name,dict_name_i18n, dict_type, status, create_by, create_time, remark
+        from sys_dict_type
     </sql>
 
-	<select id="selectDictTypeList" parameterType="SysDictType" resultMap="SysDictTypeResult">
-	    <include refid="selectDictTypeVo"/>
-		<where>
-		    <if test="dictName != null and dictName != ''">
-				AND dict_name like ('%${dictName}%')
-			</if>
-			<if test="status != null and status != ''">
-				AND status = #{status}
-			</if>
-			<if test="dictType != null and dictType != ''">
-				AND dict_type like ('%${dictType}%')
-			</if>
-			<if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
-				and create_time &gt;= to_timestamp(#{params.beginTime},'yyyy-MM-DD')
-			</if>
-			<if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-				and create_time &lt;= to_timestamp(#{params.endTime},'yyyy-MM-DD')
-			</if>
-	    </where>
-	</select>
-	
-	<select id="selectDictTypeAll" resultMap="SysDictTypeResult">
-		<include refid="selectDictTypeVo"/>
-	</select>
-	
-	<select id="selectDictTypeById" parameterType="Long" resultMap="SysDictTypeResult">
-		<include refid="selectDictTypeVo"/>
-		where dict_id = #{dictId}
-	</select>
-	
-	<select id="selectDictTypeByType" parameterType="String" resultMap="SysDictTypeResult">
-		<include refid="selectDictTypeVo"/>
-		where dict_type = #{dictType}
-	</select>
-	
-	<select id="checkDictTypeUnique" parameterType="String" resultMap="SysDictTypeResult">
-		<include refid="selectDictTypeVo"/>
-		where dict_type = #{dictType} limit 1 OFFSET 0
-	</select>
-	
-	<delete id="deleteDictTypeById" parameterType="Long">
- 		delete from sys_dict_type where dict_id = #{dictId}
- 	</delete>
- 	
- 	<delete id="deleteDictTypeByIds" parameterType="Long">
- 		delete from sys_dict_type where dict_id in
- 		<foreach collection="array" item="dictId" open="(" separator="," close=")">
- 			#{dictId}
-        </foreach> 
- 	</delete>
+    <select id="selectDictTypeList" parameterType="SysDictType" resultMap="SysDictTypeResult">
+        <include refid="selectDictTypeVo"/>
+        <where>
+            <if test="dictName != null and dictName != ''">
+                AND dict_name like ('%${dictName}%')
+            </if>
+            <if test="status != null and status != ''">
+                AND status = #{status}
+            </if>
+            <if test="dictType != null and dictType != ''">
+                AND dict_type like ('%${dictType}%')
+            </if>
+            <if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+                and create_time &gt;= to_timestamp(#{params.beginTime},'yyyy-MM-DD')
+            </if>
+            <if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+                and create_time &lt;= to_timestamp(#{params.endTime},'yyyy-MM-DD')
+            </if>
+        </where>
+    </select>
 
- 	<update id="updateDictType" parameterType="SysDictType">
- 		update sys_dict_type
- 		<set>
- 			<if test="dictName != null and dictName != ''">dict_name = #{dictName},</if>
- 			<if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
- 			<if test="status != null">status = #{status},</if>
- 			<if test="remark != null">remark = #{remark},</if>
- 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
- 			update_time = now()
- 		</set>
- 		where dict_id = #{dictId}
-	</update>
- 	
- 	<insert id="insertDictType" parameterType="SysDictType">
- 		insert into sys_dict_type(
- 			<if test="dictName != null and dictName != ''">dict_name,</if>
- 			<if test="dictType != null and dictType != ''">dict_type,</if>
- 			<if test="status != null">status,</if>
- 			<if test="remark != null and remark != ''">remark,</if>
- 			<if test="createBy != null and createBy != ''">create_by,</if>
- 			create_time
- 		)values(
- 			<if test="dictName != null and dictName != ''">#{dictName},</if>
- 			<if test="dictType != null and dictType != ''">#{dictType},</if>
- 			<if test="status != null">#{status},</if>
- 			<if test="remark != null and remark != ''">#{remark},</if>
- 			<if test="createBy != null and createBy != ''">#{createBy},</if>
- 			now()
- 		)
-	</insert>
-	
+    <select id="selectDictTypeAll" resultMap="SysDictTypeResult">
+        <include refid="selectDictTypeVo"/>
+    </select>
+
+    <select id="selectDictTypeById" parameterType="Long" resultMap="SysDictTypeResult">
+        <include refid="selectDictTypeVo"/>
+        where dict_id = #{dictId}
+    </select>
+
+    <select id="selectDictTypeByType" parameterType="String" resultMap="SysDictTypeResult">
+        <include refid="selectDictTypeVo"/>
+        where dict_type = #{dictType}
+    </select>
+
+    <select id="checkDictTypeUnique" parameterType="String" resultMap="SysDictTypeResult">
+        <include refid="selectDictTypeVo"/>
+        where dict_type = #{dictType} limit 1 OFFSET 0
+    </select>
+
+    <delete id="deleteDictTypeById" parameterType="Long">
+        delete
+        from sys_dict_type
+        where dict_id = #{dictId}
+    </delete>
+
+    <delete id="deleteDictTypeByIds" parameterType="Long">
+        delete from sys_dict_type where dict_id in
+        <foreach collection="array" item="dictId" open="(" separator="," close=")">
+            #{dictId}
+        </foreach>
+    </delete>
+
+    <update id="updateDictType" parameterType="SysDictType">
+        update sys_dict_type
+        <set>
+            <if test="dictName != null and dictName != ''">dict_name = #{dictName},</if>
+            <if test="dictNameI18n != null and dictNameI18n != ''">dict_name_i18n = #{dictNameI18n},</if>
+            <if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            update_time = now()
+        </set>
+        where dict_id = #{dictId}
+    </update>
+
+    <insert id="insertDictType" parameterType="SysDictType">
+        insert into sys_dict_type(
+        <if test="dictName != null and dictName != ''">dict_name,</if>
+        <if test="dictNameI18n != null and dictNameI18n != ''">dict_name_i18n,</if>
+        <if test="dictType != null and dictType != ''">dict_type,</if>
+        <if test="status != null">status,</if>
+        <if test="remark != null and remark != ''">remark,</if>
+        <if test="createBy != null and createBy != ''">create_by,</if>
+        create_time
+        )values(
+        <if test="dictName != null and dictName != ''">#{dictName},</if>
+        <if test="dictNameI18n != null and dictNameI18n != ''">#{dictNameI18n},</if>
+        <if test="dictType != null and dictType != ''">#{dictType},</if>
+        <if test="status != null">#{status},</if>
+        <if test="remark != null and remark != ''">#{remark},</if>
+        <if test="createBy != null and createBy != ''">#{createBy},</if>
+        now()
+        )
+    </insert>
+
 </mapper> 
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
index 4866425..cf77ca4 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
@@ -7,7 +7,7 @@
 	<resultMap type="SysMenu" id="SysMenuResult">
 		<id     property="menuId"         column="menu_id"        />
 		<result property="menuName"       column="menu_name"      />
-		<result property="menuNameEnglish"       column="menu_name_english"      />
+		<result property="menuNameI18n"   column="menu_name_i18n" />
 		<result property="parentName"     column="parent_name"    />
 		<result property="parentId"       column="parent_id"      />
 		<result property="orderNum"       column="order_num"      />
@@ -29,7 +29,7 @@
 	</resultMap>
 
 	<sql id="selectMenuVo">
-        select menu_id, menu_name,menu_name_english, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, coalesce(perms,'') as perms, icon, create_time
+        select menu_id, menu_name,menu_name_i18n, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, coalesce(perms,'') as perms, icon, create_time
 		from sys_menu
     </sql>
     
@@ -50,13 +50,13 @@
 	</select>
 	
 	<select id="selectMenuTreeAll" resultMap="SysMenuResult">
-		select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_english, m.path, m.component, m.query, m.visible, m.status, coalesce(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
+		select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_i18n, m.path, m.component, m.query, m.visible, m.status, coalesce(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
 		from sys_menu m where m.menu_type in ('M', 'C') and m.status = '0'
 		order by m.parent_id, m.order_num
 	</select>
 	
 	<select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult">
-		select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_english, m.path, m.component, m.query, m.visible, m.status, coalesce(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
+		select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_i18n, m.path, m.component, m.query, m.visible, m.status, coalesce(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
 		from sys_menu m
 		left join sys_role_menu rm on m.menu_id = rm.menu_id
 		left join sys_user_role ur on rm.role_id = ur.role_id
@@ -75,7 +75,7 @@
 	</select>
     
     <select id="selectMenuTreeByUserId" parameterType="String" resultMap="SysMenuResult">
-		select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_english, m.path, m.component, m.query, m.visible, m.status, coalesce(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
+		select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_i18n, m.path, m.component, m.query, m.visible, m.status, coalesce(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
 		from sys_menu m
 			 left join sys_role_menu rm on m.menu_id = rm.menu_id
 			 left join sys_user_role ur on rm.role_id = ur.role_id
@@ -137,7 +137,7 @@
 		update sys_menu
 		<set>
 			<if test="menuName != null and menuName != ''">menu_name = #{menuName},</if>
-			<if test="menuNameEnglish != null and menuNameEnglish != ''">menu_name_english = #{menuNameEnglish},</if>
+			<if test="menuNameI18n != null and menuNameI18n != ''">menu_name_i18n = #{menuNameI18n},</if>
 			<if test="parentId != null">parent_id = #{parentId},</if>
 			<if test="orderNum != null">order_num = #{orderNum},</if>
 			<if test="path != null and path != ''">path = #{path},</if>
@@ -162,7 +162,7 @@
 		<if test="menuId != null and menuId != 0">menu_id,</if>
 		<if test="parentId != null and parentId != 0">parent_id,</if>
 		<if test="menuName != null and menuName != ''">menu_name,</if>
-		<if test="menuNameEnglish != null and menuNameEnglish != ''">menu_name_english,</if>
+		<if test="menuNameI18n != null and menuNameI18n != ''">menu_name_i18n,</if>
 		<if test="orderNum != null">order_num,</if>
 		<if test="path != null and path != ''">path,</if>
 		<if test="component != null and component != ''">component,</if>
@@ -181,7 +181,7 @@
 		<if test="menuId != null and menuId != 0">#{menuId},</if>
 		<if test="parentId != null and parentId != 0">#{parentId},</if>
 		<if test="menuName != null and menuName != ''">#{menuName},</if>
-		<if test="menuNameEnglish != null and menuNameEnglish != ''">#{menuNameEnglish},</if>
+		<if test="menuNameI18n != null and menuNameI18n != ''">#{menuNameI18n},</if>
 		<if test="orderNum != null">#{orderNum},</if>
 		<if test="path != null and path != ''">#{path},</if>
 		<if test="component != null and component != ''">#{component},</if>

--
Gitblit v1.9.3