瀏覽代碼

feat: 修复国际化文本优化

kindring 2 周之前
父節點
當前提交
8694b7995d

+ 62 - 12
web_src/src/assets/i18/lang/en-us.js

@@ -14,8 +14,11 @@ export default {
     save: 'Save',
     cancel: 'Cancel',
     edit: 'Edit',
+    setting: 'Setting',
+    run: 'run',
     delete: 'Delete',
     confirm: 'Confirm',
+    comment: 'Comment',
     operation: 'Operation',
     operationSuccess: 'Operation Successful',
     name: 'Name',
@@ -23,6 +26,7 @@ export default {
     pleaseSelect: 'Please Select',
     state: 'Status',
     refresh: 'Refresh',
+    reload: 'Reload',
     addSuccess: 'Added Successfully',
     keyword: 'Keyword',
     readState: "Read Status",
@@ -34,7 +38,17 @@ export default {
     },
     address: 'Address',
     copy: 'Copy',
+    play: 'Play',
+    stop: 'Stop',
+    pause: 'Pause',
+    date: 'Date',
+    customPlay: 'Custom Play',
+    playMultiples: 'Play Multiple',
     uploadTime: 'Upload Time',
+    filter: 'Filter',
+    noData: 'No Data',
+    download: 'Download',
+    moreOperating: 'More Operations',
     notification: {
         register: 'No administrator account, please register first',
         success: 'Admin account registered successfully',
@@ -56,22 +70,28 @@ export default {
         noConnectZlm: "Unable to connect to ZLM",
         zlmFailMsg: `<span>Failed to connect to ZLM service {msg}</span> <br/><a href=\"{url}\" target=\"_blank\"><span>Manual access</span></a>`,
         sdpFail: `SDP interaction failed, recommend using Chrome browser`,
-        playSuccess: 'Playback successful'
+        playSuccess: 'Playback successful',
+        playFail: "Playback failed",
+        playFailTips: 'Playback failed,click button retry',
+        deleteDevice1: 'After deleting an online device, you can still go online again by registering',
+        deleteDevice2: 'If you want to completely delete it, please take the device offline first',
+        deleteDevice3: 'Are you sure you want to delete this device?',
     },
     menu: {
         console: 'Dashboard',
-        liveMonitor: 'Multi-screen Monitoring',
-        deviceList: 'GB Devices',
-        map: 'Electronic Map',
-        pushList: 'Stream Push List',
-        pullProxy: 'Stream Pull Proxy',
-        cloudRecord: 'Cloud Recording',
-        mediaServer: 'Media Server Management',
-        cascade: 'GB Cascading',
-        aiManager: 'AI Management',
+        liveMonitor: 'Monitoring',
+        deviceList: 'Devices',
+        map: 'Map',
+        pushList: 'PushList',
+        pullProxy: 'StreamProxy',
+        cloudRecord: 'Cloud',
+        mediaServer: 'Media',
+        cascade: 'cascade',
+        aiManager: 'AI',
         alarmCenter: 'Alarm Center',
         alarmInfo: 'Alarm Details',
         system: 'System Management',
+        record: "gb record"
     },
     user: {
         welcome: 'Welcome back',
@@ -91,7 +111,12 @@ export default {
     },
     sips: {
         edit: "Edit SIP Configuration",
-        all: "All SIP Configurations"
+        all: "All SIP Configurations",
+        messageChannel: 'use message channel',
+        autoUpdate: {
+            flowing: 'flowing sip update',
+            notFlowing: 'not flowing sip update'
+        }
     },
     device: {
         title: "Device",
@@ -101,6 +126,8 @@ export default {
         id: "Device ID",
         ip: "Device IP",
         name: "Device Name",
+        charCode:  "Charset",
+        mapCode: "Map Code",
         info: {
             title: "Device Information",
             battery: "Battery Voltage",
@@ -125,6 +152,7 @@ export default {
         pushFail: "Stream push failed",
         pushSuccess: "Stream pull successful",
         rePush: "Re-push Stream",
+        asyncSuccess: "async success",
         getPushListFail: "Failed to get push list",
         channelList: "Channel List",
         channelCount: "Channel Count",
@@ -138,11 +166,16 @@ export default {
         channelOffline: "Channel Offline",
         ptzType: "PTZ Type",
         enableAudio: "Enable Audio",
-        ptz: "PTZ",
         play: "Play",
         stop: "Stop",
         record: "Device Recording",
         ptzControl: "PTZ Control",
+        ptz: {
+            title: 'ptz',
+            zoomIn: "Zoom In",
+            zoomOut: "Zoom Out",
+            focus: 'focus'
+        },
         position: "Position",
         share: {
             title: "Share Device",
@@ -152,6 +185,8 @@ export default {
             closeFailed: 'Failed to disable sharing, please retry later',
             close: 'Disable Sharing',
             closeSuccess: 'Sharing disabled successfully',
+            expire: "Share expiration time",
+            min: 'minutes'
         },
         operator: {
             add: "Add Device",
@@ -162,6 +197,7 @@ export default {
         },
         preset: {
             title: "Preset",
+            fastPreset: 'FastPreset'
         }
     },
     aiManager: {
@@ -223,6 +259,10 @@ export default {
     video: {
         title: "Video",
         liveTitle: "Video Streaming Interface",
+        startTime:  "Start Time",
+        endTime: "End Time",
+        timeRange: "Time Range",
+        ssrcCheck: "SSRC Check",
         play: {
             webrtc: {
                 title: "WebRTC Player",
@@ -242,6 +282,7 @@ export default {
             },
         },
         media: {
+            server: "Media Server",
             title: "Media",
             address: "Stream URL",
             video: "Video",
@@ -252,6 +293,7 @@ export default {
             bitrate: "Bitrate",
             frameSize: "Frame Size",
             streamType: "Stream Type",
+            autoSelect: "Auto Select",
         },
         pushFailCode: {
             100: "Unable to start stream, please retry later: {msg}",
@@ -259,4 +301,12 @@ export default {
             102: "VOD timeout, no video stream received from device"
         }
     },
+    audio: {
+        stop: "Stop audio",
+        start: "Start audio",
+        record: 'record',
+        recording: 'recording',
+        waiting: "start audio",
+        encode: "audio encode",
+    }
 }

+ 53 - 3
web_src/src/assets/i18/lang/zh-cn.js

@@ -14,8 +14,11 @@ export default {
     save: '保存',
     cancel: '取消',
     edit: '编辑',
+    setting: '设置',
+    run: '调用',
     delete: '删除',
     confirm: '确定',
+    comment: '备注',
     operation: '操作',
     operationSuccess: '操作成功',
     name: '名称',
@@ -23,6 +26,7 @@ export default {
     pleaseSelect: '请选择',
     state: '状态',
     refresh: '刷新',
+    reload: '重新加载',
     addSuccess:  '添加成功',
     keyword: '关键字',
     readState: "已读状态",
@@ -34,7 +38,17 @@ export default {
     },
     address: '地址',
     copy: '复制',
+    play:  '播放',
+    stop: '停止',
+    pause: '暂停',
+    date: '日期',
+    customPlay: '自定义播放',
+    playMultiples: "播放倍速",
     uploadTime: '上传时间',
+    filter: '筛选格式',
+    noData: '暂无数据',
+    download: '下载',
+    moreOperating: '更多操作',
     notification: {
         register: '没有管理员账户, 请先注册账户',
         success: '管理员账户注册成功',
@@ -56,7 +70,12 @@ export default {
         noConnectZlm: "无法连接ZLM",
         zlmFailMsg: `<span>连接zlm服务失败{msg}</span> <br/><a href=\"{url}\" target=\"_blank\"><span>手动访问</span></a>`,
         sdpFail: `sdp 交互失败, 推荐使用chrome浏览器`,
-        playSuccess: '播放成功'
+        playSuccess: '播放成功',
+        playFail: '播放失败',
+        playFailTips: '播放失败, 点击下方按钮尝试重新播放',
+        deleteDevice1: '在线设备删除后仍可通过注册再次上线。',
+        deleteDevice2: '如需彻底删除请先将设备离线。',
+        deleteDevice3: '确定删除此设备?',
     },
     menu: {
         console: '控制台',
@@ -72,6 +91,7 @@ export default {
         alarmCenter: '告警中心',
         alarmInfo: '告警详情',
         system: '系统管理',
+        record: '国标录像'
     },
     user: {
         welcome: '欢迎回来',
@@ -91,7 +111,12 @@ export default {
     },
     sips: {
         edit: "编辑Sip配置",
-        all: "全部sip配置"
+        all: "全部sip配置",
+        messageChannel: '作为消息通道',
+        autoUpdate: {
+            flowing: '跟随sip更新',
+            notFlowing: '不跟随sip更新',
+        },
     },
     device: {
         title: "设备",
@@ -101,6 +126,8 @@ export default {
         id: "设备ID",
         ip: "设备IP",
         name: "设备名称",
+        charCode: "字符集",
+        mapCode: "地理坐标系",
         info: {
             title: "设备信息",
             battery: "电池电压",
@@ -125,6 +152,7 @@ export default {
         pushFail: "推流失败",
         pushSuccess: "拉流成功",
         rePush: "重新推流",
+        asyncSuccess: "同步成功",
         getPushListFail: "获取推流列表失败",
         channelList: "通道列表",
         channelCount: "通道数",
@@ -138,11 +166,16 @@ export default {
         channelOffline: "通道离线",
         ptzType: "云台类型",
         enableAudio: "启用音频",
-        ptz: "云台",
         play: "播放",
         stop: "停止",
         record: "设备录像",
         ptzControl: "云台控制",
+        ptz: {
+          title: '云台',
+          zoomIn: "放大",
+          zoomOut: "缩小",
+          focus: '聚焦',
+        },
         position: "定位",
         share: {
             title: "分享设备",
@@ -152,6 +185,8 @@ export default {
             closeFailed: '关闭分享失败, 稍后重试',
             close: '关闭分享',
             closeSuccess: '关闭分享成功',
+            expire: "分享过期时间",
+            min: '分钟'
         },
         operator: {
             add: "添加设备",
@@ -162,6 +197,7 @@ export default {
         },
         preset: {
             title: "预置位",
+            fastPreset: '快速预置位',
         }
     },
     aiManager: {
@@ -223,6 +259,10 @@ export default {
     video: {
         title: "视频",
         liveTitle: "视频推流界面",
+        startTime: "开始时间",
+        endTime: "结束时间",
+        timeRange:  "时间范围",
+        ssrcCheck: "SSRC校验",
         play: {
             webrtc: {
                   title: "WebRTC播放器",
@@ -242,6 +282,7 @@ export default {
             },
         },
         media: {
+          server: "收流服务",
           title: "媒体信息",
           address: "流地址",
           video: "视频",
@@ -252,6 +293,7 @@ export default {
           bitrate: "码率",
           frameSize: "帧大小",
           streamType: "流类型",
+          autoSelect: "自动选择"
         },
         pushFailCode: {
             100: "无法打开推流,请稍后重试: {msg}",
@@ -259,4 +301,12 @@ export default {
             102: "点播超时, 未收到设备视频流"
         }
     },
+    audio: {
+        stop: "停止音频录制",
+        start: "点击开始录音",
+        record: "录音",
+        recording: "录音中...",
+        waiting: "启动语音对讲中",
+        encode: '音频编码'
+    }
 }

+ 1 - 7
web_src/src/components/DeviceList.vue

@@ -30,12 +30,6 @@
           </el-option>
         </el-select>
 
-        <el-button class="ml-2" icon="el-icon-plus" size="mini" style="margin-right: 1rem;" type="primary" @click="add">
-          {{$t('device.operator.add')}}
-        </el-button>
-<!--        <el-button icon="el-icon-refresh-right" circle size="mini" :loading="getDeviceListLoading"-->
-<!--                   @click="getDeviceList()"></el-button>-->
-
         <el-button class="ml-2" icon="el-icon-refresh-right" circle size="mini" :loading="getDeviceListLoading"
                    @click="refreshDevice()"></el-button>
       </div>
@@ -278,7 +272,7 @@ export default {
     deleteDevice: function (row) {
       let msg = this.$t('notification.deleteDevice');
       if (row.online !== 0) {
-        msg = "在线设备删除后仍可通过注册再次上线。<br/>如需彻底删除请先将设备离线。<br/><strong>确定删除此设备?</strong>"
+        msg = `${this.$t('notification.deleteDevice1')}<br/>${this.$t('notification.deleteDevice2')}<br/><strong>${this.$t('notification.deleteDevice3')}</strong>`
       }
       let that = this;
       this.$confirm(msg, 'tips', {

+ 32 - 35
web_src/src/components/GBRecordDetail.vue

@@ -2,22 +2,23 @@
   <div style="width: 100%">
     <div class="page-header">
       <div class="page-title">
-        <el-page-header @back="goBack" content="国标录像"></el-page-header>
+        <el-page-header @back="goBack" :content="$t('menu.record')"></el-page-header>
       </div>
     </div>
     <el-container>
       <el-aside width="300px">
         <div class="record-list-box-box">
 <!--          -->
-          <el-date-picker size="mini" v-model="chooseDate" type="date" value-format="yyyy-MM-dd" placeholder="日期"
+          <el-date-picker size="mini" v-model="chooseDate" type="date" value-format="yyyy-MM-dd" :placeholder="$t('date')"
                           @change="dateChange()"></el-date-picker>
 <!--          格式选择 与日期选择框样式对其-->
-          <el-select style="width: 220px" v-model="filterExt" size="mini" @change="filterExtChangeHandle" placeholder="筛选格式">
+          <el-select style="width: 220px" v-model="filterExt" size="mini" @change="filterExtChangeHandle" :placeholder="$t('filter')">
             <el-option
                 v-for="item in extList"
                 :key="item.value"
                 :label="item.label"
-                :value="item.value">
+                :value="item.value"
+            >
             </el-option>
           </el-select>
           <div class="record-list-box" v-loading="recordsLoading" :style="recordListStyle">
@@ -33,7 +34,7 @@
               </li>
             </ul>
           </div>
-          <div size="mini" v-if="detailFiles.length ==0" class="record-list-no-val">暂无数据</div>
+          <div size="mini" v-if="detailFiles.length ==0" class="record-list-no-val">{{ $t('noData') }}</div>
         </div>
 
       </el-aside>
@@ -67,8 +68,8 @@
               <el-radio-button
                   v-for="(item,i) in playerList"
                   :key="item.key + i"
-                  :label="item.key">
-                {{ item.text }}
+                  :label="$t(`video.play.${item.key}.title`)">
+                {{ $t(`video.play.${item.key}.title`) }}
               </el-radio-button>
             </el-radio-group>
 
@@ -79,35 +80,35 @@
                   align="left"
                   v-model="timeRange"
                   value-format="yyyy-MM-dd HH:mm:ss"
-                  range-separator=""
-                  start-placeholder="开始时间"
-                  end-placeholder="结束时间"
+                  range-separator="-"
+                  :start-placeholder="$t('video.startTime')"
+                  :end-placeholder="$t('video.endTime')"
                   @change="timePickerChange"
-                  placeholder="选择时间范围">
+                  :placeholder="$t('video.timeRange')">
               </el-time-picker>
             </el-button-group>
 
             <el-button-group>
-              <el-button size="mini" class="iconfont icon-zanting" title="开始" @click="gbPause()"></el-button>
-              <el-button size="mini" class="iconfont icon-kaishi" title="暂停" @click="gbPlay()"></el-button>
-              <el-dropdown size="mini" title="播放倍速" @command="gbScale">
+              <el-button size="mini" class="iconfont icon-zanting"
+                         :title="$t('play')"
+                         @click="gbPause()"></el-button>
+              <el-button size="mini" class="iconfont icon-kaishi"
+                         :title="$t('pause')"
+                         @click="gbPlay()"></el-button>
+              <el-dropdown size="mini" :title="$t('playMultiples')" @command="gbScale">
                 <el-button size="mini">
-                  倍速 <i class="el-icon-arrow-down el-icon--right"></i>
+                  {{ $t('playMultiples') }} <i class="el-icon-arrow-down el-icon--right"></i>
                 </el-button>
                 <el-dropdown-menu slot="dropdown">
-                  <el-dropdown-item command="0.25">0.25倍速</el-dropdown-item>
-                  <el-dropdown-item command="0.5">0.5倍速</el-dropdown-item>
-                  <el-dropdown-item command="1.0">1倍速</el-dropdown-item>
-                  <el-dropdown-item command="2.0">2倍速</el-dropdown-item>
-                  <el-dropdown-item command="4.0">4倍速</el-dropdown-item>
+                  <el-dropdown-item command="0.25">0.25</el-dropdown-item>
+                  <el-dropdown-item command="0.5">0.5</el-dropdown-item>
+                  <el-dropdown-item command="1.0">1</el-dropdown-item>
+                  <el-dropdown-item command="2.0">2</el-dropdown-item>
+                  <el-dropdown-item command="4.0">4</el-dropdown-item>
                 </el-dropdown-menu>
               </el-dropdown>
-              <el-button size="mini" class="iconfont icon-xiazai1" title="下载选定录像"
+              <el-button size="mini" class="iconfont icon-xiazai1" :title="$t('download')"
                          @click="downloadRecord()"></el-button>
-              <el-button v-if="sliderMIn === 0 && sliderMax === 86400" size="mini" class="iconfont icon-slider"
-                         title="放大滑块" @click="setSliderFit()"></el-button>
-              <el-button v-if="sliderMIn !== 0 || sliderMax !== 86400" size="mini" class="iconfont icon-slider-right"
-                         title="恢复滑块" @click="setSliderFit()"></el-button>
             </el-button-group>
           </div>
           <el-slider
@@ -165,8 +166,6 @@ const playList = [
     audioSupport: ['opus', 'pcma', 'pcmu'],
     disable: false
   },
-
-
 ];
 const playerProtocol = {
   webrtc: ["rtc", "rtcs"],
@@ -314,7 +313,7 @@ export default {
       });
       // 首位添加 所有格式
       this.extList.unshift({
-        label: "所有格式",
+        label: "all",
         value: "all"
       });
       this.filterExt = "all";
@@ -348,7 +347,6 @@ export default {
       this.playRecord()
     },
     playRecord: function () {
-
       if (this.streamId !== "") {
         this.stopPlayRecord(() => {
           this.streamId = "";
@@ -685,22 +683,21 @@ export default {
       // 防抖,防止多次触发
       if (type === webrtcEvent.apiFail.code) {
         this.$notify.error({
-          title: 'ZLM连接失败',
+          title: this.$t('notification.noStreamInfo'),
           dangerouslyUseHTMLString: true,
-          message: `<span>连接zlm服务失败${e.message}</span> <br/>
-                        <a href="${this.videoUrl}" target="_blank"><span>手动访问</span></a>`,
+          message: this.$t('notification.zlmFailMsg',  {msg: e.message, url: this.videoUrl}),
           duration: 0
         });
         this.videoError = true;
         this.videoUrl = '';
 
       } else if (type === webrtcEvent.played.code) {
-        this.$message.success('播放成功');
+        this.$message.success(this.$t('notification.playSuccess'));
       } else if (type === webrtcEvent.sdpFail.code) {
         console.log(e);
         this.$notify.error({
-          title: 'sdp 交互失败',
-          duration: 4500
+          title: this.$t('notification.sdpFail'),
+          duration: 14500
         })
       }
     },

+ 0 - 17
web_src/src/components/account_com/deviceList.vue

@@ -96,23 +96,6 @@ export default {
     handleRefreshChannel(item) {
       this.executeRefreshChannel(item.deviceId)
     },
-    handleDeleteDevice(row) {
-      let msg = "确定删除此设备?"
-      if (row.online !== 0) {
-        msg = "在线设备删除后仍可通过注册再次上线。<br/>如需彻底删除请先将设备离线。<br/><strong>确定删除此设备?</strong>"
-      }
-      this.$confirm(msg, '提示', {
-        dangerouslyUseHTMLString: true,
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        center: true,
-        type: 'warning'
-      }).then(() => {
-        this.executeDeleteDevice(row.deviceId)
-      }).catch(() => {
-
-      });
-    },
     handleOpenChannel(item) {
 
     },

+ 1 - 1
web_src/src/components/channelList.vue

@@ -108,7 +108,7 @@
           <el-table-column :label="$t('operation')" min-width="280" fixed="right">
             <template slot-scope="scope">
               <el-button size="medium" icon="el-icon-coordinate" type="text" @click="showPtzControl(scope.row)">
-                {{ $t('device.ptz') }}
+                {{ $t('device.ptz.title') }}
               </el-button>
               <el-button size="medium" v-bind:disabled="device == null || device.online === 0" icon="el-icon-video-play"
                          type="text" @click="sendDevicePush(scope.row)">

+ 10 - 21
web_src/src/components/com/preset.vue

@@ -43,7 +43,7 @@ export default {
       let presetList = new Array(n_presetLength).fill({}).map((item,i)=>{
         return {
           ind: i+1,
-          remark: `预置位${i+1}`,
+          remark: `${this.$t('device.preset.title')}${i+1}`,
           load: false
         }
       })
@@ -65,17 +65,6 @@ export default {
         }
       }
       console.log(res);
-      /**
-       * res = {
-       *  "code": 0,
-       *  "msg": "success",
-       *  "data": [
-       *  {
-       *  "presetId": 1,
-       *  "presetName": "预置位1",
-       *  }
-       *  ]
-       */
       let response = res.data;
       if (response.code === 0){
 
@@ -137,16 +126,16 @@ export default {
       </el-table-column>
       <el-table-column
           prop="remark"
-          label="备注"
+          :label="$t('comment')"
           width="80">
       </el-table-column>
       <el-table-column
           prop="operation"
       >
         <template slot-scope="scope">
-          <el-button type="primary" size="mini" @click="presetPosition(129, scope.row.ind)">设置</el-button>
-          <el-button v-if="scope.row.load" class="ml-05" type="primary" size="mini" @click="presetPosition(130, scope.row.ind)">调用</el-button>
-          <el-button v-if="scope.row.load" class="ml-05" type="danger" size="mini" @click="presetPosition(131, scope.row.ind)">删除</el-button>
+          <el-button type="primary" size="mini" @click="presetPosition(129, scope.row.ind)">{{$t('setting')}}</el-button>
+          <el-button v-if="scope.row.load" class="ml-05" type="primary" size="mini" @click="presetPosition(130, scope.row.ind)">{{$t('run')}}</el-button>
+          <el-button v-if="scope.row.load" class="ml-05" type="danger" size="mini" @click="presetPosition(131, scope.row.ind)">{{$t('delete')}}</el-button>
         </template>
         <template slot="header" slot-scope="scope">
           <div class="w-full flex">
@@ -154,17 +143,17 @@ export default {
 
             <el-popover
                 placement="bottom"
-                title="快速预置位"
+                :title="$t('device.preset.title')"
                 width="400"
                 trigger="click">
               <div class="w-full flex justify-center items-center">
                 <el-input-number size="mini" :min="1" :max="255" v-model="presetPos"></el-input-number>
 
-                <el-button class="ml-1" type="primary" size="mini" @click="presetPosition(129, presetPos)">设置</el-button>
-                <el-button class="ml-1" type="primary" size="mini" @click="presetPosition(130, presetPos)">调用</el-button>
-                <el-button class="ml-1" type="danger" size="mini" @click="presetPosition(131, presetPos)">删除</el-button>
+                <el-button class="ml-1" type="primary" size="mini" @click="presetPosition(129, presetPos)">{{$t('setting')}}</el-button>
+                <el-button class="ml-1" type="primary" size="mini" @click="presetPosition(130, presetPos)">{{$t('run')}}</el-button>
+                <el-button class="ml-1" type="danger" size="mini" @click="presetPosition(131, presetPos)">{{$t('delete')}}</el-button>
               </div>
-              <el-button slot="reference" size="mini">快速预置位</el-button>
+              <el-button slot="reference" size="mini">{{$t('device.preset.title')}}</el-button>
             </el-popover>
             <el-button class="ml-05" type="primary" size="mini" icon="el-icon-refresh" @click="queryPresetPos"></el-button>
           </div>

+ 4 - 4
web_src/src/components/com/ptzControl.vue

@@ -40,9 +40,9 @@ export default {
         {type: 'none'},
         {name: '下', cmd: 'down', type: 'ptz', icon: 'el-icon-caret-bottom'},
         {type: 'none'},
-        {name: '缩小', cmd: 'zoomOut', type: 'zoom', icon: 'el-icon-zoom-out'},
-        {name: '聚焦', cmd: 'focus', type: 'zoom', icon: 'el-icon-aim'},
-        {name: '放大', cmd: 'zoomIn', type: 'zoom', icon: 'el-icon-zoom-in'},
+        {name: 'device.ptz.zoomOut', cmd: 'zoomOut', type: 'zoom', icon: 'el-icon-zoom-out'},
+        {name: 'device.ptz.focus', cmd: 'focus', type: 'zoom', icon: 'el-icon-aim'},
+        {name: 'device.ptz.zoomIn', cmd: 'zoomIn', type: 'zoom', icon: 'el-icon-zoom-in'},
       ],
       controlSpeed: 30,
       zoomSpeed: 30,
@@ -144,7 +144,7 @@ export default {
       <el-tooltip
         effect="dark"
         placement="top"
-        :content="item.name"
+        :content="$t(item.name)"
         v-if="item.type === 'zoom'">
         <div class="item-info zoom-btn" >
           <i  :class="item.icon"

+ 6 - 6
web_src/src/components/common/flvVideo.vue

@@ -8,15 +8,15 @@
     </div>
     <div v-if="controller" class="v-control bg-red flex items-center">
       <div class="mx-2">
-        <el-button  @click="play" v-if="isPlay" :disabled="!isPush">播放</-button>
-        <el-button @click="pause" v-else :disabled="!isPush">暂停</-button>
+        <el-button  @click="play" v-if="isPlay" :disabled="!isPush">{{ $t('play') }}</el-button>
+        <el-button @click="pause" v-else :disabled="!isPush">{{ $t('pause') }}</el-button>
       </div>
-      <el-button @click="replay" >重新加载</el-button>
+      <el-button @click="replay" >{{ $t('reload') }}</el-button>
       <div class="mx-1 flex">
         <el-input v-model="flvUrl" allow-clear>
           <svg-icon class="text-xl" slot="suffix" name="copy" :icon-class="'copy'"  @click.native="copyUrl"  />
         </el-input>
-        <el-button @click="setFlvUrl(flvUrl)">手动拉流</-button>
+        <el-button @click="setFlvUrl(flvUrl)">{{ $t('customPlay') }}</el-button>
       </div>
     </div>
   </div>
@@ -47,9 +47,9 @@ export default {
   methods:{
     copyUrl(){
       copy(this.flvUrl).then(()=>{
-        this.$message.success('复制成功');
+        this.$message.success(this.$t('notification.copyTips'));
       }).catch(err=>{
-        this.$message.error('复制失败,请手动尝试复制');
+        this.$message.error(this.$t('notification.copyError'));
       })
     },
     setFlvUrl(flvUrl){

+ 2 - 2
web_src/src/components/common/microphone.vue

@@ -1,7 +1,7 @@
 <template>
   <div :class="sizeClass" >
     <el-tooltip class="item" effect="dark"
-                :content="isWaiting?'启动语音对讲中':isRecording?'录音中...':'点击开始录音'"
+                :content="isWaiting?$t('audio.waiting'):isRecording?$t('audio.recording'):$t('audio.start')"
                 placement="top-start">
       <div v-if="isWaiting" class="mic" >
         <i class="el-icon-loading"></i>
@@ -11,7 +11,7 @@
       </div>
     </el-tooltip>
     <el-tooltip v-if="!isWaiting && isRecording" class="item" effect="dark"
-                content="停止语音对讲"
+                :content="$t('audio.stop')"
     >
       <div class="mic mic-t2">
 <!--        停止按钮 -->

+ 2 - 2
web_src/src/components/common/mpegtsVideo.vue

@@ -7,11 +7,11 @@
     <div v-if="controller" class="play-control ">
       <div class="mx-2">
         <div class="play-btn" @click="play" v-if="!isPlay" :disabled="!isPush">
-          播放
+          {{ $t('play') }}
         </div>
         <div class="play-btn" @click="pause" v-else :disabled="!isPush">暂停</div>
       </div>
-      <div class="play-btn" @click="replay" >重新加载</div>
+      <div class="play-btn" @click="replay" >{{ $t('play') }}重新加载</div>
     </div>
   </div>
 </template>

+ 64 - 46
web_src/src/components/common/ptzControl.vue

@@ -28,7 +28,10 @@
         <div class="control-round-inner"><i class="fa fa-pause-circle"></i></div>
       </div>
       <!--                放大 -->
-      <div style="position: absolute; left: 7.25rem; top: -1.1rem" @mousedown="ptzCamera('zoomin')" @mouseup="ptzCamera('stop')"><i class="el-icon-zoom-in control-zoom-btn" style="font-size: 1.875rem;"></i></div>
+      <div style="position: absolute; left: 7.25rem; top: -1.1rem" @mousedown="ptzCamera('zoomin')"
+           @mouseup="ptzCamera('stop')">
+        <i class="el-icon-zoom-in control-zoom-btn" style="font-size: 1.875rem;"></i>
+      </div>
       <!--                聚焦 -->
 
       <div style="position: absolute; left: 7.25rem; top: 1.25rem"
@@ -46,7 +49,7 @@
     <div class="control-panel">
 <!--      预置位 -->
       <el-tabs tab-position="left" style="height: 210px;width:100%">
-        <el-tab-pane label="预置位"  >
+        <el-tab-pane :label="$t('device.preset.title')"  >
 <!--          预置位查询 -->
           <el-table
             v-loading="presetLoading"
@@ -57,21 +60,27 @@
             style="width: 100%;font-size: 16px">
             <el-table-column
               prop="ind"
-              label="序号"
+              label="No"
               width="90">
             </el-table-column>
             <el-table-column
               prop="remark"
-              label="备注"
+              :label="$t('comment')"
               width="100">
             </el-table-column>
             <el-table-column
               prop="operation"
             >
               <template slot-scope="scope">
-                <el-button class="ml-2" type="primary" size="mini" @click="presetPosition(129, scope.row.ind)">设置</el-button>
-                <el-button v-if="scope.row.load" class="ml-2" type="primary" size="mini" @click="presetPosition(130, scope.row.ind)">调用</el-button>
-                <el-button v-if="scope.row.load" class="ml-2" type="danger" size="mini" @click="presetPosition(131, scope.row.ind)">删除</el-button>
+                <el-button class="ml-2" type="primary" size="mini" @click="presetPosition(129, scope.row.ind)">
+                  {{ $t('setting') }}
+                </el-button>
+                <el-button v-if="scope.row.load" class="ml-2" type="primary" size="mini" @click="presetPosition(130, scope.row.ind)">
+                  {{ $t('run') }}
+                </el-button>
+                <el-button v-if="scope.row.load" class="ml-2" type="danger" size="mini" @click="presetPosition(131, scope.row.ind)">
+                  {{ $t('delete') }}
+                </el-button>
               </template>
               <template slot="header" slot-scope="scope">
                 <div class="w-full flex">
@@ -79,17 +88,25 @@
 
                   <el-popover
                     placement="bottom"
-                    title="快速预置位"
+                    :title="$t('device.preset.fastPreset')"
                     width="400"
                     trigger="click">
                     <div class="w-full flex justify-center items-center">
                       <el-input-number size="mini" :min="1" :max="255" v-model="presetPos"></el-input-number>
 
-                      <el-button class="ml-2" type="primary" size="mini" @click="presetPosition(129, presetPos)">设置</el-button>
-                      <el-button class="ml-2" type="primary" size="mini" @click="presetPosition(130, presetPos)">调用</el-button>
-                      <el-button class="ml-2" type="danger" size="mini" @click="presetPosition(131, presetPos)">删除</el-button>
+                      <el-button class="ml-2" type="primary" size="mini" @click="presetPosition(129, presetPos)">
+                        {{ $t('setting') }}
+                      </el-button>
+                      <el-button class="ml-2" type="primary" size="mini" @click="presetPosition(130, presetPos)">
+                        {{ $t('run') }}
+                      </el-button>
+                      <el-button class="ml-2" type="danger" size="mini" @click="presetPosition(131, presetPos)">
+                        {{ $t('delete') }}
+                      </el-button>
                     </div>
-                    <el-button slot="reference">快速预置位</el-button>
+                    <el-button slot="reference">
+                      {{ $t('device.preset.fastPreset') }}
+                    </el-button>
                   </el-popover>
                   <el-button class="ml-2" type="primary" size="mini" icon="el-icon-refresh" @click="queryPresetPos"></el-button>
                 </div>
@@ -97,39 +114,39 @@
             </el-table-column>
           </el-table>
         </el-tab-pane>
-        <el-tab-pane label="巡航" >
-          <el-button-group>
-            <el-tag  size="medium">巡航速度</el-tag>
-            <el-input-number  size="mini" v-model="cruisingSpeed"  :precision="0" :min="1" :max="4095"></el-input-number>
-            <el-button size="mini" icon="el-icon-loading" @click="setSpeedOrTime(134, cruisingGroup, cruisingSpeed)">设置</el-button>
-            <br/>
-            <hr/>
-            <el-tag  size="medium">停留时间</el-tag>
-            <el-input-number  size="mini" v-model="cruisingTime" controls-position="right" :precision="0" :min="1" :max="4095"></el-input-number>
-            <el-button  size="mini" icon="el-icon-timer" @click="setSpeedOrTime(135, cruisingGroup, cruisingTime)">设置</el-button>
-            <br/>
-            <hr/>
-            <el-tag  size="medium">巡航组编号</el-tag>
-            <el-input-number  size="mini" v-model="cruisingGroup" controls-position="right" :precision="0" :min="0" :max="255"></el-input-number>
-            <el-button  size="mini" icon="el-icon-add-location" @click="setCommand(132, cruisingGroup, presetPos)">添加点</el-button>
-            <el-button  size="mini" icon="el-icon-delete-location" @click="setCommand(133, cruisingGroup, presetPos)">删除点</el-button>
-            <el-button  size="mini" icon="el-icon-delete" @click="setCommand(133, cruisingGroup, 0)">删除组</el-button>
-            <el-button  size="mini" type="primary" icon="el-icon-video-camera-solid" @click="setCommand(136, cruisingGroup, 0)">巡航</el-button>
-            <br/>
-            <hr/>
-            <el-tag  size="medium">扫描速度</el-tag>
-            <el-input-number size="mini" v-model="scanSpeed" controls-position="right" :precision="0" :min="1" :max="4095"></el-input-number>
-            <el-button size="mini" icon="el-icon-loading" @click="setSpeedOrTime(138, scanGroup, scanSpeed)">设置</el-button>
-            <br/>
-            <hr/>
-            <el-tag size="medium">扫描组编号</el-tag>
-            <el-input-number size="mini" v-model="scanGroup" controls-position="right" :precision="0" :step="1" :min="0" :max="255"></el-input-number>
-            <el-button size="mini" icon="el-icon-d-arrow-left" @click="setCommand(137, scanGroup, 1)">左边界</el-button>
-            <el-button size="mini" icon="el-icon-d-arrow-right" @click="setCommand(137, scanGroup, 2)">右边界</el-button>
-            <el-button size="mini" type="primary" icon="el-icon-video-camera-solid" @click="setCommand(137, scanGroup, 0)">扫描</el-button>
-            <el-button size="mini" type="danger" icon="el-icon-switch-button" @click="ptzCamera('stop')">停止</el-button>
-          </el-button-group>
-        </el-tab-pane>
+<!--        <el-tab-pane label="巡航" >-->
+<!--          <el-button-group>-->
+<!--            <el-tag  size="medium">巡航速度</el-tag>-->
+<!--            <el-input-number  size="mini" v-model="cruisingSpeed"  :precision="0" :min="1" :max="4095"></el-input-number>-->
+<!--            <el-button size="mini" icon="el-icon-loading" @click="setSpeedOrTime(134, cruisingGroup, cruisingSpeed)">设置</el-button>-->
+<!--            <br/>-->
+<!--            <hr/>-->
+<!--            <el-tag  size="medium">停留时间</el-tag>-->
+<!--            <el-input-number  size="mini" v-model="cruisingTime" controls-position="right" :precision="0" :min="1" :max="4095"></el-input-number>-->
+<!--            <el-button  size="mini" icon="el-icon-timer" @click="setSpeedOrTime(135, cruisingGroup, cruisingTime)">设置</el-button>-->
+<!--            <br/>-->
+<!--            <hr/>-->
+<!--            <el-tag  size="medium">巡航组编号</el-tag>-->
+<!--            <el-input-number  size="mini" v-model="cruisingGroup" controls-position="right" :precision="0" :min="0" :max="255"></el-input-number>-->
+<!--            <el-button  size="mini" icon="el-icon-add-location" @click="setCommand(132, cruisingGroup, presetPos)">添加点</el-button>-->
+<!--            <el-button  size="mini" icon="el-icon-delete-location" @click="setCommand(133, cruisingGroup, presetPos)">删除点</el-button>-->
+<!--            <el-button  size="mini" icon="el-icon-delete" @click="setCommand(133, cruisingGroup, 0)">删除组</el-button>-->
+<!--            <el-button  size="mini" type="primary" icon="el-icon-video-camera-solid" @click="setCommand(136, cruisingGroup, 0)">巡航</el-button>-->
+<!--            <br/>-->
+<!--            <hr/>-->
+<!--            <el-tag  size="medium">扫描速度</el-tag>-->
+<!--            <el-input-number size="mini" v-model="scanSpeed" controls-position="right" :precision="0" :min="1" :max="4095"></el-input-number>-->
+<!--            <el-button size="mini" icon="el-icon-loading" @click="setSpeedOrTime(138, scanGroup, scanSpeed)">设置</el-button>-->
+<!--            <br/>-->
+<!--            <hr/>-->
+<!--            <el-tag size="medium">扫描组编号</el-tag>-->
+<!--            <el-input-number size="mini" v-model="scanGroup" controls-position="right" :precision="0" :step="1" :min="0" :max="255"></el-input-number>-->
+<!--            <el-button size="mini" icon="el-icon-d-arrow-left" @click="setCommand(137, scanGroup, 1)">左边界</el-button>-->
+<!--            <el-button size="mini" icon="el-icon-d-arrow-right" @click="setCommand(137, scanGroup, 2)">右边界</el-button>-->
+<!--            <el-button size="mini" type="primary" icon="el-icon-video-camera-solid" @click="setCommand(137, scanGroup, 0)">扫描</el-button>-->
+<!--            <el-button size="mini" type="danger" icon="el-icon-switch-button" @click="ptzCamera('stop')">停止</el-button>-->
+<!--          </el-button-group>-->
+<!--        </el-tab-pane>-->
 <!--        <el-tab-pane label="扫描">角色管理</el-tab-pane>-->
       </el-tabs>
 
@@ -458,10 +475,11 @@ export default {
       console.log('请求预置位');
       this.presetLoading = true;
       let n_presetLength = 255;
+      let presetTitle = this.$t('device.preset.title');
       let presetList = new Array(n_presetLength).fill({}).map((item,i)=>{
         return {
           ind: i+1,
-          remark: `预置位${i+1}`,
+          remark: `${presetTitle}${i+1}`,
           load: false
         }
       })

+ 2 - 2
web_src/src/components/dialog/SyncChannelProgress.vue

@@ -79,7 +79,7 @@ export default {
               }else {
                 this.syncStatus = "success"
                 this.percentage = 100;
-                this.msg = '同步成功';
+                this.msg = this.$t('device.asyncSuccess');
                 setTimeout(()=>{
                   this.showDialog = false;
                 }, 3000)
@@ -90,7 +90,7 @@ export default {
           if (this.syncFlag) {
             this.syncStatus = "success"
             this.percentage = 100;
-            this.msg = '同步成功';
+            this.msg = this.$t('device.asyncSuccess');
           }else {
             this.syncStatus = "error"
             this.msg = res.data.msg;

+ 1 - 1
web_src/src/components/dialog/customPlayer.vue

@@ -414,7 +414,7 @@ export default {
         this.videoUrl = '';
 
       }else if(type === webrtcEvent.played.code){
-        this.$message.success('播放成功');
+        this.$message.success(this.$t('notification.playSuccess'));
       }else if(type === webrtcEvent.sdpFail.code){
         this.$notify.error({
           title: 'sdp 交互失败',

+ 32 - 35
web_src/src/components/dialog/deviceEdit.vue

@@ -1,7 +1,7 @@
 <template>
   <div id="deviceEdit" v-loading="isLoging">
     <el-dialog
-      title="设备编辑"
+      :title="$t('device.operator.edit')"
       width="40%"
       top="2rem"
       :close-on-click-modal="false"
@@ -11,23 +11,20 @@
     >
       <div id="shared" style="margin-top: 1rem;margin-right: 100px;">
         <el-form ref="form" :rules="rules" :model="form" label-width="200px" >
-          <el-form-item label="设备编号" prop="deviceId">
+          <el-form-item :label="$t('device.operator.id')" prop="deviceId">
             <el-input v-if="isEdit" v-model="form.deviceId" disabled></el-input>
             <el-input v-if="!isEdit" v-model="form.deviceId" clearable></el-input>
           </el-form-item>
 
-          <el-form-item label="设备名称" prop="name">
+          <el-form-item :label="$t('device.name')" prop="name">
             <el-input v-model="form.name" clearable></el-input>
           </el-form-item>
-          <el-form-item label="密码" prop="password">
+          <el-form-item :label="$t('password')" prop="password">
             <el-input type="password" v-model="form.password" clearable></el-input>
           </el-form-item>
-          <el-form-item label="收流IP" prop="sdpIp">
-            <el-input type="sdpIp" v-model="form.sdpIp" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="流媒体ID" prop="mediaServerId">
+          <el-form-item :label="$t('video.media.server')" prop="mediaServerId">
             <el-select v-model="form.mediaServerId" style="float: left; width: 100%" >
-              <el-option key="auto" label="自动负载最小" value="auto"></el-option>
+              <el-option key="auto" :label="$t('video.media.autoSelect')" value="auto"></el-option>
               <el-option
                 v-for="item in mediaServerList"
                 :key="item.id"
@@ -37,7 +34,7 @@
             </el-select>
           </el-form-item>
 
-          <el-form-item label="对讲音频编码" prop="audioEncodePt">
+          <el-form-item :label="$t('audio.encode')" prop="audioEncodePt">
             <el-select v-model="audioEncodePt" multiple @change="audioChangeHandle" style="float: left; width: 100%" >
               <el-option
                 v-for="item in audioEncodeArr"
@@ -48,47 +45,47 @@
             </el-select>
           </el-form-item>
 
-          <el-form-item label="字符集" prop="charset" >
+          <el-form-item :label="$t('device.charCode')" prop="charset" >
             <el-select v-model="form.charset" style="float: left; width: 100%" >
                 <el-option key="GB2312" label="GB2312" value="gb2312"></el-option>
               <el-option key="UTF-8" label="UTF-8" value="utf-8"></el-option>
             </el-select>
           </el-form-item>
-          <el-form-item label="地理坐标系" prop="geoCoordSys" >
+          <el-form-item :label="$t('device.mapCode')" prop="geoCoordSys" >
             <el-select v-model="form.geoCoordSys" style="float: left; width: 100%" >
               <el-option key="WGS84" label="WGS84" value="WGS84"></el-option>
               <el-option key="GCJ02" label="GCJ02" value="GCJ02"></el-option>
             </el-select>
           </el-form-item>
-          <el-form-item label="目录结构" prop="treeType" >
-            <el-select v-model="form.treeType" style="float: left; width: 100%" >
-              <el-option key="WGS84" label="行政区划" value="CivilCode"></el-option>
-              <el-option key="GCJ02" label="业务分组" value="BusinessGroup"></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item v-if="this.isEdit" label="目录订阅" title="0为取消订阅" prop="subscribeCycleForCatalog" >
-            <el-input v-model="form.subscribeCycleForCatalog" clearable ></el-input>
-          </el-form-item>
-          <el-form-item v-if="this.isEdit" label="移动位置订阅" title="0为取消订阅" prop="subscribeCycleForCatalog" >
-            <el-input v-model="form.subscribeCycleForMobilePosition" clearable ></el-input>
-          </el-form-item>
-          <el-form-item v-if="form.subscribeCycleForMobilePosition > 0" label="移动位置报送间隔" prop="subscribeCycleForCatalog" >
-            <el-input v-model="form.mobilePositionSubmissionInterval" clearable ></el-input>
-          </el-form-item>
-          <el-form-item  label="分享过期时间" prop="shareExpires">
+<!--          <el-form-item label="$t('device.mapCode')目录结构" prop="treeType" >-->
+<!--            <el-select v-model="form.treeType" style="float: left; width: 100%" >-->
+<!--              <el-option key="WGS84" label="$t('device.mapCode')行政区划" value="CivilCode"></el-option>-->
+<!--              <el-option key="GCJ02" label="$t('device.mapCode')业务分组" value="BusinessGroup"></el-option>-->
+<!--            </el-select>-->
+<!--          </el-form-item>-->
+<!--          <el-form-item v-if="this.isEdit" label="$t('device.mapCode')目录订阅" title="0" prop="subscribeCycleForCatalog" >-->
+<!--            <el-input v-model="form.subscribeCycleForCatalog" clearable ></el-input>-->
+<!--          </el-form-item>-->
+<!--          <el-form-item v-if="this.isEdit" label="$t('device.mapCode')移动位置订阅" title="0" prop="subscribeCycleForCatalog" >-->
+<!--            <el-input v-model="form.subscribeCycleForMobilePosition" clearable ></el-input>-->
+<!--          </el-form-item>-->
+<!--          <el-form-item v-if="form.subscribeCycleForMobilePosition > 0" label="移动位置报送间隔" prop="subscribeCycleForCatalog" >-->
+<!--            <el-input v-model="form.mobilePositionSubmissionInterval" clearable ></el-input>-->
+<!--          </el-form-item>-->
+          <el-form-item  :label="$t('device.share.expire')" prop="shareExpires">
             <el-input-number v-model="form.shareExpires">
-              <template slot="append">分钟</template>
+              <template slot="append">{{ $t('device.share.min') }}</template>
             </el-input-number>
           </el-form-item>
-          <el-form-item label="其他选项">
-            <el-checkbox label="SSRC校验" v-model="form.ssrcCheck" style="float: left"></el-checkbox>
-            <el-checkbox label="作为消息通道" v-model="form.asMessageChannel" style="float: left"></el-checkbox>
-            <el-checkbox :label="form.autoUpdate?'跟随sip更新':'不跟随sip更新'" v-model="form.autoUpdate" style="float: left"></el-checkbox>
+          <el-form-item :label="$t('moreOperating')">
+            <el-checkbox :label="$t('video.ssrcCheck')" v-model="form.ssrcCheck" style="float: left"></el-checkbox>
+            <el-checkbox :label="$t('sips.messageChannel')" v-model="form.asMessageChannel" style="float: left"></el-checkbox>
+            <el-checkbox :label="form.autoUpdate?$t('sips.autoUpdate.flowing'):$t('sips.autoUpdate.notFlowing')" v-model="form.autoUpdate" style="float: left"></el-checkbox>
           </el-form-item>
           <el-form-item>
             <div style="float: right;">
-              <el-button type="primary" @click="onSubmit" >确认</el-button>
-              <el-button @click="close">取消</el-button>
+              <el-button type="primary" @click="onSubmit" >{{ $t('confirm') }}</el-button>
+              <el-button @click="close">{{ $t('cancel') }}</el-button>
             </div>
 
           </el-form-item>

+ 2 - 2
web_src/src/components/dialog/dialogPtzControl.vue

@@ -1,7 +1,7 @@
 <template>
   <div id="ptzControl" v-loading="isLoading">
     <el-dialog
-      title="云台控制"
+      :title="$t('device.ptzControl')"
       width="956px"
       top="0"
       :close-on-click-modal="false"
@@ -10,7 +10,7 @@
       <div style="width: 100%; height: 100%"></div>
     <div id="shared" style="text-align: left; margin-top: 1rem;">
       <el-tabs v-model="tabActiveName" @tab-click="tabHandleClick" >
-        <el-tab-pane label="云台控制" name="control">
+        <el-tab-pane :label="$t('device.ptzControl')" name="control">
           <ptz-control :device-id="deviceId" :channel-id="channelId"></ptz-control>
         </el-tab-pane>
       </el-tabs>

+ 6 - 6
web_src/src/components/dialog/newPlay.vue

@@ -17,7 +17,7 @@ export default {
   props: {
     deviceTitle: {
       type: String,
-      default: "视频播放界面"
+      default: ""
     },
     show: {
       type: Boolean,
@@ -59,11 +59,11 @@ export default {
       v-loading="isLoading"
     >
       <!--      标题-->
-      <template v-slot:title>
-        <div class="live-title">
-          <span>{{ deviceTitle }}</span>
-        </div>
-      </template>
+<!--      <template v-slot:title>-->
+<!--        <div class="live-title">-->
+<!--          <span>{{ deviceTitle }}</span>-->
+<!--        </div>-->
+<!--      </template>-->
 
       <!--      播放器界面 -->
       <live-play-box v-bind="$attrs" v-on="$listeners" />

+ 3 - 3
web_src/src/components/dialog/rtcPlayer.vue

@@ -2,7 +2,7 @@
   <div class="rtcPlayer">
     <error-tips v-show="errorInfo.showError" :errorInfo="errorInfo">
       <div class="group">
-        <el-button @click="videoPlay()">播放</el-button>
+        <el-button @click="videoPlay()">{{ $t('play') }}</el-button>
       </div>
     </error-tips>
     <video v-show="!errorInfo.showError" ref="webrtcPlayer" class='webRtcPlayerBox' @click.prevent="videoClick" controls autoplay
@@ -208,7 +208,7 @@ export default {
       let [err,res] = await handle(el_video.play());
       if(err){
         // this.$message.error("播放失败");
-        this.showErrorTip("播放失败", "点击下方按钮尝试重新播放");
+        this.showErrorTip(this.$t('notification.playFail'), this.$t('notification.playFailTips'));
         if(this.enableDebug){
           console.log(err);
         }
@@ -218,7 +218,7 @@ export default {
       this.$nextTick(()=>{
         this.comVideoWh();
       })
-      this.eventCallback(webrtcEvent.played.code, "播放成功")
+      this.eventCallback(webrtcEvent.played.code, this.$t('notification.playSuccess'))
       console.log('播放成功 -----------------------');
     },
     pause: function () {

+ 0 - 3
web_src/src/layout/UiHeader.vue

@@ -8,9 +8,6 @@
       <el-menu-item index="/live">{{ $t('menu.liveMonitor') }}</el-menu-item>
       <el-menu-item index="/deviceList">{{ $t('menu.deviceList') }}</el-menu-item>
       <el-menu-item index="/map">{{ $t('menu.map') }}</el-menu-item>
-      <el-menu-item index="/pushVideoList">{{ $t('menu.pushList') }}</el-menu-item>
-      <el-menu-item index="/streamProxyList">{{ $t('menu.pullProxy') }}</el-menu-item>
-      <el-menu-item index="/cloudRecord">{{ $t('menu.cloudRecord') }}</el-menu-item>
       <el-menu-item index="/mediaServerManger">{{ $t('menu.mediaServer') }}</el-menu-item>
       <el-menu-item index="/parentPlatformList/15/1">{{ $t('menu.cascade') }}</el-menu-item>
       <el-menu-item index="/aiLib">{{ $t('menu.aiManager') }}</el-menu-item>