Bläddra i källkod

查漏补缺翻译

xiehao1 11 månader sedan
förälder
incheckning
f4df76ac58
41 ändrade filer med 199 tillägg och 134 borttagningar
  1. 56 26
      src/locales/en.ts
  2. 33 4
      src/locales/zh-CN.ts
  3. 1 1
      src/views/infra/config/index.vue
  4. 4 4
      src/views/infra/job/index.vue
  5. 1 1
      src/views/mall/cashier/help.vue
  6. 1 1
      src/views/mall/cashier/payResult.vue
  7. 1 1
      src/views/mall/cashier/scanPay.vue
  8. 1 1
      src/views/mall/cashier/settlement.vue
  9. 1 1
      src/views/mall/member/user/index.vue
  10. 2 2
      src/views/mall/order/storeOrder/desk.vue
  11. 0 1
      src/views/mall/order/storeOrder/work.vue
  12. 1 1
      src/views/mall/shop/ads/index.vue
  13. 2 2
      src/views/mall/shop/recharge/index.vue
  14. 1 1
      src/views/mall/shop/service/index.vue
  15. 1 1
      src/views/mall/store/withdrawal/index.vue
  16. 1 1
      src/views/market/vipCard/index.vue
  17. 10 10
      src/views/mp/account/AccountForm.vue
  18. 1 1
      src/views/mp/components/wx-account-select/main.vue
  19. 4 4
      src/views/mp/components/wx-material-select/main.vue
  20. 11 11
      src/views/mp/components/wx-msg/components/MsgEvent.vue
  21. 1 1
      src/views/mp/components/wx-msg/components/MsgList.vue
  22. 4 4
      src/views/mp/components/wx-msg/main.vue
  23. 6 5
      src/views/mp/components/wx-reply/components/TabImage.vue
  24. 8 7
      src/views/mp/components/wx-reply/components/TabMusic.vue
  25. 3 2
      src/views/mp/components/wx-reply/components/TabNews.vue
  26. 2 1
      src/views/mp/components/wx-reply/components/TabText.vue
  27. 5 4
      src/views/mp/components/wx-reply/components/TabVideo.vue
  28. 7 5
      src/views/mp/components/wx-reply/components/TabVoice.vue
  29. 6 6
      src/views/mp/components/wx-reply/main.vue
  30. 2 2
      src/views/mp/components/wx-video-play/main.vue
  31. 2 2
      src/views/mp/components/wx-voice-play/main.vue
  32. 1 1
      src/views/mp/draft/components/CoverSelect.vue
  33. 1 1
      src/views/mp/draft/components/NewsForm.vue
  34. 8 8
      src/views/mp/material/index.vue
  35. 1 1
      src/views/mp/menu/components/MenuEditor.vue
  36. 1 1
      src/views/mp/user/UserForm.vue
  37. 1 1
      src/views/score/order/OrderDetail.vue
  38. 1 1
      src/views/system/mail/template/MailTemplateSendForm.vue
  39. 4 4
      src/views/system/notify/my/index.vue
  40. 1 1
      src/views/system/notify/template/NotifyTemplateSendForm.vue
  41. 1 1
      src/views/system/role/RoleAssignMenuForm.vue

+ 56 - 26
src/locales/en.ts

@@ -421,35 +421,36 @@ export default {
       placeholder: 'Please enter the lock screen password or user password'
     },
     login: {
-      backSignIn: 'Back sign in',
-      mobileSignInFormTitle: 'Mobile sign in',
-      qrSignInFormTitle: 'Qr code sign in',
-      signInFormTitle: 'Sign in',
-      signUpFormTitle: 'Sign up',
-      forgetFormTitle: 'Reset password',
-      signInTitle: 'Backstage management system',
-      signInDesc: 'Enter your personal details and get started!',
+      backSignIn: 'Back',
+      signInFormTitle: 'Sign In',
+      ssoFormTitle: 'Tri-party authorisation',
+      mobileSignInFormTitle: 'Mobile Login',
+      qrSignInFormTitle: 'QR Code Login',
+      signUpFormTitle: 'Register',
+      forgetFormTitle: 'Reset Password',
+      signInTitle: 'Out-of-the-box middle and back office management system',
+      signInDesc: 'Enter your personal details to get started!',
       policy: 'I agree to the xxx Privacy Policy',
-      scanSign: `scanning the code to complete the login`,
-      loginButton: 'Sign in',
-      registerButton: 'Sign up',
+      scanSign: `Scan the code and click ‘Confirm’ to complete your login.`,
+      loginButton: 'Sign In',
+      registerButton: 'Sign Up',
       rememberMe: 'Remember me',
-      forgetPassword: 'Forget Password?',
-      otherSignIn: 'Sign in with',
-      loginSuccessTitle: 'Login successful',
+      forgetPassword: 'Forgot your password?',
+      otherSignIn: 'Other Login Methods',
+      loginSuccessTitle: 'Login Successful',
       loginSuccessDesc: 'Welcome back',
-      accountPlaceholder: 'Please input username',
-      passwordPlaceholder: 'Please input password',
-      smsPlaceholder: 'Please input sms code',
-      mobilePlaceholder: 'Please input mobile',
-      policyPlaceholder: 'Register after checking',
-      diffPwd: 'The two passwords are inconsistent',
-      userName: 'Username',
+      accountPlaceholder: 'Please enter your account number',
+      passwordPlaceholder: 'Please enter your password',
+      smsPlaceholder: 'Please enter the verification code',
+      mobilePlaceholder: 'Please enter your mobile phone number',
+      policyPlaceholder: 'Tick to register',
+      diffPwd: 'Two passwords are not the same',
+      userName: 'Account Number',
       password: 'Password',
       confirmPassword: 'Confirm Password',
       email: 'Email',
-      smsCode: 'SMS code',
-      mobile: 'Mobile'
+      smsCode: 'SMS verification code',
+      mobile: 'Mobile phone number'
     }
   },
   profile: {
@@ -955,9 +956,17 @@ export default {
     synchronizationSuccessful: 'Synchronisation successful',
     codePreview: 'Code Preview',
     generateFileInDirectory: 'Generating file directory...',
-    loadingCode: 'Loading code....'
+    loadingCode: 'Loading code....',
+    timedTaskXls: 'Timed Tasks.xls',
   },
   mall: {
+    paymentResult:'Payment results',
+    scanningTheCodeForReceivingPayment:'Sweep the code to collect money in...',
+    paymentSettlement:'Payment Settlement',
+    placeAnOrder:'Order',
+    neverPlacedAnOrder:'Never placed an order',
+    advertisementPictureManagementXls:'Advertisement Map Management.xls',
+    newAddCashWithdrawal:'New withdrawals',
     orderNumber: 'Order Number',
     totalOrderPrice: 'Total Order Price',
     specification: 'Specification',
@@ -1598,11 +1607,29 @@ export default {
     open: 'Enable'
   },
   mp: {
+    pleaseSelectTheWeChatOfficialAccount:'Please select public number',
+    clickToLoadMore:'Click to load more',
+    thereIsNoMore:'No more',
+    sends:'Send(S)',
+    theNumberofGraphicMessagesIsLimitedto1:'The number of graphic messages is limited to 1, the first one has been sent by default.',
+    pleaseEnterTheMusicLink:'Please enter a music link',
+    pleaseEnterTheHighQualityMusicLink:'Please enter a high quality music link',
+    selectThePublishedGraphic:'Select a published message',
+    selectTheGraphicintheDraftBox:'Select draft message',
+    selectTheVoice:'Select Voice',
+    text:'Text',
+    graphic:'Graphic',
+    music:'Music',
+    clickToPlayTheVideo:'Click to play video',
+    videoPlayback:'Video Playback',
+    voiceRecognition:'Speech Recognition',
+    abstract:'Abstract',
     name: 'Name',
     wechatAccount: 'Micro Signal',
     messageEncryptionKey: 'Message encryption and decryption key',
     pleaseEnterName: 'Please enter your name',
     pleaseEnterWechatAccount: 'Please enter your micro-signal',
+    pleaseEnterTheAppIdOfTheWeChatOfficialAccount: 'Please enter the public number appId',
     pleaseEnterOfficialAccount: 'Please input public number appSecret',
     pleaseEnterOfficialAccountToken: 'Please enter the public token',
     pleaseEnterMessageEncryptionKey: 'Please enter the message encryption and decryption key',
@@ -2353,7 +2380,10 @@ export default {
     numberOfSuccessfulUploads: 'Number of successful uploads:',
     numberOfFailedUploads: 'Number of successful uploads:',
     numberOfFailedUpdates: 'Update Failed Quantity:',
-    pleaseUploadTheFile: 'Please upload a file'
+    pleaseUploadTheFile: 'Please upload a file',
+    allHaveBeenMarkedAsReadSuccessfully:'All read successfully!',
+    batchMarkingAsReadWasSuccessful:'Batch read successfully!',
+    testSending:'Test Send',
   },
   public: {
     all: 'All',
@@ -2385,4 +2415,4 @@ export default {
     scord: 'Seconds'
   },
   'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错
-}
+}

+ 33 - 4
src/locales/zh-CN.ts

@@ -915,9 +915,17 @@ export default {
     synchronizationSuccessful: '同步成功',
     codePreview: '代码预览',
     generateFileInDirectory: '生成文件目录中...',
-    loadingCode: '加载代码中...'
+    loadingCode: '加载代码中...',
+    timedTaskXls: '定时任务.xls',
   },
   mall: {
+    paymentResult:'支付结果',
+    scanningTheCodeForReceivingPayment:'扫码收款中...',
+    paymentSettlement:'支付结算',
+    placeAnOrder:'下单',
+    neverPlacedAnOrder:'从未下单',
+    advertisementPictureManagementXls:'广告图管理.xls',
+    newAddCashWithdrawal:'新增提现',
     orderNumber: '取单号',
     totalOrderPrice: '订单总价',
     specification: '规格',
@@ -1557,11 +1565,29 @@ export default {
     open: '开启'
   },
   mp: {
+    pleaseSelectTheWeChatOfficialAccount:'请选择公众号',
+    clickToLoadMore:'点击加载更多',
+    thereIsNoMore:'没有更多了',
+    sends:'发送(S)',
+    theNumberofGraphicMessagesIsLimitedto1:'图文消息条数限制在 1 条以内,已默认发送第一条',
+    pleaseEnterTheMusicLink:'请输入音乐链接',
+    pleaseEnterTheHighQualityMusicLink:'请输入高质量音乐链接',
+    selectThePublishedGraphic:'选择已发布图文',
+    selectTheGraphicintheDraftBox:'选择草稿箱图文',
+    selectTheVoice:'选择语音',
+    text:'文本',
+    graphic:'图文',
+    music:'音乐',
+    clickToPlayTheVideo:'点击播放视频',
+    videoPlayback:'视频播放',
+    voiceRecognition:'语音识别',
+    abstract:'摘要',
     name: '名称',
     wechatAccount: '微信号',
     messageEncryptionKey: '消息加解密密钥',
     pleaseEnterName: '请输入名称',
     pleaseEnterWechatAccount: '请输入微信号',
+    pleaseEnterTheAppIdOfTheWeChatOfficialAccount: '请输入公众号 appId',
     pleaseEnterOfficialAccount: '请输入公众号 appSecret',
     pleaseEnterOfficialAccountToken: '请输入公众号token',
     pleaseEnterMessageEncryptionKey: '请输入消息加解密密钥',
@@ -1614,7 +1640,7 @@ export default {
     updateitionSucceeded: '更新成功',
     uploadLocally: '本地上传',
     supportsBmpPngJpegJpgGifFormatsSizeNotExceeding2M: '支持 bmp/png/jpeg/jpg/gif 格式,大小不超过 2M',
-    uploadError: '上传出错:',
+    uploadError: t('mp.uploadError'),
     uploadFailed: '上传失败:',
     pleaseEnterTitleRequired: '请输入标题(必填)',
     pleaseEnterAuthor: '请输入作者',
@@ -2296,7 +2322,10 @@ export default {
     numberOfSuccessfulUploads: '上传成功数量:',
     numberOfFailedUploads: '上传成功数量:',
     numberOfFailedUpdates: '更新失败数量:',
-    pleaseUploadTheFile: '请上传文件'
+    pleaseUploadTheFile: '请上传文件',
+    allHaveBeenMarkedAsReadSuccessfully:'全部已读成功!',
+    batchMarkingAsReadWasSuccessful:'批量已读成功!',
+    testSending:'测试发送',
   },
   public: {
     all: '全部',
@@ -2328,4 +2357,4 @@ export default {
     scord: '秒'
   },
   'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错
-}
+}

+ 1 - 1
src/views/infra/config/index.vue

@@ -212,7 +212,7 @@ const handleExport = async () => {
     // 发起导出
     exportLoading.value = true
     const data = await ConfigApi.exportConfig(queryParams)
-    download.excel(data, '参数配置.xls')
+    download.excel(data, t('infra.parameterConfigurationXls'))
   } catch {
   } finally {
     exportLoading.value = false

+ 4 - 4
src/views/infra/job/index.vue

@@ -204,7 +204,7 @@ const handleExport = async () => {
     // 发起导出
     exportLoading.value = true
     const data = await JobApi.exportJob(queryParams)
-    download.excel(data, '定时任务.xls')
+    download.excel(data, t('infra.timedTaskXls'))
   } catch {
   } finally {
     exportLoading.value = false
@@ -221,7 +221,7 @@ const openForm = (type: string, id?: number) => {
 const handleChangeStatus = async (row: JobApi.JobVO) => {
   try {
     // 修改状态的二次确认
-    const text = row.status === InfraJobStatusEnum.STOP ? '开启' : '关闭'
+    const text = row.status === InfraJobStatusEnum.STOP ? t('infra.open') : t('infra.close')
     await message.confirm(
       '确认要' + text + '定时任务编号为"' + row.id + '"的数据项?',
       t('common.reminder')
@@ -273,10 +273,10 @@ const handleCommand = (command, row) => {
 const handleRun = async (row: JobApi.JobVO) => {
   try {
     // 二次确认
-    await message.confirm('确认要立即执行一次' + row.name + '?', t('common.reminder'))
+    await message.confirm(t('infra.confirmThatYouWantToExecuteOnceImmediately') + row.name + '?', t('common.reminder'))
     // 提交执行
     await JobApi.runJob(row.id)
-    message.success('执行成功')
+    message.success(t('infra.successfulExecution'))
     // 刷新列表
     await getList()
   } catch {}

+ 1 - 1
src/views/mall/cashier/help.vue

@@ -9,7 +9,7 @@
         :inline="true"
         label-width="68px"
       >
-      <el-form-item label="就餐人数" prop="orderId">
+      <el-form-item :label="t('mall.numberOfDiners')" prop="orderId">
         <el-input-number v-model="deskNumber" :placeholder="t('mall.pleaseEnterTheNumberOfPeople')" />
         </el-form-item>  
       </el-form>

+ 1 - 1
src/views/mall/cashier/payResult.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-dialog  title="支付结果" v-model="dialogVisible" @close="submit" width="580px" destroy-on-close>
+  <el-dialog  :title="t('mall.paymentResult')" v-model="dialogVisible" @close="submit" width="580px" destroy-on-close>
         <el-row>
           <el-col :span="24">
             <div class="main">

+ 1 - 1
src/views/mall/cashier/scanPay.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-dialog  title="扫码收款中..." v-model="dialogVisible" @close="submit" width="580px" destroy-on-close>
+  <el-dialog  :title="t('mall.scanningTheCodeForReceivingPayment')" v-model="dialogVisible" @close="submit" width="580px" destroy-on-close>
         <el-row>
           <el-col :span="24">
             <div class="main">

+ 1 - 1
src/views/mall/cashier/settlement.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-dialog title="支付结算" v-model="dialogVisible" width="1100px" @close="cancel" destroy-on-close>
+  <el-dialog :title="t('mall.paymentSettlement')" v-model="dialogVisible" width="1100px" @close="cancel" destroy-on-close>
       <el-form ref="form" label-width="0px">
         <div class="settlement">
           <div class="left">

+ 1 - 1
src/views/mall/member/user/index.vue

@@ -203,7 +203,7 @@ const handleExport = async () => {
     // 发起导出
     exportLoading.value = true
     const data = await UserApi.exportUser(queryParams)
-    download.excel(data, '用户.xls')
+    download.excel(data, t('mall.userXls'))
   } catch {
   } finally {
     exportLoading.value = false

+ 2 - 2
src/views/mall/order/storeOrder/desk.vue

@@ -61,13 +61,13 @@
                   </div>
                 </template>
                 <template #footer>
-                  <div style="text-align:center">{{ desk.lastOrderTime ? formatPast(desk.lastOrderTime) + '下单' : '从未下单' }}</div>
+                  <div style="text-align:center">{{ desk.lastOrderTime ? formatPast(desk.lastOrderTime) + t('mall.placeAnOrder') : t('mall.neverPlacedAnOrder') }}</div>
               </template>
               </el-card>
             </div>
           </el-col>
         </el-row>
-        <el-empty description="暂无桌台数据" v-else />
+        <el-empty :description="t('mall.noTableData')" v-else />
   </ContentWrap>
 
   <OrderDetail ref="formRef4" />

+ 0 - 1
src/views/mall/order/storeOrder/work.vue

@@ -292,7 +292,6 @@ onMounted(() => {
 })
 
 onBeforeUnmount(() => {
-  console.log("销毁:")
   clearInterval(interval01)
   clearInterval(interval02);
 })

+ 1 - 1
src/views/mall/shop/ads/index.vue

@@ -163,7 +163,7 @@ const handleExport = async () => {
     // 发起导出
     exportLoading.value = true
     const data = await AdsApi.exportAds(queryParams)
-    download.excel(data, '广告图管理.xls')
+    download.excel(data, t('mall.advertisementPictureManagementXls'))
   } catch {
   } finally {
     exportLoading.value = false

+ 2 - 2
src/views/mall/shop/recharge/index.vue

@@ -51,8 +51,8 @@
       <el-table-column :label="t('mall.weight')" align="center" prop="weigh" />
       <el-table-column :label="t('public.status')" align="center" prop="status">
         <template #default="scope">
-         <span v-if="scope.row.status == 1">显示</span>
-         <span v-else>隐藏</span>
+         <span v-if="scope.row.status == 1">{{t('mall.display')}}</span>
+         <span v-else>{{t('mall.hide')}}</span>
         </template>
       </el-table-column>
       <el-table-column :label="t('mall.sellingPrice')" align="center" prop="sellPrice" />

+ 1 - 1
src/views/mall/shop/service/index.vue

@@ -185,7 +185,7 @@ const handleExport = async () => {
     // 发起导出
     exportLoading.value = true
     const data = await ServiceApi.exportService(queryParams)
-    download.excel(data, '我的服务.xls')
+    download.excel(data, t('mall.myServiceXls'))
   } catch {
   } finally {
     exportLoading.value = false

+ 1 - 1
src/views/mall/store/withdrawal/index.vue

@@ -39,7 +39,7 @@
           @click="openForm('create')"
           v-hasPermi="['store:withdrawal:create']"
         >
-          <Icon icon="ep:plus" class="mr-5px" /> {{t('action.add')}}提现
+          <Icon icon="ep:plus" class="mr-5px" /> {{t('mall.newAddCashWithdrawal')}}
         </el-button>
       </el-form-item>
     </el-form>

+ 1 - 1
src/views/market/vipCard/index.vue

@@ -201,7 +201,7 @@ const handleExport = async () => {
     // 发起导出
     exportLoading.value = true
     const data = await VipCardApi.exportVipCard(queryParams)
-    download.excel(data, '会员卡.xls')
+    download.excel(data, t('market.membershipCardXls'))
   } catch {
   } finally {
     exportLoading.value = false

+ 10 - 10
src/views/mp/account/AccountForm.vue

@@ -10,11 +10,11 @@
       <el-form-item :label="t('mp.name')" prop="name">
         <el-input v-model="formData.name" :placeholder="t('mp.pleaseEnterName')" />
       </el-form-item>
-      <el-form-item label="微信号" prop="account">
+      <el-form-item :label="t('mp.wechatAccount')" prop="account">
         <template #label>
           <span>
             <el-tooltip
-              content="在微信公众平台(mp.weixin.qq.com)的菜单 [设置与开发 - 公众号设置 - 账号详情] 中能找到「微信号」"
+              :content="t('mp.tip11')"
               placement="top"
             >
               <Icon icon="ep:question-filled" style="vertical-align: middle" />
@@ -22,13 +22,13 @@
             {{t('mp.wechatAccount')}}
           </span>
         </template>
-        <el-input v-model="formData.account" placeholder="请输入微信号" />
+        <el-input v-model="formData.account" :placeholder="t('mp.pleaseEnterWechatAccount')" />
       </el-form-item>
       <el-form-item label="appId" prop="appId">
         <template #label>
           <span>
             <el-tooltip
-              content="在微信公众平台(mp.weixin.qq.com)的菜单 [设置与开发 - 公众号设置 - 基本设置] 中能找到「开发者ID(AppID)」"
+              :content="t('mp.tip12')"
               placement="top"
             >
               <Icon icon="ep:question-filled" style="vertical-align: middle" />
@@ -36,13 +36,13 @@
             appId
           </span>
         </template>
-        <el-input v-model="formData.appId" placeholder="请输入公众号 appId" />
+        <el-input v-model="formData.appId" :placeholder="t('mp.pleaseEnterTheAppIdOfTheWeChatOfficialAccount')" />
       </el-form-item>
       <el-form-item label="appSecret" prop="appSecret">
         <template #label>
           <span>
             <el-tooltip
-              content="在微信公众平台(mp.weixin.qq.com)的菜单 [设置与开发 - 公众号设置 - 基本设置] 中能找到「开发者密码(AppSecret)」"
+              :content="t('mp.tip13')"
               placement="top"
             >
               <Icon icon="ep:question-filled" style="vertical-align: middle" />
@@ -50,13 +50,13 @@
             appSecret
           </span>
         </template>
-        <el-input v-model="formData.appSecret" placeholder="请输入公众号 appSecret" />
+        <el-input v-model="formData.appSecret" :placeholder="t('mp.pleaseEnterOfficialAccount')" />
       </el-form-item>
       <el-form-item label="token" prop="token">
-        <el-input v-model="formData.token" placeholder="请输入公众号token" />
+        <el-input v-model="formData.token" :placeholder="t('mp.pleaseEnterOfficialAccountToken')" />
       </el-form-item>
-      <el-form-item label="消息加解密密钥" prop="aesKey">
-        <el-input v-model="formData.aesKey" placeholder="请输入消息加解密密钥" />
+      <el-form-item :label="t('mp.messageEncryptionKey')" prop="aesKey">
+        <el-input v-model="formData.aesKey" :placeholder="t('mp.pleaseEnterMessageEncryptionKey')" />
       </el-form-item>
       <el-form-item :label="t('public.remark')" prop="remark">
         <el-input v-model="formData.remark" :placeholder="t('public.pleaseEnterNotes')" type="textarea" />

+ 1 - 1
src/views/mp/components/wx-account-select/main.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-select v-model="account.id" placeholder="请选择公众号" class="!w-240px" @change="onChanged">
+  <el-select v-model="account.id" :placeholder="t('mp.pleaseSelectTheWeChatOfficialAccount')" class="!w-240px" @change="onChanged">
     <el-option v-for="item in accountList" :key="item.id" :label="item.name" :value="item.id" />
   </el-select>
 </template>

+ 4 - 4
src/views/mp/components/wx-material-select/main.vue

@@ -14,7 +14,7 @@
           <p class="item-name">{{ item.name }}</p>
           <el-row class="ope-row">
             <el-button type="success" @click="selectMaterialFun(item)">
-              选择
+              {{ t('mall.select') }}
               <Icon icon="ep:circle-check" />
             </el-button>
           </el-row>
@@ -49,7 +49,7 @@
         <el-table-column :label="t('public.operate')" align="center" fixed="right">
           <template #default="scope">
             <el-button type="primary" link @click="selectMaterialFun(scope.row)"
-              >选择
+              >{{ t('mall.select') }}
               <Icon icon="ep:plus" />
             </el-button>
           </template>
@@ -91,7 +91,7 @@
         >
           <template #default="scope">
             <el-button type="primary" link @click="selectMaterialFun(scope.row)"
-              >选择
+              >{{ t('mall.select') }}
               <Icon icon="akar-icons:circle-plus" />
             </el-button>
           </template>
@@ -113,7 +113,7 @@
             <WxNews :articles="item.content.newsItem" />
             <el-row class="ope-row">
               <el-button type="success" @click="selectMaterialFun(item)">
-                选择
+                {{ t('mall.select') }}
                 <Icon icon="ep:circle-check" />
               </el-button>
             </el-row>

+ 11 - 11
src/views/mp/components/wx-msg/components/MsgEvent.vue

@@ -1,41 +1,41 @@
 <template>
   <div>
     <div v-if="item.event === 'subscribe'">
-      <el-tag type="success">关注</el-tag>
+      <el-tag type="success">{{t('mp.follow')}}</el-tag>
     </div>
     <div v-else-if="item.event === 'unsubscribe'">
-      <el-tag type="danger">取消关注</el-tag>
+      <el-tag type="danger">{{t('mp.unfollow')}}</el-tag>
     </div>
     <div v-else-if="item.event === 'CLICK'">
-      <el-tag>点击菜单</el-tag>
+      <el-tag>{{t('mp.clickMenu')}}</el-tag>
       【{{ item.eventKey }}】
     </div>
     <div v-else-if="item.event === 'VIEW'">
-      <el-tag>点击菜单链接</el-tag>
+      <el-tag>{{t('mp.clickMenuLink')}}</el-tag>
       【{{ item.eventKey }}】
     </div>
     <div v-else-if="item.event === 'scancode_waitmsg'">
-      <el-tag>扫码结果</el-tag>
+      <el-tag>{{t('mp.scanCodeResult')}}</el-tag>
       【{{ item.eventKey }}】
     </div>
     <div v-else-if="item.event === 'scancode_push'">
-      <el-tag>扫码结果</el-tag>
+      <el-tag>{{t('mp.scanCodeResult')}}</el-tag>
       【{{ item.eventKey }}】
     </div>
     <div v-else-if="item.event === 'pic_sysphoto'">
-      <el-tag>系统拍照发图</el-tag>
+      <el-tag>{{t('mp.systemTakePhotoAndSendImage')}}</el-tag>
     </div>
     <div v-else-if="item.event === 'pic_photo_or_album'">
-      <el-tag>拍照或者相册</el-tag>
+      <el-tag>{{t('mp.takePhotoOrSelectFromAlbum')}}</el-tag>
     </div>
     <div v-else-if="item.event === 'pic_weixin'">
-      <el-tag>微信相册</el-tag>
+      <el-tag>{{t('mp.wechatAlbum')}}</el-tag>
     </div>
     <div v-else-if="item.event === 'location_select'">
-      <el-tag>选择地理位置</el-tag>
+      <el-tag>{{t('mp.selectLocation')}}</el-tag>
     </div>
     <div v-else>
-      <el-tag type="danger">未知事件类型</el-tag>
+      <el-tag type="danger">{{t('mp.unknownEventType')}}</el-tag>
     </div>
   </div>
 </template>

+ 1 - 1
src/views/mp/components/wx-msg/components/MsgList.vue

@@ -48,7 +48,7 @@ const getAvatar = (sendFrom: SendFrom) =>
   sendFrom === SendFrom.User ? props.user.avatar : avatarWechat
 
 const getNickname = (sendFrom: SendFrom) =>
-  sendFrom === SendFrom.User ? props.user.nickname : '公众号'
+  sendFrom === SendFrom.User ? props.user.nickname : t('mall.officialAccount')
 </script>
 
 <style lang="scss" scoped>

+ 4 - 4
src/views/mp/components/wx-msg/main.vue

@@ -12,10 +12,10 @@
       <div v-loading="loading"></div>
       <div v-if="!loading">
         <div class="el-table__empty-block" v-if="hasMore" @click="loadMore"
-          ><span class="el-table__empty-text">点击加载更多</span></div
+          ><span class="el-table__empty-text">{{t('mp.clickToLoadMore')}}</span></div
         >
         <div class="el-table__empty-block" v-if="!hasMore"
-          ><span class="el-table__empty-text">没有更多了</span></div
+          ><span class="el-table__empty-text">{{t('mp.thereIsNoMore')}}</span></div
         >
       </div>
 
@@ -25,7 +25,7 @@
 
     <div class="msg-send" v-loading="sendLoading">
       <WxReplySelect ref="replySelectRef" v-model="reply" />
-      <el-button type="success" class="send-but" @click="sendMsg">发送(S)</el-button>
+      <el-button type="success" class="send-but" @click="sendMsg">{{t('mp.sends')}}</el-button>
     </div>
   </ContentWrap>
 </template>
@@ -102,7 +102,7 @@ const sendMsg = async () => {
     reply.value.articles.length > 1
   ) {
     reply.value.articles = [reply.value.articles[0]]
-    message.success('图文消息条数限制在 1 条以内,已默认发送第一条')
+    message.success(t('mp.theNumberofGraphicMessagesIsLimitedto1'))
   }
 
   const data = await sendMessage({ userId: props.userId, ...reply.value })

+ 6 - 5
src/views/mp/components/wx-reply/components/TabImage.vue

@@ -15,10 +15,10 @@
       <!-- 选择素材 -->
       <el-col :span="12" class="col-select">
         <el-button type="success" @click="showDialog = true">
-          素材库选择 <Icon icon="ep:circle-check" />
+          {{t('mp.selectFromMaterialLibrary')}} <Icon icon="ep:circle-check" />
         </el-button>
         <el-dialog
-          title="选择图片"
+          :title="t('cropper.selectImage')"
           v-model="showDialog"
           width="90%"
           append-to-body
@@ -43,10 +43,10 @@
           :before-upload="beforeImageUpload"
           :on-success="onUploadSuccess"
         >
-          <el-button type="primary">上传图片</el-button>
+          <el-button type="primary">{{t('common.uploadImage')}}</el-button>
           <template #tip>
             <span>
-              <div class="el-upload__tip">支持 bmp/png/jpeg/jpg/gif 格式,大小不超过 2M</div>
+              <div class="el-upload__tip">{{t('mp.supportsBmpPngJpegJpgGifFormatsSizeNotExceeding2M')}}</div>
             </span>
           </template>
         </el-upload>
@@ -62,6 +62,7 @@ import type { UploadRawFile } from 'element-plus'
 import { getAccessToken } from '@/utils/auth'
 import { Reply } from './types'
 const message = useMessage()
+const { t } = useI18n()
 
 const UPLOAD_URL = import.meta.env.VITE_BASE_URL + '/admin-api/mp/material/upload-temporary'
 const HEADERS = { Authorization: 'Bearer ' + getAccessToken() } // 设置上传的请求头部
@@ -90,7 +91,7 @@ const beforeImageUpload = (rawFile: UploadRawFile) => useBeforeUpload(UploadType
 
 const onUploadSuccess = (res: any) => {
   if (res.code !== 0) {
-    message.error('上传出错:' + res.msg)
+    message.error(t('mp.uploadError') + res.msg)
     return false
   }
 

+ 8 - 7
src/views/mp/components/wx-reply/components/TabMusic.vue

@@ -21,10 +21,10 @@
                   :on-success="onUploadSuccess"
                 >
                   <template #trigger>
-                    <el-button type="primary" link>本地上传</el-button>
+                    <el-button type="primary" link>{{t('mp.uploadLocally')}}</el-button>
                   </template>
                   <el-button type="primary" link @click="showDialog = true" style="margin-left: 5px"
-                    >素材库选择
+                    >{{t('mp.selectFromMaterialLibrary')}}
                   </el-button>
                 </el-upload>
               </div>
@@ -32,7 +32,7 @@
           </el-col>
         </el-row>
         <el-dialog
-          title="选择图片"
+          :title="t('cropper.selectImage')"
           v-model="showDialog"
           width="80%"
           append-to-body
@@ -48,13 +48,13 @@
       <el-col :span="18">
         <el-input v-model="reply.title" :placeholder="t('mall.pleaseEnterTitle')" />
         <div style="margin: 20px 0"></div>
-        <el-input v-model="reply.description" placeholder="请输入描述" />
+        <el-input v-model="reply.description" :placeholder="t('mp.pleaseEnterDescription')" />
       </el-col>
     </el-row>
     <div style="margin: 20px 0"></div>
-    <el-input v-model="reply.musicUrl" placeholder="请输入音乐链接" />
+    <el-input v-model="reply.musicUrl" :placeholder="t('mp.pleaseEnterTheMusicLink')" />
     <div style="margin: 20px 0"></div>
-    <el-input v-model="reply.hqMusicUrl" placeholder="请输入高质量音乐链接" />
+    <el-input v-model="reply.hqMusicUrl" :placeholder="t('mp.pleaseEnterTheHighQualityMusicLink')" />
   </div>
 </template>
 
@@ -64,6 +64,7 @@ import type { UploadRawFile } from 'element-plus'
 import { UploadType, useBeforeUpload } from '@/views/mp/hooks/useUpload'
 import { getAccessToken } from '@/utils/auth'
 import { Reply } from './types'
+import { t } from '@wangeditor/editor'
 
 const message = useMessage()
 
@@ -94,7 +95,7 @@ const beforeImageUpload = (rawFile: UploadRawFile) => useBeforeUpload(UploadType
 
 const onUploadSuccess = (res: any) => {
   if (res.code !== 0) {
-    message.error('上传出错:' + res.msg)
+    message.error(t('mp.uploadError') + res.msg)
     return false
   }
 

+ 3 - 2
src/views/mp/components/wx-reply/components/TabNews.vue

@@ -14,13 +14,13 @@
         <el-row style="text-align: center" align="middle">
           <el-col :span="24">
             <el-button type="success" @click="showDialog = true">
-              {{ newsType === NewsType.Published ? '选择已发布图文' : '选择草稿箱图文' }}
+              {{ newsType === NewsType.Published ? t('mp.selectThePublishedGraphic') : t('mp.selectTheGraphicintheDraftBox') }}
               <Icon icon="ep:circle-check" />
             </el-button>
           </el-col>
         </el-row>
       </el-col>
-      <el-dialog title="选择图文" v-model="showDialog" width="90%" append-to-body destroy-on-close>
+      <el-dialog :title="t('mp.selectGraphic')" v-model="showDialog" width="90%" append-to-body destroy-on-close>
         <WxMaterialSelect
           type="news"
           :account-id="reply.accountId"
@@ -33,6 +33,7 @@
 </template>
 
 <script lang="ts" setup>
+const { t } = useI18n()
 import WxNews from '@/views/mp/components/wx-news'
 import WxMaterialSelect from '@/views/mp/components/wx-material-select'
 import { Reply, NewsType } from './types'

+ 2 - 1
src/views/mp/components/wx-reply/components/TabText.vue

@@ -1,8 +1,9 @@
 <template>
-  <el-input type="textarea" :rows="5" placeholder="请输入内容" v-model="content" />
+  <el-input type="textarea" :rows="5" :placeholder="t('mp.pleaseEnterContent')" v-model="content" />
 </template>
 
 <script lang="ts" setup>
+const { t } = useI18n()
 const props = defineProps<{
   modelValue?: string | null
 }>()

+ 5 - 4
src/views/mp/components/wx-reply/components/TabVideo.vue

@@ -2,7 +2,7 @@
   <div>
     <el-row>
       <el-input v-model="reply.title" class="input-margin-bottom" :placeholder="t('mall.pleaseEnterTitle')" />
-      <el-input class="input-margin-bottom" v-model="reply.description" placeholder="请输入描述" />
+      <el-input class="input-margin-bottom" v-model="reply.description" :placeholder="t('mp.pleaseEnterDescription')" />
       <el-row class="ope-row" justify="center">
         <WxVideoPlayer v-if="reply.url" :url="reply.url" />
       </el-row>
@@ -11,7 +11,7 @@
           <!-- 选择素材 -->
           <el-col :span="12">
             <el-button type="success" @click="showDialog = true">
-              素材库选择 <Icon icon="ep:circle-check" />
+              {{t('mp.selectFromMaterialLibrary')}} <Icon icon="ep:circle-check" />
             </el-button>
             <el-dialog
               title="选择视频"
@@ -39,7 +39,7 @@
               :before-upload="beforeVideoUpload"
               :on-success="onUploadSuccess"
             >
-              <el-button type="primary">新建视频 <Icon icon="ep:upload" /></el-button>
+              <el-button type="primary">{{t('mp.createNewVideo')}} <Icon icon="ep:upload" /></el-button>
             </el-upload>
           </el-col>
         </el-row>
@@ -55,6 +55,7 @@ import type { UploadRawFile } from 'element-plus'
 import { UploadType, useBeforeUpload } from '@/views/mp/hooks/useUpload'
 import { getAccessToken } from '@/utils/auth'
 import { Reply } from './types'
+const { t } = useI18n()
 
 const message = useMessage()
 
@@ -85,7 +86,7 @@ const beforeVideoUpload = (rawFile: UploadRawFile) => useBeforeUpload(UploadType
 
 const onUploadSuccess = (res: any) => {
   if (res.code !== 0) {
-    message.error('上传出错:' + res.msg)
+    message.error(t('mp.uploadError') + res.msg)
     return false
   }
 

+ 7 - 5
src/views/mp/components/wx-reply/components/TabVoice.vue

@@ -13,10 +13,10 @@
       <!-- 选择素材 -->
       <el-col :span="12" class="col-select">
         <el-button type="success" @click="showDialog = true">
-          素材库选择<Icon icon="ep:circle-check" />
+          {{t('mp.selectFromMaterialLibrary')}}<Icon icon="ep:circle-check" />
         </el-button>
         <el-dialog
-          title="选择语音"
+          :title="t('mp.selectTheVoice')"
           v-model="showDialog"
           width="90%"
           append-to-body
@@ -41,10 +41,10 @@
           :before-upload="beforeVoiceUpload"
           :on-success="onUploadSuccess"
         >
-          <el-button type="primary">点击上传</el-button>
+          <el-button type="primary">{{t('mp.clickToUpload')}}</el-button>
           <template #tip>
             <div class="el-upload__tip">
-              格式支持 mp3/wma/wav/amr,文件大小不超过 2M,播放长度不超过 60s
+              {{t('mp.formatSupportsMp3WmaWavAmrFileSizeNotExceeding2MPlaybackLengthNotExceeding60s')}}
             </div>
           </template>
         </el-upload>
@@ -59,6 +59,8 @@ import { UploadType, useBeforeUpload } from '@/views/mp/hooks/useUpload'
 import type { UploadRawFile } from 'element-plus'
 import { getAccessToken } from '@/utils/auth'
 import { Reply } from './types'
+const { t } = useI18n()
+
 const message = useMessage()
 
 const UPLOAD_URL = import.meta.env.VITE_BASE_URL + '/admin-api/mp/material/upload-temporary'
@@ -88,7 +90,7 @@ const beforeVoiceUpload = (rawFile: UploadRawFile) => useBeforeUpload(UploadType
 
 const onUploadSuccess = (res: any) => {
   if (res.code !== 0) {
-    message.error('上传出错:' + res.msg)
+    message.error(t('mp.uploadError') + res.msg)
     return false
   }
 

+ 6 - 6
src/views/mp/components/wx-reply/main.vue

@@ -12,7 +12,7 @@
     <!-- 类型 1:文本 -->
     <el-tab-pane :name="ReplyType.Text">
       <template #label>
-        <el-row align="middle"><Icon icon="ep:document" /> 文本</el-row>
+        <el-row align="middle"><Icon icon="ep:document" /> {{t('mp.text')}}</el-row>
       </template>
       <TabText v-model="reply.content" />
     </el-tab-pane>
@@ -20,7 +20,7 @@
     <!-- 类型 2:图片 -->
     <el-tab-pane :name="ReplyType.Image">
       <template #label>
-        <el-row align="middle"><Icon icon="ep:picture" class="mr-5px" /> 图片</el-row>
+        <el-row align="middle"><Icon icon="ep:picture" class="mr-5px" /> {{t('mp.image')}}</el-row>
       </template>
       <TabImage v-model="reply" />
     </el-tab-pane>
@@ -28,7 +28,7 @@
     <!-- 类型 3:语音 -->
     <el-tab-pane :name="ReplyType.Voice">
       <template #label>
-        <el-row align="middle"><Icon icon="ep:phone" /> 语音</el-row>
+        <el-row align="middle"><Icon icon="ep:phone" /> {{t('mp.voice')}}</el-row>
       </template>
       <TabVoice v-model="reply" />
     </el-tab-pane>
@@ -36,7 +36,7 @@
     <!-- 类型 4:视频 -->
     <el-tab-pane :name="ReplyType.Video">
       <template #label>
-        <el-row align="middle"><Icon icon="ep:share" /> 视频</el-row>
+        <el-row align="middle"><Icon icon="ep:share" /> {{t('mp.video')}}</el-row>
       </template>
       <TabVideo v-model="reply" />
     </el-tab-pane>
@@ -44,7 +44,7 @@
     <!-- 类型 5:图文 -->
     <el-tab-pane :name="ReplyType.News">
       <template #label>
-        <el-row align="middle"><Icon icon="ep:reading" /> 图文</el-row>
+        <el-row align="middle"><Icon icon="ep:reading" /> {{t('mp.graphic')}}</el-row>
       </template>
       <TabNews v-model="reply" :news-type="newsType" />
     </el-tab-pane>
@@ -52,7 +52,7 @@
     <!-- 类型 6:音乐 -->
     <el-tab-pane :name="ReplyType.Music">
       <template #label>
-        <el-row align="middle"><Icon icon="ep:service" />音乐</el-row>
+        <el-row align="middle"><Icon icon="ep:service" />{{t('mp.music')}}</el-row>
       </template>
       <TabMusic v-model="reply" />
     </el-tab-pane>

+ 2 - 2
src/views/mp/components/wx-video-play/main.vue

@@ -15,11 +15,11 @@
     <!-- 提示 -->
     <div>
       <Icon icon="ep:video-play" :size="32" class="mr-5px" />
-      <p class="text-sm">点击播放视频</p>
+      <p class="text-sm">{{t('mp.clickToPlayTheVideo')}}</p>
     </div>
 
     <!-- 弹窗播放 -->
-    <el-dialog v-model="dialogVideo" title="视频播放" append-to-body>
+    <el-dialog v-model="dialogVideo" :title="t('mp.videoPlayback')" append-to-body>
       <video-player
         v-if="dialogVideo"
         class="video-player vjs-big-play-centered"

+ 2 - 2
src/views/mp/components/wx-voice-play/main.vue

@@ -14,10 +14,10 @@
     <el-icon>
       <Icon v-if="playing !== true" icon="ep:video-play" :size="32" />
       <Icon v-else icon="ep:video-pause" :size="32" />
-      <span class="amr-duration" v-if="duration">{{ duration }} </span>
+      <span class="amr-duration" v-if="duration">{{ duration }} {{t('public.scord')}}</span>
     </el-icon>
     <div v-if="content">
-      <el-tag type="success" size="small">语音识别</el-tag>
+      <el-tag type="success" size="small">{{t('mp.voiceRecognition')}}</el-tag>
       {{ content }}
     </div>
   </div>

+ 1 - 1
src/views/mp/draft/components/CoverSelect.vue

@@ -43,7 +43,7 @@
         </el-upload>
       </div>
       <el-dialog
-        title="选择图片"
+        :title="t('cropper.selectImage')"
         v-model="showImageDialog"
         width="80%"
         append-to-body

+ 1 - 1
src/views/mp/draft/components/NewsForm.vue

@@ -105,7 +105,7 @@
             <CoverSelect v-model="activeNewsItem" :is-first="activeNewsIndex === 0" />
           </el-col>
           <el-col :span="12">
-            <p>摘要:</p>
+            <p>{{t('mp.abstract')}}:</p>
             <el-input
               :rows="8"
               type="textarea"

+ 8 - 8
src/views/mp/material/index.vue

@@ -13,14 +13,14 @@
       <!-- tab 1:图片  -->
       <el-tab-pane :name="UploadType.Image">
         <template #label>
-          <el-row align="middle"> <Icon icon="ep:picture" />图片 </el-row>
+          <el-row align="middle"> <Icon icon="ep:picture" />{{t('mp.image')}} </el-row>
         </template>
         <UploadFile
           v-hasPermi="['mp:material:upload-permanent']"
           :type="UploadType.Image"
           @uploaded="getList"
         >
-          支持 bmp/png/jpeg/jpg/gif 格式,大小不超过 2M
+        {{ t('mp.supportsBmpPngJpegJpgGifFormatsSizeNotExceeding2M') }}
         </UploadFile>
         <!-- 列表 -->
         <ImageTable :loading="loading" :list="list" @delete="handleDelete" />
@@ -36,14 +36,14 @@
       <!-- tab 2:语音  -->
       <el-tab-pane :name="UploadType.Voice">
         <template #label>
-          <el-row align="middle"> <Icon icon="ep:microphone" />语音 </el-row>
+          <el-row align="middle"> <Icon icon="ep:microphone" />{{t('mp.voice')}} </el-row>
         </template>
         <UploadFile
           v-hasPermi="['mp:material:upload-permanent']"
           :type="UploadType.Voice"
           @uploaded="getList"
         >
-          格式支持 mp3/wma/wav/amr,文件大小不超过 2M,播放长度不超过 60s
+        {{ t('mp.formatSupportsMp3WmaWavAmrFileSizeNotExceeding2MPlaybackLengthNotExceeding60s') }}
         </UploadFile>
         <!-- 列表 -->
         <VoiceTable :list="list" :loading="loading" @delete="handleDelete" />
@@ -59,14 +59,14 @@
       <!-- tab 3:视频 -->
       <el-tab-pane :name="UploadType.Video">
         <template #label>
-          <el-row align="middle"> <Icon icon="ep:video-play" /> 视频 </el-row>
+          <el-row align="middle"> <Icon icon="ep:video-play" />{{t('mp.video')}}  </el-row>
         </template>
         <el-button
           v-hasPermi="['mp:material:upload-permanent']"
           type="primary"
           plain
           @click="showCreateVideo = true"
-          >新建视频</el-button
+          >{{t('mp.createNewVideo')}}</el-button
         >
         <!-- 新建视频的弹窗 -->
         <UploadVideo v-model="showCreateVideo" />
@@ -153,8 +153,8 @@ const onTabChange = () => {
 
 /** 处理删除操作 */
 const handleDelete = async (id: number) => {
-  await message.confirm('此操作将永久删除该文件, 是否继续?')
+  await message.confirm(t('mp.thisOperationWillPermanentlyDeleteTheFileAreYouSureToContinue'))
   await MpMaterialApi.deletePermanentMaterial(id)
-  message.alertSuccess('删除成功')
+  message.alertSuccess(t('mp.deletionSucceeded'))
 }
 </script>

+ 1 - 1
src/views/mp/menu/components/MenuEditor.vue

@@ -40,7 +40,7 @@
         </div>
         <div class="configur_content" v-if="menu.type === 'view'">
           <span>{{t('mp.jumpLink')}}:</span>
-          <el-input class="input_width" v-model="menu.url" :placeholder="t('mp.请输入链接')" clearable />
+          <el-input class="input_width" v-model="menu.url" :placeholder="t('mp.pleaseEnterLink')" clearable />
         </div>
         <div class="configur_content" v-if="menu.type === 'miniprogram'">
           <div class="applet">

+ 1 - 1
src/views/mp/user/UserForm.vue

@@ -1,5 +1,5 @@
 <template>
-  <Dialog v-model="dialogVisible" title="修改">
+  <Dialog v-model="dialogVisible" :title="t('public.update')">
     <el-form
       ref="formRef"
       v-loading="formLoading"

+ 1 - 1
src/views/score/order/OrderDetail.vue

@@ -12,7 +12,7 @@
           <el-image style="width: 40px; height: 40px" :src="product.image" :fit="fit" />
         </el-descriptions-item>
         <el-descriptions-item :label="t('score.productName')">{{ product.title }}</el-descriptions-item>
-        <el-descriptions-item :label="t('score.price')">{{ product.score }}积分</el-descriptions-item>
+        <el-descriptions-item :label="t('score.price')">{{ product.score }}{{t('mp.points')}}</el-descriptions-item>
         <!-- <el-descriptions-item :label="t('score.us')收货地址">1111</el-descriptions-item> -->
       </el-descriptions>
       <el-descriptions :title="t('score.orderInformation')" :column="2">

+ 1 - 1
src/views/system/mail/template/MailTemplateSendForm.vue

@@ -1,5 +1,5 @@
 <template>
-  <Dialog v-model="dialogVisible" title="测试">
+  <Dialog v-model="dialogVisible" :title="t('system.test')">
     <el-form
       ref="formRef"
       v-loading="formLoading"

+ 4 - 4
src/views/system/notify/my/index.vue

@@ -57,7 +57,7 @@
       @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" :selectable="selectable" :reserve-selection="true" />
-      <el-table-column label="发送人" align="center" prop="templateNickname" width="180" />
+      <el-table-column :label="t('system.sender')" align="center" prop="templateNickname" width="180" />
       <el-table-column
         :label="t('mp.sendTime')"
         align="center"
@@ -95,7 +95,7 @@
             :type="scope.row.readStatus ? 'primary' : 'warning'"
             @click="openDetail(scope.row)"
           >
-            {{ scope.row.readStatus ? '详情' : '已读' }}
+            {{ scope.row.readStatus ? t('common.detail') : t('common.read') }}
           </el-button>
         </template>
       </el-table-column>
@@ -180,7 +180,7 @@ const handleReadOne = async (id) => {
 /** 标记全部站内信已读 **/
 const handleUpdateAll = async () => {
   await NotifyMessageApi.updateAllNotifyMessageRead()
-  message.success('全部已读成功!')
+  message.success(t('system.allHaveBeenMarkedAsReadSuccessfully'))
   tableRef.value.clearSelection()
   await getList()
 }
@@ -191,7 +191,7 @@ const handleUpdateList = async () => {
     return
   }
   await NotifyMessageApi.updateNotifyMessageRead(selectedIds.value)
-  message.success('批量已读成功!')
+  message.success(t('system.batchMarkingAsReadWasSuccessful'))
   tableRef.value.clearSelection()
   await getList()
 }

+ 1 - 1
src/views/system/notify/template/NotifyTemplateSendForm.vue

@@ -1,5 +1,5 @@
 <template>
-  <Dialog v-model="dialogVisible" title="测试发送" :max-height="500">
+  <Dialog v-model="dialogVisible" :title="t('system.testSending')" :max-height="500">
     <el-form
       ref="formRef"
       v-loading="formLoading"

+ 1 - 1
src/views/system/role/RoleAssignMenuForm.vue

@@ -7,7 +7,7 @@
       <el-form-item :label="t('system.roleIdentity')">
         <el-tag>{{ formData.code }}</el-tag>
       </el-form-item>
-      <el-form-item label="菜单权限">
+      <el-form-item :label="t('system.menuPermissions')">
         <el-card class="cardHeight">
           <template #header>
             {{ t('system.selectAllDeselectAll') }}