You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@linkis.apache.org by ca...@apache.org on 2022/11/22 01:39:46 UTC

[incubator-linkis] branch dev-1.3.1 updated: linkis-web Chinese-English translation (#3745)

This is an automated email from the ASF dual-hosted git repository.

casion pushed a commit to branch dev-1.3.1
in repository https://gitbox.apache.org/repos/asf/incubator-linkis.git


The following commit(s) were added to refs/heads/dev-1.3.1 by this push:
     new d4498722f linkis-web Chinese-English translation (#3745)
d4498722f is described below

commit d4498722ff774857b5d6b643e4b46a97ec3db442
Author: 成彬彬 <10...@users.noreply.github.com>
AuthorDate: Tue Nov 22 09:39:40 2022 +0800

    linkis-web Chinese-English translation (#3745)
    
    * linkis-web Chinese-English translation
    
    * update README.md replace badge.svg
    
    * update README.md delete badge.svg
    
    * resolve conflict
---
 linkis-web/src/apps/URM/router.js                  |   2 +-
 linkis-web/src/apps/URM/view/urm/index.vue         |  10 +-
 .../src/apps/linkis/components/cardList/index.vue  |  76 +++++------
 .../src/apps/linkis/components/progress/index.vue  |   8 +-
 .../src/apps/linkis/components/tag/index.vue       |  18 +--
 .../src/apps/linkis/module/ECM/engineConn.vue      |  48 +++----
 linkis-web/src/apps/linkis/module/ECM/index.vue    |  70 +++++------
 linkis-web/src/apps/linkis/module/ECM/log.vue      |  10 +-
 .../src/apps/linkis/module/datasource/index.vue    |  12 +-
 .../module/globalHistoryManagement/index.vue       |  12 +-
 .../module/globalHistoryManagement/viewHistory.vue |  32 ++---
 .../apps/linkis/module/globalValiable/index.vue    |  10 +-
 linkis-web/src/apps/linkis/module/header/index.vue |   2 +-
 .../src/apps/linkis/module/header/userMenu.vue     |   8 +-
 .../linkis/module/microServiceManagement/index.vue |  32 ++---
 .../module/resourceManagement/engineConn.vue       |  40 +++---
 .../linkis/module/resourceManagement/index.vue     |  62 ++++-----
 .../apps/linkis/module/resourceManagement/log.vue  |  10 +-
 .../src/apps/linkis/module/setting/setting.vue     | 100 +++++++--------
 linkis-web/src/apps/linkis/router.js               |   2 +-
 linkis-web/src/apps/linkis/view/linkis/index.vue   |  10 +-
 .../src/apps/scriptis/module/webSocket/index.js    |   9 +-
 linkis-web/src/common/config/const.js              |  18 +--
 linkis-web/src/common/config/db.js                 |   8 +-
 linkis-web/src/common/helper/elementResizeEvent.js |   8 +-
 linkis-web/src/common/helper/emitter.js            |   8 +-
 linkis-web/src/common/helper/eventbus.js           |  38 +++---
 linkis-web/src/common/helper/fesx.js               |  28 ++---
 linkis-web/src/common/i18n/index.js                |   8 +-
 linkis-web/src/common/service/api.js               |  40 +++---
 linkis-web/src/common/service/apiCache.js          |  18 +--
 linkis-web/src/common/service/db/index.js          |  10 +-
 linkis-web/src/common/service/execute.js           |  84 ++++++-------
 linkis-web/src/common/service/layoutMixin.js       |  14 +--
 linkis-web/src/common/service/mixin.js             |   8 +-
 linkis-web/src/common/service/moduleMixin.js       |  26 ++--
 linkis-web/src/common/service/socket.js            |   8 +-
 linkis-web/src/common/service/timeToCronMixin.js   |  18 +--
 linkis-web/src/common/util/convert.js              |  20 +--
 linkis-web/src/common/util/currentModules.js       |  10 +-
 linkis-web/src/common/util/debug.js                |  12 +-
 linkis-web/src/common/util/index.js                |   8 +-
 linkis-web/src/common/util/object.js               |  10 +-
 linkis-web/src/common/util/type.js                 |  24 ++--
 .../src/components/consoleComponent/console.vue    |  22 ++--
 .../src/components/consoleComponent/filter.vue     |   8 +-
 linkis-web/src/components/consoleComponent/log.vue |   4 +-
 .../src/components/consoleComponent/modal.js       |  24 ++--
 .../src/components/consoleComponent/progress.vue   |  12 +-
 .../src/components/consoleComponent/result.vue     |  40 +++---
 .../components/consoleComponent/resultsExport.vue  |  12 +-
 .../src/components/consoleComponent/steps.vue      |  30 ++---
 .../src/components/consoleComponent/toolbar.vue    |  10 +-
 linkis-web/src/components/editor/editor.vue        |  64 +++++-----
 linkis-web/src/components/editor/index.scss        |   8 +-
 linkis-web/src/components/editor/keyword/hql.js    |  10 +-
 linkis-web/src/components/editor/keyword/python.js |   8 +-
 linkis-web/src/components/editor/keyword/sas.js    |   8 +-
 linkis-web/src/components/editor/languages/hql.js  |   8 +-
 linkis-web/src/components/editor/languages/sas.js  |  10 +-
 linkis-web/src/components/editor/monaco-loader.js  |  12 +-
 linkis-web/src/components/editor/util.js           |  34 ++---
 linkis-web/src/components/log/index.vue            |  10 +-
 linkis-web/src/components/menu/index.vue           |   8 +-
 linkis-web/src/components/navbar/nav.js            |  16 +--
 linkis-web/src/components/navbar/navbar.vue        |   8 +-
 linkis-web/src/components/panel/panel.vue          |  14 +--
 linkis-web/src/components/table/table.vue          | 140 ++++++++++-----------
 .../src/components/tree/functionView/index.vue     |   8 +-
 linkis-web/src/components/tree/model/store.js      |   8 +-
 linkis-web/src/components/tree/node.vue            |  18 +--
 .../virtualTable/historyTable/historyTable.vue     |   4 +-
 .../components/virtualTable/resultTable/body.vue   |   8 +-
 .../components/virtualTable/resultTable/header.vue |   2 +-
 linkis-web/src/components/virtualTree/tree.vue     |  38 +++---
 linkis-web/src/dss/assets/styles/app.scss          |   6 +-
 linkis-web/src/dss/module/footer/index.vue         |  24 ++--
 linkis-web/src/dss/module/header/userMenu.vue      |   4 +-
 linkis-web/src/dss/module/index.js                 |  16 +--
 .../src/dss/module/resourceSimple/engine.vue       |  10 +-
 .../src/dss/module/resourceSimple/index.scss       |   8 +-
 linkis-web/src/dss/module/resourceSimple/job.vue   |  18 +--
 linkis-web/src/dss/module/resourceSimple/queue.vue |  16 +--
 linkis-web/src/dss/router.js                       |  18 +--
 linkis-web/src/dss/view/commonIframe/index.vue     |  10 +-
 linkis-web/src/dss/view/icon.vue                   |  10 +-
 linkis-web/src/dss/view/layout.vue                 |   2 +-
 linkis-web/src/dss/view/login/index.vue            |  12 +-
 linkis-web/src/dynamic-apps.js                     |  16 +--
 linkis-web/src/router.js                           |  12 +-
 90 files changed, 897 insertions(+), 900 deletions(-)

diff --git a/linkis-web/src/apps/URM/router.js b/linkis-web/src/apps/URM/router.js
index c8b6d639e..a47e51065 100644
--- a/linkis-web/src/apps/URM/router.js
+++ b/linkis-web/src/apps/URM/router.js
@@ -22,7 +22,7 @@ export const subAppRoutes = {
   redirect: '/urm',
   meta: {
     title: 'Linkis',
-    publicPage: true, // 权限公开
+    publicPage: true, // Permission disclosure(权限公开)
   },
   children: []
 }
diff --git a/linkis-web/src/apps/URM/view/urm/index.vue b/linkis-web/src/apps/URM/view/urm/index.vue
index 816e19a20..3d8224bd4 100644
--- a/linkis-web/src/apps/URM/view/urm/index.vue
+++ b/linkis-web/src/apps/URM/view/urm/index.vue
@@ -5,9 +5,9 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -40,7 +40,7 @@
               :title="item.name"
               :name="item.key"/>
           </CellGroup>
-          
+
         </Card>
       </div>
       <div
@@ -87,13 +87,13 @@ export default {
   },
 
   created() {
-    // 根据路径显示页面的标题
+    // Display the title of the page based on the path(根据路径显示页面的标题)
     this.sideNavList.children.forEach(element => {
       if(element.path === this.$route.path) {
         this.breadcrumbSecondName = element.name
       }
     });
-    // 获取是否是历史管理员权限
+    // Get whether it is a historical administrator(获取是否是历史管理员权限)
     api.fetch('/jobhistory/governanceStationAdmin', 'get').then((res) => {
       this.isLogAdmin = res.admin;
       storage.set('isLogAdmin',res.admin,'session');
diff --git a/linkis-web/src/apps/linkis/components/cardList/index.vue b/linkis-web/src/apps/linkis/components/cardList/index.vue
index 096a0f1db..1bd4a0d98 100644
--- a/linkis-web/src/apps/linkis/components/cardList/index.vue
+++ b/linkis-web/src/apps/linkis/components/cardList/index.vue
@@ -17,9 +17,9 @@
 
 <template>
   <div class="setListCard" >
-    <!-- 左切换 -->
+    <!-- switch left(左切换) -->
     <Icon class="switch" type="ios-arrow-back" @click="getLeft" />
-    <!-- 中间内容 -->
+    <!-- Intermediate content(中间内容) -->
     <div class="container" ref="row">
       <ul class="containerUl" :style="`transform: translateX(${moveNum}px);`">
         <li
@@ -39,17 +39,17 @@
             <div class="cardItemDesc">
               {{ item.description || $t("message.linkis.noDescription") }}
             </div>
-            <!-- TODO 待对接具体展示 -->
+            <!-- TODO To be connected to the specific display(待对接具体展示) -->
             <div>{{ item.tag || item.categoryName }}</div>
           </div>
-          <!-- 引擎编辑 -->
-          <i 
+          <!-- engine editor(引擎编辑) -->
+          <i
             class="material-icons edit"
             v-if="iseditListItem"
             @click="editListItem(index, item)"
             style="font-size: 14px">edit</i>
-          <!-- 引擎删除 -->
-          <i 
+          <!-- engine removal(引擎删除) -->
+          <i
             class="material-icons close"
             v-if="isdeleteListItem"
             @click="deleteListItem(index, item)"
@@ -61,7 +61,7 @@
         </li>
       </ul>
     </div>
-    <!-- 右切换 -->
+    <!-- switch right(右切换) -->
     <Icon class="switch" type="ios-arrow-forward" @click="getRight" />
   </div>
 </template>
@@ -70,22 +70,22 @@ import 'material-design-icons/iconfont/material-icons.css';
 export default {
   name: "cardList",
   props: {
-    // tab切换的标题
+    // title of tab switch(tab切换的标题)
     menuName: {
       type: String,
       default: "",
     },
-    // 中间显示list数据
+    // Display list data in the middle(中间显示list数据)
     categoryList: {
       type: Array,
       default: () => [],
     },
-    // 是否开启新增功能
+    // Whether to enable new features(是否开启新增功能)
     isOpenAdd: {
       type: Boolean,
       default: false,
     },
-    // 当前项及当前的高亮列表项
+    // The current item and the current highlighted list item(当前项及当前的高亮列表项)
     currentItem: {
       type: Number,
       default: 0,
@@ -94,12 +94,12 @@ export default {
       type: String,
       default: "",
     },
-    //是否开启引擎编辑功能
+    //Whether to enable the engine editing function(是否开启引擎编辑功能)
     iseditListItem: {
       type: Boolean,
       default: false,
     },
-    //是否开启引擎删除功能
+    //Whether to enable the engine deletion function(是否开启引擎删除功能)
     isdeleteListItem: {
       type: Boolean,
       default: false,
@@ -107,10 +107,10 @@ export default {
   },
   data() {
     return {
-      ulWidth: 0, // 列表容器长度
-      liWidthTotal: 0, // 列表总长
-      moveNum: 0, // 移动距离
-      currentIndex: 0, // 当前高亮
+      ulWidth: 0, // List container length(列表容器长度)
+      liWidthTotal: 0, // total length of the list(列表总长)
+      moveNum: 0, // Moving distance(移动距离)
+      currentIndex: 0, // currently highlighted(当前高亮)
     };
   },
   watch: {
@@ -123,25 +123,25 @@ export default {
   },
   mounted() {
     this.getRowWidth();
-    // 监听窗口变化
+    // Monitor window changes(监听窗口变化)
     window.addEventListener("resize", this.getRowWidth);
-    // 计算列表的总长度
+    // Calculate the total length of the list(计算列表的总长度)
     this.liWidthTotal = (this.categoryList.length + 1) * (225 + 20);
   },
   methods: {
-    // 获取ul的宽度
+    // Get the width of the ul(获取ul的宽度)
     getRowWidth() {
       this.ulWidth = this.$refs.row.offsetWidth;
       if (this.ulWidth >= this.liWidthTotal) this.moveNum = 0;
     },
-    // 点击左切换
+    // Click left to switch(点击左切换)
     getLeft() {
-      // 判断所有li总长度与ul的长度,并作出判断操作
-      // 如果ul长度小于li总长,则进行详细判断
+      // Determine the total length of all li and the length of ul, and make a judgment operation(判断所有li总长度与ul的长度,并作出判断操作)
+      // If the length of ul is less than the total length of li, make a detailed judgment(如果ul长度小于li总长,则进行详细判断)
       if (this.ulWidth < this.liWidthTotal) {
-        // 如果为负数则已经向左移动过
+        // If it is negative, it has moved to the left(如果为负数则已经向左移动过)
         if (this.moveNum < 0) {
-          // 如果偏移量小于li单个长度直接还原
+          // If the offset is less than a single length of li, restore directly(如果偏移量小于li单个长度直接还原)
           if (Math.abs(this.moveNum) <= 245) {
             this.moveNum = 0;
           } else {
@@ -149,20 +149,20 @@ export default {
           }
         }
       } else {
-        // 如果ul长度大于等于li总,则点击左右不做操作
+        // If the length of ul is greater than or equal to the total of li, click left and right to do nothing(如果ul长度大于等于li总,则点击左右不做操作)
         return;
       }
     },
-    // 点击右切换
+    // Click right to switch(点击右切换)
     getRight() {
-      // 判断所有li总长度与ul的长度,并作出判断操作
-      // 如果ul长度小于li总长,则进行详细判断
+      // Determine the total length of all li and the length of ul, and make a judgment operation(判断所有li总长度与ul的长度,并作出判断操作)
+      // If the length of ul is less than the total length of li, make a detailed judgment(如果ul长度小于li总长,则进行详细判断)
       this.getRowWidth()
       if (this.ulWidth < this.liWidthTotal) {
-        // 可移动数量
+        // movable quantity(可移动数量)
         let canMoveNum = this.liWidthTotal - this.ulWidth;
         if (Math.abs(this.moveNum) <= canMoveNum) {
-          // 如果偏移量大于可偏移长度直接为最大值
+          // If the offset is greater than the offset length, it is directly the maximum value(如果偏移量大于可偏移长度直接为最大值)
           let nextWidth = Math.abs(this.moveNum) + 245;
           if (nextWidth <= canMoveNum) {
             this.moveNum = this.moveNum - 245;
@@ -171,25 +171,25 @@ export default {
           }
         }
       } else {
-        // 如果ul长度大于等于li总,则点击左右不做操作
+        // If the length of ul is greater than or equal to the total of li, click left and right to do nothing(如果ul长度大于等于li总,则点击左右不做操作)
         return;
       }
     },
-    // 点击添加按钮
+    // Click the Add button(点击添加按钮)
     addList() {
       this.$emit("on-add");
     },
-    // 编辑
+    // edit(编辑)
     editListItem(index, item) {
       this.$emit("on-edit", index, item);
     },
-    // 删除
+    // delete(删除)
     deleteListItem(index, item) {
       this.$emit("on-delete", index, item);
     },
-    // 点击其中一项
+    // click one of the(点击其中一项)
     clickChangeItem(title, index, item) {
-      // 高亮
+      // highlight(高亮)
       this.currentIndex = index;
       this.$emit("on-click", title, index, item);
     },
diff --git a/linkis-web/src/apps/linkis/components/progress/index.vue b/linkis-web/src/apps/linkis/components/progress/index.vue
index c26cfcae0..e02d04170 100644
--- a/linkis-web/src/apps/linkis/components/progress/index.vue
+++ b/linkis-web/src/apps/linkis/components/progress/index.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div
     class="progress-content"
@@ -57,7 +57,7 @@ export default {
   },
   methods: {
     expandChange() {
-      // 返回父组件更改展开状态
+      // Returns the parent component to change the expanded state(返回父组件更改展开状态)
       if(!this.children) this.progressData.expand = !this.progressData.expand;
       this.$emit('expandChange', this.progressData, this.children, this.parentData)
     }
diff --git a/linkis-web/src/apps/linkis/components/tag/index.vue b/linkis-web/src/apps/linkis/components/tag/index.vue
index b242453ce..108353cf7 100644
--- a/linkis-web/src/apps/linkis/components/tag/index.vue
+++ b/linkis-web/src/apps/linkis/components/tag/index.vue
@@ -37,7 +37,7 @@
         @on-change="handleTagChange"
       >{{ item.key }}{{ item.key ? '-' : '' }}{{ item.value }}
       </Tag>
-      <!-- 编辑标签 -->
+      <!-- Edit tags(编辑标签) -->
       <div class="addAndCancel" v-else>
         <Input ref="editInputValue" :value="item.value" style="width: 200px" @on-enter="()=>exitTags(item)">
           <Select ref="editInputKey" :value="item.key"  disabled  slot="prepend" style="width: 80px">
@@ -62,7 +62,7 @@
 
 
 
-    <!-- 新增标签 -->
+    <!-- Add a label(新增标签) -->
     <div class="addAndCancel" v-if="adding">
       <Input v-model="value2" style="width: 200px" @on-enter="change">
         <Select v-model="value1" slot="prepend" style="width: 80px">
@@ -98,17 +98,17 @@
 export default {
   name: "ECMTag",
   props: {
-    // tag渲染列表数据
+    // tag rendering list data(tag渲染列表数据)
     tagList: {
       type: Array,
       default: () => [],
     },
-    // 默认的key值
+    // default key value(默认的key值)
     currentKey: {
       type: String,
       default: "http",
     },
-    // 可选的key值
+    // optional key value(可选的key值)
     selectList: {
       type: Array,
       default: () => [],
@@ -139,9 +139,9 @@ export default {
     change() {
       let reg = /[`~!#$%^&*()\+=<>?:"{}|~!#¥%……&*()={}|《》?:“”【】、;‘’,。、\s+]/g;
       if (reg.test(this.value2)) {
-        this.$Message.error("标签内容不能为特殊符号和空格!");
+        this.$Message.error("Label content cannot be special symbols and spaces(标签内容不能为特殊符号和空格)!");
       } else if (this.value2.length >= 16) {
-        this.$Message.error("标签内容长度不超过16!");
+        this.$Message.error("Tag content length not exceeding 16(标签内容长度不超过16)!");
       } else if (this.value1 && this.value2) {
         this.$emit("addEnter", this.value1, this.value2);
         this.adding = false;
@@ -151,12 +151,12 @@ export default {
     handleTagChange(cheacked, name) {
       this.adding = false;
       this.clickValue = name;
-      // input 聚焦
+      // input focus(input 聚焦)
       this.$nextTick(()=> {
         this.$refs.editInputValue[0].$refs.input.focus()
       })
     },
-    //编辑确认
+    //Edit confirmation(编辑确认)
     exitTags(item) {
       let editedInputValue = this.$refs.editInputValue[0].$refs.input.value;
       let reg = /[`~!#$%^&*()\+=<>?:"{}|~!#¥%……&*()={}|《》?:“”【】、;‘’,。、\s+]/g;
diff --git a/linkis-web/src/apps/linkis/module/ECM/engineConn.vue b/linkis-web/src/apps/linkis/module/ECM/engineConn.vue
index 3e0568888..e13e662a3 100644
--- a/linkis-web/src/apps/linkis/module/ECM/engineConn.vue
+++ b/linkis-web/src/apps/linkis/module/ECM/engineConn.vue
@@ -28,7 +28,7 @@
           <span>{{row.instance}}</span>
         </template>
         <template slot-scope="{row}" slot="usedResource">
-          <!-- 后台未做返回时的处理,下面几个可按照处理 -->
+          <!-- The background does not do the processing when returning, the following can be processed according to(后台未做返回时的处理,下面几个可按照处理) -->
           <span v-if="row.usedResource">{{`${calcCompany(row.usedResource.cores)}cores,${calcCompany(row.usedResource.memory, true)}G,${calcCompany(row.usedResource.instance)}apps`}}</span>
           <span v-else>Null cores,Null G</span>
         </template>
@@ -118,12 +118,12 @@ export default {
       },
       tagTitle: [],
       applicationList: {},
-      addTagForm: { // 新增标签的form表单
+      addTagForm: { // form with new label(新增标签的form表单)
         key: '',
         value: ''
       },
       isShowTable: false,
-      addTagFormRule: { // 验证规则
+      addTagFormRule: { // validation rules(验证规则)
         key: [
           { required: true, message: this.$t('message.linkis.keyTip'), trigger: 'blur' }
         ]
@@ -131,7 +131,7 @@ export default {
       tableData: [],
       allEngines: [],
       tableWidth: 0,
-      // 开启标签修改弹框
+      // Open the label modification popup(开启标签修改弹框)
       isTagEdit: false,
       page: {
         totalSize: 0,
@@ -244,7 +244,7 @@ export default {
                     let obj = {};
                     obj.instance = params.row.instance;
                     let labels = params.row.labels || [];
-                    // 将标签数据转换成组件可渲染格式
+                    // Convert label data to a component-renderable format(将标签数据转换成组件可渲染格式)
                     obj.labels = labels.map(item => {
                       return {
                         key: item.labelKey,
@@ -300,7 +300,7 @@ export default {
     ViewLog
   },
   computed: {
-    pageDatalist() {// 展示的数据
+    pageDatalist() {// Displayed data(展示的数据)
       return this.tableData.filter((item, index) => {
         return (this.page.pageNow - 1) * this.page.pageSize <= index && index < this.page.pageNow * this.page.pageSize;
       })
@@ -310,7 +310,7 @@ export default {
     this.applicationName = this.$route.query.applicationName || '';
     this.instance = this.$route.query.instance || '';
     this.initExpandList();
-    // 获取状态信息列表
+    // Get a list of status information(获取状态信息列表)
     this.getListAllNodeHealthyStatus();
     this.getSearchStatus();
     this.getKeyList();
@@ -341,13 +341,13 @@ export default {
     selctionChange(selection) {
       this.selection = selection
     },
-    // 刷新进度条
+    // refresh progress bar(刷新进度条)
     refreshResource() {
       this.initExpandList();
     },
-    // 初始化引擎列表
+    // Initialize the engine list(初始化引擎列表)
     async initExpandList() {
-      // 获取引擎数据
+      // Get engine data(获取引擎数据)
       this.loading = true;
       try {
         let params = {
@@ -359,7 +359,7 @@ export default {
           }
         }
         let engines = await api.fetch('/linkisManager/listEMEngines', params, 'post') || {};
-        // 获取使用的引擎资源列表
+        // Get a list of used engine resources(获取使用的引擎资源列表)
         let enginesList = engines.engines || [];
         this.allEngines = [ ...enginesList ];
         this.tableData = [ ...enginesList ];
@@ -379,7 +379,7 @@ export default {
         this.loading = false;
       }
     },
-    // 获取所有可修改的labelKey
+    // Get all modifiable labelKeys(获取所有可修改的labelKey)
     getKeyList() {
       api.fetch('/microservice/modifiableLabelKey', 'get').then((res) => {
         let list = res.keyList || [];
@@ -391,7 +391,7 @@ export default {
         })
       })
     },
-    // 获取所有可修改的状态信息
+    // Get all modifiable state information(获取所有可修改的状态信息)
     async getListAllNodeHealthyStatus() {
       try {
         let healthyStatusList = await api.fetch('/linkisManager/listAllECMHealthyStatus', { onlyEditable: true }, 'get') || {};
@@ -401,7 +401,7 @@ export default {
         console.log(err)
       }
     },
-    // 获取搜索的状态列表
+    // Get a list of states for a search(获取搜索的状态列表)
     async getSearchStatus() {
       try {
         let statusList = await api.fetch('/linkisManager/listAllNodeHealthyStatus', 'get') || {};
@@ -411,12 +411,12 @@ export default {
         console.log(err)
       }
     },
-    // 添加tag
+    // add tag(添加tag)
     addEnter (key, value) {
       this.formItem.labels.push({ key, value });
       
     },
-    // 修改标签
+    // Edit tags(修改标签)
     editEnter(editInputKey, editInputValue,editedInputValue) {
       let index = this.formItem.labels.findIndex((item)=>{
         return  item.value === editInputValue
@@ -425,11 +425,11 @@ export default {
     },
 
 
-    // 删除tag
+    //delete tag( 删除tag)
     onCloseTag (name, index) {
       this.formItem.labels.splice(index, 1);
     },
-    //  提交修改
+    //  Submit changes(提交修改)
     submitTagEdit() {
       let param = JSON.parse(JSON.stringify(this.formItem));
       param.labels = param.labels.map(item => {
@@ -441,21 +441,21 @@ export default {
       api.fetch('/linkisManager/modifyEngineInfo', param, 'put').then(() => {
         this.isTagEdit = false;
         this.$Message.success(this.$t('message.linkis.editedSuccess'));
-        this.refreshResource(); // 刷新
+        this.refreshResource(); // refresh(刷新)
       }).catch(() => {
         this.isTagEdit = false;
       })
     },
-    // 切换分页
+    // Toggle pagination(切换分页)
     change(val) {
       this.page.pageNow = val;
     },
-    // 页容量变化
+    // page size change(页容量变化)
     changeSize(val) {
       this.page.pageSize = val;
       this.page.pageNow = 1;
     },
-    // 搜索
+    // search(搜索)
     search(e) {
       let param = {
         em: {
@@ -476,7 +476,7 @@ export default {
       this.page.pageNow = 1;
       this.page.totalSize = this.tableData.length;
     },
-    // 时间格式转换
+    // time format conversion(时间格式转换)
     timeFormat(row) {
       return moment(new Date(row.startTime)).format('YYYY-MM-DD HH:mm:ss')
     },
@@ -502,7 +502,7 @@ export default {
   .ivu-table:before {
     height: 0
   }
-  
+
   .ivu-table:after {
     width: 0
   }
diff --git a/linkis-web/src/apps/linkis/module/ECM/index.vue b/linkis-web/src/apps/linkis/module/ECM/index.vue
index f9487bd38..858482c77 100644
--- a/linkis-web/src/apps/linkis/module/ECM/index.vue
+++ b/linkis-web/src/apps/linkis/module/ECM/index.vue
@@ -95,8 +95,8 @@ export default {
   data() {
     return {
       keyList: [],
-      statusList: [], // 可搜索的状态列表
-      healthyStatusList: [], // 可修改的状态列表
+      statusList: [], // Searchable Status List(可搜索的状态列表)
+      healthyStatusList: [], // Modifiable state list(可修改的状态列表)
       ownerList: [],
       loading: false,
       formItem: {
@@ -106,18 +106,18 @@ export default {
         applicationName: '',
       },
       tagTitle: [],
-      addTagForm: { // 新增标签的form表单
+      addTagForm: { // form with new label(新增标签的form表单)
         key: '',
         value: ''
       },
       isShowTable: false,
-      addTagFormRule: { // 验证规则
+      addTagFormRule: { // validation rules(验证规则)
         key: [
           { required: true, message: this.$t('message.linkis.keyTip'), trigger: 'blur' }
         ]
       },
       tableWidth: 0,
-      // 开启标签修改弹框
+      // Open the label modification popup(开启标签修改弹框)
       isTagEdit: false,
       tableData: [],
       page: {
@@ -128,54 +128,54 @@ export default {
       },
       columns: [
         {
-          title: this.$t('message.linkis.tableColumns.instanceName'), // 实例名称
+          title: this.$t('message.linkis.tableColumns.instanceName'), // instance name(实例名称)
           key: 'instance',
           minWidth: 150,
           className: 'table-project-column',
           slot: 'instance'
         },
         {
-          title: this.$t('message.linkis.tableColumns.status'), // 状态
+          title: this.$t('message.linkis.tableColumns.status'), // state(状态)
           key: 'nodeHealthy',
           minWidth: 100,
           className: 'table-project-column',
         },
         {
-          title: this.$t('message.linkis.tableColumns.label'), // 标签
+          title: this.$t('message.linkis.tableColumns.label'), // Label(标签)
           key: 'labels',
           minWidth: 160,
           className: 'table-project-column',
           slot: 'labels'
         },
         {
-          title: this.$t('message.linkis.tableColumns.usedResources'), // 已用资源
+          title: this.$t('message.linkis.tableColumns.usedResources'), // resource used(已用资源)
           key: 'usedResource',
           className: 'table-project-column',
           slot: 'usedResource',
           minWidth: 150,
         },
         {
-          title: this.$t('message.linkis.tableColumns.maximumAvailableResources'), // 最大可用资源
+          title: this.$t('message.linkis.tableColumns.maximumAvailableResources'), // maximum available resources(最大可用资源)
           key: 'maxResource',
           slot: 'maxResource',
           className: 'table-project-column',
           minWidth: 150,
         },
         {
-          title: this.$t('message.linkis.tableColumns.lockedResource'), // 最大可用资源
+          title: this.$t('message.linkis.tableColumns.lockedResource'), // maximum available resources(最大可用资源)
           key: 'lockedResource',
           slot: 'lockedResource',
           className: 'table-project-column',
           minWidth: 150,
         },
         {
-          title: this.$t('message.linkis.tableColumns.initiator'), // 启动者
+          title: this.$t('message.linkis.tableColumns.initiator'), // initiator(启动者)
           key: 'owner',
           className: 'table-project-column',
           minWidth: 150,
         },
         {
-          title: this.$t('message.linkis.tableColumns.startTime'), // 启用时间
+          title: this.$t('message.linkis.tableColumns.startTime'), // enable time(启用时间)
           key: 'startTime',
           className: 'table-project-column',
           slot: 'startTime',
@@ -200,7 +200,7 @@ export default {
                     let obj = {};
                     obj.instance = params.row.instance;
                     let labels = params.row.labels || [];
-                    // 将标签数据转换成组件可渲染格式
+                    // Convert label data to a component-renderable format(将标签数据转换成组件可渲染格式)
                     obj.labels = labels.map(item => {
                       return {
                         key: item.labelKey,
@@ -225,7 +225,7 @@ export default {
     WbTag
   },
   computed: {
-    pageDatalist() {// 展示的数据
+    pageDatalist() {// Displayed data(展示的数据)
       return this.tableData.filter((item, index) => {
         return (this.page.pageNow - 1) * this.page.pageSize <= index && index < this.page.pageNow * this.page.pageSize;
       })
@@ -245,24 +245,24 @@ export default {
   },
   created() {
     this.initECMList();
-    // 获取状态信息列表
+    // Get a list of status information(获取状态信息列表)
     this.getListAllNodeHealthyStatus();
     this.getSearchStatus();
     this.getKeyList();
   },
   methods: {
 
-    // 刷新数据
+    // refresh data(刷新数据)
     refreshResource() {
       this.initECMList();
     },
-    // 初始化ECM列表
+    // Initialize ECM list(初始化ECM列表)
     async initECMList() {
-      // 获取ECM实例数据
+      // Get ECM instance data(获取ECM实例数据)
       this.loading = true;
       try {
         let ECM = await api.fetch('/linkisManager/listAllEMs','get') || {};
-        // 获取使用的引擎资源列表
+        // Get a list of used engine resources(获取使用的引擎资源列表)
         let ECMList = ECM.EMs || [];
         this.tableData = ECMList;
         this.ownerList = [];
@@ -278,7 +278,7 @@ export default {
         this.loading = false;
       }
     },
-    // 获取所有可修改的labelKey
+    // Get all modifiable labelKeys(获取所有可修改的labelKey)
     getKeyList() {
       api.fetch('/microservice/modifiableLabelKey', 'get').then((res) => {
         let list = res.keyList || [];
@@ -290,7 +290,7 @@ export default {
         })
       })
     },
-    // 获取所有可修改的状态信息
+    // Get all modifiable state information(获取所有可修改的状态信息)
     async getListAllNodeHealthyStatus() {
       try {
         let healthyStatusList = await api.fetch('/linkisManager/listAllECMHealthyStatus', { onlyEditable: true }, 'get') || {};
@@ -301,7 +301,7 @@ export default {
         console.log(err)
       }
     },
-    // 获取搜索的状态列表
+    // Get a list of states for a search(获取搜索的状态列表)
     async getSearchStatus() {
       try {
         let statusList = await api.fetch('/linkisManager/listAllNodeHealthyStatus', 'get') || {};
@@ -311,12 +311,12 @@ export default {
         console.log(err)
       }
     },
-    // 添加tag
+    // add tag(添加tag)
     addEnter (key, value) {
       this.formItem.labels.push({ key, value });
     },
 
-    // 修改tag
+    // modify tag(修改tag)
     editEnter(editInputKey, editInputValue,editedInputValue) {
       let index = this.formItem.labels.findIndex((item)=>{
         return  item.value === editInputValue
@@ -324,12 +324,12 @@ export default {
       this.formItem.labels.splice(index,1,{key: editInputKey,modifiable: true,value: editedInputValue})
     },
 
-    // 删除tag
+    // delete tag(删除tag)
     onCloseTag (name, index) {
       this.formItem.labels.splice(index, 1);
     },
 
-    //  提交修改
+    //  Submit changes(提交修改)
     submitTagEdit() {
       let param = JSON.parse(JSON.stringify(this.formItem));
       param.labels = param.labels.map(item => {
@@ -341,21 +341,21 @@ export default {
       api.fetch('/linkisManager/modifyEMInfo', param, 'put').then(() => {
         this.isTagEdit = false;
         this.$Message.success(this.$t('message.linkis.editedSuccess'));
-        this.refreshResource(); // 刷新
+        this.refreshResource(); // refresh(刷新)
       }).catch(() => {
         this.isTagEdit = false;
       })
     },
-    // 切换分页
+    // Toggle pagination(切换分页)
     change(val) {
       this.page.pageNow = val;
     },
-    // 页容量变化
+    // page size change(页容量变化)
     changeSize(val) {
       this.page.pageSize = val;
       this.page.pageNow = 1;
     },
-    // 搜索
+    // search(搜索)
     search(e) {
       let param = {
         instance: e.instance,
@@ -370,11 +370,11 @@ export default {
       this.page.pageNow = 1;
       this.page.totalSize = this.tableData.length;
     },
-    // 跳转到引擎列表
+    // Jump to engine list(跳转到引擎列表)
     getEngineConnList(e) {
       this.$router.push({ name: 'EngineConnList', query: { instance: e.instance, applicationName: e.applicationName } })
     },
-    // 时间格式转换
+    // time format conversion(时间格式转换)
     timeFormat(row) {
       return moment(new Date(row.startTime)).format('YYYY-MM-DD HH:mm:ss')
     },
@@ -398,7 +398,7 @@ export default {
   .ivu-table:before {
     height: 0
   }
-  
+
   .ivu-table:after {
     width: 0
   }
@@ -408,4 +408,4 @@ export default {
     border: 1px solid #dcdee2;
   }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/linkis-web/src/apps/linkis/module/ECM/log.vue b/linkis-web/src/apps/linkis/module/ECM/log.vue
index 23e28b4f3..d7a54586c 100644
--- a/linkis-web/src/apps/linkis/module/ECM/log.vue
+++ b/linkis-web/src/apps/linkis/module/ECM/log.vue
@@ -5,9 +5,9 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -72,7 +72,7 @@ export default {
     elementResizeEvent.unbind(this.$el);
   },
   methods: {
-    // 切换分页
+    // Toggle pagination(切换分页)
     change(val) {
       this.page.pageNow = val;
       this.getLogs((val - 1) * this.page.pageSize)
@@ -94,7 +94,7 @@ export default {
         }
         let res = await api.fetch('/linkisManager/openEngineLog', params, 'post') || {};
         if (res && res.result) {
-          if (res.result.rows < 1000) { // 最后一页
+          if (res.result.rows < 1000) { // the last page(最后一页)
             this.page.totalSize = this.page.pageNow * 1000
           } else {
             this.page.totalSize = (this.page.pageNow + 1) * 1000
@@ -141,4 +141,4 @@ export default {
 .engine-log-page li.ivu-page-next {
   padding-left: 20px;
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/linkis-web/src/apps/linkis/module/datasource/index.vue b/linkis-web/src/apps/linkis/module/datasource/index.vue
index bc3843713..39e43b9ae 100644
--- a/linkis-web/src/apps/linkis/module/datasource/index.vue
+++ b/linkis-web/src/apps/linkis/module/datasource/index.vue
@@ -490,7 +490,7 @@ export default {
         for (let index = 0; index < this.currentVersionList.length; index++) {
           const element = this.currentVersionList[index]
           if (lastPulishIndex < index) {
-            //不能发布
+            //can't post(不能发布)
             element.status = 2
           } else {
             element.status = 0
@@ -575,7 +575,7 @@ export default {
           return false
         }
       }
-      // 否则全相等
+      // otherwise all equal(否则全相等)
       return true
     },
     onSubmit() {
@@ -592,7 +592,7 @@ export default {
         let postDataSource = createDataSource
         let commentMsg = this.$t('message.linkis.datasource.initVersion')
         if (!this.currentSourceData.id) {
-          //新增数据源
+          //Add data source(新增数据源)
           postDataSource = createDataSource
         } else {
           postDataSource = updateDataSource
@@ -602,8 +602,6 @@ export default {
         postDataSource(realFormData, this.currentSourceData.id)
           .then((data) => {
             this.loadingForm = false
-            // if(连接信息有变化)
-
             const sourceId = data.id || data.insertId || data.updateId
 
             console.log()
@@ -752,7 +750,7 @@ export default {
   .ivu-table:before {
     height: 0
   }
-  
+
   .ivu-table:after {
     width: 0
   }
@@ -763,4 +761,4 @@ export default {
     width: 100%;
   }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/linkis-web/src/apps/linkis/module/globalHistoryManagement/index.vue b/linkis-web/src/apps/linkis/module/globalHistoryManagement/index.vue
index b637d4201..8e64f668c 100644
--- a/linkis-web/src/apps/linkis/module/globalHistoryManagement/index.vue
+++ b/linkis-web/src/apps/linkis/module/globalHistoryManagement/index.vue
@@ -265,7 +265,7 @@ export default {
     }
   },
   created() {
-    // 获取是否是历史管理员权限
+    // Get whether it is a historical administrator(获取是否是历史管理员权限)
     api.fetch('/jobhistory/governanceStationAdmin', 'get').then(res => {
       this.isLogAdmin = res.admin
     })
@@ -276,11 +276,11 @@ export default {
   mounted() {
     this.init()
     this.moduleHeight = this.$parent.$el.clientHeight - 220
-    // 监听窗口变化,获取浏览器宽高
+    // Monitor window changes and get browser width and height(监听窗口变化,获取浏览器宽高)
     window.addEventListener('resize', this.getHeight)
   },
   beforeDestroy() {
-    // 监听窗口变化,获取浏览器宽高
+    // Monitor window changes and get browser width and height(监听窗口变化,获取浏览器宽高)
     storage.set('last-admin-model', this.isAdminModel)
     // storage.set('last-searchbar-status', this.searchBar)
     window.removeEventListener('resize', this.getHeight)
@@ -334,7 +334,7 @@ export default {
         'message.linkis.time.day'
       )}`
     },
-    // 点击查看历史详情日志和返回结果
+    // Click to view historical details log and return results(点击查看历史详情日志和返回结果)
     async viewHistory(params) {
       let sourceJson = params.row.sourceJson
       if (typeof sourceJson === 'string') {
@@ -362,7 +362,7 @@ export default {
       }
       storage.set('last-searchbar-status', this.searchBar)
       storage.set('last-pageSetting-status', this.pageSetting)
-      // 跳转查看历史详情页面
+      // Jump to view the history details page(跳转查看历史详情页面)
       this.$router.push({
         path: '/console/viewHistory',
         query
@@ -532,7 +532,7 @@ export default {
           key: 'executionCode',
           align: 'center',
           width: 440,
-          // 溢出以...显示
+          // overflow to show(溢出以...显示)
           ellipsis: true
           // renderType: 'tooltip',
         },
diff --git a/linkis-web/src/apps/linkis/module/globalHistoryManagement/viewHistory.vue b/linkis-web/src/apps/linkis/module/globalHistoryManagement/viewHistory.vue
index f7c828c77..b33a6b612 100644
--- a/linkis-web/src/apps/linkis/module/globalHistoryManagement/viewHistory.vue
+++ b/linkis-web/src/apps/linkis/module/globalHistoryManagement/viewHistory.vue
@@ -103,14 +103,14 @@ export default {
     this.scriptViewState.bottomContentHeight = node.clientHeight - 55
   },
   methods: {
-    // 点击tab时触发请求,log初始就请求了,不做判断
+    // The request is triggered when the tab is clicked, and the log is requested at the beginning, and no judgment is made.(点击tab时触发请求,log初始就请求了,不做判断)
     onClickTabs(name) {
       this.tabName = name
       if (name === 'result') {
-        // 判断是否为结果集
-        if (this.hasResultData) return // 判断是否已经获取过数据,获取过则直接返回
+        // Determine whether it is a result set(判断是否为结果集)
+        if (this.hasResultData) return // Determine whether the data has been obtained, and return directly if it is obtained(判断是否已经获取过数据,获取过则直接返回)
         if (this.jobhistoryTask && this.jobhistoryTask.resultLocation) {
-          // 判断是否有资源地址,如果没有则不发请求
+          //Determine if there is a resource address, if not, do not send a request(判断是否有资源地址,如果没有则不发请求)
           this.getResult(this.jobhistoryTask)
         } else {
           this.$Notice.warning({
@@ -148,9 +148,9 @@ export default {
               result = {
                 headRows: [],
                 bodyRows: [],
-                // 如果totalLine是null,就显示为0
+                // If totalLine is null, it will be displayed as 0(如果totalLine是null,就显示为0)
                 total: ret.totalLine ? ret.totalLine : 0,
-                // 如果内容为null,就显示暂无数据
+                // (If the content is null, it will display no data)如果内容为null,就显示暂无数据
                 type: ret.fileContent ? ret.type : 0,
                 path: resultPath,
                 current: 1,
@@ -161,9 +161,9 @@ export default {
               result = {
                 headRows: ret.metadata,
                 bodyRows: ret.fileContent,
-                // 如果totalLine是null,就显示为0
+                // If totalLine is null, it will be displayed as 0(如果totalLine是null,就显示为0)
                 total: ret.totalLine ? ret.totalLine : 0,
-                // 如果内容为null,就显示暂无数据
+                // If the content is null, it will display no data(如果内容为null,就显示暂无数据)
                 type: ret.fileContent ? ret.type : 0,
                 path: resultPath,
                 current: 1,
@@ -189,7 +189,7 @@ export default {
         cb()
       }
     },
-    // 将数组格式化成json形式。
+    // Format the array into json form.(将数组格式化成json形式。)
     openAnalysisTab(type) {
       this.visualShow = type
       if (type === 'visual') {
@@ -240,8 +240,8 @@ export default {
             }`,
             model,
             source: {
-              engineType: 'spark', //引擎类型
-              dataSourceType: 'resultset', //数据源类型,结果集、脚本、库表
+              engineType: 'spark', //engine type(引擎类型)
+              dataSourceType: 'resultset', //Data source types, result sets, scripts, library tables(数据源类型,结果集、脚本、库表)
               dataSourceContent: {
                 resultLocation: this.scriptResult.path
               },
@@ -275,7 +275,7 @@ export default {
         }
       }
     },
-    // 获取历史详情
+    // Get historical details(获取历史详情)
     async initHistory(jobId) {
       try {
         let jobhistory = await api.fetch(`/jobhistory/${jobId}/get`, 'get')
@@ -330,7 +330,7 @@ export default {
         this.isLoading = false
       }
     },
-    // 获取结果集内容
+    // Get result set content(获取结果集内容)
     async getResult(option) {
       this.isLoading = true
       try {
@@ -343,7 +343,7 @@ export default {
           'get'
         )
         if (rst.dirFileTrees) {
-          // 后台的结果集顺序是根据结果集名称按字符串排序的,展示时会出现结果集对应不上的问题,所以加上排序
+          // The order of the result set in the background is sorted by string according to the name of the result set. When displaying, there will be a problem that the result set cannot be matched, so add sorting(后台的结果集顺序是根据结果集名称按字符串排序的,展示时会出现结果集对应不上的问题,所以加上排序)
           let scriptResultList = rst.dirFileTrees.children.sort(
             (a, b) => parseInt(a.name, 10) - parseInt(b.name, 10)
           )
@@ -390,7 +390,7 @@ export default {
           }
           this.hasResultData = true
         } else {
-          // 没有返回则设置一个初始化数据
+          // If not returned, set an initialization data(没有返回则设置一个初始化数据)
           let tmpResult = {
             headRows: [],
             bodyRows: [],
@@ -410,7 +410,7 @@ export default {
         console.error(error)
       }
     },
-    // 返回上一页
+    // go back to the last page(返回上一页)
     back() {
       if (this.isLoading) {
         return this.$Message.warning(this.$t('message.linkis.logLoading'))
diff --git a/linkis-web/src/apps/linkis/module/globalValiable/index.vue b/linkis-web/src/apps/linkis/module/globalValiable/index.vue
index 27130ad01..6f2bdd379 100644
--- a/linkis-web/src/apps/linkis/module/globalValiable/index.vue
+++ b/linkis-web/src/apps/linkis/module/globalValiable/index.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div class="global-valiable">
     <Row class="global-valiable-control">
@@ -121,9 +121,9 @@ export default {
       isEdit: false,
       validateKey: (rule, value, callback) => {
         const prop = rule.field;
-        // 拿到当前编辑的item的index
+        // Get the index of the currently edited item(拿到当前编辑的item的index)
         const current = prop.slice(prop.indexOf('.') + 1, prop.lastIndexOf('.'));
-        // 必须当key相等,而且index不等的时候才是repeat
+        // It must be repeated when the keys are equal and the indexes are not equal(必须当key相等,而且index不等的时候才是repeat)
         const findRepeat = this.formDynamic.items.find((item, index) => {
           return item.key === value && current != index;
         });
diff --git a/linkis-web/src/apps/linkis/module/header/index.vue b/linkis-web/src/apps/linkis/module/header/index.vue
index 1d85a36cd..423ce81d5 100644
--- a/linkis-web/src/apps/linkis/module/header/index.vue
+++ b/linkis-web/src/apps/linkis/module/header/index.vue
@@ -112,7 +112,7 @@ export default {
       this.$router.push({path: '/console',query: Object.assign({}, this.$route.query)});
     },
     goRolesPath() {
-      // 根据接口getWorkspaceBaseInfo渲染跳转不同路径
+      // Rendering and jumping to different paths according to the interface getWorkspaceBaseInfo(根据接口getWorkspaceBaseInfo渲染跳转不同路径)
       this.$router.push({path: this.homeRoles.path, query: Object.assign({}, this.$route.query)});
     },
   }
diff --git a/linkis-web/src/apps/linkis/module/header/userMenu.vue b/linkis-web/src/apps/linkis/module/header/userMenu.vue
index c3ef76a2f..7e93ee0e6 100644
--- a/linkis-web/src/apps/linkis/module/header/userMenu.vue
+++ b/linkis-web/src/apps/linkis/module/header/userMenu.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <ul
     class="user-menu">
@@ -121,7 +121,7 @@ export default {
       });
     },
     changeLang() {
-      // 中文切换英文
+      // Chinese to English(中文切换英文)
       if (localStorage.getItem('locale') === 'zh-CN') {
         localStorage.setItem('locale', 'en');
       } else {
diff --git a/linkis-web/src/apps/linkis/module/microServiceManagement/index.vue b/linkis-web/src/apps/linkis/module/microServiceManagement/index.vue
index 75a7c237a..e85d3675b 100644
--- a/linkis-web/src/apps/linkis/module/microServiceManagement/index.vue
+++ b/linkis-web/src/apps/linkis/module/microServiceManagement/index.vue
@@ -46,7 +46,7 @@
         <Button class="search" type="primary" @click="searchAction">{{
           $t("message.linkis.find")
         }}</Button>
-        <!-- 跳转 -->
+        <!-- jump(跳转) -->
         <Button class="jump" type="primary" @click="handleTabsJump">{{ $t("message.linkis.eurekaRegisterCenter") }}</Button>
       </Col>
     </Row>
@@ -203,13 +203,13 @@ export default {
           minWidth: 80,
         },
       ],
-      tableData: [], // 用于展示的数据
-      allInstance: [], // 暂存的所有数据,用于做筛选
+      tableData: [], // data for presentation(用于展示的数据)
+      allInstance: [], // All data temporarily stored for filtering(暂存的所有数据,用于做筛选)
     };
   },
   computed: {
     pageDatalist() {
-      // 展示的数据
+      // Displayed data(展示的数据)
       return this.tableData.filter((item, index) => {
         return (
           (this.page.pageNow - 1) * this.page.pageSize <= index &&
@@ -223,7 +223,7 @@ export default {
     this.getAllInstance();
   },
   methods: {
-    // 获取所有可修改的labelKey
+    // Get all modifiable labelKeys(获取所有可修改的labelKey)
     getKeyList() {
       api.fetch("/microservice/modifiableLabelKey", "get").then((res) => {
         let list = res.keyList || [];
@@ -235,7 +235,7 @@ export default {
         });
       });
     },
-    // 获取所有的微服务
+    // Get all microservices(获取所有的微服务)
     getAllInstance() {
       this.loading = true;
       api.fetch("/microservice/allInstance", "get").then((res) => {
@@ -254,13 +254,13 @@ export default {
     searchAction() {
       this.search(this.instance, this.applicationName);
     },
-    //跳转到微服务
+    //Jump to Microservices(跳转到微服务)
     handleTabsJump() {
       api.fetch("/microservice/eurekaURL", "get").then((rst) => {
         window.open(rst.url, "_blank");
       });
     },
-    // 点击搜索 对数据进行筛选
+    // Click to search to filter the data(点击搜索 对数据进行筛选)
     search(instance="", applicationName="") {
       if (instance || applicationName) {
         this.tableData = this.allInstance.filter((item) => {
@@ -275,7 +275,7 @@ export default {
       this.page.pageNow = 1;
       this.page.totalSize = this.tableData.length;
     },
-    // 显示修改弹框并初始化数据
+    // Display the modification popup and initialize the data(显示修改弹框并初始化数据)
     modify(data) {
       this.modifyShow = true;
       this.modifyData.instance = data.instance;
@@ -288,7 +288,7 @@ export default {
       });
       this.modifyData.applicationName = data.applicationName;
     },
-    // 更新单个微服务实例的label信息
+    // Update the label information of a single microservice instance(更新单个微服务实例的label信息)
     modifyOk() {
       let param = JSON.parse(JSON.stringify(this.modifyData));
       param.labels = param.labels.map((item) => {
@@ -302,12 +302,12 @@ export default {
         this.getAllInstance();
       });
     },
-    // 添加tag
+    // add tag(添加tag)
     addEnter(key, value) {
       this.modifyData.labels.push({ key, value });
     },
 
-    // 修改标签
+    // Edit tags(修改标签)
     editEnter(editInputKey, editInputValue,editedInputValue) {
       let index = this.modifyData.labels.findIndex((item)=>{
         return  item.value === editInputValue && item.key === editInputKey
@@ -315,20 +315,20 @@ export default {
       this.modifyData.labels.splice(index,1,{key: editInputKey,modifiable: true,value: editedInputValue})
     },
 
-    // 删除tag
+    // delete tag(删除tag)
     onCloseTag(name, index) {
       this.modifyData.labels.splice(index, 1);
     },
-    // 切换分页
+    // Toggle pagination(切换分页)
     change(val) {
       this.page.pageNow = val;
     },
-    // 页容量变化
+    // page size change(页容量变化)
     changeSize(val) {
       this.page.pageSize = val;
       this.page.pageNow = 1;
     },
-    // 转换时间格式
+    // Convert time format(转换时间格式)
     dateFormatter(date) {
       return moment(date).format("YYYY-MM-DD HH:mm:ss");
     },
diff --git a/linkis-web/src/apps/linkis/module/resourceManagement/engineConn.vue b/linkis-web/src/apps/linkis/module/resourceManagement/engineConn.vue
index 40bdf0637..beceb44fc 100644
--- a/linkis-web/src/apps/linkis/module/resourceManagement/engineConn.vue
+++ b/linkis-web/src/apps/linkis/module/resourceManagement/engineConn.vue
@@ -28,7 +28,7 @@
           <span>{{row.serviceInstance ? row.serviceInstance : '-'}}</span>
         </template>
         <template slot-scope="{row}" slot="usedResource">
-          <!-- 后台未做返回时的处理,下面几个可按照处理 -->
+          <!-- The background does not do the processing when returning, the following can be processed according to(后台未做返回时的处理,下面几个可按照处理) -->
           <span v-if="row.usedResource">{{`${calcCompany(row.usedResource.cores)}cores,${calcCompany(row.usedResource.memory, true)}G,${calcCompany(row.usedResource.instance)}apps`}}</span>
           <span v-else>-</span>
         </template>
@@ -99,12 +99,12 @@ export default {
       },
       tagTitle: [],
       applicationList: {},
-      addTagForm: { // 新增标签的form表单
+      addTagForm: { // form with new label(新增标签的form表单)
         key: '',
         value: ''
       },
       isShowTable: false,
-      addTagFormRule: { // 验证规则
+      addTagFormRule: { // validation rules(验证规则)
         key: [
           { required: true, message: this.$t('message.linkis.keyTip'), trigger: 'blur' }
         ]
@@ -112,7 +112,7 @@ export default {
       tableData: [],
       allEngines: [],
       tableWidth: 0,
-      // 开启标签修改弹框
+      // Open the label modification popup(开启标签修改弹框)
       isTagEdit: false,
       page: {
         totalSize: 0,
@@ -220,7 +220,7 @@ export default {
   },
   created() {
     this.initExpandList();
-    // 获取状态信息列表
+    // Get a list of status information(获取状态信息列表)
     this.getListAllNodeHealthyStatus();
     this.getSearchStatus();
     this.getKeyList();
@@ -229,20 +229,20 @@ export default {
     selctionChange(selection) {
       this.selection = selection
     },
-    // 刷新进度条
+    // refresh progress bar(刷新进度条)
     refreshResource() {
       this.initExpandList();
     },
-    // 初始化引擎列表
+    // Initialize the engine list(初始化引擎列表)
     async initExpandList() {
-      // 获取引擎数据
+      // Get engine data(获取引擎数据)
       this.loading = true;
       try {
         let url = '/linkisManager/ecinfo/ecrHistoryList?';
         if (this.page.pageNow) url += `pageNow=${this.page.pageNow}&`
         if (this.page.pageSize) url += `pageSize=${this.page.pageSize}`
         let engines = await api.fetch(url, 'get') || {};
-        // 获取使用的引擎资源列表
+        // Get a list of used engine resources(获取使用的引擎资源列表)
         let enginesList = engines.engineList || [];
         this.page.totalSize = engines.totalPage ? engines.totalPage : enginesList.length;
         this.allEngines = [ ...enginesList ];
@@ -255,7 +255,7 @@ export default {
         this.loading = false;
       }
     },
-    // 获取所有可修改的labelKey
+    // Get all modifiable labelKeys(获取所有可修改的labelKey)
     getKeyList() {
       api.fetch('/microservice/modifiableLabelKey', 'get').then((res) => {
         let list = res.keyList || [];
@@ -267,7 +267,7 @@ export default {
         })
       })
     },
-    // 获取所有可修改的状态信息
+    // Get all modifiable state information(获取所有可修改的状态信息)
     async getListAllNodeHealthyStatus() {
       try {
         let healthyStatusList = await api.fetch('/linkisManager/listAllECMHealthyStatus', { onlyEditable: true }, 'get') || {};
@@ -277,7 +277,7 @@ export default {
         console.log(err)
       }
     },
-    // 获取搜索的状态列表
+    // Get a list of states for a search(获取搜索的状态列表)
     async getSearchStatus() {
       try {
         let statusList = await api.fetch('/linkisManager/listAllNodeHealthyStatus', 'get') || {};
@@ -287,12 +287,12 @@ export default {
         console.log(err)
       }
     },
-    // 添加tag
+    // add tag(添加tag)
     addEnter (key, value) {
       this.formItem.labelValue.push({ key, value });
 
     },
-    //  提交修改
+    //  Submit changes(提交修改)
     submitTagEdit() {
       let param = JSON.parse(JSON.stringify(this.formItem));
       param.instance = param.serviceInstance
@@ -314,18 +314,18 @@ export default {
         this.isTagEdit = false;
       })
     },
-    // 切换分页
+    // Toggle pagination(切换分页)
     change(val) {
       this.page.pageNow = val;
       this.$refs.search.search(true);
     },
-    // 页容量变化
+    // page size change(页容量变化)
     changeSize(val) {
       this.page.pageSize = val;
       this.page.pageNow = 1;
       this.$refs.search.search(true);
     },
-    // 搜索
+    // search(搜索)
     search(e) {
       let url = '/linkisManager/ecinfo/ecrHistoryList?';
       if (e.instance) url += `instance=${e.instance}&`
@@ -333,7 +333,7 @@ export default {
       if (e.shortcut[0]) url += `startDate=${moment(new Date(e.shortcut[0])).format('YYYY-MM-DD HH:mm:ss')}&`
       if (e.shortcut[1]) {
         if (moment(new Date(e.shortcut[1])).format('YYYY-MM-DD HH:mm:ss') === moment(new Date(e.shortcut[0])).format('YYYY-MM-DD HH:mm:ss')) {
-          // 如果起始时间选的是同一天,则endDate要加到第二天的零点
+          // If the start time is selected on the same day, the endDate will be added to the zero o'clock of the next day(如果起始时间选的是同一天,则endDate要加到第二天的零点)
           url += `endDate=${moment(new Date(e.shortcut[1]).getTime() + 24 * 60 * 60 * 1000).format('YYYY-MM-DD HH:mm:ss')}&`
         } else {
           url += `endDate=${moment(new Date(e.shortcut[1])).format('YYYY-MM-DD HH:mm:ss')}&`
@@ -347,7 +347,7 @@ export default {
         this.page.totalSize = res.totalPage ? res.totalPage : this.page.totalSize;
       })
     },
-    // 时间格式转换
+    // time format conversion(时间格式转换)
     timeFormat(row) {
       return moment(new Date(row.usedTime)).format('YYYY-MM-DD HH:mm:ss')
     },
@@ -373,7 +373,7 @@ export default {
   .ivu-table:before {
     height: 0
   }
-  
+
   .ivu-table:after {
     width: 0
   }
diff --git a/linkis-web/src/apps/linkis/module/resourceManagement/index.vue b/linkis-web/src/apps/linkis/module/resourceManagement/index.vue
index e813ad014..df39d6736 100644
--- a/linkis-web/src/apps/linkis/module/resourceManagement/index.vue
+++ b/linkis-web/src/apps/linkis/module/resourceManagement/index.vue
@@ -81,7 +81,7 @@
       </Form>
     </div>
     <div class="noData" v-if="!isAdminModel && progressDataList.length <= 0">No data, try refresh</div>
-    <!-- 进度条 -->
+    <!-- progress bar(进度条) -->
     <template v-if="!isAdminModel">
       <div v-for="item in progressDataList" :key="item.id">
         <WbProgress @expandChange="expandChange" :progressData="item">
@@ -92,12 +92,12 @@
       </div>
     </template>
 
-    <!-- 应用列表 -->
+    <!-- Application List(应用列表) -->
     <template v-if="isShowTable && !isAdminModel">
       <div class="resource-title appListTitle">
         {{$t('message.linkis.resourceManagement.applicationList')}}
       </div>
-      <!-- 应用列表标签 -->
+      <!-- App List Labels(应用列表标签) -->
       <div class="appListTag">
         <div class="tagName">
           <span class="span-white-space">{{$t('message.linkis.tableColumns.label')}}:</span>
@@ -194,7 +194,7 @@ export default {
       isChildren: false,
       stopList: [],
       loading: false,
-      isLogAdmin: false, //账户是否有管理员权限
+      isLogAdmin: false, //Does the account have administrator privileges?(账户是否有管理员权限)
       formItem: {
         instance: '',
         labels: [],
@@ -202,8 +202,8 @@ export default {
       },
       tagTitle: [],
       applicationList: {},
-      currentEngineData: {}, // 当前点击的引擎列表
-      currentParentsData: {}, // 当前点击的主引擎
+      currentEngineData: {}, // List of currently clicked engines(当前点击的引擎列表)
+      currentParentsData: {}, // The main engine of the current click(当前点击的主引擎)
       isShowTable: false,
       progressDataList: [],
       tableWidth: 0,
@@ -292,11 +292,11 @@ export default {
                       onOk: () => {
                         let data = [];
                         data.push({
-                          engineType: params.row.applicationName, // 当期需求是写死此参数
+                          engineType: params.row.applicationName,
                           engineInstance: params.row.instance,
                         });
                         api.fetch(`/linkisManager/rm/enginekill`, data).then(() => {
-                          // 由于引擎关闭有延迟所以记录引擎,做前端列表筛选,刷新页面或刷新
+                          // Since there is a delay in the shutdown of the engine, record the engine, do front-end list filtering, refresh the page or refresh(由于引擎关闭有延迟所以记录引擎,做前端列表筛选,刷新页面或刷新)
                           this.stopList.push(params.row.instance);
                           this.initExpandList();
                           this.$Message.success({
@@ -389,7 +389,7 @@ export default {
   computed: {
   },
   created() {
-    // 获取是否是历史管理员权限
+    // Get whether it is a historical administrator(获取是否是历史管理员权限)
     api.fetch('/jobhistory/governanceStationAdmin', 'get').then((res) => {
       this.isLogAdmin = res.admin;
       this.initExpandList();
@@ -401,12 +401,12 @@ export default {
 
   },
   methods: {
-    // 刷新进度条
+    // refresh progress bar(刷新进度条)
     refreshResource() {
-      this.stopList = []; // 初始化停止列表,由于引擎关闭有延迟固设置此参数做判断
+      this.stopList = []; // Initialize the stop list. Due to the delay of the engine shutdown, this parameter is set for judgment.(初始化停止列表,由于引擎关闭有延迟固设置此参数做判断)
       this.initExpandList();
     },
-    // 初始化主要数据
+    // Initialize main data(初始化主要数据)
     initData() {
       this.page = {
         totalSize: 0,
@@ -414,13 +414,13 @@ export default {
         pageSize: 15,
         pageNow: 1
       };
-      this.currentEngineData = {}; // 当前点击的引擎列表
-      this.currentParentsData = {}; // 当前点击的主引擎
+      this.currentEngineData = {}; // List of currently clicked engines(当前点击的引擎列表)
+      this.currentParentsData = {}; // The main engine of the current click(当前点击的主引擎)
       this.isShowTable = false;
       this.progressDataList = [];
       this.tableData = [];
     },
-    // 获取所有可修改的labelKey
+    // Get all modifiable labelKeys(获取所有可修改的labelKey)
     getKeyList() {
       api.fetch('/microservice/modifiableLabelKey', 'get').then((res) => {
         let list = res.keyList || [];
@@ -432,15 +432,15 @@ export default {
         })
       })
     },
-    // 初始化引擎列表
+    // Initialize the engine list(初始化引擎列表)
     async initExpandList() {
-      // 初始化数据
+      // Initialization data(初始化数据)
       this.initData();
-      // 获取引擎数据
+      // Get engine data(获取引擎数据)
       this.loading = true;
       try {
         let engines = await api.fetch('/linkisManager/rm/userresources','post') || {};
-        // 获取使用的引擎资源列表
+        // Get a list of used engine resources(获取使用的引擎资源列表)
         let enginesList = engines.userResources || [];
         enginesList.forEach((it, index) => {
           it.id = it.userCreator + index
@@ -464,18 +464,18 @@ export default {
         this.loading = false;
       }
     },
-    // 展开和关闭
+    // expand and close(展开和关闭)
     async expandChange(item, isChildren = false, parentData = {},) {
-      // 显示表格
+      // show table(显示表格)
       this.isShowTable = true;
       this.isChildren = isChildren;
-      // 如果点击的不为子列表则缓存下当前数据
-      // 如果两次点击同一元素则阻止
+      // If the click is not a sublist, the current data will be cached(如果点击的不为子列表则缓存下当前数据)
+      // Block if the same element is clicked twice(如果两次点击同一元素则阻止)
       if(item.id === this.currentEngineData.id) return;
       // if(item.id === this.currentParentsData.id && !isChildren) return;
       this.currentEngineData = item;
       this.loading = true;
-      // 资源标签显示
+      // Resource tab display(资源标签显示)
       this.tagTitle = [];
       if(!isChildren) {
         this.currentParentsData = item;
@@ -493,13 +493,13 @@ export default {
         let engineInstances = engines.applications[0].applicationList;
         this.applicationList = engineInstances || {};
         let tableData = engineInstances.engineInstances || [];
-        // 刷选是否有已经停止的引擎
+        // Check to see if there are any stopped engines(刷选是否有已经停止的引擎)
         if(this.stopList.length && tableData.length) tableData = tableData.map(item => {
           if(this.stopList.includes(item.instance)) item.isStop = true;
           return item;
         })
         this.tableData = tableData;
-        //更新formItem.applicationName 的数据
+        //Update the data of formItem.applicationName(更新formItem.applicationName 的数据)
         this.formItem.applicationName = this.tableData[0].engineType;
         this.page.totalSize = this.tableData.length;
       } catch (errorMsg) {
@@ -507,26 +507,26 @@ export default {
         this.loading = false;
       }
     },
-    // 添加tag
+    // add tag(添加tag)
     addEnter (key, value) {
       this.formItem.labels.push({ key, value });
     },
-    // 删除tag
+    // delete tag(删除tag)
     onCloseTag (name, index) {
       this.formItem.labels.splice(index, 1);
     },
-    // 切换分页
+    // Toggle pagination(切换分页)
     change(val) {
       this.page.pageNow = val;
       this.search();
     },
-    // 页容量变化
+    // page size change(页容量变化)
     changeSize(val) {
       this.page.pageSize = val;
       this.page.pageNow = 1;
       this.search();
     },
-    // 时间格式转换
+    // time format conversion(时间格式转换)
     timeFormat(row) {
       if (row.startTime.indexOf('CST') > 0) {
         return moment(new Date(row.startTime)).utc().subtract(6, 'hour').format('YYYY-MM-DD HH:mm:ss')
diff --git a/linkis-web/src/apps/linkis/module/resourceManagement/log.vue b/linkis-web/src/apps/linkis/module/resourceManagement/log.vue
index 0f0d499c8..acf96cbb4 100644
--- a/linkis-web/src/apps/linkis/module/resourceManagement/log.vue
+++ b/linkis-web/src/apps/linkis/module/resourceManagement/log.vue
@@ -5,9 +5,9 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -72,7 +72,7 @@ export default {
     elementResizeEvent.unbind(this.$el);
   },
   methods: {
-    // 切换分页
+    // Toggle pagination(切换分页)
     change(val) {
       this.page.pageNow = val;
       this.getLogs((val - 1) * this.page.pageSize)
@@ -96,7 +96,7 @@ export default {
         }
         let res = await api.fetch('/linkisManager/openEngineLog', params, 'post') || {};
         if (res && res.result) {
-          if (res.result.rows < 1000) { // 最后一页
+          if (res.result.rows < 1000) { // the last page(最后一页)
             this.page.totalSize = this.page.pageNow * 1000
           } else {
             this.page.totalSize = (this.page.pageNow + 1) * 1000
@@ -143,4 +143,4 @@ export default {
 .engine-log-page li.ivu-page-next {
   padding-left: 20px;
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/linkis-web/src/apps/linkis/module/setting/setting.vue b/linkis-web/src/apps/linkis/module/setting/setting.vue
index 72d9add53..9b7e4bceb 100644
--- a/linkis-web/src/apps/linkis/module/setting/setting.vue
+++ b/linkis-web/src/apps/linkis/module/setting/setting.vue
@@ -17,7 +17,7 @@
 
 <template>
   <div class="setting" style="height: 100%">
-    <!-- tab组件只做切换选择 -->
+    <!-- The tab component only does switch selection(tab组件只做切换选择) -->
     <Tabs
       class="tabs"
       v-model="currentTabName"
@@ -49,7 +49,7 @@
         >
         </cardList>
       </TabPane>
-      <!-- 应用编辑按钮 -->
+      <!-- Apply edit button(应用编辑按钮) -->
       <Button @click="handleTabsEdit" size="small" slot="extra" v-show="isLogAdmin" :class="{active:  iseditListItem || isdeleteListItem}">{{
         iseditListItem || isdeleteListItem ? $t("message.linkis.ConfirmEdit") : $t("message.linkis.editContents")
       }}</Button>
@@ -60,7 +60,7 @@
         $t("message.linkis.addEngineType")
       }}</Button>
     </Tabs>
-    <!-- 参数详情 -->
+    <!-- Parameter details(参数详情) -->
     <div v-if="fullTree && fullTree.length" class="setting-content">
       <div class="setting-content-header">
         <Button @click="toggleAdvance" :class="{active:isAdvancedShow}"
@@ -91,21 +91,21 @@
         />
       </div>
     </div>
-    <!-- 引擎描述修改 -->
+    <!-- Engine description modification(引擎描述修改) -->
     <Modal
       @on-ok="addEngineDesc"
       :title="$t('message.linkis.editDescriptionEngineConfig')"
       v-model="isEditChildCategory"
       :mask-closable="false"
     >
-      <!-- 引擎描述的编辑 -->
+      <!-- Editing of engine descriptions(引擎描述的编辑) -->
       <Form
         :label-width="90"
         ref="formValidate"
         :model="editEngineFromItem"
         :rules="ruleValidate"
       >
-        <!-- 新增引擎的名称 -->
+        <!-- Add the name of the engine(新增引擎的名称) -->
         <FormItem :label="`${$t('message.linkis.tableColumns.engineType')}:`">
           <Select v-model="editEngineFromItem.type" disabled>
             <Option :value="editEngineFromItem.type">{{
@@ -113,7 +113,7 @@
             }}</Option>
           </Select>
         </FormItem>
-        <!-- 引擎版本信息 -->
+        <!-- Engine version information(引擎版本信息) -->
         <FormItem
           class="addTagClass"
           :label="`${$t('message.linkis.tableColumns.engineVersion')}:`"
@@ -132,21 +132,21 @@
       </Form>
     </Modal>
 
-    <!-- 新增参数配置modal -->
+    <!-- Added parameter configuration modal(新增参数配置modal) -->
     <Modal
       @on-ok="addParameterSet"
       :title="$t('message.linkis.addParameterConfig')"
       v-model="isChildCategory"
       :mask-closable="false"
     >
-      <!-- 引擎描述的编辑 -->
+      <!-- Editing of engine descriptions(引擎描述的编辑) -->
       <Form
         :label-width="90"
         ref="formValidate"
         :model="childCategoryFormItem"
         :rules="ruleValidate"
       >
-        <!-- 新增引擎的名称 -->
+        <!-- Add the name of the engine(新增引擎的名称) -->
         <FormItem :label="`${$t('message.linkis.tableColumns.engineType')}:`">
           <Select v-model="childCategoryFormItem.type">
             <Option :value="item" v-for="item in engineType" :key="item.key">{{
@@ -154,7 +154,7 @@
             }}</Option>
           </Select>
         </FormItem>
-        <!-- 引擎版本信息 -->
+        <!-- Engine version information(引擎版本信息) -->
         <FormItem
           class="addTagClass"
           :label="`${$t('message.linkis.tableColumns.engineVersion')}:`"
@@ -172,7 +172,7 @@
         </FormItem>
       </Form>
     </Modal>
-    <!-- 新增应用类型modal -->
+    <!-- 新增应用类型modal(新增应用类型modal) -->
     <Modal
       @on-ok="addApptype"
       :title="$t('message.linkis.addAppType')"
@@ -210,22 +210,22 @@ export default {
   data() {
     return {
       menuList: [],
-      activeMenu: "", // 当前打开目录
+      activeMenu: "", // currently open directory(当前打开目录)
       currentTabName: "",
       fullTree: [],
-      engineType: [], //引擎类型数据
+      engineType: [], //engine type data(引擎类型数据)
       loading: false,
       unValidMsg: {},
       isAdvancedShow: false,
       isChildCategory: false,
-      isEditChildCategory: false, //编辑引擎的对话框
-      isAddApptype: false,  //新增应用的对话框
-      isTypeCard: false, //tab栏是否开启card类型
-      iseditListItem: false, //应用下的引擎编辑功能是否开启
-      isdeleteListItem: false, //应用下的引擎删除功能是否开启
-      isOpenAdd: false, //应用下的引擎添加功能是否开启
+      isEditChildCategory: false, //Dialog for editing the engine(编辑引擎的对话框)
+      isAddApptype: false,  //New application dialog(新增应用的对话框)
+      isTypeCard: false, //Whether the card type is enabled in the tab bar(tab栏是否开启card类型)
+      iseditListItem: false, //Whether the engine editing function under the application is enabled(应用下的引擎编辑功能是否开启)
+      isdeleteListItem: false, //应用下的引擎删除功能是否开启(应用下的引擎删除功能是否开启)
+      isOpenAdd: false, //Whether the engine addition function under the application is enabled(应用下的引擎添加功能是否开启)
       tabLeft: 0,
-      isLogAdmin: false,  //用户是否有管理员权限
+      isLogAdmin: false,  //Whether the user has administrator privileges(用户是否有管理员权限)
       childCategoryFormItem: {
         name: "",
         tagList: [],
@@ -262,7 +262,7 @@ export default {
 
   mounted() {
     this.subCategory = {}
-    // 获取设置目录
+    // get settings directory(获取设置目录)
     api.fetch("/configuration/getCategory", "get").then((rst) => {
       this.menuList = rst.Category || [];
       this.$nextTick(() => {
@@ -275,7 +275,7 @@ export default {
         }
       });
     });
-    //获取所有引擎类型
+    //Get all engine types(获取所有引擎类型)
     api.fetch("/configuration/engineType", "get").then((rst) => {
       this.engineType = rst.engineType;
     });
@@ -302,21 +302,21 @@ export default {
 
     getAppVariable(type = '') {
       this.activeMenu = type;
-      let parameter = type.split("-"); // 切割目录name
-      // 如果只有一级目录则直接返回['creator'],如果为二级目录则['creator', 'engineType', 'version']
+      let parameter = type.split("-"); // cut directory name(切割目录name)
+      // If there is only a first-level directory, it will directly return ['creator'], if it is a second-level directory, ['creator', 'engineType', 'version'](如果只有一级目录则直接返回['creator'],如果为二级目录则['creator', 'engineType', 'version'])
       api
         .fetch(
           "/configuration/getFullTreesByAppName",
           {
-            creator: parameter[0], // 指定一级目录
-            engineType: parameter[1], // 指定引擎(二级目录)如果只有一级目录则自动为undefined不会传参
-            version: parameter[2], // 对应的引擎目前只支持对应的版本,如spark就传version-2.4.3,如果只有一级目录则自动为undefined不会传参
+            creator: parameter[0], // Specify a first-level directory(指定一级目录)
+            engineType: parameter[1], // Specify the engine (secondary directory) if there is only a first-level directory, it will be automatically undefined and no parameters will be passed(指定引擎(二级目录)如果只有一级目录则自动为undefined不会传参)
+            version: parameter[2], // The corresponding engine currently only supports the corresponding version. For example, spark will pass version-2.4.3. If there is only a first-level directory, it will be automatically undefined and no parameters will be passed.(对应的引擎目前只支持对应的版本,如spark就传version-2.4.3,如果只有一级目录则自动为undefined不会传参)
           },
           "get"
         )
         .then((rst) => {
           this.loading = false;
-          //当前活动的tab 是否和点击的引擎同一个tab
+          //Whether the currently active tab is the same tab as the clicked engine(当前活动的tab 是否和点击的引擎同一个tab)
           this.fullTree = rst.fullTree;
           this.fullTree.forEach((item) => {
             item.settings = orderBy(item.settings, ["level"], ["asc"]);
@@ -435,15 +435,15 @@ export default {
     toggleAdvance() {
       this.isAdvancedShow = !this.isAdvancedShow;
     },
-    // tag切换触发
+    // tag switch trigger(tag切换触发)
     clickTabChange(name) {
       this.currentTabName = name;
-      // 初始化显示数据,筛选index
+      // Initialize display data, filter index(初始化显示数据,筛选index)
       let index = this.menuList.findIndex((item) => item.categoryName === name);
       if (index !== -1) {
         let menuListItem = this.menuList[index];
         let type = ''
-        // 判断是否存在子项,如果存在就进行拼接
+        // Determine whether there is a sub-item, and if it exists, splicing(判断是否存在子项,如果存在就进行拼接)
         if (menuListItem.childCategory && menuListItem.childCategory.length) {
           if (!this.subCategory[menuListItem.categoryName]) {
             this.subCategory[menuListItem.categoryName] = menuListItem.childCategory[0]
@@ -463,16 +463,16 @@ export default {
     addChildCategory() {
       this.isChildCategory = true;
     },
-    // 点击子项设置
+    // Click on sub item settings(点击子项设置)
     clickChildCategory(title, index, item) {
-      // 记录当前tab的子项显示,如果想缓存子项详情则改为getAppVariable内存储
+      // Record the display of the sub-items of the current tab. If you want to cache the details of the sub-items, store them in getAppVariable instead.(记录当前tab的子项显示,如果想缓存子项详情则改为getAppVariable内存储)
       this.subCategory[this.currentTabName]= {
         ...item,
         _subCategoryType: title
       };
       this.getAppVariable(title);
     },
-    //编辑引擎
+    //editing engine(编辑引擎)
     editChildCategory(index, item) {
       this.isEditChildCategory = true;
       this.editEngineFromItem.type = item.categoryName.split("-")[0];
@@ -481,7 +481,7 @@ export default {
       this.editEngineFromItem.categoryName =
         item.fatherCategoryName + "-" + item.categoryName;
     },
-    //编辑引擎提交
+    //Edit engine submission(编辑引擎提交)
     addEngineDesc() {
       let param = {
         description: this.editEngineFromItem.desc,
@@ -498,12 +498,12 @@ export default {
               item.description = this.editEngineFromItem.desc;
             }
           });
-          // this.getMenuList(); //调用getMenuList 重新渲染新增的menuList数据
+          // this.getMenuList(); //Call getMenuList to re-render the newly added menuList data(调用getMenuList 重新渲染新增的menuList数据)
           this.$Message.success(`修改描述成功`);
         });
     },
 
-    // 删除子项设置(删除应用下的引擎)
+    // Delete subitem settings (delete engine under application)(删除子项设置(删除应用下的引擎))
     async deleteChildCategory(index, item) {
       let confirm = await this.showConfirm(index, {
         content: '删除引擎将会删除该应用下此引擎的所有配置,且不可恢复(对所有用户生效)'
@@ -515,10 +515,10 @@ export default {
             { categoryId: item.categoryId },
             "post"
           )
-        this.getMenuList(); //调用getMenuList 重新渲染新增的menuList数据
+        this.getMenuList(); //Call getMenuList to re-render the newly added menuList data(调用getMenuList 重新渲染新增的menuList数据)
       }
     },
-    // 点击编辑目录 显示应用和引擎的删除按钮
+    // Click Edit Directory to display the Delete button for the application and engine(点击编辑目录 显示应用和引擎的删除按钮)
     handleTabsEdit() {
       this.isTypeCard = !this.isTypeCard;
       this.isdeleteListItem = !this.isdeleteListItem;
@@ -526,11 +526,11 @@ export default {
       this.isOpenAdd = !this.isOpenAdd;
     },
 
-    //删除目录应用
+    //delete directory application(删除目录应用)
     removeTab(name) {
-      //找到点击删除的tab 在menuList里的数据
+      //Find the data in the menuList of the tab you clicked to delete(找到点击删除的tab 在menuList里的数据)
       let menuItem = this.menuList.find((item) => item.categoryName === name);
-      //判断当前的活动tab是否和当前点击删除的tab一样
+      //Determine whether the current active tab is the same as the tab currently clicked to delete(判断当前的活动tab是否和当前点击删除的tab一样)
       if (this.currentTabName === name) {
         let ItemIndex = this.menuList.findIndex(
           (item) => item.categoryName === this.currentTabName
@@ -543,7 +543,7 @@ export default {
             "post"
           )
           .then(() => {
-            this.getMenuList(); //调用getMenuList 重新渲染新增的menuList数据
+            this.getMenuList(); //Call getMenuList to re-render the newly added menuList data(调用getMenuList 重新渲染新增的menuList数据)
             this.$Message.success(`删除${name}应用成功`);
           });
       } else {
@@ -554,7 +554,7 @@ export default {
             "post"
           )
           .then(() => {
-            this.getMenuList(); //调用getMenuList 重新渲染新增的menuList数据
+            this.getMenuList(); //Call getMenuList to re-render the newly added menuList data(调用getMenuList 重新渲染新增的menuList数据)
             this.$Message.success(`删除${name}应用成功`);
           });
       }
@@ -576,16 +576,16 @@ export default {
       })
     },
 
-    // 显示新增应用类型modal
+    // Display the new application type modal(显示新增应用类型modal)
     handleTabsAdd() {
       this.isAddApptype = true;
     },
     handleEngineAdd() {
       this.isChildCategory = true;
     },
-    // 新增引擎配置
+    // Add engine configuration(新增引擎配置)
     addParameterSet() {
-      /* 对输入的 引擎版本信息进行校验 */
+      /* Verify the entered engine version information(对输入的 引擎版本信息进行校验) */
       this.$refs.formValidate.validate((valid) => {
         if (valid) {
           const currentTab = this.menuList.find((item) => {
@@ -610,7 +610,7 @@ export default {
         }
       });
     },
-    // 新增应用类型
+    // Add application type(新增应用类型)
     addApptype() {
 
       api
@@ -623,7 +623,7 @@ export default {
           "post"
         )
         .then(() => {
-          this.getMenuList(); //调用getMenuList 重新渲染新增的menuList数据
+          this.getMenuList(); //Call getMenuList to re-render the newly added menuList data(调用getMenuList 重新渲染新增的menuList数据)
         });
 
     },
diff --git a/linkis-web/src/apps/linkis/router.js b/linkis-web/src/apps/linkis/router.js
index 91ff90ca5..ea6b7a10b 100644
--- a/linkis-web/src/apps/linkis/router.js
+++ b/linkis-web/src/apps/linkis/router.js
@@ -22,7 +22,7 @@ export const subAppRoutes = {
   redirect: '/console',
   meta: {
     title: 'Linkis',
-    publicPage: true, // 权限公开
+    publicPage: true, // Permission disclosure(权限公开)
   },
   children: []
 }
diff --git a/linkis-web/src/apps/linkis/view/linkis/index.vue b/linkis-web/src/apps/linkis/view/linkis/index.vue
index 2d10c3bcb..15d2d573c 100644
--- a/linkis-web/src/apps/linkis/view/linkis/index.vue
+++ b/linkis-web/src/apps/linkis/view/linkis/index.vue
@@ -168,19 +168,19 @@ export default {
       return path;
     },
     isEmbedInFrame() {
-      // 如果是被iframe引入时 top !== self 返回true,用来区分单独跑还是被引入
+      // If it is introduced by iframe top !== self returns true, used to distinguish between running alone or being introduced(如果是被iframe引入时 top !== self 返回true,用来区分单独跑还是被引入)
       return top !== self;
     }
   },
 
   created() {
-    // 根据路径显示页面的标题
+    // Display the title of the page based on the path(根据路径显示页面的标题)
     this.sideNavList.children.forEach(element => {
       if(element.path === this.$route.path) {
         this.breadcrumbSecondName = element.name
       }
     });
-    // 获取是否是历史管理员权限
+    // Get whether it is a historical administrator(获取是否是历史管理员权限)
     api.fetch('/jobhistory/governanceStationAdmin', 'get').then((res) => {
       this.isLogAdmin = res.admin;
       storage.set('isLogAdmin',res.admin,'session');
@@ -200,7 +200,7 @@ export default {
         this.sideNavList.children[8].showSubMenu = !this.sideNavList.children[8].showSubMenu;
         return;
       }
-      index = index.split('-')[0] + '-' + index.split('-')[1]; //防止出现三级菜单
+      index = index.split('-')[0] + '-' + index.split('-')[1]; //Prevent tertiary menus from appearing(防止出现三级菜单)
       const activedCellParent = this.sideNavList;
       this.crrentItem = index;
       const activedCell = activedCellParent.children.find((item) => item.key === index);
@@ -240,7 +240,7 @@ export default {
       });
     } else if ((to.name === 'Console' && from.name === 'Home') || (to.name === 'Console' && from.name === 'Project') || (to.name === 'Console' && from.name === 'Workflow') || !from.name) {
       const lastActiveConsole = storage.get('lastActiveConsole');
-      // 如果为历史详情则直接刷新
+      // If it is historical details, refresh directly(如果为历史详情则直接刷新)
       if(to.name === 'viewHistory') return next();
       next((vm) => {
         if (lastActiveConsole) {
diff --git a/linkis-web/src/apps/scriptis/module/webSocket/index.js b/linkis-web/src/apps/scriptis/module/webSocket/index.js
index ae7e15d3f..ce69880f0 100644
--- a/linkis-web/src/apps/scriptis/module/webSocket/index.js
+++ b/linkis-web/src/apps/scriptis/module/webSocket/index.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 // a web app only has a socket
 import Socket from '@/common/service/socket';
@@ -61,7 +61,6 @@ const module = {
         } else {
           manager.retryCounter = 3;
         }
-        // window.$Wa.log(`错误码${e.code},close事件`);
       });
       manager.socket.on('data', (data) => {
         module.dispatch('Workbench:socket', {
@@ -140,6 +139,6 @@ const module = {
   },
 }
 ;
-// 先关socket全局注册
+// Close the socket first and register(先关socket全局注册)
 // export default module;
 export default { name: 'WebSocket' }
diff --git a/linkis-web/src/common/config/const.js b/linkis-web/src/common/config/const.js
index c2fb439ac..f96842bf1 100644
--- a/linkis-web/src/common/config/const.js
+++ b/linkis-web/src/common/config/const.js
@@ -5,24 +5,24 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 const DEVPROCESS = {
-  DEVELOPMENTCENTER: 'dev',// 开发中心
-  PRODUCTCENTER: 'prod'// 生产中心
+  DEVELOPMENTCENTER: 'dev',// Develop center(开发中心)
+  PRODUCTCENTER: 'prod'// Production center(生产中心)
 }
 
 const ORCHESTRATORMODES = {
-  WORKFLOW: 'pom_work_flow',// 工作流编排
-  SINGLETASK: 'pom_single_task',// 单任务编排
-  CONSTSTORCHESTRATOR: 'pom_consist_orchestrator'// 组合编排
+  WORKFLOW: 'pom_work_flow',// Workflow Orchestration(工作流编排)
+  SINGLETASK: 'pom_single_task',// single task scheduling(单任务编排)
+  CONSTSTORCHESTRATOR: 'pom_consist_orchestrator'// Combination arrangement(组合编排)
 }
-export { DEVPROCESS, ORCHESTRATORMODES }
\ No newline at end of file
+export { DEVPROCESS, ORCHESTRATORMODES }
diff --git a/linkis-web/src/common/config/db.js b/linkis-web/src/common/config/db.js
index 5816fe02a..aab67d7d8 100644
--- a/linkis-web/src/common/config/db.js
+++ b/linkis-web/src/common/config/db.js
@@ -5,18 +5,18 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
 
-// 各应用需要建什么表在这里添加
+
+// What table needs to be built for each application add here(各应用需要建什么表在这里添加)
 export const config = {
   'version': 4,
   'stores': {
diff --git a/linkis-web/src/common/helper/elementResizeEvent.js b/linkis-web/src/common/helper/elementResizeEvent.js
index b10e0a7b0..f9f33e6da 100644
--- a/linkis-web/src/common/helper/elementResizeEvent.js
+++ b/linkis-web/src/common/helper/elementResizeEvent.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 let requestFrame = (function() {
   let raf = window.requestAnimationFrame ||
@@ -39,7 +39,7 @@ let cancelFrame = (function() {
 })();
 
 /**
- * 监听大小改变
+ *Monitor size changes(监听大小改变)
  * @param {*} e
  */
 function resizeListener(e) {
diff --git a/linkis-web/src/common/helper/emitter.js b/linkis-web/src/common/helper/emitter.js
index 5307e1013..aaf285b6e 100644
--- a/linkis-web/src/common/helper/emitter.js
+++ b/linkis-web/src/common/helper/emitter.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 /**
  * brocast event to component
@@ -29,7 +29,7 @@ function broadcast(componentName, eventName, params) {
     if (name === componentName) {
       child.$emit(...[eventName].concat(params));
     } else {
-      // todo 如果 params 是空数组,接收到的会是 undefined
+      // todo if params is an empty array, it will be undefined(todo 如果 params 是空数组,接收到的会是 undefined)
       broadcast.apply(child, [componentName, eventName].concat([params]));
     }
   });
diff --git a/linkis-web/src/common/helper/eventbus.js b/linkis-web/src/common/helper/eventbus.js
index b8d0c726f..cbb2dc13b 100644
--- a/linkis-web/src/common/helper/eventbus.js
+++ b/linkis-web/src/common/helper/eventbus.js
@@ -5,32 +5,32 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 /**
  *  事件bus
  */
 class Eventbus {
   /**
-     * 构造器
+     * Constructor(构造器)
      */
   constructor() {
     this.storage = {};
   }
 
   /**
-     * 
-     * @param {*} arr 
-     * @param {*} x 
+     *
+     * @param {*} arr
+     * @param {*} x
      * @return {Object}
      */
   findIndex(arr, x) {
@@ -38,9 +38,9 @@ class Eventbus {
   }
 
   /**
-     * 注册事件
-     * @param {*} name 
-     * @param {*} fn 
+     * Registration issue(注册事件)
+     * @param {*} name
+     * @param {*} fn
      * @return {undefined}
      */
   on(name, fn) {
@@ -52,9 +52,9 @@ class Eventbus {
   }
 
   /**
-    * 删除事件
-    * @param {*} name 
-    * @param {*} fn 
+    * delete event(删除事件)
+    * @param {*} name
+    * @param {*} fn
     * @return {undefined}
     */
   off(name, fn) {
@@ -65,8 +65,8 @@ class Eventbus {
   }
 
   /**
-     * 清空指定name的所有事件
-     * @param {*} name 
+     * Clear all events of the specified name(清空指定name的所有事件)
+     * @param {*} name
      * @return {Object}
      */
   clear(name) {
@@ -79,10 +79,10 @@ class Eventbus {
   }
 
   /**
-     * 触发事件
-     * @param {*} name 
-     * @param {*} payload  参数
-     * @param {*} cb      回调函数 
+     * trigger event(触发事件)
+     * @param {*} name
+     * @param {*} payload  parameter(参数)
+     * @param {*} cb     Callback( 回调函数)
      * @return {undefined}
      */
   emit(name, payload, cb) {
diff --git a/linkis-web/src/common/helper/fesx.js b/linkis-web/src/common/helper/fesx.js
index aa053b6f3..d8d697d9f 100644
--- a/linkis-web/src/common/helper/fesx.js
+++ b/linkis-web/src/common/helper/fesx.js
@@ -5,19 +5,19 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 /**
- * 全局状态管理
+ * global state management(全局状态管理)
  */
 import Vue from 'vue';
 import util from '../util';
@@ -25,13 +25,13 @@ import util from '../util';
 // import util from '../util';
 
 /**
- * 状态管理容器
+ * state management container(状态管理容器)
  */
 class Fesx {
   /**
-     * 构造器
-     * @param {*} name 
-     * @param {Object} data 
+     * Constructor(构造器)
+     * @param {*} name
+     * @param {Object} data
      */
   constructor(name, data) {
     Object.defineProperty(this, 'name', {
@@ -59,8 +59,8 @@ class Fesx {
     // }
   }
   /**
-     * 根据prop拿到对应的状态
-     * @param {*} prop 
+     * Get the corresponding state according to the prop(根据prop拿到对应的状态)
+     * @param {*} prop
      * @return {*}
      */
   get(prop) {
@@ -70,9 +70,9 @@ class Fesx {
     return this[prop];
   }
   /**
-     * 根据prop拿到对应的状态
-     * @param {*} prop 
-     * @param {*} value 
+     * Get the corresponding state according to the prop(根据prop拿到对应的状态)
+     * @param {*} prop
+     * @param {*} value
      * @return {*}
      */
   set(prop, value) {
@@ -83,7 +83,7 @@ class Fesx {
     return this;
   }
   /**
-     * 清空当前容器
+     * empty the current container(清空当前容器)
      */
   clear() {
     for (let p in this) {
diff --git a/linkis-web/src/common/i18n/index.js b/linkis-web/src/common/i18n/index.js
index 30689837e..9c9cef063 100644
--- a/linkis-web/src/common/i18n/index.js
+++ b/linkis-web/src/common/i18n/index.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 import Vue from 'vue';
 import VueI18n from 'vue-i18n'
@@ -22,7 +22,7 @@ import en from 'iview/dist/locale/en-US'
 import zh from 'iview/dist/locale/zh-CN'
 import { i18n } from '../../dynamic-apps'
 Vue.use(VueI18n);
-// 先判断是否有设置语言,没有就用本地语言
+// First determine whether there is a set language, if not, use the local language(先判断是否有设置语言,没有就用本地语言)
 if (localStorage.getItem('locale')) {
   Vue.config.lang = localStorage.getItem('locale');
 } else {
diff --git a/linkis-web/src/common/service/api.js b/linkis-web/src/common/service/api.js
index d0692edea..ae827ae21 100644
--- a/linkis-web/src/common/service/api.js
+++ b/linkis-web/src/common/service/api.js
@@ -5,19 +5,19 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 /**
- * 操作Api
+ * Manipulate APIs(操作Api)
  */
 import util from '@/common/util';
 import axios from 'axios';
@@ -25,17 +25,17 @@ import router from '@/router';
 import { Message } from 'iview';
 import cache from './apiCache';
 
-// 什么一个数组用于存储每个请求的取消函数和标识
+// what an array is used to store the cancel function and id for each request(什么一个数组用于存储每个请求的取消函数和标识)
 let pending = [];
 let cancelConfig = null;
 let CancelToken = axios.CancelToken;
 let removePending = (config) => {
   for (let p = 0; p < pending.length; p++) {
     const params = JSON.stringify(config.params);
-    // 如果存在则执行取消操作
+    // Cancel if it exists(如果存在则执行取消操作)
     if (pending[p].u === config.url + '&' + config.method + '&' + params) {
-      // pending[p].f();// 执行取消操作
-      pending.splice(p, 1);// 移除记录
+      // pending[p].f();// perform cancellation(执行取消操作)
+      pending.splice(p, 1);// remove record(移除记录)
     }
   }
 };
@@ -57,19 +57,19 @@ const instance = axios.create({
 });
 
 instance.interceptors.request.use((config) => {
-  // 增加国际化参数
+  // Add internationalization parameters(增加国际化参数)
   config.headers['Content-language'] = localStorage.getItem('locale') || 'zh-CN';
   let flag = cutReq(config);
-  // 当上一次相同请求未完成时,无法进行第二次相同请求
+  // The second same request cannot be made when the last same request is not completed(当上一次相同请求未完成时,无法进行第二次相同请求)
   if (flag === true) {
     removePending(config);
     return config;
   } else {
     const params = JSON.stringify(config.params);
-    // 用于正常请求出现错误时移除
+    // It is used to remove when there is an error in the normal request(用于正常请求出现错误时移除)
     cancelConfig = config;
     config.cancelToken = new CancelToken((c) => {
-      // 添加标识和取消函数
+      // Add identity and cancel functions(添加标识和取消函数)
       pending.push({
         u: config.url + '&' + config.method + '&' + params,
         f: c,
@@ -82,23 +82,23 @@ instance.interceptors.request.use((config) => {
 });
 
 instance.interceptors.response.use((response) => {
-  // 在一个ajax响应成功后再执行取消操作,把已完成的请求从pending中移除
+  // Perform the cancellation operation after an ajax response is successful, and remove the completed request from the pending(在一个ajax响应成功后再执行取消操作,把已完成的请求从pending中移除)
   removePending(response.config);
   return response;
 }, (error) => {
-  // 出现接口异常或者超时时的判断
+  // Judgment when an interface exception or timeout occurs(出现接口异常或者超时时的判断)
   if ((error.message && error.message.indexOf('timeout') >= 0) || (error.request && error.request.status !== 200)) {
     for (let p in pending) {
       if (pending[p].u === cancelConfig.url + '&' + cancelConfig.method + '&' + JSON.stringify(cancelConfig.params)) {
-        pending.splice(p, 1);// 移除记录
+        pending.splice(p, 1);// remove record(移除记录)
       }
     }
-    // 优先返回后台返回的错误信息,其次是接口返回
+    // The error information returned by the background is returned first, followed by the interface return(优先返回后台返回的错误信息,其次是接口返回)
     return error.response || error;
   } else if (axios.Cancel) {
-    // 如果是pengding状态,弹出提示!
+    // If it is in pengding state, a prompt will pop up!(如果是pengding状态,弹出提示!)
     return {
-      // data: { message: '接口请求中!请稍后……' },
+      // data: { message: 'Interface requesting! please wait……' }(data: { message: '接口请求中!请稍后……' })
     };
   } else {
     return error;
@@ -183,7 +183,7 @@ const success = function(response) {
         console.log(response.data, '潜在性能问题大数据量', len)
       }
     }
-    
+
     return result || {};
   }
 };
@@ -251,7 +251,7 @@ const param = function(url, data, option) {
       option.data = data;
     }
   }
-  // cacheOptions接口数据缓存 {time} time为0则请求之后缓存在内存里的数据不清理 
+  // cacheOptions interface data cache {time} When the time is 0, the data cached in the memory will not be cleaned up after the request(cacheOptions接口数据缓存 {time} time为0则请求之后缓存在内存里的数据不清理)
   if (option.cacheOptions) {
     option.adapter = cache(option.cacheOptions)
   }
diff --git a/linkis-web/src/common/service/apiCache.js b/linkis-web/src/common/service/apiCache.js
index 48f5faaf5..5cac6f177 100644
--- a/linkis-web/src/common/service/apiCache.js
+++ b/linkis-web/src/common/service/apiCache.js
@@ -5,19 +5,19 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 import axios from 'axios'
 
-// 数据存储
+// data storage(数据存储)
 export const cache = {
   data: {},
   set(key, data) {
@@ -31,7 +31,7 @@ export const cache = {
   }
 }
 
-// 建立唯一的key值
+// Create a unique key value(建立唯一的key值)
 export const buildUniqueUrl = (url, method, params = {}, data = {}) => {
   const paramStr = (obj) => {
     if (toString.call(obj) === '[object Object]') {
@@ -47,10 +47,10 @@ export const buildUniqueUrl = (url, method, params = {}, data = {}) => {
   return url
 }
 
-// 防止重复请求
+// prevent duplicate requests(防止重复请求)
 export default (options = {}) => async config => {
   const defaultOptions = {
-    time: 0, // 设置为0,不清除缓存
+    time: 0, // Set to 0, do not clear the cache(设置为0,不清除缓存)
     ...options
   }
   const index = buildUniqueUrl(config.url, config.method, config.params, config.data)
@@ -72,5 +72,5 @@ export default (options = {}) => async config => {
       }, defaultOptions.time)
     }
   }
-  return responsePromise.then(data => JSON.parse(JSON.stringify(data))) // 为防止数据源污染
-}
\ No newline at end of file
+  return responsePromise.then(data => JSON.parse(JSON.stringify(data))) // To prevent data source pollution(为防止数据源污染)
+}
diff --git a/linkis-web/src/common/service/db/index.js b/linkis-web/src/common/service/db/index.js
index 7e3535ea8..04bc715d5 100644
--- a/linkis-web/src/common/service/db/index.js
+++ b/linkis-web/src/common/service/db/index.js
@@ -5,22 +5,22 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 import DB from '@/common/helper/db.js';
 import { config } from '@/common/config/db.js';
-// 更新schema请用db.updateVersion(stores, version)
+// To update the schema please use db.updateVersion(stores, version)(更新schema请用db.updateVersion(stores, version))
 const db = new DB('bdp-ide', config.stores, config.version);
-// 更改主键要先删掉原来的store才能更新,其他非主键修改直接调用updateVersion
+// To change the primary key, you must delete the original store before it can be updated. For other non-primary key modifications, call updateVersion directly.(更改主键要先删掉原来的store才能更新,其他非主键修改直接调用updateVersion)
 // db.updateVersion(Object.assign({}, config.stores), config.version + 1);
 /**
  * @class basic
diff --git a/linkis-web/src/common/service/execute.js b/linkis-web/src/common/service/execute.js
index 8e7ec4d2b..53837edee 100644
--- a/linkis-web/src/common/service/execute.js
+++ b/linkis-web/src/common/service/execute.js
@@ -25,12 +25,12 @@ import { Message } from 'iview';
 import i18n from '@/common/i18n'
 
 /**
- * 提供脚本运行相关方法,包括执行方法,状态轮询,日志接收,获取结果等
- * * 1.默认使用socket方式通信,若socket连接失败则使用http方式
- * * 2.点击执行调用start方法,收到taskID后进入执行中状态
- * * 3.执行中任务关闭脚本tab,重新打开时需要恢复状态
- * * 4.执行中任务socket降级http之后调用queryStatus轮询进度,日志
- * ! 5.本方法是script执行、工作流节点执行时复用的公共方法
+ * Provide script running related methods, including execution methods, status polling, log reception, and obtaining results, etc.(提供脚本运行相关方法,包括执行方法,状态轮询,日志接收,获取结果等)
+ * * 1. By default, socket communication is used. If the socket connection fails, the http method is used.(默认使用socket方式通信,若socket连接失败则使用http方式)
+ * * 2. Click Execute to call the start method, and enter the executing state after receiving the taskID(点击执行调用start方法,收到taskID后进入执行中状态)
+ * * 3.The task in execution closes the script tab, and needs to restore the state when reopening(执行中任务关闭脚本tab,重新打开时需要恢复状态)
+ * * 4.After the task socket is downgraded to http, call queryStatus to poll the progress, log(执行中任务socket降级http之后调用queryStatus轮询进度,日志)
+ * ! 5.This method is a public method that is reused during script execution and workflow node execution.(本方法是script执行、工作流节点执行时复用的公共方法)
  * @param { Object } data 待执行脚本信息
  */
 function Execute(data) {
@@ -42,7 +42,7 @@ function Execute(data) {
   this.progress = 0;
   this.id = null;
   this.status = null;
-  // 仅/api/jobhistory/${id}/get接口使用
+  // Only used by the /api/jobhistory/${id}/get interface(仅/api/jobhistory/${id}/get接口使用)
   this.taskID = null;
   this.postType = process.env.NODE_ENV === 'sandbox' ? 'http' : (data.data.postType || 'socket');
   delete data.data.postType;
@@ -53,18 +53,18 @@ function Execute(data) {
   this.runType = data.data.runType;
   this.event = new Vue();
   this.run = false;
-  // 存储结果集的相关信息,用到里面的日志和结果路径
+  // Store the relevant information of the result set, use the log and result path inside(存储结果集的相关信息,用到里面的日志和结果路径)
   this.resultsetInfo = null;
-  // 存储结果集目录下的所有信息,可用于拿到单个结果集
+  // Stores all information in the result set directory, which can be used to get a single result set(存储结果集目录下的所有信息,可用于拿到单个结果集)
   this.resultList = [];
-  // 当前结果集的path
+  // the path of the current result set(当前结果集的path)
   this.currentResultPath = '';
   this.isDiagnosisFailed = false;
-  // 用来控制获取结果集的url
+  // Used to control the url to get the result set(用来控制获取结果集的url)
   this.getResultUrl = data.getResultUrl || 'filesystem',
   this.on('execute', () => {
     this.run = true;
-    // 注释是留作发起请求时,长时间没返回第一个接口时
+    // The comment is reserved for when the request is initiated, when the first interface is not returned for a long time(注释是留作发起请求时,长时间没返回第一个接口时)
     // timeoutCheck(this);
   });
   this.on('execute:queryState', () => {
@@ -90,11 +90,11 @@ function Execute(data) {
       this.queryStatus({ isKill: true });
     }
   });
-  // data是接口的返回数据
-  // execute.data是前台发送至后台的请求数据
+  // data is the return data of the interface(data是接口的返回数据)
+  // execute.data is the request data sent from the foreground to the background(execute.data是前台发送至后台的请求数据)
   this.on('data', ({ data, execute }) => {
     if (execute.postType !== 'socket') return;
-    // 这里对websocket第一个接口execute直接会返回errorMsg的情况进行判断
+    // Here, we judge the situation that the first interface execute of websocket will directly return errorMsg(这里对websocket第一个接口execute直接会返回errorMsg的情况进行判断)
     if (Object.prototype.hasOwnProperty.call(data.data, 'errorMsg')) {
       execute.trigger('stop');
       execute.trigger('error');
@@ -119,7 +119,7 @@ function Execute(data) {
       const id = data.data && data.data.taskID;
       let prefix = method.slice(0, method.lastIndexOf('/') + 1);
       if (execute.taskID !== id) {
-        // 针对临时脚本多次右键点击的,过期数据不更新的情况
+        // For the case where the expired data is not updated when the temporary script is right-clicked multiple times(针对临时脚本多次右键点击的,过期数据不更新的情况)
         if (data.data.status) {
           return execute.trigger('updateExpireHistory', data.data);
         }
@@ -153,15 +153,15 @@ function Execute(data) {
   });
   this.on('downgrade', ({ execute }) => {
     execute.postType = 'http';
-    // 脚本运行中,由socket降级成http则使用http接口轮询进度
-    // 当websocket降级时有两种可能,1,,任务已经启动,在返回id前就断了连接, 2.一种是在启动前就失去连接
+    // When the script is running, if the socket is downgraded to http, the http interface is used to poll the progress(脚本运行中,由socket降级成http则使用http接口轮询进度)
+    // There are two possibilities when the websocket is downgraded, 1. The task has been started and the connection is disconnected before returning the id, 2. One is that the connection is lost before starting(当websocket降级时有两种可能,1,,任务已经启动,在返回id前就断了连接, 2.一种是在启动前就失去连接)
     if (execute.run) {
       if (this.id && this.taskID) {
         execute.queryStatus({isKill: false});
       } else {
-        // 重新跑任务
+        // run the task again(重新跑任务)
         console.warn('[websocket降级没有获取到taskID]');
-        // this.execute(); // 不主动帮用户启动任务
+        // this.execute(); // Do not actively help users start tasks(不主动帮用户启动任务)
       }
     }
   });
@@ -319,7 +319,7 @@ Execute.prototype.getResultList = function() {
     let params = {
       path: `${this.resultsetInfo.resultLocation}`,
     }
-    // 如果是api执行需要带上taskId
+    // If it is api execution, you need to bring taskId(如果是api执行需要带上taskId)
     if (this.getResultUrl !== 'filesystem') {
       params.taskId = this.taskID
     }
@@ -328,7 +328,7 @@ Execute.prototype.getResultList = function() {
       'get'
     )
       .then((rst) => {
-        // 后台的结果集顺序是根据结果集名称按字符串排序的,展示时会出现结果集对应不上的问题,所以加上排序
+        // The order of the result set in the background is sorted by string according to the name of the result set. When displaying, there will be a problem that the result set cannot be matched, so add sorting(后台的结果集顺序是根据结果集名称按字符串排序的,展示时会出现结果集对应不上的问题,所以加上排序)
         if(rst.dirFileTrees && rst.dirFileTrees.children) {
           this.resultList = rst.dirFileTrees.children.sort((a, b) => {
             const slice = (name) => {
@@ -358,9 +358,9 @@ Execute.prototype.getFirstResult = function() {
     this.trigger('log', log);
     this.trigger('steps', 'Completed');
     this.run = false;
-  } else {  // 获取第一个结果集
+  } else {  // Get the first result set(获取第一个结果集)
     this.currentResultPath = this.resultList[0].path;
-    // 需要提供日志路径,用于下载日志
+    // The log path needs to be provided to download the log(需要提供日志路径,用于下载日志)
     this.trigger('history', {
       execID: this.id,
       logPath: this.resultsetInfo.logPath,
@@ -371,7 +371,7 @@ Execute.prototype.getFirstResult = function() {
       path: this.currentResultPath,
       pageSize,
     }
-    // 如果是api执行需要带上taskId
+    // If it is api execution, you need to bring taskId(如果是api执行需要带上taskId)
     if (this.getResultUrl !== 'filesystem') {
       params.taskId = this.taskID
     }
@@ -392,7 +392,7 @@ Execute.prototype.getFirstResult = function() {
   }
 };
 
-// 获取错误原因,并更新历史
+// Get error reason and update history(获取错误原因,并更新历史)
 Execute.prototype.updateLastHistory = function(option, cb) {
   if (option) {
     return this.trigger('history', {
@@ -404,7 +404,7 @@ Execute.prototype.updateLastHistory = function(option, cb) {
       failedReason: '',
     });
   }
-  // api执行时的路径不一样
+  // The path when the api is executed is different(api执行时的路径不一样)
   const taskUrl = this.getResultUrl !== 'filesystem' ? this.getResultUrl : 'jobhistory';
   api.fetch(`/${taskUrl}/${this.taskID}/get`, 'get')
     .then((res) => {
@@ -418,7 +418,7 @@ Execute.prototype.updateLastHistory = function(option, cb) {
         execID: '',
         createDate: task.createdTime,
         runningTime: task.costTime,
-        // 这里改成使用execute的status是因为数据库中在大结果集的情况下可能会发生状态不翻转的情况,但websocket推送的状态是对的
+        // This is changed to the status of execute because the state may not be flipped in the case of a large result set in the database, but the state pushed by the websocket is correct(这里改成使用execute的status是因为数据库中在大结果集的情况下可能会发生状态不翻转的情况,但websocket推送的状态是对的)
         status: this.status,
         failedReason: task.errCode && task.errDesc ? task.errCode + task.errDesc : task.errCode || task.errDesc || ''
       });
@@ -435,7 +435,7 @@ Execute.prototype.updateLastHistory = function(option, cb) {
 };
 
 /**
- * kill的时候去轮询获取cancelled状态
+ * When killing, go to poll to get the canceled status(kill的时候去轮询获取cancelled状态)
  * @param {*} execute
  * @param {*} ret
  */
@@ -451,7 +451,7 @@ function deconstructStatusIfKill(execute, ret) {
 }
 
 /**
- * 轮询状态
+ * poll status(轮询状态)
  * @param {*} execute
  * @param {*} ret
  */
@@ -462,10 +462,10 @@ function deconstructStatus(execute, ret) {
   execute.trigger('status', ret.status);
   switch (ret.status) {
     case 'Inited': case 'Scheduled': case 'Running':
-      // 在状态发生改变的时候更新历史
+      // Update history when state changes(在状态发生改变的时候更新历史)
       execute.updateLastHistory();
       if (execute.postType !== 'socket') {
-        // 5秒发送一次请求
+        // Send a request every 5 seconds(5秒发送一次请求)
         if (!execute.run) return;
         setTimeout(() => {
           execute.queryStatus({ isKill: false });
@@ -496,17 +496,17 @@ function deconstructStatus(execute, ret) {
 }
 
 /**
- * 当状态为成功时执行的逻辑
+ * Logic to execute when the status is successful(当状态为成功时执行的逻辑)
  * @param {*} execute
  */
 function whenSuccess(execute) {
   if (execute.runType !== 'pipeline') {
-    // stateEnd是需要获取结果集的,获取结果集的同时会更新历史
+    // stateEnd needs to obtain the result set, and the history will be updated when the result set is obtained(stateEnd是需要获取结果集的,获取结果集的同时会更新历史)
     execute.trigger('stateEnd');
     const log = `**result tips: ${i18n.t('message.common.execute.success.stateEnd')}`;
     execute.trigger('log', log);
   } else {
-    // 导入导出不需要请求结果集,但需要更新历史,否则会出现状态未翻转的问题。
+    // Import and export do not need to request the result set, but need to update the history, otherwise there will be a problem that the state is not flipped.(导入导出不需要请求结果集,但需要更新历史,否则会出现状态未翻转的问题。)
     const log = `**result tips: ${i18n.t('message.common.execute.error.noResultList')}`;
     execute.trigger('log', log);
     execute.trigger('steps', 'Completed');
@@ -521,7 +521,7 @@ function whenSuccess(execute) {
 }
 
 /**
- * 当状态为异常状态时执行的逻辑
+ * Logic to execute when the state is abnormal(当状态为异常状态时执行的逻辑)
  * @param {*} execute
  * @param {*} ret
  */
@@ -597,7 +597,7 @@ function timeoutCheck(execute) {
 }
 
 /**
- * 当websocket请求超过1分钟未返回时,发送一个status请求重新唤醒.
+ * When the websocket request has not returned for more than 1 minute, send a status request to wake up again.(当websocket请求超过1分钟未返回时,发送一个status请求重新唤醒.)
  * @param {*} execute
  */
 function reawakening(execute) {
@@ -635,10 +635,10 @@ function logError(err, that) {
 }
 
 /**
- * 查询异常时的操作
- * @param {*} execute 当前的对象
- * @param {*} type notice的类型
- * @param {*} msg notice的提示文本
+ * Action when query is abnormal(查询异常时的操作)
+ * @param {*} execute the current object(execute 当前的对象)
+ * @param {*} type notice的类型(type notice的类型)
+ * @param {*} The prompt text of msg notice(msg notice的提示文本)
  */
 function queryException(execute, type, msg) {
   clearInterval(execute.diagnosisTimeout);
@@ -653,7 +653,7 @@ function queryException(execute, type, msg) {
 }
 
 /**
- * webscoket为background模式时,在接收execute接口时调用get请求或者后台拼接的脚本内容;
+ * When webscoket is in background mode, when receiving the execute interface, the get request or the script content spliced ​​in the background is called;(webscoket为background模式时,在接收execute接口时调用get请求或者后台拼接的脚本内容;)
  * @param {*} execute
  * @param {*} method
  * @return {*}
diff --git a/linkis-web/src/common/service/layoutMixin.js b/linkis-web/src/common/service/layoutMixin.js
index 7b29f1e54..58c5186ef 100644
--- a/linkis-web/src/common/service/layoutMixin.js
+++ b/linkis-web/src/common/service/layoutMixin.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 import storage from '@/common/helper/storage';
 import tree from '@/apps/scriptis/service/db/tree.js';
 export default {
@@ -23,7 +23,7 @@ export default {
   },
 
   created() {
-    // 刷新页面还是需要清缓存的,因为scriptis里的数结构都是缓存,如果不清,后台更新了刷新页面也看不到
+    // Refreshing the page still needs to clear the cache, because the number structure in scriptis is cached. If it is not clear, the background update will not be able to see the refresh page(刷新页面还是需要清缓存的,因为scriptis里的数结构都是缓存,如果不清,后台更新了刷新页面也看不到)
     this.clearSession();
   },
   mounted() {
@@ -34,7 +34,7 @@ export default {
   },
   methods: {
     copyAction(event) {
-      // 谷歌浏览器中的clipboardData对象存在event事件里,用于获取剪贴板中的数据,只有在复制操作过程中才能监听到
+      // The clipboardData object in Google Chrome exists in the event event, which is used to obtain the data in the clipboard, which can only be monitored during the copy operation.(谷歌浏览器中的clipboardData对象存在event事件里,用于获取剪贴板中的数据,只有在复制操作过程中才能监听到)
       const string = event.clipboardData.getData('text/plain') || event.target.value || event.target.outerText;
       storage.set('copyString', string);
     },
@@ -47,8 +47,8 @@ export default {
       tree.remove('udfTree');
       tree.remove('functionTree');
       storage.set('copyString', '');
-      // 刷新不用清登录的用户基础信息
+      // Refresh basic user information without clearing the login(刷新不用清登录的用户基础信息)
       // storage.set('baseInfo', '');
     },
   }
-}
\ No newline at end of file
+}
diff --git a/linkis-web/src/common/service/mixin.js b/linkis-web/src/common/service/mixin.js
index 979ed88e7..3054c30bf 100644
--- a/linkis-web/src/common/service/mixin.js
+++ b/linkis-web/src/common/service/mixin.js
@@ -39,10 +39,10 @@ export default {
     },
     getProjectJsonResult(key, name = 'visualis') {
       console.log(key,name)
-      // 用于判断返回什么样的返回值
+      // Used to determine what return value to return(用于判断返回什么样的返回值)
       const baseInfo = storage.get('baseInfo', 'local');
       if (!baseInfo) {
-        // linkis单独部署的时候没有baseinfo, 不用限制
+        // When linkis is deployed alone, there is no baseinfo, no restrictions(linkis单独部署的时候没有baseinfo, 不用限制)
         return true;
       } else {
         return baseInfo.resultSetExportEnable;
@@ -61,13 +61,13 @@ export default {
       const baseInfo = storage.get('baseInfo', 'local');
       if (!baseInfo) return;
       const info = baseInfo.applications.find((item) => item.name === type) || {};
-      // 根据是否有projectid来确定是走首页还是工程页
+      // According to whether there is a projectid to determine whether to go to the home page or the engineering page(根据是否有projectid来确定是走首页还是工程页)
       let url = '';
       if (!query.projectID) {
         localStorage.removeItem('appJointProjectId')
         url = info.homepageUrl
       }
-      // 如果没有提示用户功能暂未开发
+      // If the user is not prompted, the function has not yet been developed(如果没有提示用户功能暂未开发)
       if (Object.keys(info).length === 0) {
         this.$Message.warning(this.$t('message.common.warning.comingSoon'));
       } else {
diff --git a/linkis-web/src/common/service/moduleMixin.js b/linkis-web/src/common/service/moduleMixin.js
index b9500eead..992af8d4e 100644
--- a/linkis-web/src/common/service/moduleMixin.js
+++ b/linkis-web/src/common/service/moduleMixin.js
@@ -5,19 +5,19 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 /**
- * 全局混入Dispatch处理事件,全局mixin
+ * Global mixin Dispatch processing events, global mixin(全局混入Dispatch处理事件,全局mixin)
  */
 import util from '@/common/util';
 import eventbus from '@/common/helper/eventbus';
@@ -27,7 +27,7 @@ let module = function(config) {
   if (!config.name) {
     return console.error('请配置独一无二的ModuleName');
   }
-  // 控制对外抛出的事件
+  // Control events thrown out(控制对外抛出的事件)
   let dispatchs = config.dispatchs || [];
   if (util.isPlainObject(dispatchs)) {
     let arr = [];
@@ -40,7 +40,7 @@ let module = function(config) {
     }
     dispatchs = arr;
   }
-  // 处理模块 methods
+  // processing module methods(处理模块 methods)
   if (config.methods) {
     let methods = Object.keys(config.methods);
     if (methods.length > 0) {
@@ -53,7 +53,7 @@ let module = function(config) {
     }
   }
   /**
-     * 挂载dispatch到空模块
+     * Mount dispatch to empty module(挂载dispatch到空模块)
      * @param {*} name
      * @param {*} param
      * @param {*} [cb=new Function()]
@@ -74,7 +74,7 @@ let module = function(config) {
       return data;
     },
     created() {
-      // 处理模块下的组件监听
+      // Component monitoring under the processing module(处理模块下的组件监听)
       if (config.events) {
         let events = config.events;
         if (util.isArray(events) && events.length > 0) {
@@ -101,12 +101,12 @@ let module = function(config) {
       }
     },
     methods: {
-      // 触发事件
+      // trigger event(触发事件)
       dispatch: config.dispatch,
       getUserName() {
         return  storage.get("baseInfo", 'local') ? storage.get("baseInfo", 'local').username : null;
       },
-      // 获取当前编排的环境
+      // Get the current orchestration environment(获取当前编排的环境)
       getCurrentDsslabels() {
         return storage.get("currentDssLabels") ? storage.get("currentDssLabels") : null;
       }
@@ -116,12 +116,12 @@ let module = function(config) {
 
 let modules = {}
 /**
- * 提供Dispatch方法统一事件处理方式
+ * Provide Dispatch method to unify event handling(提供Dispatch方法统一事件处理方式)
  */
 export default function mixinDispatch (requireComponent, requireComponentVue) {
   if (requireComponent) {
     requireComponent.keys().forEach((fileName) => {
-      // 获取组件配置
+      // Get component configuration(获取组件配置)
       let moduleConfig = requireComponent(fileName);
       moduleConfig = moduleConfig.default || moduleConfig;
       moduleConfig.mixin = module(moduleConfig);
@@ -131,7 +131,7 @@ export default function mixinDispatch (requireComponent, requireComponentVue) {
 
   if (requireComponentVue) {
     requireComponentVue.keys().forEach((fileName) => {
-    // 获取组件配置
+    // Get component configuration(获取组件配置)
       let vueConfig = requireComponentVue(fileName);
       vueConfig = vueConfig.default || vueConfig;
       let indexPath = './' + fileName.split('/')[1] + '/index.js';
diff --git a/linkis-web/src/common/service/socket.js b/linkis-web/src/common/service/socket.js
index 05d6201da..910d0895f 100644
--- a/linkis-web/src/common/service/socket.js
+++ b/linkis-web/src/common/service/socket.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 import { Eventbus } from '@/common/helper/eventbus';
 /**
@@ -182,7 +182,7 @@ class Socket extends Eventbus {
   _validMessage(data = {}) {
     let msgData = data.data;
     let method = data.method;
-    // 忽略无日志信息的重复推送数据
+    // Ignore duplicate push data without log information(忽略无日志信息的重复推送数据)
     let notEmpty = msgData && Array.isArray(msgData.log) ? msgData.log.some((it) => it.length > 0) : msgData.log;
     if (/\/log$/.test(method) && !notEmpty ) {
       return
diff --git a/linkis-web/src/common/service/timeToCronMixin.js b/linkis-web/src/common/service/timeToCronMixin.js
index ce60ac679..c6a7704ef 100644
--- a/linkis-web/src/common/service/timeToCronMixin.js
+++ b/linkis-web/src/common/service/timeToCronMixin.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 import i18n from '@/common/i18n'
 const DATELANG = {
   "MIN": i18n.t('message.common.time.MIN'),
@@ -101,8 +101,8 @@ export default {
   },
   computed: {
     timeToCron() {
-      // 将所选时间转换成cron格式
-      // 还是得先确定第一个选择的是什么来决定表达是怎么写
+      // Convert selected time to cron format(将所选时间转换成cron格式)
+      // Still have to determine what is the first choice to decide how to write the expression(还是得先确定第一个选择的是什么来决定表达是怎么写)
       if (this.oneSelect === 'MIN') {
         return `0 0/${this.zeroSelect} * * * ?`;
       } else if (this.oneSelect === 'HOUR') {
@@ -147,7 +147,7 @@ export default {
         this.isSelectYear = false;
         this.towSelect = this.towList[0].value;
         this.selectHourAndMinues = false;
-      } else if (value === 'DAY') {// 如果选择天二三选择框不用展示,展示四五选择框
+      } else if (value === 'DAY') {// If you choose the day two and three selection boxes not to be displayed, display the fourth and fifth selection boxes(如果选择天二三选择框不用展示,展示四五选择框)
         this.selectHourAndMinues = true;
         this.isSelectYear = false;
         this.towList = [];
@@ -194,9 +194,9 @@ export default {
     },
     cronToTime() {
       if (Object.keys(this.scheduleParams).length > 0 && this.scheduleParams.scheduleTime) {
-        // 将corn格式转换成时间格式0 2 2 3 * * ?
+        // Convert corn format to time format 0 2 2 3 * * ?(将corn格式转换成时间格式0 2 2 3 * * ?)
         const tepArr = this.scheduleParams.scheduleTime.split(' ');
-        // 先判断是否选的年
+        // First determine whether to choose the year(先判断是否选的年)
         if (tepArr.length >= 7) {
           this.oneSelect = 'YEAR';
           this.selectHourAndMinues = true;
@@ -243,4 +243,4 @@ export default {
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/linkis-web/src/common/util/convert.js b/linkis-web/src/common/util/convert.js
index 2473bdeba..b9735d123 100644
--- a/linkis-web/src/common/util/convert.js
+++ b/linkis-web/src/common/util/convert.js
@@ -20,7 +20,7 @@
 import i18n from '@/common/i18n';
 import {isPlainObject, forEach, forIn} from 'lodash';
 /**
- * 转换日志
+ * conversion log(转换日志)
  *
  * @return {Object}
  */
@@ -49,7 +49,7 @@ export function convertLog(logs) {
 }
 
 /**
- * 转换时间戳差值
+ * Convert Timestamp Difference(转换时间戳差值)
  * @param {*} runningTime
  * @return {*}
  */
@@ -69,10 +69,10 @@ export function convertTimestamp(runningTime) {
 }
 
 /**
- * 排序
- * @param {*} a 第一个参数
- * @param {*} b 第两个参数
- * @param {*} type 类型,可能是desc和asc
+ * sort(排序)
+ * @param {*} a first parameter(第一个参数)
+ * @param {*} b second parameter(第两个参数)
+ * @param {*} type ,possibly desc and asc(类型,可能是desc和asc)
  */
 export function sort(a, b, type) {
     const sortString = (a, b, type) => {
@@ -101,7 +101,7 @@ export function sort(a, b, type) {
 }
 
 /**
- * 转换数组为对象key:value形式
+ * Convert array to object key:value form(转换数组为对象key:value形式)
  * @param {*} arr
  * @return {*}
  */
@@ -114,7 +114,7 @@ export function convertArrayToObject(arr) {
 }
 
 /**
- * 转换对象为数组形式
+ * Convert object to array form(转换对象为数组形式)
  * @param {*} obj
  */
 export function convertObjectToArray(obj) {
@@ -129,7 +129,7 @@ export function convertObjectToArray(obj) {
 }
 
 /**
- * 转换数组为数组[{key1:value1},{key2,value2}]形式
+ * Convert the array to an array of the form [{key1:value1},{key2,value2}](转换数组为数组[{key1:value1},{key2,value2}]形式)
  * @param {*} arr
  * @return {*}
  */
@@ -188,7 +188,7 @@ const convertList = {
   };
 
   /**
-   * 格式化值
+   * format value(格式化值)
    * @param {*} item
    * @param {*} field
    * @return {*} return
diff --git a/linkis-web/src/common/util/currentModules.js b/linkis-web/src/common/util/currentModules.js
index a644f62f9..a56b2da94 100644
--- a/linkis-web/src/common/util/currentModules.js
+++ b/linkis-web/src/common/util/currentModules.js
@@ -5,19 +5,19 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 /*eslint-disable */
   /*
-  * 判断当前是否独立应用和环境列表
+  * Determine whether the current independent application and environment list(判断当前是否独立应用和环境列表)
   * @return {Object}
   */
 const apps = require('dynamic-modules')
@@ -43,4 +43,4 @@ export function currentModules () {
     }
   }
   return obj;
-}
\ No newline at end of file
+}
diff --git a/linkis-web/src/common/util/debug.js b/linkis-web/src/common/util/debug.js
index ecf60e03e..96822922f 100644
--- a/linkis-web/src/common/util/debug.js
+++ b/linkis-web/src/common/util/debug.js
@@ -5,20 +5,20 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 /**
- * 日志输出控制
- * @param {String|Object} info 日志输出
- * @param {String} type console可用方法
+ * log output control(日志输出控制)
+ * @param {String|Object} info log output(日志输出)
+ * @param {String} Type console available methods(type console可用方法)
  */
 function debug_log (type = 'log', ...info) {
   const isDev = process.env.NODE_ENV === 'dev'
diff --git a/linkis-web/src/common/util/index.js b/linkis-web/src/common/util/index.js
index b3ca944a9..d1fbc77ae 100644
--- a/linkis-web/src/common/util/index.js
+++ b/linkis-web/src/common/util/index.js
@@ -35,8 +35,8 @@ let util = {
   },
   md5,
   /**
-   * 替换url中 形如 ${projectId} 格式的参数占位符为真实参数
-   * ! url应该是转义过的符合URI规范的链接地址,参数如未在obj定义则最终地址会丢失该参数
+   * Replace the parameter placeholders in the format of ${projectId} in the url with real parameters(替换url中 形如 ${projectId} 格式的参数占位符为真实参数)
+   * ! url should be an escaped link address that conforms to the URI specification. If the parameter is not defined in obj, the final address will lose the parameter(url应该是转义过的符合URI规范的链接地址,参数如未在obj定义则最终地址会丢失该参数)
    */
   replaceHolder(url, obj = {}) {
     obj = {
@@ -64,7 +64,7 @@ let util = {
     const distUrl = dist.length > 1 ? `${dist[0]}?${qs.stringify(result)}` : dist[0]
     return distUrl
   },
-  // 打开新tab浏览器也方法
+  // How to open a new tab browser(打开新tab浏览器也方法)
   windowOpen(url) {
     const newTab = window.open("about:blank");
     setTimeout(() => {
@@ -79,7 +79,7 @@ let util = {
     }, 500);
   },
   /**
-   * 生成guid
+   * generate guid(生成guid)
    */
   guid() {
     let key;
diff --git a/linkis-web/src/common/util/object.js b/linkis-web/src/common/util/object.js
index f95c22e5c..e427e40a8 100644
--- a/linkis-web/src/common/util/object.js
+++ b/linkis-web/src/common/util/object.js
@@ -5,19 +5,19 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 /**
- * 会覆盖
+ * will cover(会覆盖)
  *
  * @return {Object}
  */
@@ -37,7 +37,7 @@ export function merge(...arg) {
 }
 
 /**
- * 不会覆盖
+ * won't overwrite(不会覆盖)
  *
  * @return {Object}
  */
diff --git a/linkis-web/src/common/util/type.js b/linkis-web/src/common/util/type.js
index b30a78853..ec2d15ab6 100644
--- a/linkis-web/src/common/util/type.js
+++ b/linkis-web/src/common/util/type.js
@@ -5,22 +5,22 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 const objectToString = Object.prototype.toString;
 const OBJECT_STRING = '[object Object]';
 
 /**
- * 是否是普通对象
+ * Is it a normal object(是否是普通对象)
  * @param {any} obj
  * @return {Boolean}
  */
@@ -29,7 +29,7 @@ export function isPlainObject(obj) {
 }
 
 /**
- * 是否是数字
+ * Is it a number(是否是数字)
  * @param {any} value
  * @return {Boolean}
  */
@@ -38,7 +38,7 @@ export function isNumber(value) {
 }
 
 /**
- * 是否是日期
+ * Is it a date(是否是日期)
  * @param {any} value
  * @return {Boolean}
  */
@@ -47,7 +47,7 @@ export function isDate(value) {
 }
 
 /**
- * 是否是函数
+ * Is it a function(是否是函数)
  * @param {any} value
  * @return {Boolean}
  */
@@ -56,7 +56,7 @@ export function isFunction(value) {
 }
 
 /**
- * 是否是函数
+ * Is it a function(是否是函数)
  * @param {any} value
  * @return {Boolean}
  */
@@ -66,7 +66,7 @@ export function isObject(value) {
 }
 
 /**
- * 是否是数组
+ * Is it an array(是否是数组)
  * @param {any} value
  * @return {Boolean}
  */
@@ -75,7 +75,7 @@ export function isArray(value) {
 }
 
 /**
- * 是否像对象
+ * Is it like an object(是否像对象)
  * @param {any} value
  * @return {Boolean}
  */
@@ -84,7 +84,7 @@ export function isObjectLike(value) {
 }
 
 /**
- * 是否是字符串
+ * is it a string(是否是字符串)
  * @param {any} value
  * @return {Boolean}
  */
@@ -94,7 +94,7 @@ export function isString(value) {
 }
 
 /**
- * 是否是空的
+ * is it empty(是否是空的)
  * @param {any} value
  * @return {Boolean}
  */
diff --git a/linkis-web/src/components/consoleComponent/console.vue b/linkis-web/src/components/consoleComponent/console.vue
index 8ae511b4e..bd5849358 100644
--- a/linkis-web/src/components/consoleComponent/console.vue
+++ b/linkis-web/src/components/consoleComponent/console.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div
     ref="bottomPanel"
@@ -148,7 +148,7 @@ export default {
   watch: {
     stop(val, oldval) {
       if (oldval && this.execute) {
-        // 先保留工作流页,应该会用到
+        // Keep the workflow page first, it should be used(先保留工作流页,应该会用到)
         this.killExecute();
       }
     },
@@ -251,13 +251,13 @@ export default {
         this.script.result = storeResult;
         this.script.resultList = this.execute.resultList;
         this.script.resultSet = 0;
-        // 获取过progress的情况下设置为1
+        // Set to 1 if progress has been obtained(获取过progress的情况下设置为1)
         if (this.script.progress.current) {
           this.script.progress.current = 1;
         }
       });
       this.execute.on('progress', ({ progress, progressInfo, waitingSize }) => {
-        // 这里progressInfo可能只是个空数组,或者数据第一个数据是一个空对象
+        // Here progressInfo may just be an empty array, or the first data of the data is an empty object(这里progressInfo可能只是个空数组,或者数据第一个数据是一个空对象)
         if (progressInfo.length && !isEmpty(progressInfo[0])) {
           progressInfo.forEach((newProgress) => {
             let newId = newProgress.id;
@@ -297,7 +297,7 @@ export default {
           const lastStep = last(this.script.steps);
           if (this.script.steps.indexOf(status) === -1) {
             this.script.steps.push(status);
-            // 针对可能有WaitForRetry状态后,后台会重新推送Scheduled或running状态的时候
+            // When there may be a WaitForRetry state, the background will re-push the Scheduled or running state(针对可能有WaitForRetry状态后,后台会重新推送Scheduled或running状态的时候)
           } else if (lastStep !== status) {
             this.script.steps.push(status);
           }
@@ -492,7 +492,7 @@ export default {
           path: resultPath,
           pageSize,
         }
-        // 如果是api执行需要带上taskId
+        // If it is api execution, you need to bring taskId(如果是api执行需要带上taskId)
         if (this.getResultUrl !== 'filesystem') {
           params.taskId = this.comData.taskID
         }
@@ -504,9 +504,9 @@ export default {
             const result = {
               'headRows': ret.metadata,
               'bodyRows': ret.fileContent,
-              // 如果totalLine是null,就显示为0
+              // If totalLine is null, it will be displayed as 0(如果totalLine是null,就显示为0)
               'total': ret.totalLine ? ret.totalLine : 0,
-              // 如果内容为null,就显示暂无数据
+              // If the content is null, it will display no data(如果内容为null,就显示暂无数据)
               'type': ret.fileContent ? ret.type : 0,
               'cache': {
                 offsetX: 0,
@@ -543,7 +543,7 @@ export default {
       }
     },
     checkFromCache() {
-      // 每次右键控制台,都会创建一个新实例,所以把上一个执行的实例先停掉
+      // Every time you right-click the console, a new instance will be created, so stop the last executed instance first(每次右键控制台,都会创建一个新实例,所以把上一个执行的实例先停掉)
       if (this.execute) {
         this.killExecute();
       }
diff --git a/linkis-web/src/components/consoleComponent/filter.vue b/linkis-web/src/components/consoleComponent/filter.vue
index e13970aae..0db164e28 100644
--- a/linkis-web/src/components/consoleComponent/filter.vue
+++ b/linkis-web/src/components/consoleComponent/filter.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div
     class="we-filter-view">
@@ -40,7 +40,7 @@ export default {
       type: Array,
       default: () => [],
     },
-    height: { // 树高度
+    height: { // tree height(树高度)
       type: Number,
       require: true
     },
diff --git a/linkis-web/src/components/consoleComponent/log.vue b/linkis-web/src/components/consoleComponent/log.vue
index 4c983111f..fe497b929 100644
--- a/linkis-web/src/components/consoleComponent/log.vue
+++ b/linkis-web/src/components/consoleComponent/log.vue
@@ -172,7 +172,7 @@ export default {
       const val = this.searchText;
       if (!log) return MatchText;
       if (val) {
-        // 这部分代码是为了让正则表达式不报错,所以在特殊符号前面加上\
+        // This part of the code is to make the regular expression not report an error, so add \ in front of the special symbol(这部分代码是为了让正则表达式不报错,所以在特殊符号前面加上\)
         let formatedVal = '';
         forEach(val, (o) => {
           if (/^[\w\u4e00-\u9fa5]$/.test(o)) {
@@ -181,7 +181,7 @@ export default {
             formatedVal += `\\${o}`;
           }
         });
-        // 全局和不区分大小写模式,正则是匹配searchText前后出了换行符之外的字符
+        // Global and case-insensitive mode, the regular pattern is to match characters other than newlines before and after searchText(全局和不区分大小写模式,正则是匹配searchText前后出了换行符之外的字符)
         let regexp = new RegExp(`.*${formatedVal}.*`, 'gi');
         MatchText = filter(log.split('\n'), (item) => {
           return regexp.test(item);
diff --git a/linkis-web/src/components/consoleComponent/modal.js b/linkis-web/src/components/consoleComponent/modal.js
index fc4ae6fe7..1577a7b1b 100644
--- a/linkis-web/src/components/consoleComponent/modal.js
+++ b/linkis-web/src/components/consoleComponent/modal.js
@@ -5,49 +5,49 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 /**
  * 脚本任务
  */
 export class Script {
   /**
-     * 构造器
+     * Constructor(构造器)
      * @param {*} option
      */
   constructor(option) {
     this.id = option.id;
     this.title = option.title;
-    // 日志
+    // log(日志)
     this.log = option.log || {};
     this.logLine = option.logLine || 1;
-    // 历史
+    // history(历史)
     this.history = [];
-    // 进度
+    // schedule(进度)
     this.progress = {
       current: null,
       progressInfo: [],
       waitingSize: null,
       costTime: null,
     };
-    // 步骤
+    // step(步骤)
     this.steps = [];
-    // 运行结果
+    // operation result(运行结果)
     this.result = null;
-    // 记录结果集的存储路径
+    // Record the storage path of the result set(记录结果集的存储路径)
     this.resultList = null;
-    // 当前的运行状态
+    // current operating state(当前的运行状态)
     this.status = option.status ? option.status : 'Inited';
-    // script视图状态
+    // script view state(script视图状态)
     this.scriptViewState = {};
   }
 }
diff --git a/linkis-web/src/components/consoleComponent/progress.vue b/linkis-web/src/components/consoleComponent/progress.vue
index aee6d3d19..74e06138e 100644
--- a/linkis-web/src/components/consoleComponent/progress.vue
+++ b/linkis-web/src/components/consoleComponent/progress.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div
     class="progress"
@@ -71,8 +71,8 @@
 import steps from './steps.vue';
 import weToolbar from './toolbar_progress.vue';
 /**
- * 脚本执行进度tab面板
- * ! 1. 与工作流节点执行console.vue 共用
+ * Script execution progress tab panel(脚本执行进度tab面板)
+ * ! 1. Shared with workflow node execution console.vue(与工作流节点执行console.vue 共用)
  */
 export default {
   components: {
@@ -173,7 +173,7 @@ export default {
       return Number((this.current * 100).toFixed(2));
     },
     isWaittingSizeShow() {
-      // 当waitingSize等于null时,waitingSize >= 0为true;
+      // When waitingSize is equal to null, waitingSize >= 0 is true;(当waitingSize等于null时,waitingSize >= 0为true;)
       return (this.status === 'Scheduled' || this.status === 'Inited') && (this.waitingSize !== null && this.waitingSize >= 0);
     },
     isStatusOk() {
diff --git a/linkis-web/src/components/consoleComponent/result.vue b/linkis-web/src/components/consoleComponent/result.vue
index 49f97813b..4ab871918 100644
--- a/linkis-web/src/components/consoleComponent/result.vue
+++ b/linkis-web/src/components/consoleComponent/result.vue
@@ -47,7 +47,7 @@
       :style="{'height': resultHeight+'px'}"
       class="text-result-div">
       <div v-if="result.bodyRows">
-        <!-- 数据格式不统一,先循环外部数据,再循环内部 -->
+        <!-- The data format is not uniform, first loop the external data, and then loop the internal(数据格式不统一,先循环外部数据,再循环内部 )-->
         <div v-for="(item,index) in result.bodyRows" :key="index">
           <div
             v-for="(row, subindex) in item[0].split('\n')"
@@ -175,8 +175,8 @@ import filter from './filter.vue';
 import dataWrangler from './dataWrangler.vue';
 import mixin from '@/common/service/mixin';
 /**
- * 脚本执行结果集tab面板
- * ! 1. 与工作流节点执行后的管理台console.vue 共用
+ * Script execution result set tab panel(脚本执行结果集tab面板)
+ * ! 1. Shared with the management console console.vue after the workflow node is executed(与工作流节点执行后的管理台console.vue 共用)
  */
 export default {
   name: 'scriptResult',
@@ -234,7 +234,7 @@ export default {
         sizeOpts: [20, 50, 80, 100],
       },
       isLoading: false,
-      // 当前高亮的行
+      // currently highlighted line(当前高亮的行)
       hightLightRow: null,
       isFilterViewShow: false
     };
@@ -312,15 +312,15 @@ export default {
           sortIndex = index
         }
       })
-      // 大于50列排序现将要排序的列和原始index保持
+      // 大于50列排序现将要排序的列和原始index保持(大于50列排序现将要排序的列和原始index保持)
       let sortColumnAll = this.originRows.map((row, index) => {
         return {
           originIndex: index,
           value: row[sortIndex]
         }
       })
-      // 将找出的列排序
-      sortColumnAll = this.arraySortByName(sortColumnAll, col.columnType, 'value');// 从小到大
+      // Sort the found columns(将找出的列排序)
+      sortColumnAll = this.arraySortByName(sortColumnAll, col.columnType, 'value');// From small to large(从小到大)
       let newRow = [];
       sortColumnAll.map((item, index) => {
         newRow[index] = this.originRows[item.originIndex];
@@ -329,7 +329,7 @@ export default {
     },
     sortChange({column, key, order, cb}) {
       let list = []
-      if (order === 'normal') {// 恢复原来数据
+      if (order === 'normal') {// restore original data(恢复原来数据)
         if (this.tableData.type === 'normal') {
           list = this.result.bodyRows.map((row) => {
             let newItem = {};
@@ -357,9 +357,9 @@ export default {
       }
       this.originRows = list;
       this.sortType = order;
-      // 排序后的数据进行存储
+      // The sorted data is stored(排序后的数据进行存储)
       const tmpResult = this.getResult();
-      // 还原初始字段
+      // restore original fields(还原初始字段)
       tmpResult.sortBodyRows = this.originRows.map(items => {
         return Object.values(items);
       });
@@ -384,14 +384,14 @@ export default {
       list.sort((a, b) => {
         let strA = a[key];
         let strB = b[key];
-        // 谁为非法值谁在前面
+        // Who is the illegal value and who is in front(谁为非法值谁在前面)
         if (strA === undefined || strA === null || strA === '' || strA === ' ' || strA === ' ' || strA === 'NULL') {
           return -1;
         }
         if (strB === undefined || strB === null || strB === '' || strB === ' ' || strB === ' ' || strB === 'NULL') {
           return 1;
         }
-        // 如果为整数型大小
+        // if integer size(如果为整数型大小)
         if (['int', 'float', 'double', 'long', 'short', 'bigint', 'decimal'].includes(valueType.toLowerCase())) {
 
           return strA - strB;
@@ -402,13 +402,13 @@ export default {
             return this.charCompare(strA[i], strB[i]);
           }
         }
-        // 如果通过上面的循环对比还比不出来,就无解了,直接返回-1
+        // If you can't compare it through the above loop comparison, there is no solution, and return -1 directly(如果通过上面的循环对比还比不出来,就无解了,直接返回-1)
         return -1;
       });
       return list;
     },
     charCompare(charA, charB) {
-      // 谁为非法值谁在前面
+      // Who is the illegal value and who is in front(谁为非法值谁在前面)
       if (charA === undefined || charA === null || charA === '' || charA === ' ' || charA === ' ') {
         return -1;
       }
@@ -435,7 +435,7 @@ export default {
         let headRows = this.result.headRows || [];
         let heads = [];
         let bodyRows = [];
-        // 判断是否进行过排序
+        // Determine whether to sort(判断是否进行过排序)
         switch(this.result.sortType) {
           case 'asc':
           case 'desc':
@@ -491,7 +491,7 @@ export default {
             row.forEach((item, index) => {
               try {
                 Object.assign(newItem, {
-                // 结果集数据改造后不能直接当key使用,得用表字段作为唯一的key
+                // After the result set data is transformed, it cannot be used directly as a key, and the table field must be used as the only key.(结果集数据改造后不能直接当key使用,得用表字段作为唯一的key)
                   [headRows[index].columnName]: item,
                 });
               } catch (error) {
@@ -535,7 +535,7 @@ export default {
     change(page = 1) {
       this.hightLightRow = null;
       this.page.current = page;
-      // 分页后的数据进行存储
+      // paging data for storage(分页后的数据进行存储)
       const tmpResult = this.getResult();
       tmpResult.current = this.page.current;
       tmpResult.size = this.pagesize;
@@ -553,7 +553,7 @@ export default {
       this.hightLightRow = null;
       this.page.size = size;
       this.page.current = 1;
-      // 分页后的数据进行存储
+      // paging data for storage(分页后的数据进行存储)
       const tmpResult = this.getResult();
       tmpResult.current = this.page.current;
       tmpResult.size = this.pagesize;
@@ -605,7 +605,7 @@ export default {
       });
     },
     onRowClick(currentRow) {
-      // 通过列命名去查找当前的类型
+      // Find the current type by column name(通过列命名去查找当前的类型)
       const row = Object.values(currentRow);
       this.rowToColumnData(row);
     },
@@ -714,7 +714,7 @@ export default {
         margin-left: 5px;
       }
     }
-    
+
     .set {
       width: 90px;
       // padding-right: 20px;
diff --git a/linkis-web/src/components/consoleComponent/resultsExport.vue b/linkis-web/src/components/consoleComponent/resultsExport.vue
index 832cf2dbb..fc3c7f4b7 100644
--- a/linkis-web/src/components/consoleComponent/resultsExport.vue
+++ b/linkis-web/src/components/consoleComponent/resultsExport.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <Modal
     v-model="show"
@@ -134,7 +134,7 @@ export default {
     },
     setFileTree() {
       if (isEmpty(this.fileTree)) {
-        // 取indexedDB缓存
+        // Fetch indexedDB cache(取indexedDB缓存)
         this.dispatch('IndexedDB:getTree', {
           name: 'scriptTree',
           cb: (res) => {
@@ -180,7 +180,7 @@ export default {
     },
     exportConfirm() {
       const tabName = `new_stor_${Date.now()}.out`;
-      // 导出结果集增加是否导出全部,当选择导出全部时,来源路径不带后缀文件
+      // Whether to export all the result set is added. When export all is selected, the source path does not have a suffix file.(导出结果集增加是否导出全部,当选择导出全部时,来源路径不带后缀文件)
       let temPath = this.currentPath;
       if (this.isAll) {
         temPath = temPath.substring(0, temPath.lastIndexOf('/'));
@@ -192,7 +192,7 @@ export default {
         id: md5Path,
         filename: tabName,
         filepath: '',
-        // saveAs表示临时脚本,需要关闭或保存时另存
+        // saveAs represents a temporary script that needs to be closed or saved when saved(saveAs表示临时脚本,需要关闭或保存时另存)
         saveAs: true,
         noLoadCache: true,
         code,
diff --git a/linkis-web/src/components/consoleComponent/steps.vue b/linkis-web/src/components/consoleComponent/steps.vue
index d48582655..fe4d397fc 100644
--- a/linkis-web/src/components/consoleComponent/steps.vue
+++ b/linkis-web/src/components/consoleComponent/steps.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div class="we-steps">
     <Row class="we-steps-row-first">
@@ -86,14 +86,14 @@ export default {
   },
   data() {
     return {
-      // completed 是完成状态,完成状态后不会有其他状态产生;
-      // special 是结果集衍生状态,用于判断结果集三个步骤中哪个步骤发生错误;
-      // failure 是错误状态,用于标记错误,红色高亮
-      // retry 是重试状态,需要在前面追加申请资源失败或执行失败两个状态
+      // completed is the completed state, no other state will be generated after the completed state;(completed 是完成状态,完成状态后不会有其他状态产生;)
+      // special is the derived state of the result set, which is used to determine which of the three steps of the result set has an error;(special 是结果集衍生状态,用于判断结果集三个步骤中哪个步骤发生错误;)
+      // failure is the error state, used to mark errors, highlighted in red(failure 是错误状态,用于标记错误,红色高亮)
+      // retry is a retry state, which needs to be preceded by two states: application resource failure or execution failure(retry 是重试状态,需要在前面追加申请资源失败或执行失败两个状态)
       stepsInfo: [
         { label: this.$t('message.common.steps.stepsInfo.Submitted'), value: 'Submitted', status: ['running'], isFinish: false },
-        // websocket不返回Inited,所以把第一个接收的execute接口作为Inited
-        // 这里是为了防止http方式去请求时,或者长时间未返回状态时,前台去主动请求到Inited状态的情况
+        // websocket does not return Inited, so the first received execute interface is used as Inited(websocket不返回Inited,所以把第一个接收的execute接口作为Inited)
+        // This is to prevent the front desk from actively requesting the Inited state when the http method is requested, or when the state has not been returned for a long time.(这里是为了防止http方式去请求时,或者长时间未返回状态时,前台去主动请求到Inited状态的情况)
         { label: this.$t('message.common.steps.stepsInfo.Inited'), value: 'Inited', status: ['running'], isFinish: false },
         { label: '...', value: 'ellipsis', status: ['running'], isFinish: false },
         { label: this.$t('message.common.steps.stepsInfo.Scheduled'), value: 'Scheduled', status: ['running'], isFinish: false },
@@ -143,15 +143,15 @@ export default {
         this.stepListData = list
       }
       this.stepListData.forEach((status, index) => {
-        // 要放每个步骤都不是地址引用,否则会出现isFinish这个状态错误
+        // It is necessary to put each step is not an address reference, otherwise there will be a state error of isFinish(要放每个步骤都不是地址引用,否则会出现isFinish这个状态错误)
         const step = cloneDeep(this.findStep(status));
         if (step) {
-          // 如果是特殊态的情况,要设置hover的列表,渲染的时候要显示它们的父状态:FailedToGetResult
+          // If it is a special state, set the list of hovers, and display their parent state when rendering: FailedToGetResult(如果是特殊态的情况,要设置hover的列表,渲染的时候要显示它们的父状态:FailedToGetResult)
           if (step.status.indexOf('special') !== -1) {
             const FailedToGetResult = this.findStep(FAILED_TO_GET_RESULT_STATUS);
             this.renderList.push(FailedToGetResult);
             this.setHoverList(step);
-          // 如果是重试态,则要在之前插入失败的状态
+          // If it is a retry state, insert the failed state before(如果是重试态,则要在之前插入失败的状态)
           } else if (step.value === RETRY_STATUS) {
             const prevOne = this.stepListData[index - 1];
             const completionValue = prevOne === SCHEDULED_STATUS ? 'FailedToApply' : 'FailedToExecute';
@@ -161,16 +161,16 @@ export default {
           } else {
             this.renderList.push(Object.assign(step, IS_FINISH, IS_LOADING));
           }
-          // 最后一个状态
+          // last state(最后一个状态)
           if (index === this.stepListData.length - 1) {
-          // 如果属于运行态,就在最后插入它的下一个状态
+          // If it belongs to the running state, insert its next state at the end(如果属于运行态,就在最后插入它的下一个状态)
             if (step.status.indexOf('running') !== -1) {
               step.isLoading = true;
               const findIndex = this.stepsInfo.findIndex((i) => i.value === status);
               if (findIndex !== -1) {
                 this.renderList.push(this.stepsInfo[findIndex + 1]);
               }
-            // 如果是重试态,就在后面插入“资源申请”中这个状态
+            // If it is a retry state, insert this state in the "resource application" later(如果是重试态,就在后面插入“资源申请”中这个状态)
             } else if (step.value === RETRY_STATUS) {
               step.isLoading = true;
               const scheduled = this.findStep(SCHEDULED_STATUS);
diff --git a/linkis-web/src/components/consoleComponent/toolbar.vue b/linkis-web/src/components/consoleComponent/toolbar.vue
index e63eeed6d..4f734fb6a 100644
--- a/linkis-web/src/components/consoleComponent/toolbar.vue
+++ b/linkis-web/src/components/consoleComponent/toolbar.vue
@@ -254,7 +254,7 @@ export default {
       },
       isIconLabelShow: true,
       iconSize: 14,
-      allDownload: false, // 是否下载全部结果集
+      allDownload: false, // whether to download all result sets(是否下载全部结果集)
       resultsShowType: '2'
     };
   },
@@ -304,7 +304,7 @@ export default {
       this.cancelPopup(type);
     },
     showResultAction() {
-      // 当切换结果集可视化按钮时
+      // When toggling the result set visualization button(当切换结果集可视化按钮时)
       if (this.visualShow=='table') {
         this.popup.visualis = true;
       } else {
@@ -330,19 +330,19 @@ export default {
       }
       const filename = `Result_${fileName}_${timestamp}`;
       let temPath = this.currentPath;
-      // api执行下载的结果集路径不一样
+      // The result set path of the api execution download is different(api执行下载的结果集路径不一样)
       let apiPath = `${this.getResultUrl}/resultsetToExcel`;
       if (this.isAll && this.allDownload) {
         temPath = temPath.substring(0, temPath.lastIndexOf('/'));
         apiPath = `${this.getResultUrl}/resultsetsToExcel`
       }
       let url = `http://${window.location.host}/api/rest_j/v1/` + apiPath +'?path=' + temPath + '&charset=' + charset + '&outputFileType=' + splitor + '&nullValue=' + nullValue + '&outputFileName=' + filename;
-      // 如果是api执行页获取结果集,需要带上taskId
+      // If the api execution page gets the result set, you need to bring the taskId(如果是api执行页获取结果集,需要带上taskId)
       if(this.getResultUrl !== 'filesystem') {
         url += `&taskId=${this.comData.taskID}`
       }
 
-      // 下载之前条用心跳接口确认是否登录
+      // Before downloading, use the heartbeat interface to confirm whether to log in(下载之前条用心跳接口确认是否登录)
       await api.fetch('/user/heartbeat', 'get');
 
       const link = document.createElement('a');
diff --git a/linkis-web/src/components/editor/editor.vue b/linkis-web/src/components/editor/editor.vue
index 023c6a960..7ffa5558e 100644
--- a/linkis-web/src/components/editor/editor.vue
+++ b/linkis-web/src/components/editor/editor.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div
     :class="editorName"
@@ -70,7 +70,7 @@ export default {
       editor: null,
       editorModel: null,
       decorations: null,
-      isParserClose: true,// 默认关闭语法验证
+      isParserClose: true,// Syntax validation is turned off by default(默认关闭语法验证)
       closeParser: null,
       openParser: null,
       sqlParser: null,
@@ -116,7 +116,7 @@ export default {
         }
         let readOnly = this.currentConfig.readOnly;
         if (readOnly) {
-          // editor.setValue 和 model.setValue 都会丢失撤销栈
+          // Both editor.setValue and model.setValue lose the undo stack(editor.setValue 和 model.setValue 都会丢失撤销栈)
           // this.editorModel.setValue(newValue);
           let range = this.editor.getModel().getFullModelRange();
           const text = newValue;
@@ -128,7 +128,7 @@ export default {
           this.editorModel.pushEditOperations('insertValue', [op]);
 
         } else {
-        // 有撤销栈
+        // With undo stack(有撤销栈)
           let range = this.editor.getModel().getFullModelRange();
           const text = newValue;
           const op = {
@@ -152,11 +152,11 @@ export default {
     this.initMonaco();
   },
   beforeDestroy: function() {
-    // 销毁 editor,进行gc
+    // 销毁 editor,进行gc(销毁 editor,进行gc)
     this.editor && this.editor.dispose();
   },
   methods: {
-    // 初始化
+    // initialization(初始化)
     initMonaco() {
       this.editor = monaco.editor.create(this.$el, this.currentConfig);
       this.monaco = monaco;
@@ -177,7 +177,7 @@ export default {
         this.$emit('input', this.getValue());
       }), 100);
       this.editor.onContextMenu(debounce(() => {
-        // 需要调换文字的右键菜单功能
+        // The right-click menu function that needs to change the text(需要调换文字的右键菜单功能)
         const selectList = [{label: 'Change All Occurrences', text: '改变所有出现'}, {label: 'Format Document', text: '格式化'}, {label: 'Command Palette', text: '命令面板'}, {label: 'Cut', text: '剪切'}, {label: 'Copy', text: '复制'}];
         if (localStorage.getItem('locale') === 'zh-CN') {
           selectList.forEach((item) => {
@@ -198,13 +198,13 @@ export default {
     redo() {
       this.editor.trigger('anyString', 'redo');
     },
-    // 保存当前的值
+    // save the current value(保存当前的值)
     save() {
       if (this.editorModel) {
         this.deltaDecorations();
       }
     },
-    // 保存的编辑状态 ViewState
+    // Saved edit state ViewState(保存的编辑状态 ViewState)
     /**
      *  Yes, editor.saveViewState stores:
         cursor position
@@ -225,25 +225,25 @@ export default {
         this.editorModel.viewState = this.editor.saveViewState();
       }
     },
-    // 重置之前保存的编辑状态 ViewState
+    // Reset the previously saved edit state ViewState(重置之前保存的编辑状态 ViewState)
     restoreViewState() {
       if (this.editorModel && this.editorModel.viewState) {
         this.editor.restoreViewState(this.editorModel.viewState);
       }
     },
-    // 获取编辑器内容
+    // Get editor content(获取编辑器内容)
     getValue() {
       return this.editor.getValue({
         lineEnding: '\n',
         preserveBOM: false,
       });
     },
-    // 获取选择的内容
+    // Get selected content(获取选择的内容)
     getValueInRange() {
       const selection = this.editor.getSelection();
       return selection.isEmpty() ? null : this.editor.getModel().getValueInRange(selection);
     },
-    // 在编辑器选中的范围插入值
+    // Insert a value in the selected range in the editor(在编辑器选中的范围插入值)
     insertValueIntoEditor(value) {
       if (this.editor) {
         const SelectedRange = this.editor.getSelection();
@@ -270,22 +270,22 @@ export default {
       }
     },
     addCommands() {
-      // 保存当前脚本
+      // save the current script(保存当前脚本)
       this.editor.addCommand(monaco.KeyMod.CtrlCmd + monaco.KeyCode.KEY_S, () => {
         this.$emit('on-save');
       });
-      // 运行当前脚本
+      // run the current script(运行当前脚本)
       if (this.executable) {
         this.editor.addCommand(monaco.KeyCode.F3, () => {
           this.$emit('on-run');
         });
       }
-      // 调用浏览器本身的转换小写动作
+      // Invokes the convert lowercase action of the browser itself(调用浏览器本身的转换小写动作)
       this.editor.addCommand(monaco.KeyMod.CtrlCmd + monaco.KeyMod.Shift
                     + monaco.KeyCode.KEY_U, () => {
         this.editor.trigger('toLowerCase', 'editor.action.transformToLowercase');
       });
-      // 调用浏览器本身的转换大写动作
+      // Invokes the convert caps action of the browser itself(调用浏览器本身的转换大写动作)
       this.editor.addCommand(monaco.KeyMod.CtrlCmd + monaco.KeyCode.KEY_U, () => {
         this.editor.trigger('toUpperCase', 'editor.action.transformToUppercase');
       });
@@ -384,7 +384,7 @@ export default {
       });
 
       if (this.language === 'hql') {
-        // 控制语法检查
+        // Control grammar check(控制语法检查)
         this.closeParser = this.editor.createContextKey('closeParser', !this.isParserClose);
         this.openParser = this.editor.createContextKey('openParser', this.isParserClose);
         this.editor.addAction({
@@ -392,13 +392,13 @@ export default {
           label: this.$t('message.common.monacoMenu.GBYFJC'),
           keybindings: [],
           keybindingContext: null,
-          // 用于控制右键菜单的显示
+          // Used to control the display of the right-click menu(用于控制右键菜单的显示)
           precondition: 'closeParser',
           contextMenuGroupId: 'control',
           contextMenuOrder: 2.0,
           run() {
             vm.isParserClose = true;
-            // 控制右键菜单的显示
+            // Controls the display of the right-click menu(控制右键菜单的显示)
             vm.openParser.set(true);
             vm.closeParser.set(false);
             vm.deltaDecorations();
@@ -429,7 +429,7 @@ export default {
         const lang = vm.language;
         const app = vm.application;
         if (lang === 'python' || (app === 'spark' && ['java', 'hql'].indexOf(lang) !== -1) || app === 'hive') {
-          // 高危语法的高亮
+          // High-risk syntax highlighting(高危语法的高亮)
           highRiskList = vm.setHighRiskGrammar();
           const decora = vm.decorations || [];
           let isParseSuccess = true;
@@ -446,7 +446,7 @@ export default {
                 validParser.loc.last_line,
                 validParser.loc.last_column + 1,
               );
-              // 第一个元素是对错误的关键词做高亮的,第二个元素是对行和margin块做高亮的
+              // The first element is highlighting the wrong keywords, the second is highlighting lines and margin blocks(第一个元素是对错误的关键词做高亮的,第二个元素是对行和margin块做高亮)的
               newDecora = [{
                 range,
                 options: {
@@ -457,16 +457,16 @@ export default {
                 options: {
                   isWholeLine: true,
                   className: 'contentClass',
-                  // 要在margin中使用色块,编辑器必须将glyphMargin设置为true
+                  // To use color blocks in margin, the editor must set glyphMargin to true(要在margin中使用色块,编辑器必须将glyphMargin设置为true)
                   glyphMarginClassName: 'glyphMarginClass',
-                  // hover提示,文档中使用glyphHoverMessage是错的
+                  // hover prompt, the use of glyphHoverMessage in the documentation is wrong(hover提示,文档中使用glyphHoverMessage是错的)
                   hoverMessage: {
                     value: warningLalbel,
                   },
                 },
               }];
             }
-            // 第一个参数是旧的,用于清空decorations
+            // The first parameter is old, used to clear decorations(第一个参数是旧的,用于清空decorations)
             vm.decorations = vm.editor.deltaDecorations(decora, newDecora.concat(highRiskList));
             vm.$emit('is-parse-success', isParseSuccess);
           } else {
@@ -481,7 +481,7 @@ export default {
           }
         }
       } else {
-        // 关闭语法检查时,如果编辑器上有错误色块,先清除
+        // When the grammar check is turned off, if there is an error color block on the editor, clear it first(关闭语法检查时,如果编辑器上有错误色块,先清除)
         const decora = vm.decorations || [];
         vm.decorations = vm.editor.deltaDecorations(decora, []);
         if (cb) {
@@ -497,14 +497,14 @@ export default {
         highRiskGrammarToken = highRiskGrammar.scala;
       }
       if (highRiskGrammarToken && highRiskGrammarToken.length) {
-        // 因为正则的token有多个,所以要用所有的规则去遍历
+        // Because there are multiple regular tokens, use all the rules to traverse(因为正则的token有多个,所以要用所有的规则去遍历)
         highRiskGrammarToken.forEach((key) => {
-          // 使用正则去抓取编辑器中的匹配文本,是一个数组
+          // Use regular to grab the matching text in the editor, which is an array(使用正则去抓取编辑器中的匹配文本,是一个数组)
           const errorLabel = this.editorModel.findMatches(key, false, true, false, null, true);
           if (errorLabel.length) {
             let formatedRiskGrammer = [];
             errorLabel.forEach((item) => {
-              // 拿到当前整行的内容
+              // Get the content of the current entire line(拿到当前整行的内容)
               const lineContent = this.editorModel.getLineContent(item.range.startLineNumber);
               let reg = /^[^\-\-]\s*/;
               if (this.language === 'python') {
@@ -513,7 +513,7 @@ export default {
                 reg = /^[^\/\/]\s*/;
               }
               const isHasComment = reg.test(lineContent);
-              // 判断是否有注释
+              // Determine if there are annotations(判断是否有注释)
               if (isHasComment) {
                 formatedRiskGrammer.push({
                   range: item.range,
diff --git a/linkis-web/src/components/editor/index.scss b/linkis-web/src/components/editor/index.scss
index 5a6b7e090..7eb7c388b 100644
--- a/linkis-web/src/components/editor/index.scss
+++ b/linkis-web/src/components/editor/index.scss
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 @import '~@/common/style/variables.scss';
 .we-editor{
 	height: 100%;
@@ -33,7 +33,7 @@
 		color: #ff9900 !important;
 		cursor: pointer;
 		font-style: oblique;
-		// 波浪线
+		// wavy line(波浪线)
 		&::after {
 			content: '';
 			position: absolute;
diff --git a/linkis-web/src/components/editor/keyword/hql.js b/linkis-web/src/components/editor/keyword/hql.js
index edbe0f4c6..dcab9009e 100644
--- a/linkis-web/src/components/editor/keyword/hql.js
+++ b/linkis-web/src/components/editor/keyword/hql.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 import { isEmpty } from 'lodash';
 import { getHiveList, getReturnList, getFormatProposalsList } from '../util';
 import storage from '@/common/helper/storage';
@@ -1934,7 +1934,7 @@ const kewordInfoProposals = [{
   detail: 'build-in parameters',
 },
 ];
-// 常用语法结构
+// Common grammatical structures(常用语法结构)
 const commonGrammaticalStruCture = [{
   label: 'drop table',
   documentation: '删除hive表',
@@ -1966,7 +1966,7 @@ const commonGrammaticalStruCture = [{
   detail: '常用语法结构',
 },
 ];
-// 系统内嵌变量
+// System Embedded Variables(系统内嵌变量)
 const buildInVariableProposals = [{
   label: 'run_date',
   documentation: '当前日期的前一天',
diff --git a/linkis-web/src/components/editor/keyword/python.js b/linkis-web/src/components/editor/keyword/python.js
index 6dc8fd8ea..e98a63fd7 100644
--- a/linkis-web/src/components/editor/keyword/python.js
+++ b/linkis-web/src/components/editor/keyword/python.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 import { isEmpty } from 'lodash';
 import { getHiveList, getReturnList, getFormatProposalsList } from '../util';
@@ -233,7 +233,7 @@ const pyKeywordInfoProposals = [
   },
 ];
 
-// 常用语法结构
+// Common grammatical structures(常用语法结构)
 /**
  *
  const commonGrammaticalStruCture = [
diff --git a/linkis-web/src/components/editor/keyword/sas.js b/linkis-web/src/components/editor/keyword/sas.js
index f9d5996c9..576617237 100644
--- a/linkis-web/src/components/editor/keyword/sas.js
+++ b/linkis-web/src/components/editor/keyword/sas.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 import hql from './hql';
 
@@ -135,7 +135,7 @@ const sasProposals = [
   },
 ];
 
-// 继承hql相关的keyword
+// Inherit hql related keywords(继承hql相关的keyword)
 const kewordInfoProposals = [...hql.keyword, ...sasProposals];
 
 export default {
diff --git a/linkis-web/src/components/editor/languages/hql.js b/linkis-web/src/components/editor/languages/hql.js
index b688b3a62..2612eb0e0 100644
--- a/linkis-web/src/components/editor/languages/hql.js
+++ b/linkis-web/src/components/editor/languages/hql.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 import sqlFormatter from '../sqlFormatter/sqlFormatter';
 
@@ -1305,7 +1305,7 @@ export default {
     monaco.languages.setLanguageConfiguration('hql', richLanguageConfiguration);
     monaco.languages.setMonarchTokensProvider('hql', langDefinition);
 
-    // 处理格式化
+    // handle formatting(处理格式化)
     monaco.languages.registerDocumentFormattingEditProvider('hql', {
       provideDocumentFormattingEdits: function(model) {
         let range = model.getFullModelRange();
diff --git a/linkis-web/src/components/editor/languages/sas.js b/linkis-web/src/components/editor/languages/sas.js
index f04e02624..038f2ea95 100644
--- a/linkis-web/src/components/editor/languages/sas.js
+++ b/linkis-web/src/components/editor/languages/sas.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 import hql from './hql.js';
 import sqlFormatter from '../sqlFormatter/sqlFormatter';
@@ -41,14 +41,14 @@ const sasDefinition = {
 
 export default {
   register(monaco) {
-    // 继承和合并hql相关的keyword
+    // Inherit and merge hql related keywords(继承和合并hql相关的keyword)
     const langDefinition = hql.definition;
     langDefinition.keywords.concat(sasDefinition);
     monaco.languages.register({ id: 'sas' });
     monaco.languages.setLanguageConfiguration('sas', hql.config);
     monaco.languages.setMonarchTokensProvider('sas', langDefinition);
 
-    // 处理格式化
+    // handle formatting(处理格式化)
     monaco.languages.registerDocumentFormattingEditProvider('sas', {
       provideDocumentFormattingEdits: function(model) {
         let range = model.getFullModelRange();
diff --git a/linkis-web/src/components/editor/monaco-loader.js b/linkis-web/src/components/editor/monaco-loader.js
index be4a9a1ff..2709339e8 100644
--- a/linkis-web/src/components/editor/monaco-loader.js
+++ b/linkis-web/src/components/editor/monaco-loader.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 import hql from './languages/hql';
 import log from './languages/log';
@@ -35,17 +35,17 @@ const findLang = find(languagesList, (lang) => {
   return lang.id === 'hql';
 });
 if (!findLang) {
-  // 注册languages
+  // Register languages(注册languages)
   hql.register(monaco);
   log.register(monaco);
   sas.register(monaco);
   sh.register(monaco);
   out.register(monaco);
-  // 注册theme
+  // register theme(注册theme)
   defaultView.register(monaco);
   logview.register(monaco);
 
-  // 注册关键字联想
+  // (Register Keyword Prediction)
   hqlKeyword.register(monaco);
   pythonKeyword.register(monaco);
   sasKeyword.register(monaco);
diff --git a/linkis-web/src/components/editor/util.js b/linkis-web/src/components/editor/util.js
index b6c8b2c55..ce7fe6568 100644
--- a/linkis-web/src/components/editor/util.js
+++ b/linkis-web/src/components/editor/util.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 import { partition, map, filter, isFunction } from 'lodash';
 import globalcache from '@/apps/scriptis/service/db/globalcache.js';
@@ -22,7 +22,7 @@ import storage from '@/common/helper/storage';
 import debug_log from '@/common/util/debug';
 
 /**
- * 去indexDb中获取hive的列表和udf函数列表
+ * Go to indexDb to get the hive list and udf function list(去indexDb中获取hive的列表和udf函数列表)
  * @param {*} monaco
  * @param {*} lang
  */
@@ -59,11 +59,11 @@ const getHiveList = async (monaco, lang) => {
 
 /**
  *
- * @param {*} match 匹配到的文本
- * @param {*} proposals 需要过滤的列表
- * @param {*} fieldString 过滤条件中的字段名
- * @param {*} attachMatch 附加的过滤条件
- * @param {*} needSplit 是否需要对insertText进行截取
+ * @param {*} match matched text(匹配到的文本)
+ * @param {*} proposals list to filter(需要过滤的列表)
+ * @param {*} fieldString Field name in filter condition(过滤条件中的字段名)
+ * @param {*} attachMatch Additional filters(附加的过滤条件)
+ * @param {*} needSplit Whether to intercept insertText(是否需要对insertText进行截取)
  * @return {*}
  */
 const getReturnList = ({ match, proposals, fieldString, attachMatch, needSplit, position }, monaco) => {
@@ -85,7 +85,7 @@ const getReturnList = ({ match, proposals, fieldString, attachMatch, needSplit,
   if (attachMatch && !needSplit) {
     items = filter(proposals, (it) => it[fieldString].startsWith(attachMatch) && regexp.test(it[fieldString]));
   } else if (attachMatch && needSplit) {
-    // 这里是对例如create table和drop table的情况进行处理
+    // Here is the processing of situations such as create table and drop table(这里是对例如create table和drop table的情况进行处理)
     proposals.forEach((it) => {
       if (regexp.test(it[fieldString]) && it.label.indexOf(attachMatch[1]) === 0) {
         const text = it.insertText;
@@ -112,13 +112,13 @@ const getReturnList = ({ match, proposals, fieldString, attachMatch, needSplit,
 }
 
 /**
- * 对拿到的数据格式化成completionList格式
- * @param {*} monaco 编辑器
- * @param {*} list 格式化列表
- * @param {*} lang 脚本类型
- * @param {*} type 类型(函数或者全局变量)
- * @param {*} isDiy 需要对输入进行定制化
- * @return {*} 格式化后的列表
+ * Format the obtained data into completionList format(对拿到的数据格式化成completionList格式)
+ * @param {*} monaco editor(编辑器)
+ * @param {*} list formatted list(格式化列表)
+ * @param {*} lang script type(脚本类型)
+ * @param {*} type Type (function or global variable)(类型(函数或者全局变量))
+ * @param {*} isDiy 需要对输入进行定制化(需要对输入进行定制化)
+ * @return {*} formatted list(格式化后的列表)
  */
 const getFormatProposalsList = (monaco, list, lang, type, isDiy, isSnippet) => {
   let formatList = [];
diff --git a/linkis-web/src/components/log/index.vue b/linkis-web/src/components/log/index.vue
index b4fff29d7..da73836c4 100644
--- a/linkis-web/src/components/log/index.vue
+++ b/linkis-web/src/components/log/index.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div class="log-editor-wrap">
     <div class="log-tools">
@@ -148,7 +148,7 @@ export default {
       const val = this.searchText;
       if (!log) return MatchText;
       if (val) {
-        // 这部分代码是为了让正则表达式不报错,所以在特殊符号前面加上\
+        // This part of the code is to make the regular expression not report an error, so add \ in front of the special symbol(这部分代码是为了让正则表达式不报错,所以在特殊符号前面加上\)
         let formatedVal = '';
         forEach(val, (o) => {
           if (/^[\w\u4e00-\u9fa5]$/.test(o)) {
@@ -157,7 +157,7 @@ export default {
             formatedVal += `\\${o}`;
           }
         });
-        // 全局和不区分大小写模式,正则是匹配searchText前后出了换行符之外的字符
+        // Global and case-insensitive mode, the regular pattern is to match characters other than newlines before and after searchText(全局和不区分大小写模式,正则是匹配searchText前后出了换行符之外的字符)
         const regexp = new RegExp(`.*${formatedVal}.*`, 'gi');
         MatchText = filter(log.split('\n'), (item) => {
           return regexp.test(item);
diff --git a/linkis-web/src/components/menu/index.vue b/linkis-web/src/components/menu/index.vue
index 6b0a7e318..2e15cb6bc 100644
--- a/linkis-web/src/components/menu/index.vue
+++ b/linkis-web/src/components/menu/index.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div
     v-clickoutside="handleOutsideClick"
@@ -78,7 +78,7 @@ export default {
   methods: {
     setPositionFromEvent(e) {
       const { pageX, pageY } = e;
-      // 窗口的高度
+      // height of the window(窗口的高度)
       const innerHeight = window.innerHeight;
       const innerwidth = window.innerWidth;
       const top = pageY - (document.body.scrollTop);
diff --git a/linkis-web/src/components/navbar/nav.js b/linkis-web/src/components/navbar/nav.js
index 329bc2622..bde1a4e33 100644
--- a/linkis-web/src/components/navbar/nav.js
+++ b/linkis-web/src/components/navbar/nav.js
@@ -5,29 +5,29 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 /**
- * 任务
+ * Task(任务)
  */
 class Nav {
   /**
-     * 构造器
-     * @param {*} option 
+     * Constructor(构造器)
+     * @param {*} option
      */
   constructor(option) {
-    // 侧边栏type
+    // sidebar type(侧边栏type)
     this.barType = option.barType;
-    // 显示nav icon list
+    // show nav icon list(显示nav icon list)
     this.navList = option.navList;
   }
   /**
diff --git a/linkis-web/src/components/navbar/navbar.vue b/linkis-web/src/components/navbar/navbar.vue
index 26d0cf040..4221a6d06 100644
--- a/linkis-web/src/components/navbar/navbar.vue
+++ b/linkis-web/src/components/navbar/navbar.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div class="we-file-navbar">
     <we-searchbox
@@ -70,7 +70,7 @@ export default {
     placeholder: {
       type: String,
       default () {
-        // 这里不能写成箭头函数 要拿到this值
+        // This can't be written as an arrow function to get the this value(这里不能写成箭头函数 要拿到this值)
         return this.$t('message.common.navBar.dataStudio.searchPlaceholder')
       }
     },
diff --git a/linkis-web/src/components/panel/panel.vue b/linkis-web/src/components/panel/panel.vue
index 11e42bf45..16cf22557 100644
--- a/linkis-web/src/components/panel/panel.vue
+++ b/linkis-web/src/components/panel/panel.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div
     :class="getClass"
@@ -107,7 +107,7 @@ export default {
       }
       this.readyToAllocationItemLength = 0;
       if (this.diretion == 'horizontal') {
-        // 如果item设置了width,则根据width计算出它的currentWidth。如果没设置width,则平均 总宽度减去已经设置过的宽度
+        // If the item has width set, its currentWidth is calculated based on width. If width is not set, the average total width minus the width that has been set(如果item设置了width,则根据width计算出它的currentWidth。如果没设置width,则平均 总宽度减去已经设置过的宽度)
         this.readyToAllocationWidth = this.clientWidth;
         this.items.forEach((element) => {
           // element.index = this.$children.indexOf(element) + 1;
@@ -132,7 +132,7 @@ export default {
         });
       }
       if (this.diretion == 'vertical') {
-        // 高度同上
+        // Same height(高度同上)
         this.readyToAllocationHeight = this.clientHeight;
         this.items.forEach((element) => {
           if (element.height) {
@@ -242,7 +242,7 @@ export default {
         } else if (this.secondItem.maxSize && secondSize > this.secondItem.maxSize) {
           this.currentChange = this.secondItem[variable] - this.secondItem.maxSize;
         } else if (fristSize < 10) {
-          // 最小宽度为10,不要就要拖的重合了
+          // The minimum width is 10, don't drag and overlap(最小宽度为10,不要就要拖的重合了)
           this.currentChange = 10 - this.fristItem[variable];
         } else if (secondSize < 10) {
           this.currentChange = this.secondItem[variable] - 10;
@@ -269,7 +269,7 @@ export default {
           variable = 'currentHeight';
         }
         const AnimationFrameId = elementResizeEvent.requestAnimationFrame(() => {
-          // 停止后记录更新当前的currentWidth或者currentHeight
+          // After stopping, the record updates the current currentWidth or currentHeight(停止后记录更新当前的currentWidth或者currentHeight)
           let fristSize = this.fristItem[variable] + this.currentChange;
           let secondSize = this.secondItem[variable] - this.currentChange;
           this.fristItem[variable] = fristSize;
diff --git a/linkis-web/src/components/table/table.vue b/linkis-web/src/components/table/table.vue
index 4e5fd331e..aa13f59ac 100644
--- a/linkis-web/src/components/table/table.vue
+++ b/linkis-web/src/components/table/table.vue
@@ -137,32 +137,32 @@ export default {
   name: "WbTable",
   props: {
     loadNum: {
-      //默认加载行数
+      //Default number of rows to load(默认加载行数)
       type: [Number, String],
       default() {
         return 50;
       }
     },
     tdHeight: {
-      //表格行高
+      //table row height(表格行高)
       type: [Number, String],
       default() {
         return 40;
       }
     },
     tableHeight: {
-      //表格高度
+      //table height(表格高度)
       type: [Number, String],
     },
     tableList: {
-      //所有表格数据
+      //All tabular data(所有表格数据)
       type: Array,
       default() {
         return [];
       }
     },
     columns: {
-      //所有表格匹配规则
+      //All table matching rules(所有表格匹配规则)
       type: Array,
       default() {
         return [];
@@ -173,7 +173,7 @@ export default {
       default: true
     },
     highlightRow: {},
-    outerSort: {}, // 若外部排序则点击表头排序图标只触发事件
+    outerSort: {}, // If external sorting, clicking the sorting icon in the header only triggers the event(若外部排序则点击表头排序图标只触发事件)
     scrollBarWidth: {
       type: Number,
       default(){
@@ -184,14 +184,14 @@ export default {
   data() {
     return {
       showLoad: false,
-      showTableList: [], //实际显示的表格数据
-      loadedNum: 0, //实际渲染的数据数量
-      dataTotal: 0, //总数据条数
-      dataTop: 0, //渲染数据顶部的高度
-      scrollTop: 0, //滚动上下的距离
-      scrollHeight: 0, //数据滚动的高度
+      showTableList: [], //table data actually displayed(实际显示的表格数据)
+      loadedNum: 0, //The amount of data actually rendered(实际渲染的数据数量)
+      dataTotal: 0, //total data(总数据条数)
+      dataTop: 0, //The height of the top of the rendered data(渲染数据顶部的高度)
+      scrollTop: 0, //scroll up and down distance(滚动上下的距离)
+      scrollHeight: 0, //The height of the data scroll(数据滚动的高度)
       handleScroll: null,
-      selectIndex: -1, //选择的行
+      selectIndex: -1, //selected row(选择的行)
       sortType: {},
       noDataStyle: {
         width: '100%'
@@ -200,7 +200,7 @@ export default {
   },
   computed: {
     tableOtherBottom() {
-      //表格剩余数据底部高度
+      //The bottom height of the remaining data in the table(表格剩余数据底部高度)
       return (
         this.dataTotal * this.tdHeight -
         this.dataTop -
@@ -214,9 +214,9 @@ export default {
         return this.columns;
       }
     },
-    // 计算表格实际数据低于渲染条数时的高度
+    // Calculate the height when the actual data of the table is lower than the number of rendered bars(计算表格实际数据低于渲染条数时的高度)
     tableHeightCalc() {
-      let dataHeightt = (this.tdHeight + 1) * this.loadedNum + 43;// 43为表头和预留高度, +1 为border
+      let dataHeightt = (this.tdHeight + 1) * this.loadedNum + 43;// 43 is the header and reserved height, +1 is the border(43为表头和预留高度, +1 为border)
       if(this.tableHeight) return this.tableHeight;
       if(this.tableList.length <= 0) return 100;
       return dataHeightt
@@ -224,11 +224,11 @@ export default {
   },
   methods: {
     /**
-     * @typedef {Object} Options -配置项
-     * @property {Boolean} leading -开始是否需要额外触发一次
-     * @property {this} context -上下文
+     * @typedef {Object} Options -configuration item(配置项)
+     * @property {Boolean} leading -Whether an additional trigger is required to start(开始是否需要额外触发一次)
+     * @property {this} context -context(上下文)
      **/
-    //使用Proxy实现函数防抖
+    //Use Proxy to implement function anti-shake(使用Proxy实现函数防抖)
     proxy(
       func,
       time,
@@ -241,15 +241,15 @@ export default {
       let _this = this;
       let handler = {
         apply(target, _, args) {
-          //代理函数调用
+          //proxy function call(代理函数调用)
           let bottomScroll = document.getElementById("bottomDiv");
           let topScroll = document.getElementById("topDiv");
           if (bottomScroll.scrollTop == _this.scrollTop) {
-            //左右滚动
+            //scroll left and right(左右滚动)
             _this.handleScrollLeft(topScroll, bottomScroll);
             return;
           }
-          // 和闭包实现核心逻辑相同
+          // The same as the core logic of closure implementation(和闭包实现核心逻辑相同)
           if (!options.leading) {
             if (timer) return;
             timer = setTimeout(() => {
@@ -269,42 +269,42 @@ export default {
       };
       return new Proxy(func, handler);
     },
-    //是否显示加载中
+    //Whether to show loading(是否显示加载中)
     needLoad(bottomScroll) {
       if (
         Math.abs(bottomScroll.scrollTop - this.scrollTop) >
         this.tdHeight * this.loadNum
       ) {
-        this.showLoad = true; //显示加载中
+        this.showLoad = true; //show loading(显示加载中)
         this.scrollTop = bottomScroll.scrollTop;
       }
     },
-    //滚动处理
+    //scroll processing(滚动处理)
     scrollProcessing() {
       // const last = $event && $event.last;
       const bottomScroll = document.getElementById("bottomDiv");
       // const topScroll = document.getElementById("topDiv");
-      const direction = bottomScroll.scrollTop >= this.scrollTop; //滚动方向
+      const direction = bottomScroll.scrollTop >= this.scrollTop; //scroll direction(滚动方向)
       // if(this.needLoad(last,bottomScroll))return;
-      //记录上一次向下滚动的位置
+      //Record the last scroll down position(记录上一次向下滚动的位置)
       this.scrollTop = bottomScroll.scrollTop;
       direction ? this.handleScrollBottom() : this.handleScrollTop();
       this.showLoad = false;
     },
-    //滚动条向上滚动
+    //scroll bar up(滚动条向上滚动)
     handleScrollTop() {
       if (this.dataTop < this.scrollTop) {
-        //如果最后滚动位置在数据上方应该调用向下滚动
+        //scroll down should be called if the last scroll position is above the data(如果最后滚动位置在数据上方应该调用向下滚动)
         this.handleScrollBottom();
         return;
       }
-      //如果加载的数据小于默认加载的数据量
+      //If the loaded data is less than the default amount of data loaded(如果加载的数据小于默认加载的数据量)
       if (this.dataTotal > this.loadNum) {
-        const computeHeight = this.dataTop; //数据需要处理的时候的高度
-        const maxHeigth = computeHeight - this.loadNum * this.tdHeight; //不需要清除所有数据的高度
+        const computeHeight = this.dataTop; //The height at which the data needs to be processed(数据需要处理的时候的高度)
+        const maxHeigth = computeHeight - this.loadNum * this.tdHeight; //No need to clear all data height(不需要清除所有数据的高度)
         if (this.scrollTop < computeHeight && this.scrollTop >= maxHeigth) {
-          //如果数据总数大于已经渲染的数据
-          const dataTopNum = parseInt(this.dataTop / this.tdHeight); //数据顶部条数
+          //If the total data is greater than the already rendered data(如果数据总数大于已经渲染的数据)
+          const dataTopNum = parseInt(this.dataTop / this.tdHeight); //Number of top bars of data(数据顶部条数)
           dataTopNum - this.loadNum >= 0
             ? this.dataProcessing(
               this.loadNum,
@@ -324,19 +324,19 @@ export default {
         }
       }
     },
-    //滚动条向下滚动
+    //scroll bar scroll down(滚动条向下滚动)
     handleScrollBottom() {
       if (this.dataTop > this.scrollTop) {
         this.handleScrollTop();
         return;
       }
       const computeHeight =
-        this.dataTop + this.loadedNum * this.tdHeight - this.tableHeightCalc; //数据需要处理的时候的高度
-      const maxHeight = computeHeight + this.tdHeight * this.loadNum; //不需要清除所有数据的高度
+        this.dataTop + this.loadedNum * this.tdHeight - this.tableHeightCalc; //The height at which the data needs to be processed(数据需要处理的时候的高度)
+      const maxHeight = computeHeight + this.tdHeight * this.loadNum; //No need to clear all data height(不需要清除所有数据的高度)
       if (this.scrollTop > computeHeight && this.scrollTop <= maxHeight) {
-        //如果滚动高度到达数据显示底部高度
+        //If the scroll height reaches the bottom height of the data display(如果滚动高度到达数据显示底部高度)
         if (this.dataTotal > this.loadedNum) {
-          const dataTopNum = parseInt(this.dataTop / this.tdHeight); //数据顶部条数
+          const dataTopNum = parseInt(this.dataTop / this.tdHeight); //Number of top bars of data(数据顶部条数)
           const total = dataTopNum + this.loadedNum + this.loadNum;
           const otherTotal = this.dataTotal - (dataTopNum + this.loadedNum);
           total <= this.dataTotal
@@ -348,7 +348,7 @@ export default {
             : this.dataProcessing(otherTotal, otherTotal, "bottom");
         }
       } else if (this.scrollTop > maxHeight) {
-        let scrollNum = parseInt(this.scrollTop / this.tdHeight); //滚动的位置在第几条数据
+        let scrollNum = parseInt(this.scrollTop / this.tdHeight); //The scroll position is in the first few data(滚动的位置在第几条数据)
         scrollNum + this.loadNum <= this.dataTotal
           ? this.dataProcessing(scrollNum, this.loadNum * 2, "bottomAll")
           : this.dataProcessing(
@@ -358,61 +358,61 @@ export default {
           );
       }
     },
-    //滚动条左右滚动
+    //scroll bar scroll left and right(滚动条左右滚动)
     handleScrollLeft(topScroll, bottomScroll) {
-      //顶部表头跟随底部滚动
+      //The top header scrolls with the bottom(顶部表头跟随底部滚动)
       topScroll.scrollTo(bottomScroll.scrollLeft, topScroll.pageYOffset);
     },
-    //上下滚动时数据处理
+    //Data processing when scrolling up and down(上下滚动时数据处理)
     dataProcessing(topNum, bottomNum, type) {
       const topPosition = parseInt(this.dataTop / this.tdHeight);
       if (type === "top") {
         this.showTableList.splice(this.loadedNum - bottomNum, bottomNum); //减去底部数据
         for (let i = 1; i <= topNum; i++) {
-          //加上顶部数据
+          //plus top data(加上顶部数据)
           const indexNum = topPosition - i;
           this.showTableList.unshift(this.tableList[indexNum]);
         }
-        this.loadedNum = this.loadedNum + topNum - bottomNum; //重新计算实际渲染数据条数
-        this.dataTop = this.dataTop - topNum * this.tdHeight; //重新计算渲染数据的高度
+        this.loadedNum = this.loadedNum + topNum - bottomNum; //Recalculate the actual number of rendered data(重新计算实际渲染数据条数)
+        this.dataTop = this.dataTop - topNum * this.tdHeight; //Recalculate the height of the rendered data(重新计算渲染数据的高度)
         document.getElementById("bottomDiv").scrollTop =
           document.getElementById("bottomDiv").scrollTop +
           bottomNum * this.tdHeight;
         // this.scrollTop = document.getElementById("bottomDiv").scrollTop;
       } else if (type == "bottom") {
-        this.showTableList.splice(0, topNum); //减去顶部数据
+        this.showTableList.splice(0, topNum); //minus top data(减去顶部数据)
         for (let i = 0; i < bottomNum; i++) {
-          //加上底部数据
+          //plus bottom data(加上底部数据)
           const indexNum = topPosition + this.loadedNum + i;
           this.showTableList.push(this.tableList[indexNum]);
         }
-        this.loadedNum = this.loadedNum - topNum + bottomNum; //重新计算实际渲染数据条数
-        this.dataTop = this.dataTop + topNum * this.tdHeight; //重新计算渲染数据的高度
+        this.loadedNum = this.loadedNum - topNum + bottomNum; //Recalculate the actual number of rendered data(重新计算实际渲染数据条数)
+        this.dataTop = this.dataTop + topNum * this.tdHeight; //Recalculate the height of the rendered data(重新计算渲染数据的高度)
         document.getElementById("bottomDiv").scrollTop =
           document.getElementById("bottomDiv").scrollTop -
           topNum * this.tdHeight;
         // this.scrollTop = document.getElementById("bottomDiv").scrollTop;
       } else if (type == "bottomAll") {
-        this.showTableList = []; //减去顶部数据
+        this.showTableList = []; //minus top data(减去顶部数据)
         let scrollNum = topNum;
         for (let i = 0; i < bottomNum; i++) {
-          //加上底部数据
+          //plus bottom data(加上底部数据)
           let indexNum = scrollNum - this.loadNum + i;
           this.showTableList.push(this.tableList[indexNum]);
         }
-        this.loadedNum = bottomNum; //重新计算实际渲染数据条数
-        this.dataTop = (scrollNum - this.loadNum) * this.tdHeight; //重新计算渲染数据的高度
+        this.loadedNum = bottomNum; //Recalculate the actual number of rendered data(重新计算实际渲染数据条数)
+        this.dataTop = (scrollNum - this.loadNum) * this.tdHeight; //Recalculate the height of the rendered data(重新计算渲染数据的高度)
         // this.scrollTop = document.getElementById("bottomDiv").scrollTop;
       } else if (type == "topAll") {
-        this.showTableList = []; //减去顶部数据
+        this.showTableList = []; //minus top data(减去顶部数据)
         let scrollNum = bottomNum;
         for (let i = 0; i < topNum; i++) {
-          //加上底部数据
+          //plus bottom data(加上底部数据)
           let indexNum = scrollNum - topNum + this.loadNum + i;
           this.showTableList.push(this.tableList[indexNum]);
         }
-        this.loadedNum = topNum; //重新计算实际渲染数据条数
-        this.dataTop = (scrollNum - topNum + this.loadNum) * this.tdHeight; //重新计算渲染数据的高度
+        this.loadedNum = topNum; //Recalculate the actual number of rendered data(重新计算实际渲染数据条数)
+        this.dataTop = (scrollNum - topNum + this.loadNum) * this.tdHeight; //Recalculate the height of the rendered data(重新计算渲染数据的高度)
         // this.scrollTop = document.getElementById("bottomDiv").scrollTop;
       }
       this.showLoad = false;
@@ -436,7 +436,7 @@ export default {
         window.getSelection().removeAllRanges();
       }
     },
-    //排序
+    //sort(排序)
     handleSort(index, type) {
       let column = this.columns[index];
       let key = column.key;
@@ -471,19 +471,19 @@ export default {
     initTable() {
       document.getElementById("bottomDiv") &&
         (document.getElementById("bottomDiv").scrollTop = 0);
-      // 后面如果要做切换tab保存滚动条状态,得记录滚动距离再赋值
+      // Later, if you want to switch the tab to save the scroll bar state, you have to record the scroll distance and assign it again.(后面如果要做切换tab保存滚动条状态,得记录滚动距离再赋值)
       // document.getElementById("bottomDiv") &&
       //   (document.getElementById("bottomDiv").scrollLeft = 0);
-      this.loadedNum = 0; //实际渲染的数据数量
-      this.dataTotal = 0; //总数据条数
-      this.dataTop = 0; //渲染数据顶部的高度
-      this.scrollTop = 0; //滚动上下的距离
+      this.loadedNum = 0; //The amount of data actually rendered(实际渲染的数据数量)
+      this.dataTotal = 0; //total data(总数据条数)
+      this.dataTop = 0; //The height of the top of the rendered data(渲染数据顶部的高度)
+      this.scrollTop = 0; //scroll up and down distance(滚动上下的距离)
       this.showTableList = [];
       if (this.tableList.length > 0) {
-        this.dataTotal = this.tableList.length; //获取数据长度
+        this.dataTotal = this.tableList.length; //get data length(获取数据长度)
         if (this.dataTotal >= this.loadNum) {
-          //判断数据长度是否大于设置的每次渲染长度
-          this.loadedNum = this.loadNum; //设置实际渲染条数
+          //Determine whether the data length is greater than the set length of each rendering(判断数据长度是否大于设置的每次渲染长度)
+          this.loadedNum = this.loadNum; //Set the actual number of rendered bars(设置实际渲染条数)
           for (var i = 0; i < this.loadNum; i++) {
             let data = this.tableList[i];
             this.showTableList.push(data);
@@ -509,7 +509,7 @@ export default {
         this.noDataStyle.width =  topTable.clientWidth + 'px'
       }
     },
-    // 判断是否出现竖直滚动条
+    // Determine whether a vertical scroll bar appears(判断是否出现竖直滚动条)
     scrollBarWidthCalc() {
       let bottomDiv = document.getElementById("bottomDiv");
       return  bottomDiv && bottomDiv.scrollHeight > bottomDiv.clientHeight ? this.scrollBarWidth : 0
@@ -535,7 +535,7 @@ export default {
     },
     tableHeight(newValue) {
       if (newValue) {
-        this.scrollProcessing(); //表格高度改变重新计算
+        this.scrollProcessing(); //table height change recalculation(表格高度改变重新计算)
       }
     }
   }
diff --git a/linkis-web/src/components/tree/functionView/index.vue b/linkis-web/src/components/tree/functionView/index.vue
index 5d8e3473c..fc866fb4d 100644
--- a/linkis-web/src/components/tree/functionView/index.vue
+++ b/linkis-web/src/components/tree/functionView/index.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <Poptip
     popper-class="fn-view"
@@ -97,7 +97,7 @@ export default {
       this.drawWaterMark(type, x, y);
     },
     drawWaterMark(type, x, y) {
-      // 由于id是唯一的,所以这里canvas的id使用动态的字符串,让每个元素的id都不一样,否则会出现无法渲染的情况
+      // Since the id is unique, the id of the canvas here uses a dynamic string, so that the id of each element is different, otherwise it will fail to render.(由于id是唯一的,所以这里canvas的id使用动态的字符串,让每个元素的id都不一样,否则会出现无法渲染的情况)
       const cvs = document.getElementById(`cvs${this.node.id}`);
       const ctx = cvs.getContext('2d');
       cvs.height = 140;
diff --git a/linkis-web/src/components/tree/model/store.js b/linkis-web/src/components/tree/model/store.js
index c4543ee2e..54e9f6d3d 100644
--- a/linkis-web/src/components/tree/model/store.js
+++ b/linkis-web/src/components/tree/model/store.js
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 import { getNodeKey } from './utils';
 import Node from './node.js';
@@ -137,7 +137,7 @@ export default class Store {
         } else {
           node.visible = allHidden === false;
         }
-        // 由于有可能有文件夹未打开,所以只要文件夹未打开的,都显示
+        // Since there may be folders that are not open, as long as the folder is not open, it will be displayed.(由于有可能有文件夹未打开,所以只要文件夹未打开的,都显示)
       } else if (!node.visible && !children.length && !node.isLeaf) {
         node.visible = true;
       }
diff --git a/linkis-web/src/components/tree/node.vue b/linkis-web/src/components/tree/node.vue
index 4bc1c550d..1abfc9957 100644
--- a/linkis-web/src/components/tree/node.vue
+++ b/linkis-web/src/components/tree/node.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 
 <template>
   <div
@@ -116,7 +116,7 @@ export default {
     isHasFileOpen() {
       if (!this.highlightPath) return false;
       const highlightList = this.highlightPath.split('/');
-      // 目录一一对应,需递归匹配所有父层级
+      // One-to-one correspondence between directories, all parent levels need to be recursively matched(目录一一对应,需递归匹配所有父层级)
       let flag = false;
       const checkName = (node) => {
         const name = node.data.name;
@@ -150,8 +150,8 @@ export default {
       if (val) {
         this.$nextTick(() => {
           this.$refs.edit && this.$refs.edit.focus();
-          // 设置选中区域
-          // index为-1时,是文件夹,会默认选中全部
+          // set selected area(设置选中区域)
+          // When the index is -1, it is a folder, and all will be selected by default(index为-1时,是文件夹,会默认选中全部)
           if (this.node.label) {
             const index = this.node.label.lastIndexOf('.');
             this.$refs.edit.setSelectionRange(0, index);
@@ -186,7 +186,7 @@ export default {
           }
         });
       }
-      // 初始化的时候默认打开根目录
+      // The root directory is opened by default during initialization(初始化的时候默认打开根目录)
       if (this.isRootDefaultOpen) {
         this.expanded = true;
       }
@@ -246,7 +246,7 @@ export default {
       const childrenKey = tree.nodeProps.children || 'children';
       const that = this;
       const children = that.node.data[childrenKey] || [];
-      // 如果有children数据就不去请求
+      // If there is children data, do not request(如果有children数据就不去请求)
       if (tree && tree.loadDataFn && !children.length) {
         tree.loadDataFn(this.node, (data) => {
           if (data) {
@@ -294,7 +294,7 @@ export default {
           label: newLabel,
           node: this.node.data,
         });
-        // 如果脚本类型是sql或者是hql是支持脚本修改后缀的,且修改的后缀是正确的
+        // If the script type is sql or hql, it supports script modification suffix, and the modified suffix is ​​correct(如果脚本类型是sql或者是hql是支持脚本修改后缀的,且修改的后缀是正确的)
         const reg = /\.(hql|sql)$/i;
         const newResult = reg.test(newLabel);
         const oldResult = reg.test(oldLabel);
diff --git a/linkis-web/src/components/virtualTable/historyTable/historyTable.vue b/linkis-web/src/components/virtualTable/historyTable/historyTable.vue
index 4af574a78..420d6dced 100644
--- a/linkis-web/src/components/virtualTable/historyTable/historyTable.vue
+++ b/linkis-web/src/components/virtualTable/historyTable/historyTable.vue
@@ -280,9 +280,9 @@ export default {
             transfer: true,
           },
         }, [
-          // 这个是表格上面的span
+          // This is the span above the table(这个是表格上面的span)
           h('span', {}, value),
-          // 这个是tooltip上面的span
+          // This is the span on the tooltip(这个是tooltip上面的span)
           h('div', {
             slot: 'content',
             style: {
diff --git a/linkis-web/src/components/virtualTable/resultTable/body.vue b/linkis-web/src/components/virtualTable/resultTable/body.vue
index 7b5947a5f..b8bdd0812 100644
--- a/linkis-web/src/components/virtualTable/resultTable/body.vue
+++ b/linkis-web/src/components/virtualTable/resultTable/body.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div>
     <div class="list-view-phantom" :style="{
@@ -129,7 +129,7 @@ export default {
       this.header.forEach((item, index) => {
         count += this.getItemSizeAndOffset(this.startIndex + index).size;
       });
-      // 如果所有已分配宽度的列宽度和小于表格的宽度,就使用等比宽度
+      // Proportional widths are used if the sum of all columns with assigned widths is less than the width of the table(如果所有已分配宽度的列宽度和小于表格的宽度,就使用等比宽度)
       if (count && count <= this.viewWidth) {
         this.isDivideWidth = true;
         this.divideWidth = this.viewWidth / this.header.length;
diff --git a/linkis-web/src/components/virtualTable/resultTable/header.vue b/linkis-web/src/components/virtualTable/resultTable/header.vue
index 097b8f611..e6da94bf9 100644
--- a/linkis-web/src/components/virtualTable/resultTable/header.vue
+++ b/linkis-web/src/components/virtualTable/resultTable/header.vue
@@ -107,7 +107,7 @@ export default {
     handleScroll(v, h) {
       this.$refs.body.handleScroll(v, h);
     },
-    // sorting 中不允许再点击
+    // No more clicks allowed in sorting(sorting 中不允许再点击)
     handleSortClick(event, { col, index }, sortOrder) {
       if (this.sort.sorting) return;
       if (this.sort.type === sortOrder && this.sort.index === index) {
diff --git a/linkis-web/src/components/virtualTree/tree.vue b/linkis-web/src/components/virtualTree/tree.vue
index b51638eda..356664618 100644
--- a/linkis-web/src/components/virtualTree/tree.vue
+++ b/linkis-web/src/components/virtualTree/tree.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 
 <template>
   <virtual-list
@@ -30,13 +30,13 @@
 </template>
 <script>
 /**
- * 虚拟树组件
- * 传入树形数据,内部扁平化并使用虚拟滚动列表渲染
- * 可以自定义render函数控制节点渲染
- * 节点isVisible===false则不渲染
- * ! 每个节点需要唯一键值标识字段,可以通过keyText配置
- * ! 必须设置height用于计算虚拟滚动渲染条数
- * 示例
+ * virtual tree component(虚拟树组件)
+ * Pass in tree data, flatten the interior and render it with a virtual scrolling list(传入树形数据,内部扁平化并使用虚拟滚动列表渲染)
+ * You can customize the render function to control node rendering(可以自定义render函数控制节点渲染)
+ * Node isVisible===false does not render(节点isVisible===false则不渲染)
+ * ! Each node requires a unique key value identification field, which can be configured through keyText(每个节点需要唯一键值标识字段,可以通过keyText配置)
+ * ! The height must be set to calculate the number of virtual scroll rendering bars(必须设置height用于计算虚拟滚动渲染条数)
+ * Example(示例)
  * <virtual-tree
       :list="treeData"
       :render="renderNode"
@@ -66,19 +66,19 @@ export default {
       type: Array,
       default: () => [],
     },
-    render: { // 自定义节点渲染
+    render: { // custom node rendering(自定义节点渲染)
       type: Function
     },
     open: Object, // 展开节点key eg: {xxxx:true,xx:true}
-    size: { // 行高
+    size: { // row height(行高)
       type: Number,
       default: 24
     },
-    height: { // 树高度
+    height: { // tree height(树高度)
       type: Number,
       require: true
     },
-    keyText: { // 节点数据唯一id
+    keyText: { // Node data unique id(节点数据唯一id)
       type: String,
       default: '_id'
     }
@@ -100,7 +100,7 @@ export default {
     clickNode(index) {
       let item = this.showData[index];
       let now = Date.now();
-      // 双击
+      // double click(双击)
       if (this.lastClick === item[this.keyText] && (now - this.lastClickTime || now) < 300) {
         return
       }
@@ -131,11 +131,11 @@ export default {
     refresData(openNode) {
       let showData = []
       openNode = openNode || {...this.open}
-      // 树形数据扁平化
+      // Tree data flattening(树形数据扁平化)
       let formatTree = (list, level = 1) => {
         list.forEach(item => {
-          // 扁平处理数据后列表只保留渲染所需数据
-          // isVisible false 不渲染
+          // After flattening the data, the list only retains the data required for rendering(扁平处理数据后列表只保留渲染所需数据)
+          // isVisible false does not render(不渲染)
           if (item.isVisible !== false) {
             showData.push({...item, level, isLeaf: !item.children, children: []});
             if (item.children && item.children.length) {
@@ -183,4 +183,4 @@ export default {
     }
   }
 };
-</script>
\ No newline at end of file
+</script>
diff --git a/linkis-web/src/dss/assets/styles/app.scss b/linkis-web/src/dss/assets/styles/app.scss
index 6a5c69ff8..74ab689a8 100644
--- a/linkis-web/src/dss/assets/styles/app.scss
+++ b/linkis-web/src/dss/assets/styles/app.scss
@@ -58,12 +58,12 @@ body{
 .ivu-message {
     z-index: 2000 !important;
 }
-/* 设置滚动条的样式 */
+// Set the style of the scrollbar(设置滚动条的样式)
 ::-webkit-scrollbar {
     width: 8px;
     height: 8px;
 }
-/* 滚动槽 */
+ //rolling groove(滚动槽)
 ::-webkit-scrollbar-track {
     box-shadow: inset 0 0 2px $shadow-color;
     -webkit-box-shadow: inset 0 0 2px $shadow-color;
@@ -73,7 +73,7 @@ body{
     -ms-border-radius: $border-radius-large;
     -o-border-radius: $border-radius-large;
 }
-/* 滚动条滑块 */
+//scroll bar slider(滚动条滑块)
 ::-webkit-scrollbar-thumb {
     box-shadow: inset 0 0 2px $shadow-color;
     border-radius: $border-radius-large;
diff --git a/linkis-web/src/dss/module/footer/index.vue b/linkis-web/src/dss/module/footer/index.vue
index c3a96e810..6ff551ad9 100644
--- a/linkis-web/src/dss/module/footer/index.vue
+++ b/linkis-web/src/dss/module/footer/index.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div
     ref="footerChannel"
@@ -54,7 +54,7 @@ export default {
     };
   },
   created() {
-    // 让其它接口请求保持在getBasicInfo接口后面请求
+    // Keep other interface requests behind the getBasicInfo interface(让其它接口请求保持在getBasicInfo接口后面请求)
     setTimeout(() => {
       this.getRunningJob();
     }, 500);
@@ -70,7 +70,7 @@ export default {
         pageSize: 100,
         status: 'Running,Inited,Scheduled',
       }, 'get').then((rst) => {
-        // 剔除requestApplicationName为 "nodeexecution" 的task
+        // Eliminate tasks whose requestApplicationName is "nodeexecution"(剔除requestApplicationName为 "nodeexecution" 的task)
         let tasks = rst.tasks.filter(item => item.requestApplicationName !== "nodeexecution" && item.requestApplicationName !== "CLI")
         this.num = tasks.length;
       });
@@ -86,7 +86,7 @@ export default {
       this[method](num);
     },
     toast() {
-      // 取消拖动后自动点击事件
+      // Automatic click event after cancel dragging(取消拖动后自动点击事件)
       if (this.isMouseMove) {
         return;
       }
@@ -99,12 +99,12 @@ export default {
       this.moveY = e.clientY - footerChannel.offsetTop;
       this.isMouseDrop = true;
       this.isMouseMove = false;
-      // 阻止拖拽过程中选中文本
+      // Prevent text selection during dragging(阻止拖拽过程中选中文本)
       document.onselectstart = () => {
         return false;
       }
-      // 这里无法在元素上使用@mousemove,否则拖动会有卡顿
-      // 使用setTimeout是防止点击的同时会触发move事件,这时正常的点击事件是不会触发的。
+      // You can't use @mousemove on elements here, otherwise dragging will freeze(这里无法在元素上使用@mousemove,否则拖动会有卡顿)
+      // Using setTimeout is to prevent the click from triggering the move event at the same time. At this time, the normal click event will not be triggered.(使用setTimeout是防止点击的同时会触发move事件,这时正常的点击事件是不会触发的。)
       setTimeout(() => {
         document.onmousemove = (e) => {
 
@@ -113,7 +113,7 @@ export default {
             const footerChannel = this.$refs.footerChannel;
             let x = e.clientX - this.moveX;
             let y = e.clientY - this.moveY;
-            // 限制拖动范围
+            // Limit drag range(限制拖动范围)
             let maxX = document.documentElement.clientWidth - 120;
             let maxY = document.documentElement.clientHeight - 60;
             if (this.moveX <= 0) {
@@ -134,13 +134,13 @@ export default {
       }, 0)
     },
     oMouseUp() {
-      // 清空onmousemove方法
+      // Empty the onmousemove method(清空onmousemove方法)
       document.onmousemove = null;
       this.isMouseDrop = false;
       setTimeout(() => {
         this.isMouseMove = false;
       }, 200)
-      // 恢复document的文本选中功能
+      // Restore the text selection function of the document(恢复document的文本选中功能)
       document.onselectstart = () => {
         return true;
       }
diff --git a/linkis-web/src/dss/module/header/userMenu.vue b/linkis-web/src/dss/module/header/userMenu.vue
index b7bef0d8c..6c5216fcf 100644
--- a/linkis-web/src/dss/module/header/userMenu.vue
+++ b/linkis-web/src/dss/module/header/userMenu.vue
@@ -117,13 +117,13 @@ export default {
         this.$emit('clear-session');
         storage.set('need-refresh-proposals-hql', true);
         storage.set('need-refresh-proposals-python', true);
-        // 手动退出清掉baseInfo
+        // Manually exit to clear baseInfo(手动退出清掉baseInfo)
         storage.remove('baseInfo', 'local');
         this.$router.push({ path: '/login' });
       });
     },
     changeLang() {
-      // 中文切换英文
+      // Chinese to English(中文切换英文)
       if (localStorage.getItem('locale') === 'zh-CN') {
         localStorage.setItem('locale', 'en');
       } else {
diff --git a/linkis-web/src/dss/module/index.js b/linkis-web/src/dss/module/index.js
index a79224e4b..5fbb8f231 100644
--- a/linkis-web/src/dss/module/index.js
+++ b/linkis-web/src/dss/module/index.js
@@ -5,32 +5,32 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 import mixinDispatch from '@/common/service/moduleMixin';
 
 const requireComponent = require.context(
-  // 其组件目录的相对路径
+  // relative path to its component directory(其组件目录的相对路径)
   './',
-  // 是否查询其子目录
+  // whether to query its subdirectories(是否查询其子目录)
   true,
   /([a-z|A-Z])+\/index\.js$/
 );
 
 const requireComponentVue = require.context(
-  // 其组件目录的相对路径
+  // relative path to its component directory(其组件目录的相对路径)
   './',
-  // 是否查询其子目录
+  // whether to query its subdirectories(是否查询其子目录)
   true,
   /([a-z|A-Z])+.vue$/
 );
 
-mixinDispatch(requireComponent, requireComponentVue)
\ No newline at end of file
+mixinDispatch(requireComponent, requireComponentVue)
diff --git a/linkis-web/src/dss/module/resourceSimple/engine.vue b/linkis-web/src/dss/module/resourceSimple/engine.vue
index c58737815..b603f10df 100644
--- a/linkis-web/src/dss/module/resourceSimple/engine.vue
+++ b/linkis-web/src/dss/module/resourceSimple/engine.vue
@@ -166,7 +166,7 @@ export default {
     return {
       btnSize: 'small',
       loading: false,
-      ideSelectData: 0, // 数据开发分类选择
+      ideSelectData: 0, // Data Development Classification Selection(数据开发分类选择)
       boardSelectData: 0,
       otherSelectData: 0,
       typeList: [
@@ -193,7 +193,7 @@ export default {
     },
   },
   watch: {
-    // 选择分类,分组数据
+    // Select classification, group data(选择分类,分组数据)
     ideSelectData() {
       this.ideClassList = [];
       this.getClassListAction(this.ideSelectData, this.ideEngineList, this.ideClassList);
@@ -324,7 +324,7 @@ export default {
             this.otherEngineList.push(item);
           }
         });
-        // 根据状态改变数据
+        // Change data based on state(根据状态改变数据)
         this.getClassListAction(this.ideSelectData, this.ideEngineList, this.ideClassList);
         this.getClassListAction(this.boardSelectData, this.boardEngineList, this.boardClassList);
         this.getClassListAction(this.otherSelectData, this.otherEngineList, this.otherClassList);
@@ -350,7 +350,7 @@ export default {
         });
       }
     },
-    // 颜色过滤
+    // color filter(颜色过滤)
     supportColor(status) {
       switch (status) {
         case 'Busy':
@@ -371,7 +371,7 @@ export default {
           return 'blue';
       }
     },
-    // 图标过滤
+    // Icon filtering(图标过滤)
     supportIcon(item) {
       const supportTypes = [
         { rule: 'hive', logo: 'fi-hive' },
diff --git a/linkis-web/src/dss/module/resourceSimple/index.scss b/linkis-web/src/dss/module/resourceSimple/index.scss
index 7ae363f4f..783e44f84 100644
--- a/linkis-web/src/dss/module/resourceSimple/index.scss
+++ b/linkis-web/src/dss/module/resourceSimple/index.scss
@@ -5,16 +5,16 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 @import '@/common/style/variables.scss';
 .resource-simple-content {
     height: 400px;
@@ -295,7 +295,7 @@
         }
     }
 }
-// 引擎管理器样式
+// engine manager style(引擎管理器样式)
 .engine-box {
     height: 100%;
     overflow-y: auto;
diff --git a/linkis-web/src/dss/module/resourceSimple/job.vue b/linkis-web/src/dss/module/resourceSimple/job.vue
index c7a4c84ec..a3ed55030 100644
--- a/linkis-web/src/dss/module/resourceSimple/job.vue
+++ b/linkis-web/src/dss/module/resourceSimple/job.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div>
     <Spin
@@ -117,7 +117,7 @@ export default {
         status: 'Running,Inited,Scheduled',
       }, 'get').then((rst) => {
         this.loading = false;
-        // 剔除requestApplicationName为 "nodeexecution" 的task
+        // Eliminate tasks whose requestApplicationName is "nodeexecution"(剔除requestApplicationName为 "nodeexecution" 的task)
         let tasks = rst.tasks.filter(item => item.requestApplicationName !== "nodeexecution" && item.requestApplicationName !== "CLI")
         this.dispatch('Footer:updateRunningJob', tasks.length);
         this.jobTypeList = [
@@ -136,7 +136,7 @@ export default {
         console.error(err)
       });
     },
-    // 删除当前工作
+    // delete current job(删除当前工作)
     killJob() {
       const item = this.lastClick;
       if (this.loading) return this.$Message.warning(this.$t('message.common.resourceSimple.DDJK'));
@@ -146,7 +146,7 @@ export default {
       api.fetch(`/entrance/${item.strongerExecId}/kill`, {taskID: item.taskID},'get').then(() => {
         this.loading = false;
         this.$emit('close-modal');
-        // 停止执行
+        // stop execution(停止执行)
         this.$Notice.close(item.scriptPath);
         this.$Notice.warning({
           title: this.$t('message.common.resourceSimple.YXTS'),
@@ -204,11 +204,11 @@ export default {
         this.$emit('close-modal');
         if (this.$route.name === 'Home') {
           this.dispatch('Workbench:add', {
-            id: md5Id, // 唯一标识,就算文件名修改,它都能标识它是它
+            id: md5Id, // Unique identification, even if the file name is changed, it can identify it as it is(唯一标识,就算文件名修改,它都能标识它是它)
             taskID: item.taskID,
             filename: name,
             filepath: item.scriptPath,
-            // saveAs表示临时脚本,需要关闭或保存时另存
+            // saveAs represents a temporary script that needs to be closed or saved when saved(saveAs表示临时脚本,需要关闭或保存时另存)
             saveAs: true,
             code: item.executionCode,
             type: 'historyScript',
@@ -218,7 +218,7 @@ export default {
             }
           });
         } else {
-          // 模块拆分后分两种情况,一种是带scriptis的,一种是不带走通用日志展示
+          // After the module is split, there are two cases, one is with scripts, and the other is without the general log display.(模块拆分后分两种情况,一种是带scriptis的,一种是不带走通用日志展示)
           const currentModules = util.currentModules();
           if (currentModules.hasScriptis) {
             this.$router.push({ path: '/home',
diff --git a/linkis-web/src/dss/module/resourceSimple/queue.vue b/linkis-web/src/dss/module/resourceSimple/queue.vue
index feb7d8c1c..cd37f63d4 100644
--- a/linkis-web/src/dss/module/resourceSimple/queue.vue
+++ b/linkis-web/src/dss/module/resourceSimple/queue.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div class="queue-manager">
     <Spin
@@ -113,11 +113,11 @@ export default {
   methods: {
     getQueueList() {
       this.loading = true;
-      // 获取队列资源使用状态
+      // Get queue resource usage status(获取队列资源使用状态)
       api.fetch('/linkisManager/rm/queues').then((res) => {
         this.loading = false;
         this.queueList = [];
-        // 将显示字段进行拼接显示并分别存储对应参数
+        // Mosaic display fields and store corresponding parameters separately(将显示字段进行拼接显示并分别存储对应参数)
         res.queues.forEach(item => {
           item.queues.forEach(i => {
             let obj ={};
@@ -134,13 +134,13 @@ export default {
       });
     },
     getQueueInfo(name = '') {
-      // 根据返回的显示数据找出对应的完整对象
+      // Find the corresponding complete object based on the returned display data(根据返回的显示数据找出对应的完整对象)
       name = this.queueList.find(item => item.text === name) || {};
       this.loading = true;
-      // 取出对应的参数
+      // Take out the corresponding parameters(取出对应的参数)
       let clustername = name.clustername;
       let queuename = name.queuename;
-      // 获取队列资源数据
+      // Get queue resource data(获取队列资源数据)
       api.fetch('/linkisManager/rm/queueresources', {
         queuename,
         clustername
diff --git a/linkis-web/src/dss/router.js b/linkis-web/src/dss/router.js
index ba9ad6f06..01b5ede64 100644
--- a/linkis-web/src/dss/router.js
+++ b/linkis-web/src/dss/router.js
@@ -5,32 +5,32 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 export const subAppRoutes = {
   path: '',
   name: 'layout',
   component: () => import('./view/layout.vue'),
   // redirect: '/newHome',
-  // 重定向到 管理台页面
+  // Redirects to the management console page(重定向到 管理台页面)
   redirect: '/console',
   meta: {
     title: 'Linkis',
-    publicPage: true, // 权限公开
+    publicPage: true, // Permission disclosure(权限公开)
   },
   children: []
 }
 
 export default [
-  // 日志查看
+  // log view(日志查看)
   {
     path: '/log',
     name: 'log',
@@ -61,7 +61,7 @@ export default [
     component: () =>
       import('./view/login/index.vue'),
   },
-  // 公用页面,不受权限控制
+  // Public pages, not subject to permission control(公用页面,不受权限控制)
   {
     path: '/500',
     name: 'serverErrorPage',
@@ -92,7 +92,7 @@ export default [
     component: () =>
       import('./view/403.vue'),
   },
-  // svg可用图标预览
+  // svg available icon preview(svg可用图标预览)
   {
     path: '/icon',
     name: 'icon',
@@ -112,4 +112,4 @@ export default [
     component: () =>
       import('./view/404.vue'),
   }
-]
\ No newline at end of file
+]
diff --git a/linkis-web/src/dss/view/commonIframe/index.vue b/linkis-web/src/dss/view/commonIframe/index.vue
index 411797e64..b9d804d32 100644
--- a/linkis-web/src/dss/view/commonIframe/index.vue
+++ b/linkis-web/src/dss/view/commonIframe/index.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div class="iframeClass">
     <iframe
@@ -52,9 +52,9 @@ export default {
   },
   mounted() {
     this.getUrl();
-    // 创建的时候设置宽高
+    // Set width and height when creating(创建的时候设置宽高)
     this.resize(window.innerHeight);
-    // 监听窗口变化,获取浏览器宽高
+    // Monitor window changes and get browser width and height(监听窗口变化,获取浏览器宽高)
     window.addEventListener('resize', this.resize(window.innerHeight));
   },
   beforeDestroy() {
diff --git a/linkis-web/src/dss/view/icon.vue b/linkis-web/src/dss/view/icon.vue
index 047bafb0e..71435a876 100644
--- a/linkis-web/src/dss/view/icon.vue
+++ b/linkis-web/src/dss/view/icon.vue
@@ -5,16 +5,16 @@
   ~ The ASF licenses this file to You under the Apache License, Version 2.0
   ~ (the "License"); you may not use this file except in compliance with
   ~ the License.  You may obtain a copy of the License at
-  ~ 
+  ~
   ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~ 
+  ~
   ~ Unless required by applicable law or agreed to in writing, software
   ~ distributed under the License is distributed on an "AS IS" BASIS,
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-  
+
 <template>
   <div class="icon-content">
     <ul>
@@ -43,8 +43,8 @@ export default {
       let inputEl = document.createElement('input');
       inputEl.value = `<SvgIcon style="font-size: 1rem;" color="#444444" icon-class="common"/>`;
       document.body.appendChild(inputEl);
-      inputEl.select(); // 选择对象;
-      document.execCommand("Copy"); // 执行浏览器复制命令
+      inputEl.select(); // select object(选择对象);
+      document.execCommand("Copy"); // Execute the browser copy command(执行浏览器复制命令)
       this.$Message.info('复制成功');
       inputEl.remove();
     },
diff --git a/linkis-web/src/dss/view/layout.vue b/linkis-web/src/dss/view/layout.vue
index 8029accf3..1d71aa914 100644
--- a/linkis-web/src/dss/view/layout.vue
+++ b/linkis-web/src/dss/view/layout.vue
@@ -56,7 +56,7 @@ export default {
       return this.$route.query.noFooter || location.search.indexOf('noFooter') < 0
     },
     isEmbedInFrame() {
-      // 如果是被iframe引入时 top !== self 返回true,用来区分单独跑还是被引入,只有单独跑时要加水印
+      // If it is imported by iframe, top !== self returns true, which is used to distinguish between running alone or being introduced. Only when running alone, a watermark should be added.(如果是被iframe引入时 top !== self 返回true,用来区分单独跑还是被引入,只有单独跑时要加水印)
       return top !== self;
     }
   },
diff --git a/linkis-web/src/dss/view/login/index.vue b/linkis-web/src/dss/view/login/index.vue
index 86f6c4012..3ffab5042 100644
--- a/linkis-web/src/dss/view/login/index.vue
+++ b/linkis-web/src/dss/view/login/index.vue
@@ -101,7 +101,7 @@ export default {
   mounted() {
   },
   methods: {
-    // 获取公钥接口
+    // Get public key interface(获取公钥接口)
     getPublicKey() {
       api.fetch('/user/publicKey', 'get').then((res) => {
         this.publicKeyData = res;
@@ -115,7 +115,7 @@ export default {
             storage.remove('saveUserNameAndPass', 'local');
           }
           this.loginForm.user = this.loginForm.user.toLocaleLowerCase();
-          // 需要判断是否需要给密码加密
+          // Need to determine whether the password needs to be encrypted(需要判断是否需要给密码加密)
           let password = this.loginForm.password;
           let params = {};
           if (this.publicKeyData && this.publicKeyData.enableLoginEncrypt) {
@@ -133,8 +133,8 @@ export default {
               password
             };
           }
-          // 登录清掉本地缓存
-          // 连续两次退出登录后,会导致数据丢失,所以得判断是否已存切没有使用
+          // Log in to clear the local cache(登录清掉本地缓存)
+          // After logging out twice in a row, data will be lost, so it is necessary to judge whether it has been saved and not used.(连续两次退出登录后,会导致数据丢失,所以得判断是否已存切没有使用)
           let tabs = await tab.get() || [];
           const tablist = storage.get(this.loginForm.user + 'tabs', 'local');
           if (!tablist || tablist.length <= 0) {
@@ -149,7 +149,7 @@ export default {
               this.loading = false;
               storage.set('userName',rst.userName,'session')
               storage.set('enableWatermark',rst.enableWatermark ? true : false,'session')
-              // 保存用户名
+              // save username(保存用户名)
               if (this.rememberUserNameAndPass) {
                 storage.set('saveUserNameAndPass', `${this.loginForm.user}&${this.loginForm.password}`, 'local');
               }
@@ -175,7 +175,7 @@ export default {
         }
       });
     },
-    // 清楚本地缓存
+    // clear local cache(清楚本地缓存)
     clearSession() {
       storage.clear();
     },
diff --git a/linkis-web/src/dynamic-apps.js b/linkis-web/src/dynamic-apps.js
index c2391043a..90a380e1f 100644
--- a/linkis-web/src/dynamic-apps.js
+++ b/linkis-web/src/dynamic-apps.js
@@ -17,19 +17,19 @@
 
 import { merge } from 'lodash'
 import routes, { subAppRoutes } from "./dss/router"
-// 根据module参数配置要打包的应用,生成的虚拟模块
+// Configure the application to be packaged according to the module parameter, and the generated virtual module(根据module参数配置要打包的应用,生成的虚拟模块)
 const apps = require('dynamic-modules')
-// 处理路由,单个应用可以有独立的顶层路由配置layout,header,footer
-// length ===1 为单个子应用独立运行,否则为dss,包含多个子应用
+// Handling routing, a single application can have independent top-level routing configuration layout, header, footer(处理路由,单个应用可以有独立的顶层路由配置layout,header,footer)
+// length ===1 runs independently for a single sub-app, otherwise dss, including multiple sub-apps(length ===1 为单个子应用独立运行,否则为dss,包含多个子应用)
 let subRoutes = subAppRoutes
 const appsRoutes = Object.values(apps.appsRoutes)
 
 /**
- * * 工作流子应用:workflows和scriptis一起打包
+ * * Workflow sub-application: workflows are packaged with scripts(工作流子应用:workflows和scriptis一起打包)
  * * npm run build --module=scriptis,workflows --micro_module=workflows
- * * 数据服务子应用:apiServices和workspace一起打包
+ * * Data service sub-application: apiServices and workspace are packaged together(数据服务子应用:apiServices和workspace一起打包)
  * * npm run build --module=apiServices,workspace --micro_module=apiServices
- * ! micro_module参数要和module里值一样,否则找不到
+ * ! The micro_module parameter must be the same as the value in the module, otherwise it cannot be found(micro_module参数要和module里值一样,否则找不到)
  */
 if (apps.microModule) {
   if (apps.appsRoutes[apps.microModule].subAppRoutes) {
@@ -46,13 +46,13 @@ if (appsRoutes) {
 routes.unshift(subRoutes)
 
 console.log(routes)
-// 公共国际化
+// public internationalization(公共国际化)
 const i18n = {
   'en': require('./common/i18n/en.json'),
   'zh-CN': require('./common/i18n/zh.json')
 }
 
-// 处理国际化
+// handle internationalization(处理国际化)
 if (apps.appsI18n) {
   apps.appsI18n.forEach(item => {
     merge(i18n, item)
diff --git a/linkis-web/src/router.js b/linkis-web/src/router.js
index bcd75460c..f14afa78b 100644
--- a/linkis-web/src/router.js
+++ b/linkis-web/src/router.js
@@ -5,21 +5,21 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 
 import VueRouter from "vue-router";
 import { routes } from './dynamic-apps'
 
-// 解决重复点击路由跳转报错
+// Solve the error of repeated click routing jump(解决重复点击路由跳转报错)
 const originalPush = VueRouter.prototype.push;
 VueRouter.prototype.push = function push(location) {
   return originalPush.call(this, location).catch(err => err)
@@ -30,12 +30,12 @@ const router = new VueRouter({
 
 router.beforeEach((to, from, next) => {
   if (to.meta) {
-    // 给路由添加参数,控制显示对应header
+    // Add parameters to the route to control the display of the corresponding header(给路由添加参数,控制显示对应header)
     if (to.meta.header) {
       to.query.showHeader = to.meta.header
     }
     if (to.meta.publicPage) {
-      // 公共页面不需要权限控制(404,500)
+      // Public pages do not need permission control (404, 500)(公共页面不需要权限控制(404,500))
       next();
     } else if( to.path != '/workspace') {
       next('/workspace');


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@linkis.apache.org
For additional commands, e-mail: commits-help@linkis.apache.org