You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampark.apache.org by be...@apache.org on 2022/09/28 00:48:24 UTC

[incubator-streampark] branch dev updated: [Enhance] Web ui Chinese to English (#1705)

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

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


The following commit(s) were added to refs/heads/dev by this push:
     new e9a793519 [Enhance] Web ui Chinese to English (#1705)
e9a793519 is described below

commit e9a793519b9a9c1e9dba6f17dd972453107760ca
Author: ChunFu Wu <31...@qq.com>
AuthorDate: Wed Sep 28 08:48:16 2022 +0800

    [Enhance] Web ui Chinese to English (#1705)
    
    * [Enhance] Web ui Chinese to English
    
    * Add license header
---
 .husky/_/husky.sh                                  | 30 +++++++-------
 .../streampark-console-webapp/babel.config.js      |  2 +-
 .../streampark-console-webapp/src/App.less         |  2 +-
 .../streampark-console-webapp/src/api/baseUrl.js   |  2 +-
 .../src/components/Exception/ExceptionPage.vue     |  2 +-
 .../src/components/Exception/type.js               |  6 +--
 .../src/components/IconSelector/icons.js           | 12 +++---
 .../src/components/Notice/Notice.vue               |  4 +-
 .../src/components/Table/index.js                  | 48 +++++++++++-----------
 .../src/components/Trend/Trend.vue                 |  4 +-
 .../src/components/_util/util.js                   |  6 +--
 .../src/components/global.less                     | 30 +++++++-------
 .../src/components/tools/DetailList.vue            |  2 +-
 .../src/components/tools/TwoStepCaptcha.vue        | 18 ++++----
 .../src/components/tools/UserMenu.vue              |  2 +-
 .../streampark-console-webapp/src/config/config.js |  2 +-
 .../src/config/default/admin.config.js             |  2 +-
 .../src/config/default/antd.config.js              |  2 +-
 .../src/config/default/setting.config.js           | 16 ++++----
 .../src/config/defaultSettings.js                  | 18 ++++----
 .../src/config/replacer/index.js                   | 10 ++---
 .../src/config/replacer/resolve.config.js          | 20 ++++-----
 .../src/core/directives/permission.js              | 12 +++---
 .../streampark-console-webapp/src/core/icons.js    |  4 +-
 .../src/core/lazy_lib/components_use.js            |  6 +--
 .../src/layouts/BasicView.vue                      |  2 +-
 .../src/layouts/RouteView.vue                      |  6 +--
 .../streampark-console-webapp/src/router/index.js  |  8 ++--
 .../src/store/modules/user.js                      |  4 +-
 .../streampark-console-webapp/src/utils/colors.js  | 20 ++++-----
 .../src/utils/formatter.js                         |  6 +--
 .../src/utils/helper/permission.js                 | 18 ++++----
 .../streampark-console-webapp/src/utils/request.js | 22 +++++-----
 .../src/utils/theme-color-replacer-extend.js       | 20 ++++-----
 .../streampark-console-webapp/src/utils/util.js    |  6 +--
 .../src/views/flink/app/Add.vue                    |  4 +-
 .../src/views/flink/app/AddEdit.js                 |  8 ++--
 .../src/views/flink/app/Detail.vue                 | 40 +++++++++---------
 .../src/views/flink/app/Different.vue              |  8 ++--
 .../src/views/flink/app/Mergely.vue                |  8 ++--
 .../src/views/flink/app/Monaco.yaml.js             |  2 +-
 .../src/views/flink/app/Option.js                  | 40 +++++++++---------
 .../src/views/flink/app/View.vue                   | 28 ++++++-------
 .../src/views/flink/notebook/Submit.vue            |  8 ++--
 .../src/views/flink/project/View.vue               | 12 +++---
 .../src/views/flink/setting/AddCluster.vue         |  4 +-
 .../src/views/flink/setting/EditCluster.vue        |  6 +--
 .../src/views/flink/setting/View.vue               | 32 +++++++--------
 .../src/views/system/menu/ButtonAdd.vue            | 30 +++++++-------
 .../src/views/system/menu/ButtonEdit.vue           | 30 +++++++-------
 .../src/views/system/menu/Icons.vue                | 20 ++++-----
 .../src/views/system/menu/Menu.vue                 | 30 +++++++-------
 .../src/views/system/menu/MenuAdd.vue              | 38 ++++++++---------
 .../src/views/system/menu/MenuEdit.vue             | 40 +++++++++---------
 .../src/views/system/role/Role.vue                 |  2 +-
 .../src/views/system/role/RoleAdd.vue              |  2 +-
 .../src/views/system/role/RoleEdit.vue             | 16 ++++----
 .../src/views/system/role/RoleInfo.vue             | 10 ++---
 .../src/views/system/token/Token.vue               | 24 +++++------
 .../src/views/system/token/TokenAdd.vue            |  6 +--
 .../src/views/system/user/User.vue                 | 18 ++++----
 .../src/views/system/user/UserEdit.vue             |  6 +--
 .../src/views/user/SignIn.vue                      |  6 +--
 .../streampark-console-webapp/vue.config.js        |  2 +-
 64 files changed, 428 insertions(+), 426 deletions(-)

diff --git a/.husky/_/husky.sh b/.husky/_/husky.sh
index de727d709..511f3fb8e 100644
--- a/.husky/_/husky.sh
+++ b/.husky/_/husky.sh
@@ -1,22 +1,20 @@
 #!/usr/bin/env sh
-# ----------------------------------------------------------------------------
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  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
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# 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
+#
+#    https://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.
 #
-# 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.
-# ----------------------------------------------------------------------------
 
 if [ -z "$husky_skip_init" ]; then
   debug () {
diff --git a/streampark-console/streampark-console-webapp/babel.config.js b/streampark-console/streampark-console-webapp/babel.config.js
index 259550413..cad49292e 100644
--- a/streampark-console/streampark-console-webapp/babel.config.js
+++ b/streampark-console/streampark-console-webapp/babel.config.js
@@ -19,7 +19,7 @@ const plugins = []
 plugins.push(['import', {
   'libraryName': 'Antd',
   'libraryDirectory': 'es',
-  'style': true // `style: true` 会加载 less 文件
+  'style': true // `style: true` will load the less file
 }])
 
 module.exports = {
diff --git a/streampark-console/streampark-console-webapp/src/App.less b/streampark-console/streampark-console-webapp/src/App.less
index 7ac815730..227c9d8f7 100644
--- a/streampark-console/streampark-console-webapp/src/App.less
+++ b/streampark-console/streampark-console-webapp/src/App.less
@@ -87,7 +87,7 @@
   background-color: ghostwhite;
 }
 
-// monaco-aria-container有bug. 和这个类似(https://github.com/openshift/console/pull/2333)
+// monaco-aria-container has a bug. Similar to this (https://github.com/openshift/console/pull/2333)
 .monaco-aria-container {
   top: -999em !important;
   left: -999em !important;
diff --git a/streampark-console/streampark-console-webapp/src/api/baseUrl.js b/streampark-console/streampark-console-webapp/src/api/baseUrl.js
index e66071b8c..3a7454cab 100644
--- a/streampark-console/streampark-console-webapp/src/api/baseUrl.js
+++ b/streampark-console/streampark-console-webapp/src/api/baseUrl.js
@@ -25,7 +25,7 @@ export function baseUrl() {
     case 'production':
       url = process.env['VUE_APP_BASE_API']
       break
-    //开发测试阶段采用前后端分离,这里配置后端的请求URI
+    // In the development and testing phase, the front and back ends are separated, and the request URI of the back end is configured here.
     case 'development':
       url = process.env['VUE_APP_BASE_API']
       break
diff --git a/streampark-console/streampark-console-webapp/src/components/Exception/ExceptionPage.vue b/streampark-console/streampark-console-webapp/src/components/Exception/ExceptionPage.vue
index 87241ce6f..753b8748a 100644
--- a/streampark-console/streampark-console-webapp/src/components/Exception/ExceptionPage.vue
+++ b/streampark-console/streampark-console-webapp/src/components/Exception/ExceptionPage.vue
@@ -39,7 +39,7 @@
         <a-button
           type="primary"
           @click="handleToHome">
-          返回首页
+          Back to Home
         </a-button>
       </div>
     </div>
diff --git a/streampark-console/streampark-console-webapp/src/components/Exception/type.js b/streampark-console/streampark-console-webapp/src/components/Exception/type.js
index cd00e368c..2d812a03c 100644
--- a/streampark-console/streampark-console-webapp/src/components/Exception/type.js
+++ b/streampark-console/streampark-console-webapp/src/components/Exception/type.js
@@ -19,17 +19,17 @@ const types = {
   403: {
     img: 'https://gw.alipayobjects.com/zos/rmsportal/wZcnGqRDyhPOEYFcZDnb.svg',
     title: '403',
-    desc: '抱歉,你无权访问该页面'
+    desc: 'Sorry, you do not have permission to access this page'
   },
   404: {
     img: 'https://gw.alipayobjects.com/zos/rmsportal/KpnpchXsobRgLElEozzI.svg',
     title: '404',
-    desc: '抱歉,你访问的页面不存在或仍在开发中'
+    desc: 'Sorry, the page you visited does not exist or is still under development'
   },
   500: {
     img: 'https://gw.alipayobjects.com/zos/rmsportal/RVRUAYdCGeYNBWoKiIwB.svg',
     title: '500',
-    desc: '抱歉,服务器出错了'
+    desc: 'Sorry, there was an error with the server'
   }
 }
 
diff --git a/streampark-console/streampark-console-webapp/src/components/IconSelector/icons.js b/streampark-console/streampark-console-webapp/src/components/IconSelector/icons.js
index 0666a1c82..fd6b4fe9a 100644
--- a/streampark-console/streampark-console-webapp/src/components/IconSelector/icons.js
+++ b/streampark-console/streampark-console-webapp/src/components/IconSelector/icons.js
@@ -17,27 +17,27 @@
 
 export default [
   {
-    title: '方向性图标',
+    title: 'Directional icons',
     icons: ['step-backward', 'step-forward', 'fast-backward', 'fast-forward', 'shrink', 'arrows-alt', 'down', 'up', 'left', 'right', 'caret-up', 'caret-down', 'caret-left', 'caret-right', 'up-circle', 'down-circle', 'left-circle', 'right-circle', 'double-right', 'double-left', 'vertical-left', 'vertical-right', 'forward', 'backward', 'rollback', 'enter', 'retweet', 'swap', 'swap-left', 'swap-right', 'arrow-up', 'arrow-down', 'arrow-left', 'arrow-right', 'play-circle', 'up-square', 'down- [...]
   },
   {
-    title: '提示建议性图标',
+    title: 'prompt suggestion icon',
     icons: ['question', 'question-circle', 'plus', 'plus-circle', 'pause', 'pause-circle', 'minus', 'minus-circle', 'plus-square', 'minus-square', 'info', 'info-circle', 'exclamation', 'exclamation-circle', 'close', 'close-circle', 'close-square', 'check', 'check-circle', 'check-square', 'clock-circle', 'warning', 'issues-close', 'stop']
   },
   {
-    title: '编辑类图标',
+    title: 'edit icon',
     icons: ['edit', 'form', 'copy', 'scissor', 'delete', 'snippets', 'diff', 'highlight', 'align-center', 'align-left', 'align-right', 'bg-colors', 'bold', 'italic', 'underline', 'strikethrough', 'redo', 'undo', 'zoom-in', 'zoom-out', 'font-colors', 'font-size', 'line-height', 'colum-height', 'dash', 'small-dash', 'sort-ascending', 'sort-descending', 'drag', 'ordered-list', 'radius-setting']
   },
   {
-    title: '数据类图标',
+    title: 'data icon',
     icons: ['area-chart', 'pie-chart', 'bar-chart', 'dot-chart', 'line-chart', 'radar-chart', 'heat-map', 'fall', 'rise', 'stock', 'box-plot', 'fund', 'sliders']
   },
   {
-    title: '网站通用图标',
+    title: 'Website Universal Icons',
     icons: ['lock', 'unlock', 'bars', 'book', 'calendar', 'cloud', 'cloud-download', 'code', 'copy', 'credit-card', 'delete', 'desktop', 'download', 'ellipsis', 'file', 'file-text', 'file-unknown', 'file-pdf', 'file-word', 'file-excel', 'file-jpg', 'file-ppt', 'file-markdown', 'file-add', 'folder', 'folder-open', 'folder-add', 'hdd', 'frown', 'meh', 'smile', 'inbox', 'laptop', 'appstore', 'link', 'mail', 'mobile', 'notification', 'paper-clip', 'picture', 'poweroff', 'reload', 'search', ' [...]
   },
   {
-    title: '品牌和标识',
+    title: 'Brand and Identity',
     icons: ['android', 'apple', 'windows', 'ie', 'chrome', 'github', 'aliwangwang', 'dingding', 'weibo-square', 'weibo-circle', 'taobao-circle', 'html5', 'weibo', 'twitter', 'wechat', 'youtube', 'alipay-circle', 'taobao', 'skype', 'qq', 'medium-workmark', 'gitlab', 'medium', 'linkedin', 'google-plus', 'dropbox', 'facebook', 'codepen', 'code-sandbox', 'amazon', 'google', 'codepen-circle', 'alipay', 'ant-design', 'aliyun', 'zhihu', 'slack', 'slack-square', 'behance', 'behance-square', 'dri [...]
   }
 ]
diff --git a/streampark-console/streampark-console-webapp/src/components/Notice/Notice.vue b/streampark-console/streampark-console-webapp/src/components/Notice/Notice.vue
index 75e04d388..4bf0d4965 100644
--- a/streampark-console/streampark-console-webapp/src/components/Notice/Notice.vue
+++ b/streampark-console/streampark-console-webapp/src/components/Notice/Notice.vue
@@ -30,7 +30,7 @@
       <a-spin :spinning="loadding">
         <a-tabs default-active-key="1" @change="handleChange">
           <a-tab-pane
-            tab="异常告警"
+            tab="Abnormal alarm"
             key="1">
             <a-list>
               <a-list-item
@@ -61,7 +61,7 @@
             </a-list>
           </a-tab-pane>
           <a-tab-pane
-            tab="通知消息"
+            tab="notification message"
             key="2">
             <a-list>
               <a-list-item
diff --git a/streampark-console/streampark-console-webapp/src/components/Table/index.js b/streampark-console/streampark-console-webapp/src/components/Table/index.js
index ac21d5794..4263a1858 100644
--- a/streampark-console/streampark-console-webapp/src/components/Table/index.js
+++ b/streampark-console/streampark-console-webapp/src/components/Table/index.js
@@ -116,8 +116,8 @@ export default {
   },
   methods: {
     /**
-     * 表格重新加载方法
-     * 如果参数为 true, 则强制刷新到第一页
+     * Form reload method
+     * If the parameter is true, force refresh to the first page
      * @param Boolean bool
      */
     refresh (bool = false) {
@@ -127,10 +127,10 @@ export default {
       this.loadData()
     },
     /**
-     * 加载数据方法
-     * @param {Object} pagination 分页选项器
-     * @param {Object} filters 过滤条件
-     * @param {Object} sorter 排序条件
+     * load data method
+     * @param {Object} pagination Pagination selector
+     * @param {Object} filters filters
+     * @param {Object} sorter Sort condition
      */
     loadData (pagination, filters, sorter) {
       this.localLoading = true
@@ -148,26 +148,26 @@ export default {
       }
       )
       const result = this.data(parameter)
-      // 对接自己的通用数据接口需要修改下方代码中的 r.pageNo, r.totalCount, r.data
+      // To connect your own general data interface, you need to modify r.pageNo, r.totalCount, r.data in the code below
       // eslint-disable-next-line
       if ((typeof result === 'object' || typeof result === 'function') && typeof result.then === 'function') {
         result.then(r => {
           this.localPagination = Object.assign({}, this.localPagination, {
-            current: r.pageNo, // 返回结果中的当前分页数
-            total: r.totalCount, // 返回结果中的总记录数
+            current: r.pageNo, // Returns the current number of pagination in the results
+            total: r.totalCount, // Returns the total number of records in the result
             showSizeChanger: this.showSizeChanger,
             pageSize: (pagination && pagination.pageSize) || this.localPagination.pageSize
           })
-          // 为防止删除数据后导致页面当前页面数据长度为 0 ,自动翻页到上一页
+          // In order to prevent the data length of the current page of the page from being 0 after deleting the data, the page is automatically turned to the previous page
           if (r.data.length === 0 && this.localPagination.current !== 1) {
             this.localPagination.current--
             this.loadData()
             return
           }
-          // 这里用于判断接口是否有返回 r.totalCount 或 this.showPagination = false
-          // 当情况满足时,表示数据不满足分页大小,关闭 table 分页功能
+          // This is used to determine whether the interface returns r.totalCount or this.showPagination = false
+          // When the situation is satisfied, it means that the data does not meet the paging size, and the table paging function is turned off
           (!this.showPagination || !r.totalCount && this.showPagination === 'auto') && (this.localPagination = false)
-          this.localDataSource = r.data // 返回结果中的数组数据
+          this.localDataSource = r.data // Returns the array data in the result
           this.localLoading = false
         })
       }
@@ -185,7 +185,7 @@ export default {
       return totalList
     },
     /**
-     * 用于更新已选中的列表数据 total 统计
+     * Used to update the selected list data total statistics
      * @param selectedRowKeys
      * @param selectedRows
      */
@@ -204,7 +204,7 @@ export default {
       })
     },
     /**
-     * 清空 table 已选中项
+     * Empty table selected items
      */
     clearSelected () {
       if (this.rowSelection) {
@@ -213,7 +213,7 @@ export default {
       }
     },
     /**
-     * 处理交给 table 使用者去处理 clear 事件时,内部选中统计同时调用
+     * When the processing is handed over to the table user to process the clear event, the internal selected statistics are called at the same time.
      * @param callback
      * @returns {*}
      */
@@ -223,29 +223,31 @@ export default {
         <a style="margin-left: 24px" onClick={() => {
           callback()
           this.clearSelected()
-        }}>清空</a>
+        }}>
+          clear
+        </a>
       )
     },
     renderAlert () {
-      // 绘制统计列数据
+      // Plot statistics column data
       const needTotalItems = this.needTotalList.map((item) => {
         return (<span style="margin-right: 12px">
           {item.title}总计 <a style="font-weight: 600">{!item.customRender ? item.total : item.customRender(item.total)}</a>
         </span>)
       })
 
-      // 绘制 清空 按钮
+      // draw clear button
       const clearItem = (typeof this.alert.clear === 'boolean' && this.alert.clear) ? (
         this.renderClear(this.clearSelected)
       ) : (this.alert !== null && typeof this.alert.clear === 'function') ? (
         this.renderClear(this.alert.clear)
       ) : null
 
-      // 绘制 alert 组件
+      // draw alert component
       return (
         <a-alert showIcon={true} style="margin-bottom: 16px">
           <template slot="message">
-            <span style="margin-right: 12px">已选择: <a style="font-weight: 600">{this.selectedRows.length}</a></span>
+            <span style="margin-right: 12px">Selected: <a style="font-weight: 600">{this.selectedRows.length}</a></span>
             {needTotalItems}
             {clearItem}
           </template>
@@ -267,7 +269,7 @@ export default {
       }
       if (k === 'rowSelection') {
         if (showAlert && this.rowSelection) {
-          // 如果需要使用alert,则重新绑定 rowSelection 事件
+          // Rebind rowSelection event if need to use alert
           props[k] = {
             selectedRows: this.selectedRows,
             selectedRowKeys: this.selectedRowKeys,
@@ -278,7 +280,7 @@ export default {
           }
           return props[k]
         } else if (!this.rowSelection) {
-          // 如果没打算开启 rowSelection 则清空默认的选择项
+          // If you do not intend to open rowSelection then clear the default selection
           props[k] = null
           return props[k]
         }
diff --git a/streampark-console/streampark-console-webapp/src/components/Trend/Trend.vue b/streampark-console/streampark-console-webapp/src/components/Trend/Trend.vue
index 899712636..d81a9ae89 100644
--- a/streampark-console/streampark-console-webapp/src/components/Trend/Trend.vue
+++ b/streampark-console/streampark-console-webapp/src/components/Trend/Trend.vue
@@ -43,14 +43,14 @@ export default {
       default: 'ant-pro-trend'
     },
     /**
-       * 上升下降标识:up|down
+       * rising and falling signs:up|down
        */
     flag: {
       type: String,
       required: true
     },
     /**
-       * 颜色反转
+       * Color inversion
        */
     reverseColor: {
       type: Boolean,
diff --git a/streampark-console/streampark-console-webapp/src/components/_util/util.js b/streampark-console/streampark-console-webapp/src/components/_util/util.js
index c865e4a4f..22d87f9d2 100644
--- a/streampark-console/streampark-console-webapp/src/components/_util/util.js
+++ b/streampark-console/streampark-console-webapp/src/components/_util/util.js
@@ -20,7 +20,7 @@
  */
 
 /**
- * 清理空值,对象
+ * cleanup nulls, objects
  * @param children
  * @returns {*[]}
  */
@@ -29,7 +29,7 @@ export function filterEmpty (children = []) {
 }
 
 /**
- * 获取字符串长度,英文字符 长度1,中文字符长度2
+ * Get string length, English character length 1, Chinese character length 2
  * @param {*} str
  */
 export const getStrFullLength = (str = '') =>
@@ -42,7 +42,7 @@ export const getStrFullLength = (str = '') =>
   }, 0)
 
 /**
- * 截取字符串,根据 maxLength 截取后返回
+ * Intercept the string and return it according to maxLength
  * @param {*} str
  * @param {*} maxLength
  */
diff --git a/streampark-console/streampark-console-webapp/src/components/global.less b/streampark-console/streampark-console-webapp/src/components/global.less
index 0d65990b1..22b0afab4 100644
--- a/streampark-console/streampark-console-webapp/src/components/global.less
+++ b/streampark-console/streampark-console-webapp/src/components/global.less
@@ -20,7 +20,7 @@ html {
 }
 
 body {
-  // 打开滚动条固定显示
+  // Turn on scrollbar fixed display
   overflow-y: scroll;
 
   &.colorWeak {
@@ -53,7 +53,7 @@ body {
 
     /**
      * ant-table-wrapper
-     * 覆盖的表格手机模式样式,如果想修改在手机上表格最低宽度,可以在这里改动
+     * Overriding table mobile mode style, if you want to modify the minimum width of the table on the mobile phone, you can change it here
      */
 
     .ant-table-wrapper {
@@ -67,7 +67,7 @@ body {
     }
 
     .topmenu {
-      /* 必须为 topmenu  才能启用流式布局 */
+      /* Must be topmenu to enable fluid layout */
 
       &.content-width-Fluid {
         .header-index-wide {
@@ -122,7 +122,7 @@ body {
       }
     }
 
-    /* 必须为 topmenu  才能启用流式布局 */
+    /* Must be topmenu to enable fluid layout */
 
     &.content-width-Fluid {
       .header-index-wide {
@@ -344,7 +344,7 @@ body {
     }
   }
 
-  // 内容区
+  // Content area
   .layout-content {
     margin: 24px 24px 0px;
     height: 100%;
@@ -365,7 +365,7 @@ body {
   }
 }
 
-// drawer-sider 自定义
+// drawer-sider custom
 .ant-drawer.drawer-sider {
   .sider {
     box-shadow: none;
@@ -397,7 +397,7 @@ body {
   }
 }
 
-// 菜单样式
+// menu style
 .sider {
   box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
   position: relative;
@@ -471,7 +471,7 @@ body {
   }
 }
 
-// 外置的样式控制
+// External style control
 .user-dropdown-menu {
   span {
     user-select: none;
@@ -493,7 +493,7 @@ body {
   }
 }
 
-// 数据列表 样式
+// data list style
 .table-alert {
   margin-bottom: 16px;
 }
@@ -597,20 +597,20 @@ body {
   border-radius: 50% !important;
 }
 
-  /*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
+  /*Define the height, width and background of the scroll bar. The height and width correspond to the size of the horizontal and vertical scroll bars.*/
 ::-webkit-scrollbar {
-  width: 14px;  /*滚动条宽度*/
-  height: 14px;  /*滚动条高度*/
+  width: 14px;  /*scroll bar width*/
+  height: 14px;  /*scroll bar height*/
 }
 
-/*定义滚动条轨道 内阴影+圆角*/
+/*Define the scroll bar track inner shadow + rounded corners*/
 ::-webkit-scrollbar-track {
   background-color: unset;
 }
 
-/*定义滑块 内阴影+圆角*/
+/*Define slider inner shadow + rounded corners*/
 ::-webkit-scrollbar-thumb {
-  background-color: @background-color-base  /*滚动条的背景颜色*/
+  background-color: @background-color-base  /*scrollbar background color*/
 }
 
 .ant-radio-button-wrapper:first-child {
diff --git a/streampark-console/streampark-console-webapp/src/components/tools/DetailList.vue b/streampark-console/streampark-console-webapp/src/components/tools/DetailList.vue
index 305f71b18..ddb2c8b09 100644
--- a/streampark-console/streampark-console-webapp/src/components/tools/DetailList.vue
+++ b/streampark-console/streampark-console-webapp/src/components/tools/DetailList.vue
@@ -18,7 +18,7 @@
 -->
 
 <script>
-/* WARNING: 兼容老引入,请勿继续使用 */
+/* WARNING: Compatible with old introduction, please do not continue to use */
 import DescriptionList from '@/components/DescriptionList'
 export default DescriptionList
 </script>
diff --git a/streampark-console/streampark-console-webapp/src/components/tools/TwoStepCaptcha.vue b/streampark-console/streampark-console-webapp/src/components/tools/TwoStepCaptcha.vue
index de435ef2f..08572d850 100644
--- a/streampark-console/streampark-console-webapp/src/components/tools/TwoStepCaptcha.vue
+++ b/streampark-console/streampark-console-webapp/src/components/tools/TwoStepCaptcha.vue
@@ -18,7 +18,7 @@
 -->
 
 <template>
-  <!-- 两步验证 -->
+  <!-- 2-step verification -->
   <a-modal
     centered
     v-model="visible"
@@ -27,7 +27,7 @@
     <div
       slot="title"
       :style="{ textAlign: 'center' }">
-      两步验证
+      2-step verification
     </div>
     <template
       slot="footer">
@@ -36,14 +36,14 @@
         <a-button
           key="back"
           @click="handleCancel">
-          返回
+          back
         </a-button>
         <a-button
           key="submit"
           type="primary"
           :loading="stepLoading"
           @click="handleStepOk">
-          继续
+          continue
         </a-button>
       </div>
     </template>
@@ -58,18 +58,18 @@
           <p
             style="text-align: center"
             v-if="!stepLoading">
-            请在手机中打开 Google Authenticator 或两步验证 APP<br>输入 6 位动态码
+            Please open Google Authenticator or 2-step verification APP in your phone<br>Enter the 6-digit dynamic code
           </p>
           <p
             style="text-align: center"
             v-else>
-            正在验证..<br>请稍后
+            Verifying..<br>Please wait
           </p>
           <a-form-item
             :style="{ textAlign: 'center' }"
             has-feedback
             field-decorator-id="stepCode"
-            :field-decorator-options="{rules: [{ required: true, message: '请输入 6 位动态码!', pattern: /^\d{6}$/, len: 6 }]}">
+            :field-decorator-options="{rules: [{ required: true, message: 'Please enter a 6-digit dynamic code!', pattern: /^\d{6}$/, len: 6 }]}">
             <a-input
               :style="{ textAlign: 'center' }"
               @keyup.enter.native="handleStepOk"
@@ -78,7 +78,9 @@
           <p
             style="text-align: center">
             <a
-              @click="onForgeStepCode">遗失手机?</a>
+              @click="onForgeStepCode">
+              Lost your phone?
+            </a>
           </p>
         </div>
       </a-form>
diff --git a/streampark-console/streampark-console-webapp/src/components/tools/UserMenu.vue b/streampark-console/streampark-console-webapp/src/components/tools/UserMenu.vue
index 6cd5fb704..bef5529e5 100644
--- a/streampark-console/streampark-console-webapp/src/components/tools/UserMenu.vue
+++ b/streampark-console/streampark-console-webapp/src/components/tools/UserMenu.vue
@@ -269,7 +269,7 @@ export default {
         this.themeDark = !this.themeDark
         _theme = this.themeDark ? 'dark': 'light'
         this.ChangeTheme(_theme)
-        const closeMessage = this.$message.loading(`您选择了主题模式 ${_theme}, 正在切换...`)
+        const closeMessage = this.$message.loading(`You have selected the theme ${_theme}, switching...`)
         themeUtil.changeThemeColor(null, _theme).then(closeMessage)
       }
     },
diff --git a/streampark-console/streampark-console-webapp/src/config/config.js b/streampark-console/streampark-console-webapp/src/config/config.js
index f313fab83..0ee9b23b3 100644
--- a/streampark-console/streampark-console-webapp/src/config/config.js
+++ b/streampark-console/streampark-console-webapp/src/config/config.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-// 自定义配置,参考 ./default/setting.config.js,需要自定义的属性在这里配置即可
+// Custom configuration, refer to ./default/setting.config.js, the properties that need to be customized can be configured here
 module.exports = {
   theme: {
     color: '#1890ff',
diff --git a/streampark-console/streampark-console-webapp/src/config/default/admin.config.js b/streampark-console/streampark-console-webapp/src/config/default/admin.config.js
index 31474ba9c..549c51494 100644
--- a/streampark-console/streampark-console-webapp/src/config/default/admin.config.js
+++ b/streampark-console/streampark-console-webapp/src/config/default/admin.config.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-// admin 配置
+// admin configure
 const ADMIN = {
   theme: {
     mode: {
diff --git a/streampark-console/streampark-console-webapp/src/config/default/antd.config.js b/streampark-console/streampark-console-webapp/src/config/default/antd.config.js
index 494cb4417..60a53fb1b 100644
--- a/streampark-console/streampark-console-webapp/src/config/default/antd.config.js
+++ b/streampark-console/streampark-console-webapp/src/config/default/antd.config.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-// antd 配置
+// antd configure
 const ANTD = {
   primary: {
     color: '#1890ff',
diff --git a/streampark-console/streampark-console-webapp/src/config/default/setting.config.js b/streampark-console/streampark-console-webapp/src/config/default/setting.config.js
index 8c856a5a3..32cc331ff 100644
--- a/streampark-console/streampark-console-webapp/src/config/default/setting.config.js
+++ b/streampark-console/streampark-console-webapp/src/config/default/setting.config.js
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-// 此配置为系统默认设置,需修改的设置项,在src/config/config.js中添加修改项即可。也可直接在此文件中修改。
+// This configuration is the default setting of the system. To modify the setting items, you can add the modified items in src/config/config.js. It can also be modified directly in this file.
 module.exports = {
-  lang: 'CN',                           //语言,可选 CN(简体)、HK(繁体)、US(英语),也可扩展其它语言
-  theme: {                              //主题
-    color: '#1890ff',                   //主题色
-    mode: 'dark',                       //主题模式 可选 dark、 light
-    success: '#52c41a',                 //成功色
-    warning: '#faad14',                 //警告色
-    error: '#f5222f',                   //错误色
+  lang: 'CN',                           //Language, optional CN (Simplified), HK (Traditional), US (English), other languages can also be extended
+  theme: {                              //theme
+    color: '#1890ff',                   //theme color
+    mode: 'dark',                       //Theme mode optional dark, light
+    success: '#52c41a',                 //success color
+    warning: '#faad14',                 //warning color
+    error: '#f5222f',                   //wrong color
   }
 }
diff --git a/streampark-console/streampark-console-webapp/src/config/defaultSettings.js b/streampark-console/streampark-console-webapp/src/config/defaultSettings.js
index 7885e8be6..81aa4b97c 100644
--- a/streampark-console/streampark-console-webapp/src/config/defaultSettings.js
+++ b/streampark-console/streampark-console-webapp/src/config/defaultSettings.js
@@ -16,16 +16,16 @@
  */
 
 /**
- * 项目默认配置项
- * primaryColor - 默认主题色
- * colorWeak - 色盲模式
- * layout - 整体布局方式 ['sidemenu', 'topmenu'] 两种布局
- * fixedHeader - 固定 Header : boolean
- * fixSiderbar - 固定左侧菜单栏 : boolean
- * autoHideHeader - 向下滚动时,隐藏 Header : boolean
- * contentWidth - 内容区布局: 流式 |  固定
+ * Project default configuration items
+ * primaryColor - the default theme color
+ * colorWeak - Colorblind mode
+ * layout - overall layout ['sidemenu', 'topmenu'] two layouts
+ * fixedHeader - the fixed Header : boolean
+ * fixSiderbar - fix left menu bar: boolean
+ * autoHideHeader - when scrolling down, hide the Header : boolean
+ * contentWidth - content area layout: fluid | fixed
  *
- * storageOptions: {} - Vue-ls 插件配置项 (localStorage/sessionStorage)
+ * storageOptions: {} - Vue-ls plugin configuration items (localStorage/sessionStorage)
  *
  */
 
diff --git a/streampark-console/streampark-console-webapp/src/config/replacer/index.js b/streampark-console/streampark-console-webapp/src/config/replacer/index.js
index 3cf4a2556..e48b75f80 100644
--- a/streampark-console/streampark-console-webapp/src/config/replacer/index.js
+++ b/streampark-console/streampark-console-webapp/src/config/replacer/index.js
@@ -16,12 +16,12 @@
  */
 
 /**
- * webpack-theme-color-replacer 配置
- * webpack-theme-color-replacer 是一个高效的主题色替换插件,可以实现系统运行时动态切换主题功能。
- * 但有些情景下,我们需要为 webpack-theme-color-replacer 配置一些规则,以达到我们的个性化需求的目的
+ * webpack-theme-color-replacer configure
+ * webpack-theme-color-replacer It is an efficient theme color replacement plug-in, which can realize the function of dynamically switching themes when the system is running.
+ * But in some cases, we need to configure some rules for webpack-theme-color-replacer to achieve our personalized needs
  *
- * @cssResolve: css处理规则,在 webpack-theme-color-replacer 提取 需要替换主题色的 css 后,应用此规则。一般在
- *              webpack-theme-color-replacer 默认规则无法达到我们的要求时使用。
+ * @cssResolve: CSS processing rule, which is applied after webpack-theme-color-replacer extracts the CSS that needs to replace the theme color.
+ * Generally used when the default rules of webpack-theme-color-replacer cannot meet our requirements.
  */
 const cssResolve = require('./resolve.config')
 module.exports = {cssResolve}
diff --git a/streampark-console/streampark-console-webapp/src/config/replacer/resolve.config.js b/streampark-console/streampark-console-webapp/src/config/replacer/resolve.config.js
index a81286bd5..d5663d7a5 100644
--- a/streampark-console/streampark-console-webapp/src/config/replacer/resolve.config.js
+++ b/streampark-console/streampark-console-webapp/src/config/replacer/resolve.config.js
@@ -16,18 +16,18 @@
  */
 
 /**
- * webpack-theme-color-replacer 插件的 resolve 配置<br>
- * 为特定的 css 选择器(selector)配置 resolve 规则。<br>
+ * resolve config for webpack-theme-color-replacer plugin<br>
+ * Configure resolve rules for specific css selectors. <br>
  *
- * key 为 css selector 值或合法的正则表达式字符串<br>
- * 当 key 设置 css selector 值时,会匹配对应的 css<br>
- * 当 key 设置为正则表达式时,会匹配所有满足此正则表达式的的 css<br>
+ * key is a css selector value or a valid regular expression string<br>
+ * When the key sets the css selector value, it will match the corresponding css<br>
+ * When key is set to a regular expression, it will match all css<br> that satisfy this regular expression
  *
- * value 可以设置为 boolean 值 false 或 一个对象<br>
- * 当 value 为 false 时,则会忽略此 css,即此 css 不纳入 webpack-theme-color-replacer 管理<br>
- * 当 value 为 对象时,会调用该对象的 resolve 函数,并传入 cssText(原始的 css文本) 和 cssObj(css对象)参数; resolve函数应该返<br>
- * 回一个处理后的、合法的 css字符串(包含 selector)<br>
- * 注意: value 不能设置为 true<br>
+ * value can be set to boolean value false or an object<br>
+ * When the value is false, this css will be ignored, that is, this css will not be included in the webpack-theme-color-replacer management<br>
+ * When value is an object, the resolve function of the object is called, and the cssText (original css text) and cssObj (css object) parameters are passed in; the resolve function should return <br>
+ * Return a processed, valid css string (including selector)<br>
+ * Note: value cannot be set to true<br>
  */
 const cssResolve = {
   '.ant-checkbox-checked .ant-checkbox-inner::after': {
diff --git a/streampark-console/streampark-console-webapp/src/core/directives/permission.js b/streampark-console/streampark-console-webapp/src/core/directives/permission.js
index 1351e7f23..10fa19d23 100644
--- a/streampark-console/streampark-console-webapp/src/core/directives/permission.js
+++ b/streampark-console/streampark-console-webapp/src/core/directives/permission.js
@@ -17,7 +17,7 @@
 
 import Vue from 'vue'
 
-// 定义一些和权限有关的 Vue指令
+// Define some Vue directives related to permissions
 
 const doCheck = function (elems, values, filter, status, el) {
   let flag = !filter
@@ -31,7 +31,7 @@ const doCheck = function (elems, values, filter, status, el) {
   }
 }
 
-// 必须包含列出的所有权限,元素才显示
+// All permissions listed must be included for the element to display
 const permit = {
   install (Vue) {
     Vue.directive('permit', {
@@ -44,7 +44,7 @@ const permit = {
   }
 }
 
-// 当不包含列出的权限时,渲染该元素
+// Render the element when the listed permissions are not included
 const noPermit = {
   install (Vue) {
     Vue.directive('noPermit', {
@@ -57,7 +57,7 @@ const noPermit = {
   }
 }
 
-// 只要包含列出的任意一个权限,元素就会显示
+// The element displays as long as any of the listed permissions are included
 const anyPermit = {
   install (Vue) {
     Vue.directive('anyPermit', {
@@ -70,7 +70,7 @@ const anyPermit = {
   }
 }
 
-// 必须包含列出的所有角色,元素才显示
+// All roles listed must be included for the element to display
 const hasRole = {
   install (Vue) {
     Vue.directive('hasRole', {
@@ -83,7 +83,7 @@ const hasRole = {
   }
 }
 
-// 只要包含列出的任意一个角色,元素就会显示
+// The element will display as long as it contains any of the listed roles
 const hasAnyRole = {
   install (Vue) {
     Vue.directive('hasAnyRole', {
diff --git a/streampark-console/streampark-console-webapp/src/core/icons.js b/streampark-console/streampark-console-webapp/src/core/icons.js
index f2b42bccb..806b789ef 100644
--- a/streampark-console/streampark-console-webapp/src/core/icons.js
+++ b/streampark-console/streampark-console-webapp/src/core/icons.js
@@ -20,8 +20,8 @@
  * All icons are loaded here for easy management
  * @see https://vue.ant.design/components/icon/#Custom-Font-Icon
  *
- * 自定义图标加载表
- * 所有图标均从这里加载,方便管理
+ * Custom Icon Loading Form
+ * All icons are loaded from here for easy management
  */
 import alarm from '@/assets/icons/alarm.svg?inline'
 import testalarm from '@/assets/icons/testalarm.svg?inline'
diff --git a/streampark-console/streampark-console-webapp/src/core/lazy_lib/components_use.js b/streampark-console/streampark-console-webapp/src/core/lazy_lib/components_use.js
index f273edb16..a343a4b8a 100644
--- a/streampark-console/streampark-console-webapp/src/core/lazy_lib/components_use.js
+++ b/streampark-console/streampark-console-webapp/src/core/lazy_lib/components_use.js
@@ -17,10 +17,10 @@
 
 /* eslint-disable */
 /**
- * 该文件是为了按需加载,剔除掉了一些不需要的框架组件。
- * 减少了编译支持库包大小
+ * This file is for on-demand loading, with some unneeded framework components removed.
+ * Reduced compilation support library package size
  *
- * 当需要更多组件依赖时,在该文件加入即可
+ * When you need more component dependencies, you can add it to this file
  */
 import Vue from 'vue'
 import {
diff --git a/streampark-console/streampark-console-webapp/src/layouts/BasicView.vue b/streampark-console/streampark-console-webapp/src/layouts/BasicView.vue
index 488292988..928bed69c 100644
--- a/streampark-console/streampark-console-webapp/src/layouts/BasicView.vue
+++ b/streampark-console/streampark-console-webapp/src/layouts/BasicView.vue
@@ -105,7 +105,7 @@ export default {
   },
   computed: {
     ...mapState({
-      // 动态主路由
+      // Dynamic main route
       mainMenu: state => state.user.routers
     }),
     contentPaddingLeft () {
diff --git a/streampark-console/streampark-console-webapp/src/layouts/RouteView.vue b/streampark-console/streampark-console-webapp/src/layouts/RouteView.vue
index 4f77a2743..01b81a7b4 100644
--- a/streampark-console/streampark-console-webapp/src/layouts/RouteView.vue
+++ b/streampark-console/streampark-console-webapp/src/layouts/RouteView.vue
@@ -39,9 +39,9 @@ export default {
     const notKeep = (
       <router-view />
     )
-    // 这里增加了 multiTab 的判断,当开启了 multiTab 时
-    // 应当全部组件皆缓存,否则会导致切换页面后页面还原成原始状态
-    // 若确实不需要,可改为 return meta.keepAlive ? inKeep : notKeep
+    // The judgment of multiTab is added here, when multiTab is enabled
+    // All components should be cached, otherwise the page will be restored to the original state after switching pages
+    // If you really don't need it, you can change it to return meta.keepAlive ? inKeep : notKeep
     if (!getters.multiTab && meta.keepAlive === false) {
       return notKeep
     }
diff --git a/streampark-console/streampark-console-webapp/src/router/index.js b/streampark-console/streampark-console-webapp/src/router/index.js
index ddb74e35c..5fde0ba30 100644
--- a/streampark-console/streampark-console-webapp/src/router/index.js
+++ b/streampark-console/streampark-console-webapp/src/router/index.js
@@ -54,7 +54,7 @@ const whiteList = ['signin']
 
 let asyncRouter
 
-// 导航守卫,渲染动态路由
+// Navigation guards, rendering dynamic routes
 router.beforeEach((to, from, next) => {
   NProgress.start() // start progress bar
   if (whiteList.indexOf(to.path) !== -1) {
@@ -63,15 +63,15 @@ router.beforeEach((to, from, next) => {
   const token = storage.get(TOKEN)
   if (token) {
     if (!asyncRouter) {
-      // 如果用户路由不存在
+      // If the user route does not exist
       const routers = store.getters.routers
       if (routers) {
         asyncRouter = routers
         go(to, next)
       } else {
-        // 获取当前这个用户所在角色可访问的全部路由
+        // Get all routes accessible by the role of the current user
         store.dispatch('GetRouter', {}).then((resp) => {
-          // 校验菜单权限
+          // Check menu permissions
           if (resp.length === 1 && resp[0].children.length === 0) {
             store.commit('SET_ROUTERS', null)
             notification.error({
diff --git a/streampark-console/streampark-console-webapp/src/store/modules/user.js b/streampark-console/streampark-console-webapp/src/store/modules/user.js
index 60ea3a030..7c53ec691 100644
--- a/streampark-console/streampark-console-webapp/src/store/modules/user.js
+++ b/streampark-console/streampark-console-webapp/src/store/modules/user.js
@@ -79,7 +79,7 @@ const user = {
   },
 
   actions: {
-    // 登录
+    // Log in
     SignIn ({ commit }, userInfo) {
       return new Promise((resolve, reject) => {
         signin(userInfo).then(response => {
@@ -109,7 +109,7 @@ const user = {
         })
       })
     },
-    // 登出
+    // Sign out
     SignOut ({ commit, state }) {
       return new Promise((resolve) => {
         signout().then((resp) => {
diff --git a/streampark-console/streampark-console-webapp/src/utils/colors.js b/streampark-console/streampark-console-webapp/src/utils/colors.js
index d9c4ecfe3..610f9255a 100644
--- a/streampark-console/streampark-console-webapp/src/utils/colors.js
+++ b/streampark-console/streampark-console-webapp/src/utils/colors.js
@@ -22,13 +22,13 @@ const Config = require('../config')
 
 const themeMode = ADMIN.theme.mode
 
-// 获取 ant design 色系
+// Get ant design colorways
 function getAntdColors(color, mode) {
   const options = mode && (mode === themeMode.NIGHT) ? { theme: 'dark' } : undefined
   return generate(color, options)
 }
 
-// 获取功能性颜色
+// Get functional colors
 function getFunctionalColors(mode) {
   const options = mode && (mode === themeMode.NIGHT) ? {theme: 'dark'} : undefined
   let {success, warning, error} = ANTD.primary
@@ -46,7 +46,7 @@ function getFunctionalColors(mode) {
   }
 }
 
-// 获取菜单色系
+// get menu color
 function getMenuColors(color, mode) {
   if (mode === themeMode.NIGHT) {
     return ANTD.primary.night.menuColors
@@ -57,23 +57,23 @@ function getMenuColors(color, mode) {
   }
 }
 
-// 获取主题模式切换色系
+// Get the theme mode switch color system
 function getThemeToggleColors(color, mode) {
-  //主色系
+  // main color
   const mainColors = getAntdColors(color, mode)
   const primary = mainColors[5]
-  //辅助色系,因为 antd 目前没针对夜间模式设计,所以增加辅助色系以保证夜间模式的正常切换
+  // Auxiliary color system, because antd is not currently designed for night mode, so add auxiliary color system to ensure the normal switching of night mode
   const subColors = getAntdColors(primary, themeMode.LIGHT)
-  //菜单色系
+  // menu color
   const menuColors = getMenuColors(color, mode)
-  //内容色系(包含背景色、文字颜色等)
+  // Content color system (including background color, text color, etc.)
   const themeCfg = ANTD.theme[mode]
   let contentColors = Object.keys(themeCfg)
     .map(key => themeCfg[key])
     .map(color => isHex(color) ? color : toNum3(color).join(','))
-  // 内容色去重
+  // Content color deduplication
   contentColors = [...new Set(contentColors)]
-  // rgb 格式的主题色
+  // Theme color in rgb format
   const rgbColors = [toNum3(primary).join(',')]
   const functionalColors = getFunctionalColors(mode)
   return {primary, mainColors, subColors, menuColors, contentColors, rgbColors, functionalColors}
diff --git a/streampark-console/streampark-console-webapp/src/utils/formatter.js b/streampark-console/streampark-console-webapp/src/utils/formatter.js
index 1d75bd7ca..8ff6185df 100644
--- a/streampark-console/streampark-console-webapp/src/utils/formatter.js
+++ b/streampark-console/streampark-console-webapp/src/utils/formatter.js
@@ -16,9 +16,9 @@
  */
 
 /**
- * 把对象按照 js配置文件的格式进行格式化
- * @param obj 格式化的对象
- * @param dep 层级,此项无需传值
+ * Format the object according to the format of the js configuration file
+ * @param obj formatted object
+ * @param dep level, this item does not need to pass a value
  * @returns {string}
  */
 function formatConfig(obj, dep) {
diff --git a/streampark-console/streampark-console-webapp/src/utils/helper/permission.js b/streampark-console/streampark-console-webapp/src/utils/helper/permission.js
index db9f0e701..bf6b209e5 100644
--- a/streampark-console/streampark-console-webapp/src/utils/helper/permission.js
+++ b/streampark-console/streampark-console-webapp/src/utils/helper/permission.js
@@ -16,15 +16,15 @@
  */
 
 const PERMISSION_ENUM = {
-  'add': { key: 'add', label: '新增' },
-  'delete': { key: 'delete', label: '删除' },
-  'edit': { key: 'edit', label: '修改' },
-  'query': { key: 'query', label: '查询' },
-  'get': { key: 'get', label: '详情' },
-  'enable': { key: 'enable', label: '启用' },
-  'disable': { key: 'disable', label: '禁用' },
-  'import': { key: 'import', label: '导入' },
-  'export': { key: 'export', label: '导出' }
+  'add': { key: 'add', label: 'Add' },
+  'delete': { key: 'delete', label: 'Delete' },
+  'edit': { key: 'edit', label: 'Edit' },
+  'query': { key: 'query', label: 'Query' },
+  'get': { key: 'get', label: 'Details' },
+  'enable': { key: 'enable', label: 'Enable' },
+  'disable': { key: 'disable', label: 'Disable' },
+  'import': { key: 'import', label: 'Import' },
+  'export': { key: 'export', label: 'Export' }
 }
 
 function plugin (Vue) {
diff --git a/streampark-console/streampark-console-webapp/src/utils/request.js b/streampark-console/streampark-console-webapp/src/utils/request.js
index f3085af66..657b47eb2 100644
--- a/streampark-console/streampark-console-webapp/src/utils/request.js
+++ b/streampark-console/streampark-console-webapp/src/utils/request.js
@@ -30,10 +30,10 @@ import {baseUrl} from '@/api/baseUrl'
 const http = axios.create({
   baseURL: baseUrl(),
   withCredentials: false,
-  timeout: 1000 * 10, // 请求超时时间
+  timeout: 1000 * 10, // request timeout
   responseType: 'json',
   validateStatus(status) {
-    // 200 外的状态码都认定为失败
+    // Status codes other than 200 are considered failures
     return status === 200
   }
 })
@@ -42,7 +42,7 @@ const http = axios.create({
 http.interceptors.request.use(config => {
   const expire = store.getters.expire
   const now = moment().format('YYYYMMDDHHmmss')
-  // 让token早10秒种过期,提升“请重新登录”弹窗体验
+  // Let the token expire 10 seconds earlier to improve the "Please log in again" pop-up experience
   if (now - expire >= -10) {
     Modal.error({
       title: 'Sign in expired',
@@ -67,7 +67,7 @@ http.interceptors.request.use(config => {
     config.headers['Authorization'] = token
   }
   config.transformRequest = [function (data) {
-    // 在请求之前对data传参进行格式转换
+    // Format the data parameter before the request
     if (config.method === 'get' || config.method === 'post') {
       if (data.sortField && data.sortOrder) {
         data.sortOrder = data.sortOrder === 'descend' ? 'desc' : 'asc'
@@ -123,7 +123,7 @@ http.interceptors.response.use((response) => {
           break
         case 403:
         case 401:
-          //避免在某些页面有密集的ajax请求数据时反复的弹窗
+          // Avoid repeated pop-ups when some pages have dense ajax request data
           if (!storage.get(INVALID, false)) {
             storage.set(INVALID, true)
             notification.warn({
@@ -169,7 +169,7 @@ const blobTimeout = 1000 * 60 * 10
 export default {
   postJson(url, data) {
     data.isJsonType = true
-    console.log('最终提交参数: ' + JSON.stringify(data))
+    console.log('final submission parameters: ' + JSON.stringify(data))
     return http.post(url, data , {
       headers: {
         'Content-Type': 'application/json; charset=UTF-8'
@@ -195,12 +195,12 @@ export default {
     message.loading('File transfer in progress')
     return http.post(url, params, {
       responseType: 'blob',
-      timeout: blobTimeout // 上传文件超时10分钟
+      timeout: blobTimeout // Uploading files timed out for 10 minutes
     }).then((resp) => {
       respBlob(resp, filename)
     }).catch((r) => {
       console.error(r)
-      message.error('下载失败')
+      message.error('download failed')
     })
   },
   upload(url, params) {
@@ -208,7 +208,7 @@ export default {
       headers: {
         'Content-Type': 'multipart/form-data'
       },
-      timeout: blobTimeout // 上传文件超时10分钟
+      timeout: blobTimeout // Uploading files timed out for 10 minutes
     })
   },
   export(url, params = {}, blobCallback, msg) {
@@ -216,14 +216,14 @@ export default {
       blobCallback = respBlob
     }
     msg = msg == null ? {} : msg
-    message.loading(msg.loading || '导入文件中...')
+    message.loading(msg.loading || 'import file...')
     return http.post(url, params, {
       responseType: 'blob'
     }).then((resp) => {
       blobCallback(resp)
     }).catch((r) => {
       console.error(r)
-      message.error(msg.error || '导出文件失败!')
+      message.error(msg.error || 'Failed to export file!')
     })
   },
 
diff --git a/streampark-console/streampark-console-webapp/src/utils/theme-color-replacer-extend.js b/streampark-console/streampark-console-webapp/src/utils/theme-color-replacer-extend.js
index 45c79e535..f7548a688 100644
--- a/streampark-console/streampark-console-webapp/src/utils/theme-color-replacer-extend.js
+++ b/streampark-console/streampark-console-webapp/src/utils/theme-color-replacer-extend.js
@@ -16,10 +16,10 @@
  */
 
 const {cssResolve} = require('../config/replacer')
-// 修正 webpack-theme-color-replacer 插件提取的 css 结果
+// Fix css results extracted by webpack-theme-color-replacer plugin
 function resolveCss(output, srcArr) {
   const regExps = []
-  // 提取 resolve 配置中所有的正则配置
+  // Extract all regular configuration in resolve configuration
   Object.keys(cssResolve).forEach(key => {
     let isRegExp = false
     let reg = {}
@@ -34,15 +34,15 @@ function resolveCss(output, srcArr) {
     }
   })
 
-  // 去重
+  // deduplication
   srcArr = dropDuplicate(srcArr)
 
-  // 处理 css
+  // handle css
   const outArr = []
   srcArr.forEach(text => {
-    // 转换为 css 对象
+    // Convert to css object
     const cssObj = parseCssObj(text)
-    // 根据selector匹配配置,匹配成功,则按配置处理 css
+    // Match the configuration according to the selector, if the match is successful, the css is processed according to the configuration
     if (cssResolve[cssObj.selector] !== undefined) {
       const cfg = cssResolve[cssObj.selector]
       if (cfg) {
@@ -50,14 +50,14 @@ function resolveCss(output, srcArr) {
       }
     } else {
       let cssText = ''
-      // 匹配不成功,则测试是否有匹配的正则配置,有则按正则对应的配置处理
+      // If the match is unsuccessful, test whether there is a matching regular configuration, and if there is, it will be processed according to the regular configuration
       for (const regExp of regExps) {
         if (regExp[0].test(cssObj.selector)) {
           const cssCfg = regExp[1]
           cssText = cssCfg ? cssCfg.resolve(text, cssObj) : ''
           break
         }
-        // 未匹配到正则,则设置 cssText 为默认的 css(即不处理)
+        // If no regularity is matched, set cssText as the default css (ie not processed)
         cssText = text
       }
       if (cssText !== '') {
@@ -69,7 +69,7 @@ function resolveCss(output, srcArr) {
   return output
 }
 
-// 数组去重
+// Array deduplication
 function dropDuplicate(arr) {
   const map = {}
   const r = []
@@ -83,7 +83,7 @@ function dropDuplicate(arr) {
 }
 
 /**
- * 从字符串解析 css 对象
+ * Parse css object from string
  * @param cssText
  * @returns {{
  *   name: String,
diff --git a/streampark-console/streampark-console-webapp/src/utils/util.js b/streampark-console/streampark-console-webapp/src/utils/util.js
index 68419924c..3ead0546a 100644
--- a/streampark-console/streampark-console-webapp/src/utils/util.js
+++ b/streampark-console/streampark-console-webapp/src/utils/util.js
@@ -19,16 +19,16 @@ export default {
   timeFix () {
     const time = new Date()
     const hour = time.getHours()
-    return hour < 9 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 20 ? '下午好' : '晚上好'
+    return hour < 9 ? 'Good morning' : hour <= 11 ? 'Good morning' : hour <= 13 ? 'Good afternoon' : hour < 20 ? 'Good afternoon' : 'Good evening'
   },
   welcome () {
-    const arr = ['休息一会儿吧', '准备吃什么呢?', '要不要打一把 DOTA', '我猜你可能累了']
+    const arr = ['Take a break', 'What are you going to eat?', 'Do you want to play DOTA?', 'I guess you might be tired']
     const index = Math.floor(Math.random() * arr.length)
     return arr[index]
   },
 
   /**
-   * 触发 window.resize
+   * trigger window.resize
    */
   triggerWindowResize () {
     const event = document.createEvent('HTMLEvents')
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/app/Add.vue b/streampark-console/streampark-console-webapp/src/views/flink/app/Add.vue
index c5cfcfe80..109125fec 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/Add.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/Add.vue
@@ -787,7 +787,7 @@
         </p>
       </a-form-item>
 
-      <!--告警方式-->
+      <!--Alarm mode-->
       <template>
         <a-form-item
           label="Fault Alert Template"
@@ -2202,7 +2202,7 @@
       },
 
       /**
-       * TODO:解析出source和sink,画图!
+       * TODO: parse out source and sink, draw!
        */
       handleLeaderLine() {
         const elem = document.querySelectorAll('.CodeMirror-line>span[role=presentation]')
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/app/AddEdit.js b/streampark-console/streampark-console-webapp/src/views/flink/app/AddEdit.js
index a0615ada6..a753847dd 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/AddEdit.js
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/AddEdit.js
@@ -24,8 +24,8 @@ export function globalOption(vue) {
         theme: vue.ideTheme(),
         language: 'sql',
         selectOnLineNumbers: false,
-        foldingStrategy: 'indentation', // 代码分小段折叠
-        overviewRulerBorder: false, // 不要滚动条边框
+        foldingStrategy: 'indentation', // code fragmentation
+        overviewRulerBorder: false, // Don't scroll bar borders
         autoClosingBrackets: true,
         tabSize: 2, // tab 缩进长度
         readOnly: false,
@@ -39,7 +39,7 @@ export function globalOption(vue) {
         cursorWidth: 3,
         renderFinalNewline: true,
         renderLineHighlight: 'all',
-        quickSuggestionsDelay: 100,  //代码提示延时
+        quickSuggestionsDelay: 100,  // Code prompt delay
         scrollbar: {
             useShadows: false,
             vertical: 'visible',
@@ -68,7 +68,7 @@ export function initFlinkSqlEditor(vue) {
     option.value = controller.flinkSql.value
     option.minimap = {enabled: true}
     controller.editor.flinkSql = monaco.editor.create(document.querySelector('#flink-sql'), option)
-    //输入事件触发...
+    // Input event triggers...
     controller.editor.flinkSql.onDidChangeModelContent(() => {
         controller.flinkSql.value = controller.editor.flinkSql.getValue()
     })
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/app/Detail.vue b/streampark-console/streampark-console-webapp/src/views/flink/app/Detail.vue
index fd8893aa3..1beab8064 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/Detail.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/Detail.vue
@@ -797,7 +797,7 @@ export default {
           defaultPageSize: 10,
           showQuickJumper: true,
           showSizeChanger: true,
-          showTotal: (total, range) => `显示 ${range[0]} ~ ${range[1]} 条记录,共 ${total} 条记录`
+          showTotal: (total, range) => `show ${range[0]} ~ ${range[1]} records, total ${total} records`
         },
         savePoints: {
           pageSizeOptions: ['10', '20', '30', '40', '100'],
@@ -805,7 +805,7 @@ export default {
           defaultPageSize: 10,
           showQuickJumper: true,
           showSizeChanger: true,
-          showTotal: (total, range) => `显示 ${range[0]} ~ ${range[1]} 条记录,共 ${total} 条记录`
+          showTotal: (total, range) => `show ${range[0]} ~ ${range[1]} records, total ${total} records`
         },
         backUp: {
           pageSizeOptions: ['10', '20', '30', '40', '100'],
@@ -813,7 +813,7 @@ export default {
           defaultPageSize: 10,
           showQuickJumper: true,
           showSizeChanger: true,
-          showTotal: (total, range) => `显示 ${range[0]} ~ ${range[1]} 条记录,共 ${total} 条记录`
+          showTotal: (total, range) => `show ${range[0]} ~ ${range[1]} records, total ${total} records`
         },
         optionLog: {
           pageSizeOptions: ['10', '20', '30', '40', '100'],
@@ -821,7 +821,7 @@ export default {
           defaultPageSize: 10,
           showQuickJumper: true,
           showSizeChanger: true,
-          showTotal: (total, range) => `显示 ${range[0]} ~ ${range[1]} 条记录,共 ${total} 条记录`
+          showTotal: (total, range) => `show ${range[0]} ~ ${range[1]} records, total ${total} records`
         }
       },
 
@@ -830,10 +830,10 @@ export default {
           theme: this.ideTheme(),
           language: 'sql',
           selectOnLineNumbers: false,
-          foldingStrategy: 'indentation', // 代码分小段折叠
-          overviewRulerBorder: false, // 不要滚动条边框
+          foldingStrategy: 'indentation', // code fragmentation
+          overviewRulerBorder: false, // Don't scroll bar borders
           autoClosingBrackets: true,
-          tabSize: 2, // tab 缩进长度
+          tabSize: 2, // tab indent length
           readOnly: true,
           inherit: true,
           scrollBeyondLastLine: false,
@@ -845,7 +845,7 @@ export default {
           cursorWidth: 3,
           renderFinalNewline: true,
           renderLineHighlight: 'all',
-          quickSuggestionsDelay: 100,  //代码提示延时
+          quickSuggestionsDelay: 100,  // Code prompt delay
           scrollbar: {
             useShadows: false,
             vertical: 'visible',
@@ -1097,7 +1097,7 @@ export default {
           })
         } else {
           /**
-           * 第一次之后,每次轮询只管基本信息的变更
+           * After the first time, each poll only changes the basic information
            * @type {any}
            */
           this.app = resp.data
@@ -1116,13 +1116,13 @@ export default {
         appId: this.app.id
       }
       if (this.pager.config.info) {
-        // 如果分页信息不为空,则设置表格当前第几页,每页条数,并设置查询分页参数
+        // If the paging information is not empty, set the current page of the table, the number of items per page, and set the query paging parameters
         this.$refs.TableConf.pagination.current = this.pager.config.info.current
         this.$refs.TableConf.pagination.pageSize = this.pager.config.info.pageSize
         params.pageSize = this.pager.config.info.pageSize
         params.pageNum = this.pager.config.info.current
       } else {
-        // 如果分页信息为空,则设置为默认值
+        // If pagination information is empty, set to default
         params.pageSize = this.pagination.config.defaultPageSize
         params.pageNum = this.pagination.config.defaultCurrent
       }
@@ -1179,13 +1179,13 @@ export default {
         appId: this.app.id
       }
       if (this.pager.savePoints.info) {
-        // 如果分页信息不为空,则设置表格当前第几页,每页条数,并设置查询分页参数
+        // If the paging information is not empty, set the current page of the table, the number of items per page, and set the query paging parameters
         this.$refs.TableSavePoints.pagination.current = this.pager.savePoints.info.current
         this.$refs.TableSavePoints.pagination.pageSize = this.pager.savePoints.info.pageSize
         params.pageSize = this.pager.savePoints.info.pageSize
         params.pageNum = this.pager.savePoints.info.current
       } else {
-        // 如果分页信息为空,则设置为默认值
+        // If pagination information is empty, set to default
         params.pageSize = this.pagination.savePoints.defaultPageSize
         params.pageNum = this.pagination.savePoints.defaultCurrent
       }
@@ -1204,13 +1204,13 @@ export default {
         appId: this.app.id
       }
       if (this.pager.backUp.info) {
-        // 如果分页信息不为空,则设置表格当前第几页,每页条数,并设置查询分页参数
+        // If the paging information is not empty, set the current page of the table, the number of items per page, and set the query paging parameters
         this.$refs.TableBackUp.pagination.current = this.pager.backUp.info.current
         this.$refs.TableBackUp.pagination.pageSize = this.pager.backUp.info.pageSize
         params.pageSize = this.pager.backUp.info.pageSize
         params.pageNum = this.pager.backUp.info.current
       } else {
-        // 如果分页信息为空,则设置为默认值
+        // If pagination information is empty, set to default
         params.pageSize = this.pagination.backUp.defaultPageSize
         params.pageNum = this.pagination.backUp.defaultCurrent
       }
@@ -1229,13 +1229,13 @@ export default {
         appId: this.app.id
       }
       if (this.pager.optionLog.info) {
-        // 如果分页信息不为空,则设置表格当前第几页,每页条数,并设置查询分页参数
+        // If the paging information is not empty, set the current page of the table, the number of items per page, and set the query paging parameters
         this.$refs.TableOptLog.pagination.current = this.pager.optionLog.info.current
         this.$refs.TableOptLog.pagination.pageSize = this.pager.optionLog.info.pageSize
         params.pageSize = this.pager.optionLog.info.pageSize
         params.pageNum = this.pager.optionLog.info.current
       } else {
-        // 如果分页信息为空,则设置为默认值
+        // If pagination information is empty, set to default
         params.pageSize = this.pagination.optionLog.defaultPageSize
         params.pageNum = this.pagination.optionLog.defaultCurrent
       }
@@ -1399,9 +1399,9 @@ export default {
           readOnly: true,
           inherit: true,
           scrollBeyondLastLine: false,
-          overviewRulerBorder: false, // 不要滚动条边框
+          overviewRulerBorder: false, // Don't scroll bar borders
           autoClosingBrackets: true,
-          tabSize: 2, // tab 缩进长度
+          tabSize: 2, // tab indent length
           scrollbar: {
             useShadows: false,
             vertical: 'visible',
@@ -1425,7 +1425,7 @@ export default {
     },
 
     handleTableChange(pagination, filters, sorter) {
-      // 将这两个参数赋值给Vue data,用于后续使用
+      // Assign these two parameters to Vue data for subsequent use
       switch (this.activeTab) {
         case '2':
           this.pager.config.info = pagination
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/app/Different.vue b/streampark-console/streampark-console-webapp/src/views/flink/app/Different.vue
index 00b10c6b4..7e4152788 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/Different.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/Different.vue
@@ -87,10 +87,10 @@ export default {
         theme: this.ideTheme(),
         language: 'yaml',
         selectOnLineNumbers: false,
-        foldingStrategy: 'indentation', // 代码分小段折叠
-        overviewRulerBorder: false, // 不要滚动条边框
+        foldingStrategy: 'indentation', // code fragmentation
+        overviewRulerBorder: false, // Don't scroll bar borders
         autoClosingBrackets: true,
-        tabSize: 2, // tab 缩进长度
+        tabSize: 2, // tab indent length
         readOnly: true,
         inherit: true,
         scrollBeyondLastLine: false,
@@ -102,7 +102,7 @@ export default {
         cursorWidth: 3,
         renderFinalNewline: true,
         renderLineHighlight: 'all',
-        quickSuggestionsDelay: 100,  //代码提示延时
+        quickSuggestionsDelay: 100,  // Code prompt delay
         scrollbar: {
           useShadows: false,
           vertical: 'visible',
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/app/Mergely.vue b/streampark-console/streampark-console-webapp/src/views/flink/app/Mergely.vue
index d850a0134..d3d4987ee 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/Mergely.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/Mergely.vue
@@ -123,10 +123,10 @@ export default {
           theme: this.ideTheme(),
           language: 'yaml',
           selectOnLineNumbers: false,
-          foldingStrategy: 'indentation', // 代码分小段折叠
-          overviewRulerBorder: false, // 不要滚动条边框
+          foldingStrategy: 'indentation', // code fragmentation
+          overviewRulerBorder: false, // Don't scroll bar borders
           autoClosingBrackets: true,
-          tabSize: 2, // tab 缩进长度
+          tabSize: 2, // tab indent length
           readOnly: this.readOnly,
           inherit: true,
           scrollBeyondLastLine: false,
@@ -138,7 +138,7 @@ export default {
           cursorWidth: 3,
           renderFinalNewline: true,
           renderLineHighlight: 'all',
-          quickSuggestionsDelay: 100,  //代码提示延时
+          quickSuggestionsDelay: 100,  // Code prompt delay
           scrollbar: {
             useShadows: false,
             vertical: 'visible',
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/app/Monaco.yaml.js b/streampark-console/streampark-console-webapp/src/views/flink/app/Monaco.yaml.js
index 12f9d9fc6..0dafdbc10 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/Monaco.yaml.js
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/Monaco.yaml.js
@@ -16,5 +16,5 @@
  */
 
 import * as monaco from 'monaco-editor'
-// TODO yaml配置文件自动提示实现
+// TODO yaml configuration file automatic prompt implementation
 export default monaco
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/app/Option.js b/streampark-console/streampark-console-webapp/src/views/flink/app/Option.js
index 5d14010ed..97be0ee69 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/Option.js
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/Option.js
@@ -21,7 +21,7 @@ export default [
         key: 'jobmanager',
         name: 'jobmanager',
         placeholder: '-m,--jobmanager <arg>',
-        description: 'JobManager 地址(yarn-cluster)',
+        description: 'JobManager address (yarn-cluster)',
         group: 'run',
         type: 'input',
         defaultValue: '',
@@ -67,7 +67,7 @@ export default [
         key: 'shutdownOnAttachedExit',
         name: 'shutdownOnAttachedExit',
         placeholder: '-sae,--shutdownOnAttachedExit',
-        description: '如果非独立模式提交的任务,当客户端中断,集群执行的job任务也会shutdown',
+        description: 'If the task submitted in non-standalone mode, when the client is interrupted, the job task executed by the cluster will also shutdown',
         group: 'no-support',
         type: 'switch',
         defaultValue: false,
@@ -80,7 +80,7 @@ export default [
         key: 'jobmanager_memory_flink_size',
         name: 'jobmanager.memory.flink.size',
         placeholder: 'Total Flink Memory size for the JobManage',
-        description: 'JobManager Flink总内存大小',
+        description: 'JobManager Flink total memory size',
         unit: 'mb',
         group: 'total-memory',
         type: 'number',
@@ -100,7 +100,7 @@ export default [
         key: 'taskmanager_memory_flink_size',
         name: 'taskmanager.memory.flink.size',
         placeholder: 'Total Flink Memory size for the TaskExecutors',
-        description: 'TaskExecutor Flink总内存大小',
+        description: 'TaskExecutor Flink total memory size',
         unit: 'mb',
         group: 'total-memory',
         type: 'number',
@@ -121,7 +121,7 @@ export default [
         key: 'jobmanager_memory_process_size',
         name: 'jobmanager.memory.process.size',
         placeholder: 'Total Process Memory size for the JobManager',
-        description: 'JobManager 进程总内存大小',
+        description: 'The total memory size of the JobManager process',
         unit: 'mb',
         group: 'process-memory',
         type: 'number',
@@ -141,7 +141,7 @@ export default [
         key: 'taskmanager_memory_process_size',
         name: 'taskmanager.memory.process.size',
         placeholder: 'Total Process Memory size for the TaskExecutors',
-        description: 'TaskExecutor 进程总内存大小',
+        description: 'The total memory size of the TaskExecutor process',
         unit: 'mb',
         group: 'process-memory',
         type: 'number',
@@ -162,7 +162,7 @@ export default [
         key: 'jobmanager_memory_heap_size',
         name: 'jobmanager.memory.heap.size',
         placeholder: 'JVM Heap Memory size for JobManager',
-        description: 'JobManager 的 JVM 堆内存,推荐大小128mb',
+        description: 'JobManager is JVM heap memory, the recommended size is 128mb',
         unit: 'mb',
         group: 'jobmanager-memory',
         type: 'number',
@@ -182,7 +182,7 @@ export default [
         key: 'jobmanager_memory_off_heap_size',
         name: 'jobmanager.memory.off-heap.size',
         placeholder: 'Off-heap Memory size for JobManager',
-        description: 'JobManager 的堆外内存(直接内存或本地内存)',
+        description: 'JobManager is off-heap memory (direct or local)',
         unit: 'mb',
         group: 'jobmanager-memory',
         type: 'number',
@@ -222,7 +222,7 @@ export default [
         key: 'jobmanager_memory_jvm_overhead_fraction',
         name: 'jobmanager.memory.jvm-overhead.fraction',
         placeholder: 'Fraction of Total Process Memory to be reserved for JVM Overhead',
-        description: 'JobManager其他JVM开销(如栈空间,垃圾回收空间)于进程总内存占比',
+        description: 'JobManager is other JVM overhead (such as stack space, garbage collection space) accounts for the total memory of the process',
         unit: null,
         group: 'jobmanager-memory',
         type: 'number',
@@ -242,7 +242,7 @@ export default [
         key: 'jobmanager_memory_jvm_overhead_max',
         name: 'jobmanager.memory.jvm-overhead.max',
         placeholder: 'Max JVM Overhead size for the JobManager',
-        description: 'JobManager其他JVM开销(如栈空间,垃圾回收空间)的最大内存',
+        description: 'Maximum memory for JobManager other JVM overhead (such as stack space, garbage collection space)',
         unit: 'mb',
         group: 'jobmanager-memory',
         type: 'number',
@@ -262,7 +262,7 @@ export default [
         key: 'jobmanager_memory_jvm_overhead_min',
         name: 'jobmanager.memory.jvm.overhead.min',
         placeholder: 'Min JVM Overhead size for the JobManager',
-        description: 'JobManager其他JVM开销(如栈空间,垃圾回收空间)的最小内存',
+        description: 'Minimum memory for JobManager other JVM overhead (such as stack space, garbage collection space)',
         unit: 'mb',
         group: 'jobmanager-memory',
         type: 'number',
@@ -283,7 +283,7 @@ export default [
         key: 'taskmanager_memory_framework_heap_size',
         name: 'taskmanager.memory.framework.heap.size',
         placeholder: 'Framework Heap Memory size for TaskExecutors',
-        description: '框架堆内存-用于Flink框架的JVM堆内存 (不建议调整,进阶配置)',
+        description: 'Framework heap memory - JVM heap memory for the Flink framework (not recommended for adjustment, advanced configuration)',
         unit: 'mb',
         group: 'taskmanager-memory',
         type: 'number',
@@ -303,7 +303,7 @@ export default [
         key: 'taskmanager_memory_framework_off_heap_size',
         name: 'taskmanager.memory.framework.off-heap.size',
         placeholder: 'Framework Off-Heap Memory size for TaskExecutors',
-        description: '框架堆外内存-用于Flink框架的堆外内存 (不建议调整,进阶配置)',
+        description: 'Framework off-heap memory - off-heap memory for the Flink framework (not recommended for adjustment, advanced configuration)',
         unit: 'mb',
         group: 'taskmanager-memory',
         type: 'number',
@@ -324,7 +324,7 @@ export default [
         key: 'taskmanager_memory_task_heap_size',
         name: 'taskmanager.memory.task.heap.size',
         placeholder: 'Task Heap Memory size for TaskExecutors',
-        description: '任务堆内存-用于Flink应用的算子及用户代码的JVM堆内存',
+        description: 'Task heap memory - JVM heap memory for operators and user code of Flink applications',
         unit: 'mb',
         group: 'taskmanager-memory',
         type: 'number',
@@ -344,7 +344,7 @@ export default [
         key: 'taskmanager_memory_task_off_heap_size',
         name: 'taskmanager.memory.task.off-heap.size',
         placeholder: 'Task Off-Heap Memory size for TaskExecutors',
-        description: '任务堆外内存-用于Flink算子及用户代码的堆外内存(不建议调整,进阶配置)',
+        description: 'Task off-heap memory - off-heap memory for Flink operators and user code (not recommended for adjustment, advanced configuration)',
         unit: 'mb',
         group: 'taskmanager-memory',
         type: 'number',
@@ -364,7 +364,7 @@ export default [
         key: 'taskmanager_memory_managed_size',
         name: 'taskmanager.memory.managed.size',
         placeholder: 'Managed Memory size for TaskExecutors',
-        description: '托管内存-由Flink管理用于(排序|缓存中间结果|StateBackend)的内存大小',
+        description: 'Managed memory - size of memory managed by Flink for (sort|cache intermediate results|StateBackend)',
         unit: 'mb',
         group: 'taskmanager-memory',
         type: 'number',
@@ -384,7 +384,7 @@ export default [
         key: 'taskmanager_memory_managed_fraction',
         name: 'taskmanager.memory.managed.fraction',
         placeholder: 'Min JVM Overhead size for the TaskExecutors',
-        description: '托管内存-由Flink管理用于(排序|缓存中间结果|StateBackend)的内存占比',
+        description: 'Managed memory - percentage of memory managed by Flink for (sort|cache intermediate results|StateBackend)',
         unit: null,
         group: 'taskmanager-memory',
         type: 'number',
@@ -424,7 +424,7 @@ export default [
         key: 'taskmanager_memory_jvm_overhead_fraction',
         name: 'taskmanager.memory.jvm-overhead.fraction',
         placeholder: 'Fraction of Total Process Memory to be reserved for JVM Overhead',
-        description: 'TaskExecutor的其他JVM开销(如栈空间,垃圾回收空间)于进程总内存占比',
+        description: 'Other JVM overheads of TaskExecutor (such as stack space, garbage collection space) account for the total memory of the process',
         unit: null,
         group: 'taskmanager-memory',
         type: 'number',
@@ -444,7 +444,7 @@ export default [
         key: 'taskmanager_memory_jvm_overhead_max',
         name: 'taskmanager.memory.jvm-overhead.max',
         placeholder: 'Max JVM Overhead size for the TaskExecutors',
-        description: 'TaskExecutor的其他JVM开销(如栈空间,垃圾回收空间)的最大内存',
+        description: 'Maximum memory for TaskExecutor is other JVM overhead (such as stack space, garbage collection space)',
         unit: 'mb',
         group: 'taskmanager-memory',
         type: 'number',
@@ -464,7 +464,7 @@ export default [
         key: 'taskmanager_memory_jvm_overhead_min',
         name: 'taskmanager.memory.jvm-overhead.min',
         placeholder: 'Min JVM Overhead size for the TaskExecutors',
-        description: 'TaskExecutor的其他JVM开销(如栈空间,垃圾回收空间)的最小内存',
+        description: 'Minimum memory for TaskExecutor is other JVM overhead (such as stack space, garbage collection space)',
         unit: 'mb',
         group: 'taskmanager-memory',
         type: 'number',
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/app/View.vue b/streampark-console/streampark-console-webapp/src/views/flink/app/View.vue
index b0be6be99..d4ccf0dda 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/View.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/View.vue
@@ -268,7 +268,7 @@
         </a-input-group>
       </div>
 
-      <!-- 表格区域 -->
+      <!-- table area -->
       <a-table
         ref="TableInfo"
         :columns="columns"
@@ -1223,7 +1223,7 @@ export default {
         defaultPageSize: 10,
         showQuickJumper: true,
         showSizeChanger: true,
-        showTotal: (total, range) => `显示 ${range[0]} ~ ${range[1]} 条记录,共 ${total} 条记录`
+        showTotal: (total, range) => `show ${range[0]} ~ ${range[1]} records, total ${total} records`
       },
       socketId: null,
       storageKey: 'DOWN_SOCKET_ID',
@@ -1583,21 +1583,21 @@ export default {
 
       /**
        *
-       * // 部署失败
+       * // deployment failed
        * FAILED(-1),
-       * // 完结
+       * // finish
        * DONE(0),
-       * // 任务修改完毕需要重新发布
+       * // The task needs to be republished after modification
        * NEED_LAUNCH(1),
-       * // 上线中
+       * // online
        * LAUNCHING(2),
-       * // 上线完毕,需要重启
+       * // After going online, you need to restart
        * NEED_RESTART(3),
-       * //需要回滚
+       * // need to rollback
        * NEED_ROLLBACK(4),
-       * // 项目发生变化,任务需检查(是否需要重新选择jar)
+       * // The project has changed, the task needs to be checked (whether the jar needs to be re-selected)
        * NEED_CHECK(5),
-       * // 发布的任务已经撤销
+       * // The posted task has been cancelled
        * REVOKED(10);
        */
 
@@ -2177,13 +2177,13 @@ export default {
         scrollback: 1000,
         tabstopwidth: 4,
         disableStdin: true,
-        rows: parseInt(rows), // 行数
+        rows: parseInt(rows), // Rows
         cols: parseInt(cols),
         fontSize: 14,
-        cursorStyle: 'underline', // 光标样式
+        cursorStyle: 'underline', // Cursor style
         theme: {
-          foreground: '#AAAAAA', // 字体
-          background: '#131D32', // 背景色
+          foreground: '#AAAAAA', // font
+          background: '#131D32', // background color
           lineHeight: 16
         }
       })
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/notebook/Submit.vue b/streampark-console/streampark-console-webapp/src/views/flink/notebook/Submit.vue
index 8be35cb3d..ba05b1ec3 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/notebook/Submit.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/notebook/Submit.vue
@@ -177,10 +177,10 @@ export default {
       language: 'java',
       value: this.woldCount,
       selectOnLineNumbers: false,
-      foldingStrategy: 'indentation', // 代码分小段折叠
-      overviewRulerBorder: false, // 不要滚动条边框
+      foldingStrategy: 'indentation', // code fragmentation
+      overviewRulerBorder: false, // Don't scroll bar borders
       autoClosingBrackets: true,
-      tabSize: 2, // tab 缩进长度
+      tabSize: 2, // tab indent length
       readOnly: false,
       inherit: true,
       scrollBeyondLastLine: false,
@@ -192,7 +192,7 @@ export default {
       cursorWidth: 3,
       renderFinalNewline: true,
       renderLineHighlight: 'line',
-      quickSuggestionsDelay: 100,  //代码提示延时
+      quickSuggestionsDelay: 100,  // Code prompt delay
       scrollbar: {
         useShadows: false,
         vertical: 'visible',
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/project/View.vue b/streampark-console/streampark-console-webapp/src/views/flink/project/View.vue
index 93f028140..08ee5f1ca 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/project/View.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/project/View.vue
@@ -395,13 +395,13 @@ export default {
         scrollback: 1000,
         tabstopwidth: 4,
         disableStdin: true,
-        rows: parseInt(rows), // 行数
+        rows: parseInt(rows), // Rows
         cols: parseInt(cols),
         fontSize: 14,
-        cursorStyle: 'underline', // 光标样式
+        cursorStyle: 'underline', // Cursor style
         theme: {
-          foreground: '#AAAAAA', // 字体
-          background: '#131D32', // 背景色
+          foreground: '#AAAAAA', // Font
+          background: '#131D32', // background color
           lineHeight: 16
         }
       })
@@ -455,13 +455,13 @@ export default {
         this.loading = true
       }
       if (this.paginationInfo) {
-        // 如果分页信息不为空,则设置表格当前第几页,每页条数,并设置查询分页参数
+        // If the paging information is not empty, set the current page of the table, the number of items per page, and set the query paging parameters
         this.$refs.TableInfo.pagination.current = this.paginationInfo.current
         this.$refs.TableInfo.pagination.pageSize = this.paginationInfo.pageSize
         params.pageSize = this.paginationInfo.pageSize
         params.pageNum = this.paginationInfo.current
       } else {
-        // 如果分页信息为空,则设置为默认值
+        // If pagination information is empty, set to default
         // params.pageSize = this.pagination.defaultPageSize
         // params.pageNum = this.pagination.current
       }
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/setting/AddCluster.vue b/streampark-console/streampark-console-webapp/src/views/flink/setting/AddCluster.vue
index 1ee5776d9..0ee02b8b4 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/setting/AddCluster.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/setting/AddCluster.vue
@@ -303,7 +303,7 @@
             @change="handleChangeProcess"
             v-decorator="['totalOptions']">
             <a-select-opt-group
-              label="process memory(进程总内存)">
+              label="process memory(total process memory)">
               <a-select-option
                 v-for="(conf,index) in dynamicOptions('process-memory')"
                 :key="`process_memory_${index}`"
@@ -312,7 +312,7 @@
               </a-select-option>
             </a-select-opt-group>
             <a-select-opt-group
-              label="total memory(Flink 总内存)">
+              label="total memory(Flink total memory)">
               <a-select-option
                 v-for="(conf,index) in dynamicOptions('total-memory')"
                 :key="`total_memory_${index}`"
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/setting/EditCluster.vue b/streampark-console/streampark-console-webapp/src/views/flink/setting/EditCluster.vue
index fab99e772..3ea78b25e 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/setting/EditCluster.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/setting/EditCluster.vue
@@ -303,7 +303,7 @@
             @change="handleChangeProcess"
             v-decorator="['totalOptions']">
             <a-select-opt-group
-              label="process memory(进程总内存)">
+              label="process memory(total process memory)">
               <a-select-option
                 v-for="(conf,index) in dynamicOptions('process-memory')"
                 :key="`process_memory_${index}`"
@@ -312,7 +312,7 @@
               </a-select-option>
             </a-select-opt-group>
             <a-select-opt-group
-              label="total memory(Flink 总内存)">
+              label="total memory(Flink total memory)">
               <a-select-option
                 v-for="(conf,index) in dynamicOptions('total-memory')"
                 :key="`total_memory_${index}`"
@@ -804,7 +804,7 @@ export default {
           }else{
             this.$message.error('error executionMode.')
           }
-          console.log('获取参数:' + JSON.stringify(params))
+          console.log('get parameters:' + JSON.stringify(params))
           checkCluster(params).then((resp)=> {
             console.log('resp.data:' + resp.data)
             if (resp.data === 'success') {
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/setting/View.vue b/streampark-console/streampark-console-webapp/src/views/flink/setting/View.vue
index 295f75dce..b50ab6f5b 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/setting/View.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/setting/View.vue
@@ -1071,10 +1071,10 @@ export default {
         theme: this.ideTheme(),
         language: 'yaml',
         selectOnLineNumbers: false,
-        foldingStrategy: 'indentation', // 代码分小段折叠
-        overviewRulerBorder: false, // 不要滚动条边框
+        foldingStrategy: 'indentation', // code fragmentation
+        overviewRulerBorder: false, // Don't scroll bar borders
         autoClosingBrackets: true,
-        tabSize: 2, // tab 缩进长度
+        tabSize: 2, // tab indent length
         readOnly: true,
         inherit: true,
         scrollBeyondLastLine: false,
@@ -1086,7 +1086,7 @@ export default {
         cursorWidth: 3,
         renderFinalNewline: true,
         renderLineHighlight: 'all',
-        quickSuggestionsDelay: 100,  //代码提示延时
+        quickSuggestionsDelay: 100,  // Code prompt delay
         scrollbar: {
           useShadows: false,
           vertical: 'visible',
@@ -1168,11 +1168,11 @@ export default {
 
     handleIsStart(item) {
      /**
-      集群刚创建但未启动
+      The cluster was just created but not started
       CREATED(0),
-      集群已启动
+      cluster started
       STARTED(1),
-      集群已停止
+      cluster stopped
       STOPED(2);
     */
       return this.optionClusters.starting.get(item.id)
@@ -1341,7 +1341,7 @@ export default {
         this.larkSecretEnable = larkParams.secretEnable
       }
 
-      console.log('告警参数:' + JSON.stringify(item))
+      console.log('Alarm parameters:' + JSON.stringify(item))
       this.$nextTick(() => {
         this.alertForm.setFieldsValue({
           'alertName': item.alertName,
@@ -1459,9 +1459,9 @@ export default {
             secretToken: values.larkSecretToken
           }
         }
-        console.log('更新告警参数:' + JSON.stringify(param))
+        console.log('Update alarm parameters:' + JSON.stringify(param))
         if (!err) {
-          if(!param.id){//添加新告警
+          if(!param.id){// Add new alert
             existsAlert({'alertName': param.alertName}).then((resp)=>{
               if(resp.data){
                 this.$swal.fire(
@@ -1471,13 +1471,13 @@ export default {
                 )
               }else{
                 addAlert(param).then((resp) => {
-                if (!resp.data) {//告警添加失败
+                if (!resp.data) {// Failed to add alarm
                   this.$swal.fire(
                     'Failed create AlertConfig',
                     resp['message'].replaceAll(/\[StreamPark]/g, ''),
                     'error'
                   )
-                } else {//告警添加成功
+                } else {// Alarm added successfully
                   this.$swal.fire({
                     icon: 'success',
                     title: 'Create AlertConfig successful!',
@@ -1490,15 +1490,15 @@ export default {
               })
               }
             })
-          }else{//根据告警id更新告警参数
+          }else{// Update the alarm parameters according to the alarm id
             updateAlert(param).then((resp) => {
-              if (!resp.data) {//告警更新失败
+              if (!resp.data) {// Alarm update failed
                 this.$swal.fire(
                   'Failed update AlertConfig',
                   resp['message'].replaceAll(/\[StreamPark]/g, ''),
                   'error'
                 )
-              } else {//告警更新成功
+              } else {// Alarm update succeeded
                 this.$swal.fire({
                   icon: 'success',
                   title: 'Update AlertConfig successful!',
@@ -1513,7 +1513,7 @@ export default {
 
         }
       }).catch((err) => {
-        // callback(new Error('提交表单异常' + err))
+        // callback(new Error('Submit form exception' + err))
       })
       this.alertId = null
     },
diff --git a/streampark-console/streampark-console-webapp/src/views/system/menu/ButtonAdd.vue b/streampark-console/streampark-console-webapp/src/views/system/menu/ButtonAdd.vue
index b3fdadbe0..9cb09ac1c 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/menu/ButtonAdd.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/menu/ButtonAdd.vue
@@ -19,7 +19,7 @@
 
 <template>
   <a-drawer
-    title="新增按钮"
+    title="Add button"
     :mask-closable="false"
     width="650"
     placement="right"
@@ -30,28 +30,28 @@
     <a-form
       :form="form">
       <a-form-item
-        label="按钮名称"
+        label="button name"
         v-bind="formItemLayout">
         <a-input
           v-model="button.menuName"
           v-decorator="['menuName',
                         {rules: [
-                          { required: true, message: '按钮名称不能为空'},
-                          { max: 20, message: '长度不能超过20个字符'}
+                          { required: true, message: 'Button name cannot be empty'},
+                          { max: 20, message: 'Length cannot exceed 20 characters'}
                         ]}]" />
       </a-form-item>
       <a-form-item
-        label="相关权限"
+        label="Related permissions"
         v-bind="formItemLayout">
         <a-input
           v-model="button.perms"
           v-decorator="['perms',
                         {rules: [
-                          { max: 50, message: '长度不能超过50个字符'}
+                          { max: 50, message: 'Length cannot exceed 50 characters'}
                         ]}]" />
       </a-form-item>
       <a-form-item
-        label="上级菜单"
+        label="parent menu"
         style="margin-bottom: 2rem"
         v-bind="formItemLayout">
         <a-tree
@@ -74,28 +74,28 @@
           <a-menu-item
             key="1"
             @click="expandAll">
-            展开所有
+            expand all
           </a-menu-item>
           <a-menu-item
             key="2"
             @click="closeAll">
-            合并所有
+            close all
           </a-menu-item>
         </a-menu>
         <a-button>
-          树操作 <a-icon
+          tree operate <a-icon
             type="up" />
         </a-button>
       </a-dropdown>
       <a-button
         @click="onClose">
-        取消
+        cancel
       </a-button>
       <a-button
         @click="handleSubmit"
         type="primary"
         :loading="loading">
-        提交
+        submit
       </a-button>
     </div>
   </a-drawer>
@@ -154,11 +154,11 @@ export default {
     handleSubmit () {
       const checkedArr = Object.is(this.checkedKeys.checked, undefined) ? this.checkedKeys : this.checkedKeys.checked
       if (!checkedArr.length) {
-        this.$message.error('请为按钮选择一个上级菜单')
+        this.$message.error('Please select a parent menu for the button')
         return
       }
       if (checkedArr.length > 1) {
-        this.$message.error('最多只能选择一个上级菜单,请修改')
+        this.$message.error('At most one parent menu can be selected, please modify')
         return
       }
       this.form.validateFields((err, values) => {
@@ -169,7 +169,7 @@ export default {
           } else {
             this.button.parentId = ''
           }
-          // 0 表示菜单 1 表示按钮
+          // 0 for menu 1 for button
           this.button.type = '1'
           submit({
             ...this.button
diff --git a/streampark-console/streampark-console-webapp/src/views/system/menu/ButtonEdit.vue b/streampark-console/streampark-console-webapp/src/views/system/menu/ButtonEdit.vue
index 4a517b0e0..b0c339104 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/menu/ButtonEdit.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/menu/ButtonEdit.vue
@@ -19,7 +19,7 @@
 
 <template>
   <a-drawer
-    title="修改按钮"
+    title="Modify button"
     :mask-closable="false"
     width="650"
     placement="right"
@@ -30,26 +30,26 @@
     <a-form
       :form="form">
       <a-form-item
-        label="按钮名称"
+        label="button name"
         v-bind="formItemLayout">
         <a-input
           v-decorator="['menuName',
                         {rules: [
-                          { required: true, message: '按钮名称不能为空'},
-                          { max: 20, message: '长度不能超过20个字符'}
+                          { required: true, message: 'Button name cannot be empty'},
+                          { max: 20, message: 'Length cannot exceed 20 characters'}
                         ]}]" />
       </a-form-item>
       <a-form-item
-        label="相关权限"
+        label="Related permissions"
         v-bind="formItemLayout">
         <a-input
           v-decorator="['perms',
                         {rules: [
-                          { max: 50, message: '长度不能超过50个字符'}
+                          { max: 50, message: 'Length cannot exceed 50 characters'}
                         ]}]" />
       </a-form-item>
       <a-form-item
-        label="上级菜单"
+        label="parent menu"
         style="margin-bottom: 2rem"
         v-bind="formItemLayout">
         <a-tree
@@ -73,28 +73,28 @@
           <a-menu-item
             key="1"
             @click="expandAll">
-            展开所有
+            expand all
           </a-menu-item>
           <a-menu-item
             key="2"
             @click="closeAll">
-            合并所有
+            close all
           </a-menu-item>
         </a-menu>
         <a-button>
-          树操作 <a-icon
+          tree operate <a-icon
             type="up" />
         </a-button>
       </a-dropdown>
       <a-button
         @click="onClose">
-        取消
+        cancel
       </a-button>
       <a-button
         @click="handleSubmit"
         type="primary"
         :loading="loading">
-        提交
+        submit
       </a-button>
     </div>
   </a-drawer>
@@ -165,11 +165,11 @@ export default {
     handleSubmit () {
       const checkedArr = Object.is(this.checkedKeys.checked, undefined) ? this.checkedKeys : this.checkedKeys.checked
       if (!checkedArr.length) {
-        this.$message.error('请为按钮选择一个上级菜单')
+        this.$message.error('Please select a parent menu for the button')
         return
       }
       if (checkedArr.length > 1) {
-        this.$message.error('最多只能选择一个上级菜单,请修改')
+        this.$message.error('At most one parent menu can be selected, please modify')
         return
       }
       this.form.validateFields((err, values) => {
@@ -177,7 +177,7 @@ export default {
           this.loading = true
           const button = this.form.getFieldsValue()
           button.parentId = checkedArr[0]
-          // 0 表示菜单 1 表示按钮
+          // 0 for menu 1 for button
           button.type = '1'
           button.menuId = this.button.menuId
           update({
diff --git a/streampark-console/streampark-console-webapp/src/views/system/menu/Icons.vue b/streampark-console/streampark-console-webapp/src/views/system/menu/Icons.vue
index 20e8f4da7..e5ba50a50 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/menu/Icons.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/menu/Icons.vue
@@ -28,11 +28,11 @@
     @cancel="cancel"
     :mask-closable="false"
     :mask="false"
-    ok-text="确认"
-    cancel-text="取消">
+    ok-text="confirm"
+    cancel-text="cancel">
     <a-tabs>
       <a-tab-pane
-        tab="方向性图标"
+        tab="Directional icons"
         key="1">
         <ul>
           <li
@@ -47,7 +47,7 @@
         </ul>
       </a-tab-pane>
       <a-tab-pane
-        tab="指示性图标"
+        tab="Indicative icons"
         key="2">
         <ul>
           <li
@@ -62,7 +62,7 @@
         </ul>
       </a-tab-pane>
       <a-tab-pane
-        tab="编辑类图标"
+        tab="edit icon"
         key="3">
         <ul>
           <li
@@ -77,7 +77,7 @@
         </ul>
       </a-tab-pane>
       <a-tab-pane
-        tab="数据类图标"
+        tab="data icon"
         key="4">
         <ul>
           <li
@@ -92,7 +92,7 @@
         </ul>
       </a-tab-pane>
       <a-tab-pane
-        tab="网站通用图标"
+        tab="Website Universal Icons"
         key="5">
         <ul>
           <li
@@ -107,7 +107,7 @@
         </ul>
       </a-tab-pane>
       <a-tab-pane
-        tab="品牌和标识"
+        tab="Brand and Identity"
         key="6">
         <ul>
           <li
@@ -169,11 +169,11 @@ export default {
     chooseIcon (icon) {
       this.activeIndex = icon
       this.choosedIcon = icon
-      this.$message.success(`选中 ${icon}`)
+      this.$message.success(`selected ${icon}`)
     },
     ok () {
       if (this.choosedIcon === '') {
-        this.$message.warning('尚未选择任何图标')
+        this.$message.warning('No icons have been selected')
         return
       }
       this.reset()
diff --git a/streampark-console/streampark-console-webapp/src/views/system/menu/Menu.vue b/streampark-console/streampark-console-webapp/src/views/system/menu/Menu.vue
index a6e2e0fbe..4c3ef551c 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/menu/Menu.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/menu/Menu.vue
@@ -67,9 +67,9 @@
                   icon="rest"
                   @click="reset" />
                 <a-popconfirm
-                  title="请选择创建类型"
-                  ok-text="按钮"
-                  cancel-text="菜单"
+                  title="Please select a creation type"
+                  ok-text="button"
+                  cancel-text="menu"
                   @cancel="() => createMenu()"
                   @confirm="() => createButton()">
                   <a-icon
@@ -113,32 +113,32 @@
             name="edit"
             border
             @click.native="edit(record)"
-            title="修改" />
+            title="edit" />
           <a-badge
             v-noPermit="'menu:update'"
             status="warning"
-            text="无权限" />
+            text="No permission" />
         </template>
       </a-table>
     </div>
 
-    <!-- 新增菜单 -->
+    <!-- Add menu -->
     <menu-add
       @close="handleMenuAddClose"
       @success="handleMenuAddSuccess"
       :menu-add-visiable="menuAddVisiable" />
-    <!-- 修改菜单 -->
+    <!-- Modify menu -->
     <menu-edit
       ref="menuEdit"
       @close="handleMenuEditClose"
       @success="handleMenuEditSuccess"
       :menu-edit-visiable="menuEditVisiable" />
-    <!-- 新增按钮 -->
+    <!-- Add button -->
     <button-add
       @close="handleButtonAddClose"
       @success="handleButtonAddSuccess"
       :button-add-visiable="buttonAddVisiable" />
-    <!-- 修改按钮 -->
+    <!-- Modify button -->
     <button-edit
       ref="buttonEdit"
       @close="handleButtonEditClose"
@@ -197,8 +197,8 @@ export default {
         dataIndex: 'type',
         customRender: (text) => {
           switch (text) {
-            case '0': return <a-tag color = "cyan" >菜单</a-tag>
-            case '1': return <a-tag color = "pink"> 按钮 </a-tag>
+            case '0': return <a-tag color = "cyan" >menu</a-tag>
+            case '1': return <a-tag color = "pink"> button </a-tag>
             default: return text
           }
         }
@@ -241,7 +241,7 @@ export default {
     },
     handleMenuEditSuccess () {
       this.menuEditVisiable = false
-      this.$message.success('修改菜单成功')
+      this.$message.success('Modify the menu successfully')
       this.fetch()
     },
     handleButtonEditClose () {
@@ -249,7 +249,7 @@ export default {
     },
     handleButtonEditSuccess () {
       this.buttonEditVisiable = false
-      this.$message.success('修改按钮成功')
+      this.$message.success('Modify button successfully')
       this.fetch()
     },
     edit (record) {
@@ -266,7 +266,7 @@ export default {
     },
     handleButtonAddSuccess () {
       this.buttonAddVisiable = false
-      this.$message.success('新增按钮成功')
+      this.$message.success('Add button successfully')
       this.fetch()
     },
     createButton () {
@@ -277,7 +277,7 @@ export default {
     },
     handleMenuAddSuccess () {
       this.menuAddVisiable = false
-      this.$message.success('新增菜单成功')
+      this.$message.success('Added menu successfully')
       this.fetch()
     },
     createMenu () {
diff --git a/streampark-console/streampark-console-webapp/src/views/system/menu/MenuAdd.vue b/streampark-console/streampark-console-webapp/src/views/system/menu/MenuAdd.vue
index 5fe2fd6f5..6340a1058 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/menu/MenuAdd.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/menu/MenuAdd.vue
@@ -28,54 +28,54 @@
     style="height: calc(100% - 55px);overflow: auto;padding-bottom: 53px;">
     <template slot="title">
       <a-icon type="menu" />
-      新增菜单
+      Add menu
     </template>
     <a-form
       :form="form">
       <a-form-item
-        label="菜单名称"
+        label="menu name"
         v-bind="formItemLayout">
         <a-input
           v-decorator="['menuName',
                         {rules: [
-                          { required: true, message: '菜单名称不能为空'},
-                          { max: 20, message: '长度不能超过20个字符'}
+                          { required: true, message: 'Menu name cannot be empty'},
+                          { max: 20, message: 'Length cannot exceed 20 characters'}
                         ]}]" />
       </a-form-item>
       <a-form-item
-        label="菜单URL"
+        label="Menu URL"
         v-bind="formItemLayout">
         <a-input
           v-decorator="['path',
                         {rules: [
-                          { required: true, message: '菜单URL不能为空'},
-                          { max: 50, message: '长度不能超过50个字符'}
+                          { required: true, message: 'Menu URL cannot be empty'},
+                          { max: 50, message: 'Length cannot exceed 50 characters'}
                         ]}]" />
       </a-form-item>
       <a-form-item
-        label="组件地址"
+        label="component address"
         v-bind="formItemLayout">
         <a-input
           v-decorator="['component',
                         {rules: [
-                          { required: true, message: '组件地址不能为空'},
-                          { max: 100, message: '长度不能超过100个字符'}
+                          { required: true, message: 'Component address cannot be empty'},
+                          { max: 100, message: 'Length cannot exceed 100 characters'}
                         ]}]" />
       </a-form-item>
       <a-form-item
-        label="相关权限"
+        label="Related permissions"
         v-bind="formItemLayout">
         <a-input
           v-decorator="['perms',
                         {rules: [
-                          { max: 50, message: '长度不能超过50个字符'}
+                          { max: 50, message: 'Length cannot exceed 50 characters'}
                         ]}]" />
       </a-form-item>
       <a-form-item
-        label="菜单图标"
+        label="menu icon"
         v-bind="formItemLayout">
         <a-input
-          placeholder="点击右侧按钮选择图标"
+          placeholder="Click the right button to select the icon"
           v-model="icon">
           <a-icon
             v-if="icon"
@@ -90,7 +90,7 @@
         </a-input>
       </a-form-item>
       <a-form-item
-        label="菜单排序"
+        label="menu sorting"
         v-bind="formItemLayout">
         <a-input-number
           v-decorator="['orderNum']"
@@ -98,7 +98,7 @@
       </a-form-item>
 
       <a-form-item
-        label="是否显示"
+        label="whether to display"
         v-bind="formItemLayout">
         <a-switch
           v-decorator="['display']"
@@ -110,7 +110,7 @@
       </a-form-item>
 
       <a-form-item
-        label="上级菜单"
+        label="parent menu"
         style="margin-bottom: 2rem"
         v-bind="formItemLayout">
         <a-tree
@@ -211,7 +211,7 @@ export default {
     handleSubmit () {
       const checkedArr = Object.is(this.checkedKeys.checked, undefined) ? this.checkedKeys : this.checkedKeys.checked
       if (checkedArr.length > 1) {
-        this.$message.error('最多只能选择一个上级菜单,请修改')
+        this.$message.error('At most one parent menu can be selected, please modify')
         return
       }
       this.form.validateFields((err, values) => {
@@ -223,7 +223,7 @@ export default {
           } else {
             menu.parentId = ''
           }
-          // 0 表示菜单 1 表示按钮
+          // 0 for menu 1 for button
           menu.type = '0'
           menu.icon = this.icon
           menu.display = this.display
diff --git a/streampark-console/streampark-console-webapp/src/views/system/menu/MenuEdit.vue b/streampark-console/streampark-console-webapp/src/views/system/menu/MenuEdit.vue
index 6e31c7f84..6fc5e892a 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/menu/MenuEdit.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/menu/MenuEdit.vue
@@ -28,55 +28,55 @@
     style="height: calc(100% - 55px);overflow: auto;padding-bottom: 53px;">
     <template slot="title">
       <a-icon type="menu" />
-      修改菜单
+      Modify menu
     </template>
     <a-form
       :form="form">
       <a-form-item
-        label="菜单名称"
+        label="menu name"
         v-bind="formItemLayout">
         <a-input
           v-decorator="['menuName',
                         {rules: [
-                          { required: true, message: '菜单名称不能为空'},
-                          { max: 20, message: '长度不能超过20个字符'}
+                          { required: true, message: 'Menu name cannot be empty'},
+                          { max: 20, message: 'Length cannot exceed 20 characters'}
                         ]}]" />
       </a-form-item>
       <a-form-item
-        label="菜单URL"
+        label="Menu URL"
         v-bind="formItemLayout">
         <a-input
           v-decorator="['path',
                         {rules: [
-                          { required: true, message: '菜单URL不能为空'},
-                          { max: 50, message: '长度不能超过50个字符'}
+                          { required: true, message: 'Menu URL cannot be empty'},
+                          { max: 50, message: 'Length cannot exceed 50 characters'}
                         ]}]" />
       </a-form-item>
       <a-form-item
-        label="组件地址"
+        label="component address"
         v-bind="formItemLayout">
         <a-input
           v-decorator="['component',
                         {rules: [
-                          { required: true, message: '组件地址不能为空'},
-                          { max: 100, message: '长度不能超过100个字符'}
+                          { required: true, message: 'Component address cannot be empty'},
+                          { max: 100, message: 'Length cannot exceed 100 characters'}
                         ]}]" />
       </a-form-item>
       <a-form-item
-        label="相关权限"
+        label="Related permissions"
         v-bind="formItemLayout">
         <a-input
           v-decorator="['perms',
                         {rules: [
-                          { max: 50, message: '长度不能超过50个字符'}
+                          { max: 50, message: 'Length cannot exceed 50 characters'}
                         ]}]" />
       </a-form-item>
       <a-form-item
-        label="菜单图标"
+        label="menu icon"
         v-decorator="['icon']"
         v-bind="formItemLayout">
         <a-input
-          placeholder="点击右侧按钮选择图标"
+          placeholder="Click the right button to select the icon"
           v-model="menu.icon">
           <a-icon
             v-if="menu.icon"
@@ -91,7 +91,7 @@
         </a-input>
       </a-form-item>
       <a-form-item
-        label="菜单排序"
+        label="menu sorting"
         v-bind="formItemLayout">
         <a-input-number
           v-decorator="['orderNum']"
@@ -99,7 +99,7 @@
       </a-form-item>
 
       <a-form-item
-        label="是否显示"
+        label="whether to display"
         v-bind="formItemLayout">
         <a-switch
           v-decorator="['display']"
@@ -111,7 +111,7 @@
       </a-form-item>
 
       <a-form-item
-        label="上级菜单"
+        label="parent menu"
         style="margin-bottom: 2rem"
         v-bind="formItemLayout">
         <a-tree
@@ -245,11 +245,11 @@ export default {
     handleSubmit () {
       const checkedArr = Object.is(this.checkedKeys.checked, undefined) ? this.checkedKeys : this.checkedKeys.checked
       if (checkedArr.length > 1) {
-        this.$message.error('最多只能选择一个上级菜单,请修改')
+        this.$message.error('At most one parent menu can be selected, please modify')
         return
       }
       if (checkedArr[0] === this.menu.menuId) {
-        this.$message.error('不能选择自己作为上级菜单,请修改')
+        this.$message.error('Cannot select yourself as the parent menu, please modify')
         return
       }
       this.form.validateFields((err, values) => {
@@ -262,7 +262,7 @@ export default {
           } else {
             menu.parentId = ''
           }
-          // 0 表示菜单 1 表示按钮
+          // 0 for menu 1 for button
           menu.type = '0'
           menu.display = this.display
           update({
diff --git a/streampark-console/streampark-console-webapp/src/views/system/role/Role.vue b/streampark-console/streampark-console-webapp/src/views/system/role/Role.vue
index fca001eaa..de49e710b 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/role/Role.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/role/Role.vue
@@ -192,7 +192,7 @@ export default {
         defaultPageSize: 10,
         showQuickJumper: true,
         showSizeChanger: true,
-        showTotal: (total, range) => `显示 ${range[0]} ~ ${range[1]} 条记录,共 ${total} 条记录`
+        showTotal: (total, range) => `show ${range[0]} ~ ${range[1]} records, total ${total} records`
       },
       loading: false
     }
diff --git a/streampark-console/streampark-console-webapp/src/views/system/role/RoleAdd.vue b/streampark-console/streampark-console-webapp/src/views/system/role/RoleAdd.vue
index 9dc02f76a..7f70f0702 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/role/RoleAdd.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/role/RoleAdd.vue
@@ -144,7 +144,7 @@ export default {
       this.checkStrictly = true
     },
     handleCheck (checkedKeys, info) {
-      // 半选中的父节点不参与校验
+      // The half-selected parent node does not participate in the verification
       this.selectedKeysAndHalfCheckedKeys = checkedKeys.concat(info.halfCheckedKeys)
       this.checkedKeys = checkedKeys
       const checkedArr = Object.is(checkedKeys.checked, undefined) ? checkedKeys : checkedKeys.checked
diff --git a/streampark-console/streampark-console-webapp/src/views/system/role/RoleEdit.vue b/streampark-console/streampark-console-webapp/src/views/system/role/RoleEdit.vue
index 6fd2dabeb..e44c0c548 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/role/RoleEdit.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/role/RoleEdit.vue
@@ -47,7 +47,7 @@
           v-decorator="[
             'remark',
             {rules: [
-              { max: 50, message: '长度不能超过50个字符'}
+              { max: 50, message: 'Length cannot exceed 50 characters'}
             ]}]" />
       </a-form-item>
       <a-form-item
@@ -161,7 +161,7 @@ export default {
         this.menuSelectHelp = ''
       } else {
         this.menuSelectStatus = 'error'
-        this.menuSelectHelp = '请选择相应的权限'
+        this.menuSelectHelp = 'Please select the appropriate permission'
       }
     },
     handleExpand (expandedKeys) {
@@ -182,7 +182,7 @@ export default {
       const checkedArr = this.selectedKeysAndHalfCheckedKeys
       if (checkedArr.length === 0) {
         this.menuSelectStatus = 'error'
-        this.menuSelectHelp = '请选择相应的权限'
+        this.menuSelectHelp = 'Please select the appropriate permission'
       } else {
         this.form.validateFields((err, values) => {
           if (!err) {
@@ -206,13 +206,13 @@ export default {
         })
       }
     },
-    // 默认父节点为 "/"
+    // The default parent node is "/"
     deepList(data) {
       data.map((item) => {
         if (item.children && item.children.length >0) {
           this.deepList(item.children)
         } else {
-          // 存放所有叶子节点
+          // Store all leaf nodes
           this.leftNodes.push (item.id)
         }
       })
@@ -222,7 +222,7 @@ export default {
     roleEditVisiable () {
       if (this.roleEditVisiable) {
         getMenu().then((r) => {
-          // 得到所有叶子节点
+          // get all leaf nodes
           this.deepList(r.data.rows.children)
           const data = r.data
           this.menuTreeData = data.rows.children
@@ -230,9 +230,9 @@ export default {
           roleMenu({
             roleId: this.roleInfoData.roleId
           }).then((resp) => {
-            // 后台返回的数据与叶子节点做交集,得到选中的子节点
+            // The data returned in the background is intersected with the leaf node to get the selected child node
             const result = [...new Set(this.leftNodes)].filter((item) => new Set(eval(resp.data)).has(item))
-            //将结果赋值给v-model绑定的属性
+            // Assign the result to the v-model bound property
             this.checkedKeys = [...result]
             const data = this.checkedKeys
             this.defaultCheckedKeys.splice(0, this.defaultCheckedKeys.length, data)
diff --git a/streampark-console/streampark-console-webapp/src/views/system/role/RoleInfo.vue b/streampark-console/streampark-console-webapp/src/views/system/role/RoleInfo.vue
index d16050de6..d94eb26df 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/role/RoleInfo.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/role/RoleInfo.vue
@@ -93,13 +93,13 @@ export default {
       this.$emit('close')
       this.checkedKeys = []
     },
-    // 默认父节点为 "/"
+    // The default parent node is "/"
     deepList(data) {
       data.map((item) => {
         if (item.children && item.children.length >0) {
           this.deepList(item.children)
         } else {
-          // 存放所有叶子节点
+          // Store all leaf nodes
           this.leftNodes.push (item.id)
         }
       })
@@ -109,15 +109,15 @@ export default {
     roleInfoVisiable () {
       if (this.roleInfoVisiable) {
         getMenu().then((r) => {
-          // 得到所有叶子节点
+          // get all leaf nodes
           this.deepList(r.data.rows.children)
           this.menuTreeData = r.data.rows.children
           roleMenu({
             roleId: this.roleInfoData.roleId
           }).then((resp) => {
-            // 后台返回的数据与叶子节点做交集,得到选中的子节点
+            // The data returned in the background is intersected with the leaf node to get the selected child node
             const result = [...new Set(this.leftNodes)].filter((item) => new Set(eval(resp.data)).has(item))
-            //将结果赋值给v-model绑定的属性
+            // Assign the result to the v-model bound property
             const selectedKey = [...result]
             const length = this.checkedKeys.length
             this.checkedKeys.splice(0, length, selectedKey)
diff --git a/streampark-console/streampark-console-webapp/src/views/system/token/Token.vue b/streampark-console/streampark-console-webapp/src/views/system/token/Token.vue
index c42814edf..97c9ca957 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/token/Token.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/token/Token.vue
@@ -63,7 +63,7 @@
       </a-form>
     </div>
 
-    <!-- 表格区域 -->
+    <!-- table area -->
     <a-table
       ref="TableInfo"
       :columns="columns"
@@ -243,7 +243,7 @@ export default {
     search() {
       const {sortedInfo, filteredInfo} = this
       let sortField, sortOrder
-      // 获取当前列的排序和列的过滤规则
+      // Get the sorting of the current column and the filter rules of the column
       if (sortedInfo) {
         sortField = sortedInfo.field
         sortOrder = sortedInfo.order
@@ -286,7 +286,7 @@ export default {
       const oInput = document.createElement('input')
       oInput.value = record.token
       document.body.appendChild(oInput)
-      // 选择对象
+      // select object
       oInput.select()
       document.execCommand('Copy')
       this.$message.success('copy successful')
@@ -299,23 +299,23 @@ export default {
       }
     },
     reset() {
-      // 重置分页
+      // reset pagination
       this.$refs.TableInfo.pagination.current = this.pagination.defaultCurrent
       if (this.paginationInfo) {
         this.paginationInfo.current = this.pagination.defaultCurrent
         this.paginationInfo.pageSize = this.pagination.defaultPageSize
       }
-      // 重置列过滤器规则
+      // Reset column filter rules
       this.filteredInfo = {}
-      // 重置列排序规则
+      // reset column collation
       this.sortedInfo = null
-      // 重置查询参数
+      // reset query parameters
       this.queryParams = {}
       this.$refs.createTime.reset()
       this.fetch()
     },
     handleTableChange(pagination, filters, sorter) {
-      // 将这三个参数赋值给Vue data,用于后续使用
+      // Assign these three parameters to Vue data for subsequent use
       this.paginationInfo = pagination
       this.filteredInfo = filters || {}
       this.sortedInfo = sorter
@@ -327,16 +327,16 @@ export default {
       })
     },
     fetch(params = {}) {
-      // 显示loading
+      // show loading
       this.loading = true
       if (this.paginationInfo) {
-        // 如果分页信息不为空,则设置表格当前第几页,每页条数,并设置查询分页参数
+        // If the paging information is not empty, set the current page of the table, the number of items per page, and set the query paging parameters
         this.$refs.TableInfo.pagination.current = this.paginationInfo.current
         this.$refs.TableInfo.pagination.pageSize = this.paginationInfo.pageSize
         params.pageSize = this.paginationInfo.pageSize
         params.pageNum = this.paginationInfo.current
       } else {
-        // 如果分页信息为空,则设置为默认值
+        // If pagination information is empty, set to default
         params.pageSize = this.pagination.defaultPageSize
         params.pageNum = this.pagination.defaultCurrent
       }
@@ -355,7 +355,7 @@ export default {
         pagination.total = parseInt(resp.data.total)
         this.dataSource = resp.data.records
         this.pagination = pagination
-        // 数据加载完毕,关闭loading
+        // After the data is loaded, close the loading
         this.loading = false
       })
     }
diff --git a/streampark-console/streampark-console-webapp/src/views/system/token/TokenAdd.vue b/streampark-console/streampark-console-webapp/src/views/system/token/TokenAdd.vue
index cf7c397e8..e880732f1 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/token/TokenAdd.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/token/TokenAdd.vue
@@ -123,7 +123,7 @@ export default {
 
   methods: {
 
-    //expireTime不可选择的日期
+    // expireTime non-selectable date
     tokenDisabledDate(current) {
       return current && current < moment().endOf('day')
     },
@@ -168,7 +168,7 @@ export default {
     },
 
     fetch(params = {}) {
-      // 显示loading
+      // show loading
       this.loading = true
       params.pageSize = 99999
       params.pageNum = 1
@@ -183,7 +183,7 @@ export default {
 
       getNoTokenUser().then((resp) => {
         this.dataSource = resp.data
-        // 数据加载完毕,关闭loading
+        // After the data is loaded, close the loading
         this.loading = false
       })
     }
diff --git a/streampark-console/streampark-console-webapp/src/views/system/user/User.vue b/streampark-console/streampark-console-webapp/src/views/system/user/User.vue
index 49197f556..eefe9ba15 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/user/User.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/user/User.vue
@@ -80,7 +80,7 @@
       </a-form>
     </div>
 
-    <!-- 表格区域 -->
+    <!-- table area -->
     <a-table
       ref="TableInfo"
       :columns="columns"
@@ -140,17 +140,17 @@
       </template>
     </a-table>
 
-    <!-- 用户信息查看 -->
+    <!-- View user information -->
     <user-info
       :data="userInfo.data"
       :visible="userInfo.visible"
       @close="handleUserInfoClose" />
-    <!-- 新增用户 -->
+    <!-- New users -->
     <user-add
       @close="handleUserAddClose"
       @success="handleUserAddSuccess"
       :visible="userAdd.visible" />
-    <!-- 修改用户 -->
+    <!-- modify user -->
     <user-edit
       ref="userEdit"
       @close="handleUserEditClose"
@@ -326,7 +326,7 @@ export default {
     search () {
       const { sortedInfo, filteredInfo } = this
       let sortField, sortOrder
-      // 获取当前列的排序和列的过滤规则
+      // Get the sorting of the current column and the filter rules of the column
       if (sortedInfo) {
         sortField = sortedInfo.field
         sortOrder = sortedInfo.order
@@ -367,16 +367,16 @@ export default {
       })
     },
     fetch (params = {}) {
-      // 显示loading
+      // show loading
       this.loading = true
       if (this.paginationInfo) {
-        // 如果分页信息不为空,则设置表格当前第几页,每页条数,并设置查询分页参数
+        // If the paging information is not empty, set the current page of the table, the number of items per page, and set the query paging parameters
         this.$refs.TableInfo.pagination.current = this.paginationInfo.current
         this.$refs.TableInfo.pagination.pageSize = this.paginationInfo.pageSize
         params.pageSize = this.paginationInfo.pageSize
         params.pageNum = this.paginationInfo.current
       } else {
-        // 如果分页信息为空,则设置为默认值
+        // If pagination information is empty, set to default
         params.pageSize = this.pagination.defaultPageSize
         params.pageNum = this.pagination.defaultCurrent
       }
@@ -395,7 +395,7 @@ export default {
         pagination.total = parseInt(resp.data.total)
         this.dataSource = resp.data.records
         this.pagination = pagination
-        // 数据加载完毕,关闭loading
+        // After the data is loaded, close the loading
         this.loading = false
       })
     }
diff --git a/streampark-console/streampark-console-webapp/src/views/system/user/UserEdit.vue b/streampark-console/streampark-console-webapp/src/views/system/user/UserEdit.vue
index bb7c077f0..0fdc29648 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/user/UserEdit.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/user/UserEdit.vue
@@ -155,8 +155,8 @@ export default {
       formItemLayout,
       form: this.$form.createForm(this),
       userTypeData: [
-        { 'value': 1, 'name': '内部用户' },
-        { 'value': 2, 'name': '外部用户' }
+        { 'value': 1, 'name': 'internal user' },
+        { 'value': 2, 'name': 'external user' }
       ],
       roleData: [],
       userId: '',
@@ -212,7 +212,7 @@ export default {
             if (r.status === 'success') {
               this.loading = false
               this.$emit('success')
-              // 如果修改用户就是当前登录用户的话,更新其state
+              // If the modified user is the currently logged in user, update its state
               if (user.username === this.currentUser.username) {
                 get({
                   username: user.username
diff --git a/streampark-console/streampark-console-webapp/src/views/user/SignIn.vue b/streampark-console/streampark-console-webapp/src/views/user/SignIn.vue
index 347634769..90ae281eb 100644
--- a/streampark-console/streampark-console-webapp/src/views/user/SignIn.vue
+++ b/streampark-console/streampark-console-webapp/src/views/user/SignIn.vue
@@ -90,9 +90,9 @@
 
       <div class="footer">
         <div class="links">
-          <a href="_self">帮助</a>
-          <a href="_self">隐私</a>
-          <a href="_self">条款</a>
+          <a href="_self">help</a>
+          <a href="_self">privacy</a>
+          <a href="_self">provision</a>
         </div>
         <div
           class="copyright">
diff --git a/streampark-console/streampark-console-webapp/vue.config.js b/streampark-console/streampark-console-webapp/vue.config.js
index fd687d4f5..630fd84c6 100644
--- a/streampark-console/streampark-console-webapp/vue.config.js
+++ b/streampark-console/streampark-console-webapp/vue.config.js
@@ -98,7 +98,7 @@ module.exports = {
         name: 'assets/[name].[hash:8].[ext]'
       })
 
-    // 生产环境下关闭css压缩的 colormin 项,因为此项优化与主题色替换功能冲突
+    // Turn off the colormin item of CSS compression in the production environment, because this optimization conflicts with the theme color replacement function
     if (isProd) {
       config.plugin('optimize-css')
         .tap(args => {