Преглед изворни кода

locale(src): update some translations

crush394 пре 4 година
родитељ
комит
eb260193f7
38 измењених фајлова са 541 додато и 187 уклоњено
  1. 0 6
      src/app.tsx
  2. 71 34
      src/locales/en-US/pages.ts
  3. 67 28
      src/locales/zh-CN/pages.ts
  4. 0 2
      src/pages/cloud/Onenet/index.tsx
  5. 2 2
      src/pages/device/Alarm/index.tsx
  6. 3 3
      src/pages/device/Category/index.tsx
  7. 9 9
      src/pages/device/Command/index.tsx
  8. 3 3
      src/pages/device/Firmware/index.tsx
  9. 16 1
      src/pages/device/Instance/Detail/Config/Tags/index.tsx
  10. 68 9
      src/pages/device/Instance/Detail/Info/index.tsx
  11. 30 7
      src/pages/device/Instance/Detail/Metadata/ItemDetail/index.tsx
  12. 30 6
      src/pages/device/Instance/Detail/Metadata/ItemParam/index.tsx
  13. 45 6
      src/pages/device/Instance/Detail/Metadata/index.tsx
  14. 13 2
      src/pages/device/Instance/Detail/Running/index.tsx
  15. 12 2
      src/pages/device/Instance/Detail/index.tsx
  16. 6 6
      src/pages/device/Instance/index.tsx
  17. 2 2
      src/pages/device/Product/Detail/BaseInfo/index.tsx
  18. 75 11
      src/pages/device/Product/Detail/index.tsx
  19. 8 3
      src/pages/device/Product/index.tsx
  20. 2 2
      src/pages/edge/Device/index.tsx
  21. 21 6
      src/pages/edge/Product/index.tsx
  22. 1 1
      src/pages/link/Gateway/index.tsx
  23. 1 1
      src/pages/link/Protocol/index.tsx
  24. 2 2
      src/pages/log/Access/index.tsx
  25. 1 1
      src/pages/log/System/index.tsx
  26. 21 6
      src/pages/media/Cascade/index.tsx
  27. 6 3
      src/pages/media/Device/index.tsx
  28. 1 1
      src/pages/notice/Config/index.tsx
  29. 1 1
      src/pages/rule-engine/Scene/index.tsx
  30. 2 2
      src/pages/simulator/Device/index.tsx
  31. 3 3
      src/pages/system/DataSource/index.tsx
  32. 2 2
      src/pages/system/OpenAPI/index.tsx
  33. 2 2
      src/pages/system/Permission/index.tsx
  34. 5 2
      src/pages/system/Role/index.tsx
  35. 2 2
      src/pages/system/Tenant/index.tsx
  36. 5 5
      src/pages/system/User/index.tsx
  37. 2 2
      src/pages/visualization/Configuration/index.tsx
  38. 1 1
      src/pages/visualization/Screen/index.tsx

+ 0 - 6
src/app.tsx

@@ -148,12 +148,6 @@ export const layout: RunTimeLayoutConfig = ({ initialState }) => {
           <Link to="/umi/plugin/openapi" target="_blank">
             <LinkOutlined />
             <span>OpenAPI 文档</span>
-            {/* <span>
-          { intl.formatMessage({
-                  id: 'pages.searchTable.new',
-                  defaultMessage: '新建',
-                 })}
-          </span> */}
           </Link>,
           <Link to="/~docs">
             <BookOutlined />

+ 71 - 34
src/locales/en-US/pages.ts

@@ -26,6 +26,7 @@ export default {
   'pages.data.option.error': 'Operation failed!',
   'pages.data.option.detail': 'Detail',
   'pages.data.option.download': 'Download',
+  'pages.data.option.record': 'Records',
   'pages.searchTable.new': 'New',
   'pages.searchTable.titleStatus': 'Status',
   'pages.searchTable.titleStatus.all': 'All',
@@ -34,11 +35,13 @@ export default {
   'pages.searchTable.titleOption': 'Option',
   'pages.table.username': 'userName',
   'pages.table.name': 'Name',
-  'pages.table.equipmentName': 'Equipment Name',
+  'pages.table.deviceName': 'Device Name',
   'pages.table.describe': 'Describe',
   'pages.table.description': 'Explain',
   'pages.table.type': 'Type',
   'pages.table.provider': 'Provider',
+  'pages.table.deviceId': 'Device ID',
+  'pages.table.productName': 'Product Name',
   // 统计分析
   'pages.analysis.cpu': 'CPU Usage',
   'pages.analysis.jvm': 'JVM Memory',
@@ -49,8 +52,8 @@ export default {
   'pages.system.user.name': 'name',
   'pages.system.user.password': 'password',
   'pages.system.user.confirmPassword': 'confirmPassword',
-  'pages.system.userName.tip': 'If the username is too long, it will automatically shrink',
-  'pages.system.user.name.tips': 'Names that are too long automatically shrink',
+  'pages.system.userName.tips': 'If the username is too long, it will automatically shrink',
+  'pages.system.name.tips': 'Names that are too long automatically shrink',
   // 角色管理
   'pages.system.role': 'Role',
   'pages.system.role.id': 'ID',
@@ -69,8 +72,12 @@ export default {
   'pages.system.permission.addDataView': 'Data View',
   // 系统设置-机构管理
   'pages.system.org': 'Organization',
-  'pages.system.org.code': 'Code',
+  'pages.system.org.encoding': 'Code',
   'pages.system.org.count': 'Count',
+  'pages.system.org.add.orderNumber': 'Order Number',
+  'pages.system.org.option.bindUser': 'Bind User',
+  'pages.system.org.option.permission': 'Permission Distribution',
+  'pages.system.org.option.add': 'Add the lower',
   // 系统设置-第三方平台
   'pages.system.openApi': 'OpenAPI',
   'pages.system.openApi.passWord': 'passWord',
@@ -90,46 +97,84 @@ export default {
   'pages.device.product.status.unpublished': 'Unpublished',
   'pages.device.product.status.all': 'All',
   'pages.device.productDetail': 'ProductDetail',
+  'pages.device.productDetail.id': 'Product ID',
+  'pages.device.productDetail.classifiedName': 'Classified Name',
+  'pages.device.productDetail.protocolName': 'Message Protocol',
+  'pages.device.productDetail.transportProtocol': 'Link Protocol',
+  'pages.device.productDetail.createTime': 'Create Time',
+  'pages.device.productDetail.base': 'Configuration Information ',
+  'pages.device.productDetail.metadata': 'Metadata',
+  'pages.device.productDetail.alarm': 'Alarm Set',
+  'pages.device.productDetail.setting': 'Application Settings',
+  'pages.device.productDetail.disable': 'Disable',
   // 设备管理-产品分类
   'pages.device.category': 'Product Classification',
   'pages.device.category.id': 'Classification ID',
-  'pages.device.category.logotype': 'Logotype',
+  'pages.device.category.key': 'Key',
   'pages.device.category.name': 'Classification Name',
+  'pages.device.category.addClass': 'Add Subclasses',
   // 设备管理-设备
   'pages.device.instance': 'Equipment',
   'pages.device.instance.management': 'Equipment Management',
-  'pages.device.instance.productName': 'Product Name',
   'pages.device.instance.registrationTime': 'Registration Time',
-  'pages.device.instance.status.notEnabled': 'Not Enabled',
+  'pages.device.instance.status.notActive': 'Not Active',
   'pages.device.instance.status.offLine': 'Off Line',
   'pages.device.instance.status.onLine': 'On Line',
-  'pages.device.instance.describe': 'Explain',
+  'pages.device.instanceDetail.deviceType': 'Device Type',
+  'pages.device.instanceDetail.transportProtocol': 'Link Protocol',
+  'pages.device.instanceDetail.protocolName': 'Message Protocol',
+  'pages.device.instanceDetail.createTime': 'Create Time',
+  'pages.device.instanceDetail.registerTime': 'Register Time',
+  'pages.device.instanceDetail.lastTimeOnline': 'Last Time Online',
+  'pages.device.instanceDetail.property': 'Property',
+  'pages.device.instanceDetail.events': 'Events',
+  'pages.device.instanceDetail.function': 'Functions',
+  'pages.device.instanceDetail.tags': 'Tags',
+  'pages.device.instanceDetail.save': 'Save',
+  'pages.device.instanceDetail.detail': 'Detail',
+  'pages.device.instanceDetail.detail.tags': 'Tags',
+  'pages.device.instanceDetail.detail.addTags': 'Add Tags',
+  'pages.device.instanceDetail.running': 'Running',
+  'pages.device.instanceDetail.running.status': 'Device Status',
+  'pages.device.instanceDetail.running.onlineTime': 'Online Time',
+  'pages.device.instanceDetail.metadata': 'Metadata',
+  'pages.device.instanceDetail.metadata.logotype': 'Logotype',
+  'pages.device.instanceDetail.metadata.attributeName': 'Attribute Name',
+  'pages.device.instanceDetail.metadata.parameterName': 'Parameter Name',
+  'pages.device.instanceDetail.metadata.dataType': 'Data Type',
+  'pages.device.instanceDetail.metadata.readOnly': 'ReadOnly',
+  'pages.device.instanceDetail.metadata.unit': 'Unit',
+  'pages.device.instanceDetail.metadata.readOnly.yes': 'Yes',
+  'pages.device.instanceDetail.metadata.readOnly.no': 'No',
+  'pages.device.instanceDetail.functions': 'Functions',
+  'pages.device.instanceDetail.log': 'Log',
+  'pages.device.instanceDetail.alarm': 'Alarm',
+  'pages.device.instanceDetail.visualization': 'Visualization',
+  'pages.device.instanceDetail.shadow': 'Shadow',
   // 设备管理-指令下发
   'pages.device.command': 'Command',
-  'pages.device.command.id': 'Device ID',
   'pages.device.command.type': 'Instruction Type',
-  'pages.device.command.type.readAttributes': 'Read Attributes',
-  'pages.device.command.type.setProperties': 'Set Properties',
-  'pages.device.command.type.callAttribute': 'Call Attribute',
+  'pages.device.command.type.readProperty': 'READ_PROPERTY',
+  'pages.device.command.type.writeProperty': 'WRITE_PROPERTY',
+  'pages.device.command.type.invokeFunction': 'INVOKE_FUNCTION',
   'pages.device.command.option.send': 'Resend',
-  'pages.device.command.status.waiting': 'Waiting',
-  'pages.device.command.status.failed ': 'Failed to send',
-  'pages.device.command.status.succeed': 'Sent successfully',
-  'pages.device.command.errorMessage': 'Error Message',
+  'pages.device.command.status.wait': 'Wait',
+  'pages.device.command.status.sendError': 'Send Error',
+  'pages.device.command.status.success': 'Success',
+  'pages.device.command.lastError': 'Last Error',
   'pages.device.command.sendTime': 'Send Time',
   // 设备管理-固件升级
   'pages.device.firmware': 'Firmware',
-  'pages.device.firmware.name': 'Firmware Name',
-  'pages.device.firmware.version': 'Firmware version',
-  'pages.device.firmware.products': 'Products',
-  'pages.device.firmware.signature': 'Signature Method',
-  'pages.device.firmware.creationTime': 'Creation Time',
+  'pages.device.firmware.name': 'Name',
+  'pages.device.firmware.version': 'Version',
+  'pages.device.firmware.productName': 'Product Name',
+  'pages.device.firmware.signMethod': 'Sign Method',
+  'pages.device.firmware.createTime': 'Create Time',
   // 设备管理-告警记录
   'pages.device.alarm': 'Alarm',
-  'pages.device.alarm.id': 'Device ID',
   'pages.device.alarm.name': 'Alarm Name',
   'pages.device.alarm.time': 'Alarm Time',
-  'pages.device.alarm.status': 'Processing State',
+  'pages.device.alarm.status': 'State',
   'pages.device.alarm.option.dispose': 'Dispose',
   'pages.device.alarm.option.data': 'Alarm Data',
   // 设备接入
@@ -139,15 +184,12 @@ export default {
   'pages.link.gateway': 'Gateway',
   'pages.link.opcua': 'OPC UA',
   'pages.link.type': 'Type',
-  'pages.link.provider': 'Provider',
   'pages.link.option.debug': 'Debug',
   'pages.link.option.record': 'Record',
   // 通知管理
   'pages.notice.config': 'Config',
-  'pages.notice.config.provider': 'Provider',
   'pages.notice.config.type': 'Type',
   'pages.notice.template': 'Template',
-  'pages.notice.option.download': 'Download Configuration',
   'pages.notice.option.debug': 'Debug',
   'pages.notice.option.record': 'Notification Records',
 
@@ -156,7 +198,7 @@ export default {
   'pages.ruleEngine.sqlRule': 'SQL Rule',
   'pages.ruleEngine.sqlRule.time': 'Create Time',
   'pages.ruleEngine.scene': 'Scene',
-  'pages.ruleEngine.scene.trigger': 'Trigger',
+  'pages.ruleEngine.scene.triggers': 'Triggers',
   'pages.ruleEngine.option.detail': 'Detail',
   'pages.ruleEngine.option.start': 'Start',
   'pages.ruleEngine.option.restart': 'Restart',
@@ -167,23 +209,20 @@ export default {
   'pages.visualization.screen': 'Screen',
   'pages.visualization.configuration': 'Configuration',
   'pages.visualization.option.addClass': 'Add Subclasses',
-  'pages.visualization.option.record': 'Notification Records',
   'pages.visualization.option.copy': 'Copy',
 
   // 模拟测试
   'pages.simulator.device': 'Device',
-  'pages.simulator.device.networkType': 'Type',
 
   // 日志管理-访问日志
   'pages.log.access': 'Access Log',
-  'pages.log.access.requestPath': 'Request Path',
-  'pages.log.access.describe': 'Explain',
+  'pages.log.access.url': 'Url',
   'pages.log.access.requestTime': 'Request Time',
   'pages.log.access.requestTimeConsuming': 'Request Time Consuming',
   'pages.log.access.requestUser': 'Request User',
   // 日志管理-系统日志
   'pages.log.system': 'System Log',
-  'pages.log.system.thread': 'Thread',
+  'pages.log.system.threadName': 'Thread Name',
   'pages.log.system.level': 'Level',
   'pages.log.system.logContent': 'Log Content',
   'pages.log.system.serviceName': 'Service Name',
@@ -207,7 +246,6 @@ export default {
   'pages.media.device.manufacturer': 'Manufacturer',
   'pages.media.device.model': 'Model',
   'pages.media.device.firmware': 'Firmware',
-  'pages.media.device.networkType': 'Type',
   'pages.media.device': 'Device',
   'pages.media.reveal': 'Reveal',
   'pages.media.cascade': 'Cascade',
@@ -215,5 +253,4 @@ export default {
   // 边缘网关
   'pages.edge.product': 'Product',
   'pages.edge.device': 'Device',
-  'pages.edge.device.productName': 'Product Name',
 };

+ 67 - 28
src/locales/zh-CN/pages.ts

@@ -26,6 +26,7 @@ export default {
   'pages.data.option.error': '操作失败!',
   'pages.data.option.detail': '详情',
   'pages.data.option.download': '下载',
+  'pages.data.option.record': '通知记录',
   'pages.searchTable.new': '新建',
   'pages.searchTable.titleStatus': '状态',
   'pages.searchTable.titleStatus.all': '全部',
@@ -34,11 +35,13 @@ export default {
   'pages.searchTable.titleOption': '操作',
   'pages.table.username': '用户名',
   'pages.table.name': '名称',
-  'pages.table.equipmentName': '设备名称',
+  'pages.table.deviceName': '设备名称',
   'pages.table.describe': '描述',
   'pages.table.description': '说明',
   'pages.table.provider': '服务商',
-
+  'pages.table.type': '类型',
+  'pages.table.deviceId': '设备ID',
+  'pages.table.productName': '产品名称',
   // 统计分析
   'pages.analysis.cpu': 'CPU使用率',
   'pages.analysis.jvm': 'JVM内存',
@@ -50,7 +53,7 @@ export default {
   'pages.system.user.password': '密码',
   'pages.system.user.confirmPassword': '确认密码',
   'pages.system.userName.tips': '用户名过长会自动收缩',
-  'pages.system.user.name.tips': '姓名过长会自动收缩',
+  'pages.system.name.tips': '姓名过长会自动收缩',
   // 角色管理
   'pages.system.role': '角色管理',
   'pages.system.role.id': '标识',
@@ -69,8 +72,12 @@ export default {
   'pages.system.permission.addDataView': '数据视图',
   // 系统设置-机构管理
   'pages.system.org': '机构管理',
-  'pages.system.org.code': '编码',
+  'pages.system.org.encoding': '编码',
   'pages.system.org.count': '下级数量',
+  'pages.system.org.add.orderNumber': '序号',
+  'pages.system.org.option.bindUser': '绑定用户',
+  'pages.system.org.option.permission': '权限分配',
+  'pages.system.org.option.add': '添加下级',
   // 系统设置-第三方平台
   'pages.system.openApi': '第三方平台',
   'pages.system.openApi.passWord': '密码',
@@ -90,43 +97,81 @@ export default {
   'pages.device.product.status.unpublished': '未发布',
   'pages.device.product.status.all': '全部',
   'pages.device.productDetail': '产品详情',
+  'pages.device.productDetail.id': '产品ID',
+  'pages.device.productDetail.classifiedName': '所属品类',
+  'pages.device.productDetail.protocolName': '消息协议',
+  'pages.device.productDetail.transportProtocol': '链接协议',
+  'pages.device.productDetail.createTime': '创建时间',
+  'pages.device.productDetail.base': '配置信息',
+  'pages.device.productDetail.metadata': '物模型',
+  'pages.device.productDetail.alarm': '告警设置',
+  'pages.device.productDetail.setting': '应用设置',
+  'pages.device.productDetail.disable': '停用',
   // 设备管理-产品分类
   'pages.device.category': '产品分类',
   'pages.device.category.id': '分类ID',
-  'pages.device.category.logotype': '标识',
+  'pages.device.category.key': '标识',
   'pages.device.category.name': '分类名称',
   'pages.device.category.addClass': '添加子分类',
   // 设备管理-设备
   'pages.device.instance': '设备',
   'pages.device.instance.management': '设备管理',
-  'pages.device.instance.productName': '产品名称',
   'pages.device.instance.registrationTime': '注册时间',
-  'pages.device.instance.status.notEnabled': '未启用',
+  'pages.device.instance.status.notActive': '未启用',
   'pages.device.instance.status.offLine': '离线',
   'pages.device.instance.status.onLine': '在线',
+  'pages.device.instanceDetail.deviceType': '设备类型',
+  'pages.device.instanceDetail.transportProtocol': '链接协议',
+  'pages.device.instanceDetail.protocolName': '消息协议',
+  'pages.device.instanceDetail.createTime': '创建时间',
+  'pages.device.instanceDetail.registerTime': '注册时间',
+  'pages.device.instanceDetail.lastTimeOnline': '最后上线时间',
+  'pages.device.instanceDetail.property': '属性',
+  'pages.device.instanceDetail.events': '事件',
+  'pages.device.instanceDetail.function': '功能',
+  'pages.device.instanceDetail.tags': '标签',
+  'pages.device.instanceDetail.save': '保存',
+  'pages.device.instanceDetail.detail': '实例信息',
+  'pages.device.instanceDetail.detail.tags': '标签',
+  'pages.device.instanceDetail.detail.addTags': '添加标签',
+  'pages.device.instanceDetail.running': '运行状态',
+  'pages.device.instanceDetail.running.status': '设备状态',
+  'pages.device.instanceDetail.running.onlineTime': '上线时间',
+  'pages.device.instanceDetail.metadata': '物模型',
+  'pages.device.instanceDetail.metadata.logotype': '属性标识',
+  'pages.device.instanceDetail.metadata.attributeName': '属性名称',
+  'pages.device.instanceDetail.metadata.parameterName': '参数名称',
+  'pages.device.instanceDetail.metadata.dataType': '数据类型',
+  'pages.device.instanceDetail.metadata.readOnly': '只读',
+  'pages.device.instanceDetail.metadata.readOnly.yes': '是',
+  'pages.device.instanceDetail.metadata.readOnly.no': '否',
+  'pages.device.instanceDetail.metadata.unit': '单位',
+  'pages.device.instanceDetail.functions': '设备功能',
+  'pages.device.instanceDetail.log': '日志管理',
+  'pages.device.instanceDetail.alarm': '告警设置',
+  'pages.device.instanceDetail.visualization': '可视化',
+  'pages.device.instanceDetail.shadow': '设备影子',
   // 设备管理-指令下发
   'pages.device.command': '指令下发',
-  'pages.device.command.id': '设备ID',
   'pages.device.command.type': '指令类型',
-  'pages.device.command.type.readAttributes': '读取属性',
-  'pages.device.command.type.setProperties': '设置属性',
-  'pages.device.command.type.callAttribute': '调用属性',
+  'pages.device.command.type.readProperty': '读取属性',
+  'pages.device.command.type.writeProperty': '设置属性',
+  'pages.device.command.type.invokeFunction': '调用属性',
   'pages.device.command.option.send': '重新发送',
-  'pages.device.command.status.waiting': '等待中',
-  'pages.device.command.status.failed ': '发送失败',
-  'pages.device.command.status.succeed': '发送成功',
-  'pages.device.command.errorMessage': '错误信息',
+  'pages.device.command.status.wait': '等待中',
+  'pages.device.command.status.sendError': '发送失败',
+  'pages.device.command.status.success': '发送成功',
+  'pages.device.command.lastError': '错误信息',
   'pages.device.command.sendTime': '发送时间',
   // 设备管理-固件升级
   'pages.device.firmware': '固件升级',
   'pages.device.firmware.name': '固件名称',
   'pages.device.firmware.versions': '固件版本',
-  'pages.device.firmware.products': '所属产品',
-  'pages.device.firmware.signature': '签名方式',
-  'pages.device.firmware.creationTime': '创建时间',
+  'pages.device.firmware.productName': '所属产品',
+  'pages.device.firmware.signMethod': '签名方式',
+  'pages.device.firmware.createTime': '创建时间',
   // 设备管理-告警记录
   'pages.device.alarm': '告警记录',
-  'pages.device.alarm.id': '设备ID',
   'pages.device.alarm.name': '告警名称',
   'pages.device.alarm.time': '告警时间',
   'pages.device.alarm.status': '处理状态',
@@ -140,20 +185,18 @@ export default {
   'pages.link.opcua': 'OPC UA',
   'pages.link.type': 'Type',
   'pages.link.option.debug': '调试',
-  'pages.link.option.record': '通知记录',
   // 通知管理
   'pages.notice.config': '通知配置',
   'pages.notice.config.type': '通知类型',
   'pages.notice.template': '通知模板',
   'pages.notice.option.debug': '调试',
-  'pages.notice.option.record': '通知记录',
 
   // 规则引擎
   'pages.ruleEngine.instance': '规则实例',
   'pages.ruleEngine.sqlRule': '数据转发',
   'pages.ruleEngine.sqlRule.time': '创建时间',
   'pages.ruleEngine.scene': '场景联动',
-  'pages.ruleEngine.scene.trigger': '触发方式',
+  'pages.ruleEngine.scene.triggers': '触发方式',
   'pages.ruleEngine.option.detail': '查看',
   'pages.ruleEngine.option.start': '启动',
   'pages.ruleEngine.option.restart': '重启',
@@ -164,22 +207,20 @@ export default {
   'pages.visualization.screen': '大屏管理',
   'pages.visualization.configuration': '组态管理',
   'pages.visualization.option.addClass': '添加子分类',
-  'pages.visualization.option.record': '通知记录',
   'pages.visualization.option.copy': '复制',
 
   // 模拟测试
   'pages.simulator.device': '设备模拟器',
-  'pages.simulator.device.networkType': '类型',
 
   // 日志管理-访问日志
   'pages.log.access': '访问日志',
-  'pages.log.access.requestPath': '请求路径',
+  'pages.log.access.url': '请求路径',
   'pages.log.access.requestTime': '请求时间',
   'pages.log.access.requestTimeConsuming': '请求耗时',
   'pages.log.access.requestUser': '请求用户',
   // 日志管理-系统日志
   'pages.log.system': '系统日志',
-  'pages.log.system.thread': '线程',
+  'pages.log.system.threadName': '线程',
   'pages.log.system.level': '级别',
   'pages.log.system.logContent': '日志内容',
   'pages.log.system.serviceName': '服务名',
@@ -203,7 +244,6 @@ export default {
   'pages.media.device.manufacturer': '设备厂家',
   'pages.media.device.model': '型号',
   'pages.media.device.firmware': '固件版本',
-  'pages.media.device.networkType': '类型',
   'pages.media.device': '视频设备',
   'pages.media.reveal': '分屏展示',
   'pages.media.cascade': '国标级联',
@@ -211,5 +251,4 @@ export default {
   // 边缘网关
   'pages.edge.product': '产品',
   'pages.edge.device': '设备',
-  'pages.edge.device.productName': '产品名称',
 };

+ 0 - 2
src/pages/cloud/Onenet/index.tsx

@@ -82,8 +82,6 @@ const Onenet = () => {
               defaultMessage: `确认${record.state.value === 'disabled' ? '启' : '禁'}用?`,
             })}
             onConfirm={async () => {
-              // const state = record.state.value === 'disabled' ? 'enable' : 'disable';
-              // await service.changeStatus(record.id, state);
               message.success(
                 intl.formatMessage({
                   id: 'pages.data.option.success',

+ 2 - 2
src/pages/device/Alarm/index.tsx

@@ -21,14 +21,14 @@ const Alarm = () => {
     },
     {
       title: intl.formatMessage({
-        id: 'pages.device.alarm.id',
+        id: 'pages.table.deviceId',
         defaultMessage: '设备ID',
       }),
       dataIndex: 'deviceId',
     },
     {
       title: intl.formatMessage({
-        id: 'pages.table.equipmentName',
+        id: 'pages.table.deviceName',
         defaultMessage: '设备名称',
       }),
       dataIndex: 'deviceName',

+ 3 - 3
src/pages/device/Category/index.tsx

@@ -3,11 +3,11 @@ import Service from '@/pages/device/Category/service';
 import type { ProColumns } from '@jetlinks/pro-table';
 import { EditOutlined, MinusOutlined, PlusOutlined } from '@ant-design/icons';
 import { Tooltip } from 'antd';
-import { useIntl } from '@@/plugin-locale/localeExports';
 import { useRef } from 'react';
 import type { ActionType } from '@jetlinks/pro-table';
 import BaseCrud from '@/components/BaseCrud';
 import type { ISchema } from '@formily/json-schema';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 const service = new Service('device/category');
 const Category = () => {
@@ -26,7 +26,7 @@ const Category = () => {
     },
     {
       title: intl.formatMessage({
-        id: 'pages.device.category.logotype',
+        id: 'pages.device.category.key',
         defaultMessage: '标识',
       }),
       align: 'left',
@@ -118,7 +118,7 @@ const Category = () => {
       },
       key: {
         title: intl.formatMessage({
-          id: 'pages.device.category.logotype',
+          id: 'pages.device.category.key',
           defaultMessage: '标识',
         }),
         'x-decorator': 'FormItem',

+ 9 - 9
src/pages/device/Command/index.tsx

@@ -22,14 +22,14 @@ const Command = () => {
     },
     {
       title: intl.formatMessage({
-        id: 'pages.device.command.id',
+        id: 'pages.table.deviceId',
         defaultMessage: '设备ID',
       }),
       dataIndex: 'deviceId',
     },
     {
       title: intl.formatMessage({
-        id: 'pages.table.equipmentName',
+        id: 'pages.table.deviceName',
         defaultMessage: '设备名称',
       }),
       dataIndex: 'deviceName',
@@ -43,21 +43,21 @@ const Command = () => {
       filters: [
         {
           text: intl.formatMessage({
-            id: 'pages.device.command.type.readAttributes',
+            id: 'pages.device.command.type.readProperty',
             defaultMessage: '读取属性',
           }),
           value: 'READ_PROPERTY',
         },
         {
           text: intl.formatMessage({
-            id: 'pages.device.command.type.setProperties',
+            id: 'pages.device.command.type.writeProperty',
             defaultMessage: '设置属性',
           }),
           value: 'WRITE_PROPERTY',
         },
         {
           text: intl.formatMessage({
-            id: 'pages.device.command.type.callAttribute',
+            id: 'pages.device.command.type.invokeFunction',
             defaultMessage: '调用属性',
           }),
           value: 'INVOKE_FUNCTION',
@@ -73,21 +73,21 @@ const Command = () => {
       filters: [
         {
           text: intl.formatMessage({
-            id: 'pages.device.command.status.waiting',
+            id: 'pages.device.command.status.wait',
             defaultMessage: '等待中',
           }),
           value: 'wait',
         },
         {
           text: intl.formatMessage({
-            id: 'pages.device.command.status.failed ',
+            id: 'pages.device.command.status.sendError',
             defaultMessage: '发送失败',
           }),
           value: 'sendError',
         },
         {
           text: intl.formatMessage({
-            id: 'pages.device.command.status.succeed',
+            id: 'pages.device.command.status.success',
             defaultMessage: '发送成功',
           }),
           value: 'success',
@@ -97,7 +97,7 @@ const Command = () => {
     },
     {
       title: intl.formatMessage({
-        id: 'pages.device.command.errorMessage',
+        id: 'pages.device.command.lastError',
         defaultMessage: '错误信息',
       }),
       dataIndex: 'lastError',

+ 3 - 3
src/pages/device/Firmware/index.tsx

@@ -37,21 +37,21 @@ const Firmware = () => {
     },
     {
       title: intl.formatMessage({
-        id: 'pages.device.firmware.products',
+        id: 'pages.device.firmware.productName',
         defaultMessage: '所属产品',
       }),
       dataIndex: 'productName',
     },
     {
       title: intl.formatMessage({
-        id: 'pages.device.firmware.signature',
+        id: 'pages.device.firmware.signMethod',
         defaultMessage: '签名方式',
       }),
       dataIndex: 'signMethod',
     },
     {
       title: intl.formatMessage({
-        id: 'pages.device.firmware.creationTime',
+        id: 'pages.device.firmware.createTime',
         defaultMessage: '创建时间',
       }),
       dataIndex: 'createTime',

+ 16 - 1
src/pages/device/Instance/Detail/Config/Tags/index.tsx

@@ -2,6 +2,7 @@ import { createSchemaField, FormProvider, observer } from '@formily/react';
 import { Editable, FormItem, Input, ArrayTable } from '@formily/antd';
 import { createForm } from '@formily/core';
 import { Card } from 'antd';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 const SchemaField = createSchemaField({
   components: {
@@ -118,8 +119,22 @@ const schema = {
 };
 
 const Tags = observer(() => {
+  const intl = useIntl();
   return (
-    <Card title="标签" extra={<a>保存</a>}>
+    <Card
+      title={intl.formatMessage({
+        id: 'pages.device.instanceDetail.tags',
+        defaultMessage: '标签',
+      })}
+      extra={
+        <a>
+          {intl.formatMessage({
+            id: 'pages.device.instanceDetail.save',
+            defaultMessage: '保存',
+          })}
+        </a>
+      }
+    >
       <FormProvider form={form}>
         <SchemaField schema={schema} />
       </FormProvider>

+ 68 - 9
src/pages/device/Instance/Detail/Info/index.tsx

@@ -2,26 +2,85 @@ import { Descriptions } from 'antd';
 import { InstanceModel } from '@/pages/device/Instance';
 import moment from 'moment';
 import { observer } from '@formily/react';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 const Info = observer(() => {
+  const intl = useIntl();
   return (
     <>
       <Descriptions size="small" column={3}>
-        <Descriptions.Item label="设备ID">{InstanceModel.detail?.id}</Descriptions.Item>
-        <Descriptions.Item label="产品名称">{InstanceModel.detail?.name}</Descriptions.Item>
-        <Descriptions.Item label="设备类型">
+        <Descriptions.Item
+          label={intl.formatMessage({
+            id: 'pages.table.deviceId',
+            defaultMessage: '设备ID',
+          })}
+        >
+          {InstanceModel.detail?.id}
+        </Descriptions.Item>
+        <Descriptions.Item
+          label={intl.formatMessage({
+            id: 'pages.table.productName',
+            defaultMessage: '产品名称',
+          })}
+        >
+          {InstanceModel.detail?.name}
+        </Descriptions.Item>
+        <Descriptions.Item
+          label={intl.formatMessage({
+            id: 'pages.device.instanceDetail.deviceType',
+            defaultMessage: '设备类型',
+          })}
+        >
           {InstanceModel.detail?.deviceType?.text}
         </Descriptions.Item>
-        <Descriptions.Item label="链接协议">{InstanceModel.detail?.protocolName}</Descriptions.Item>
-        <Descriptions.Item label="消息协议">{InstanceModel.detail?.transport}</Descriptions.Item>
-        <Descriptions.Item label="创建时间">
+        <Descriptions.Item
+          label={intl.formatMessage({
+            id: 'pages.device.instanceDetail.transportProtocol',
+            defaultMessage: '链接协议',
+          })}
+        >
+          {InstanceModel.detail?.protocolName}
+        </Descriptions.Item>
+        <Descriptions.Item
+          label={intl.formatMessage({
+            id: 'pages.device.instanceDetail.protocolName',
+            defaultMessage: '消息协议',
+          })}
+        >
+          {InstanceModel.detail?.transport}
+        </Descriptions.Item>
+        <Descriptions.Item
+          label={intl.formatMessage({
+            id: 'pages.device.instanceDetail.createTime',
+            defaultMessage: '创建时间',
+          })}
+        >
           {moment(InstanceModel.detail?.createTime).format('YYYY-MM-DD HH:mm:ss')}
         </Descriptions.Item>
-        <Descriptions.Item label="注册时间">{InstanceModel.detail?.createTime}</Descriptions.Item>
-        <Descriptions.Item label="最后上线时间">
+        <Descriptions.Item
+          label={intl.formatMessage({
+            id: 'pages.device.instanceDetail.registerTime',
+            defaultMessage: '注册时间',
+          })}
+        >
           {InstanceModel.detail?.createTime}
         </Descriptions.Item>
-        <Descriptions.Item label="说明">{InstanceModel.detail?.description}</Descriptions.Item>
+        <Descriptions.Item
+          label={intl.formatMessage({
+            id: 'pages.device.instanceDetail.lastTimeOnline',
+            defaultMessage: '最后上线时间',
+          })}
+        >
+          {InstanceModel.detail?.createTime}
+        </Descriptions.Item>
+        <Descriptions.Item
+          label={intl.formatMessage({
+            id: 'pages.table.description',
+            defaultMessage: '说明',
+          })}
+        >
+          {InstanceModel.detail?.description}
+        </Descriptions.Item>
       </Descriptions>
     </>
   );

+ 30 - 7
src/pages/device/Instance/Detail/Metadata/ItemDetail/index.tsx

@@ -17,8 +17,10 @@ import {
   Radio,
 } from '@formily/antd';
 import type { MetadataItem } from '@/pages/device/Product/typings';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 const ItemDetail = observer(() => {
+  const intl = useIntl();
   const form = createForm<MetadataItem>({
     validateFirst: true,
     initialValues: InstanceModel.metadataItem,
@@ -43,21 +45,30 @@ const ItemDetail = observer(() => {
     properties: {
       id: {
         type: 'string',
-        title: '属性标识',
+        title: intl.formatMessage({
+          id: 'pages.device.instanceDetail.metadata.logotype',
+          defaultMessage: '',
+        }),
         required: true,
         'x-decorator': 'FormItem',
         'x-component': 'Input',
       },
       name: {
         type: 'string',
-        title: '属性名称',
+        title: intl.formatMessage({
+          id: 'pages.device.instanceDetail.metadata.attributeName',
+          defaultMessage: '属性名称',
+        }),
         required: true,
         'x-decorator': 'FormItem',
         'x-component': 'Input',
       },
       dataType: {
         type: 'string',
-        title: '数据类型',
+        title: intl.formatMessage({
+          id: 'pages.device.instanceDetail.metadata.dataType',
+          defaultMessage: '数据类型',
+        }),
         required: true,
         'x-decorator': 'FormItem',
         'x-component': 'Select',
@@ -77,14 +88,23 @@ const ItemDetail = observer(() => {
       },
       readOnly: {
         type: 'string',
-        title: '只读',
+        title: intl.formatMessage({
+          id: 'pages.device.instanceDetail.metadata.readOnly',
+          defaultMessage: '只读',
+        }),
         enum: [
           {
-            label: '是',
+            label: intl.formatMessage({
+              id: 'pages.device.instanceDetail.metadata.readOnly.yes',
+              defaultMessage: '是',
+            }),
             value: 1,
           },
           {
-            label: '否',
+            label: intl.formatMessage({
+              id: 'pages.device.instanceDetail.metadata.readOnly.no',
+              defaultMessage: '否',
+            }),
             value: 2,
           },
         ],
@@ -94,7 +114,10 @@ const ItemDetail = observer(() => {
       description: {
         type: 'string',
         required: true,
-        title: '描述',
+        title: intl.formatMessage({
+          id: 'pages.table.describe',
+          defaultMessage: '描述',
+        }),
         'x-decorator': 'FormItem',
         'x-component': 'Input.TextArea',
       },

+ 30 - 6
src/pages/device/Instance/Detail/Metadata/ItemParam/index.tsx

@@ -20,8 +20,10 @@ import type { Unit } from '@/pages/device/Instance/typings';
 import type { ISchema } from '@formily/json-schema';
 import ProCard from '@ant-design/pro-card';
 import { useState } from 'react';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 const ItemParam = observer(() => {
+  const intl = useIntl();
   const [cardId, setCardId] = useState<string>('');
   const form = createForm({
     validateFirst: true,
@@ -73,21 +75,30 @@ const ItemParam = observer(() => {
     properties: {
       id: {
         type: 'string',
-        title: '参数标识',
+        title: intl.formatMessage({
+          id: 'pages.device.instanceDetail.metadata.logotype',
+          defaultMessage: '属性标识',
+        }),
         required: true,
         'x-decorator': 'FormItem',
         'x-component': 'Input',
       },
       name: {
         type: 'string',
-        title: '参数名称',
+        title: intl.formatMessage({
+          id: 'pages.device.instanceDetail.metadata.parameterName',
+          defaultMessage: '参数名称',
+        }),
         required: true,
         'x-decorator': 'FormItem',
         'x-component': 'Input',
       },
       type: {
         type: 'string',
-        title: '数据类型',
+        title: intl.formatMessage({
+          id: 'pages.device.instanceDetail.metadata.dataType',
+          defaultMessage: '数据类型',
+        }),
         required: true,
         'x-decorator': 'FormItem',
         'x-component': 'Select',
@@ -155,7 +166,10 @@ const ItemParam = observer(() => {
       },
       unit: {
         type: 'string',
-        title: '单位',
+        title: intl.formatMessage({
+          id: 'pages.device.instanceDetail.metadata.unit',
+          defaultMessage: '单位',
+        }),
         required: true,
         'x-decorator': 'FormItem',
         'x-component': 'Select',
@@ -163,7 +177,10 @@ const ItemParam = observer(() => {
       },
       description: {
         type: 'string',
-        title: '描述',
+        title: intl.formatMessage({
+          id: 'pages.table.describe',
+          defaultMessage: '描述',
+        }),
         required: true,
         'x-decorator': 'FormItem',
         'x-component': 'Input.TextArea',
@@ -179,7 +196,14 @@ const ItemParam = observer(() => {
   };
   return (
     <ProCard
-      extra={<a onClick={saveParam}>保存</a>}
+      extra={
+        <a onClick={saveParam}>
+          {intl.formatMessage({
+            id: 'pages.device.instanceDetail.save',
+            defaultMessage: '保存',
+          })}
+        </a>
+      }
       bordered={true}
       colSpan={500}
       style={{ height: '40vh', marginRight: 10 }}

+ 45 - 6
src/pages/device/Instance/Detail/Metadata/index.tsx

@@ -7,8 +7,10 @@ import ItemList from '@/pages/device/Instance/Detail/Metadata/ItemList';
 import ItemDetail from '@/pages/device/Instance/Detail/Metadata/ItemDetail';
 import ItemParam from '@/pages/device/Instance/Detail/Metadata/ItemParam';
 import { useEffect } from 'react';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 const Metadata = observer(() => {
+  const intl = useIntl();
   const metadata = JSON.parse(InstanceModel.detail.metadata as string) as DeviceMetadata;
   useEffect(() => {
     InstanceModel.params = new Set<string>(['test']);
@@ -19,7 +21,14 @@ const Metadata = observer(() => {
         tabPosition: 'left',
       }}
     >
-      <ProCard.TabPane tab="属性" key="property" style={{ overflowX: 'auto' }}>
+      <ProCard.TabPane
+        tab={intl.formatMessage({
+          id: 'pages.device.instanceDetail.property',
+          defaultMessage: '属性',
+        })}
+        key="property"
+        style={{ overflowX: 'auto' }}
+      >
         <Row gutter={[16, 16]} style={{ height: '50vh' }} wrap={false}>
           <Col span={6}>
             <ProCard
@@ -31,7 +40,12 @@ const Metadata = observer(() => {
                   </Col>
                   <Col span={2} />
                   <Col span={4} style={{ alignItems: 'center' }}>
-                    <a>新增</a>
+                    <a>
+                      {intl.formatMessage({
+                        id: 'pages.data.option.add',
+                        defaultMessage: '新增',
+                      })}
+                    </a>
                   </Col>
                 </Row>
               }
@@ -42,7 +56,14 @@ const Metadata = observer(() => {
           </Col>
           <Col span={5}>
             <ProCard
-              extra={<a>保存</a>}
+              extra={
+                <a>
+                  {intl.formatMessage({
+                    id: 'pages.device.instanceDetail.save',
+                    defaultMessage: '保存',
+                  })}
+                </a>
+              }
               bordered={true}
               style={{ height: '40vh', marginRight: 10 }}
             >
@@ -57,13 +78,31 @@ const Metadata = observer(() => {
           ))}
         </Row>
       </ProCard.TabPane>
-      <ProCard.TabPane tab="事件" key="events">
+      <ProCard.TabPane
+        tab={intl.formatMessage({
+          id: 'pages.device.instanceDetail.events',
+          defaultMessage: '事件',
+        })}
+        key="events"
+      >
         事件
       </ProCard.TabPane>
-      <ProCard.TabPane tab="功能" key="functions">
+      <ProCard.TabPane
+        tab={intl.formatMessage({
+          id: 'pages.device.instanceDetail.function',
+          defaultMessage: '功能',
+        })}
+        key="functions"
+      >
         功能
       </ProCard.TabPane>
-      <ProCard.TabPane tab="标签" key="tags">
+      <ProCard.TabPane
+        tab={intl.formatMessage({
+          id: 'pages.device.instanceDetail.tags',
+          defaultMessage: '标签',
+        })}
+        key="tags"
+      >
         标签
       </ProCard.TabPane>
     </ProCard>

+ 13 - 2
src/pages/device/Instance/Detail/Running/index.tsx

@@ -3,13 +3,18 @@ import ProCard from '@ant-design/pro-card';
 import { SyncOutlined } from '@ant-design/icons';
 import { Badge, Col, message, Row } from 'antd';
 import type { DeviceMetadata } from '@/pages/device/Product/typings';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 const Running = () => {
+  const intl = useIntl();
   const metadata = JSON.parse(InstanceModel.detail.metadata as string) as DeviceMetadata;
   return (
     <ProCard style={{ marginTop: 8 }} gutter={[16, 16]} wrap>
       <ProCard
-        title="设备状态"
+        title={intl.formatMessage({
+          id: 'pages.device.instanceDetail.running.status',
+          defaultMessage: '设备状态',
+        })}
         extra={<SyncOutlined onClick={() => message.success('刷新')} />}
         layout="default"
         bordered
@@ -21,7 +26,13 @@ const Running = () => {
             <Col span={24}>
               <Badge status="success" text={<span style={{ fontSize: 25 }}>在线</span>} />
             </Col>
-            <Col span={24}>上线时间: 2021-8-20 12:20:33</Col>
+            <Col span={24}>
+              {intl.formatMessage({
+                id: 'pages.device.instanceDetail.running.onlineTime',
+                defaultMessage: '在线时间',
+              })}
+              : 2021-8-20 12:20:33
+            </Col>
           </Row>
         </div>
       </ProCard>

+ 12 - 2
src/pages/device/Instance/Detail/index.tsx

@@ -12,6 +12,7 @@ import Alarm from '@/pages/device/Instance/Detail/Alarm';
 import Info from '@/pages/device/Instance/Detail/Info';
 import Functions from '@/pages/device/Instance/Detail/Functions';
 import Running from '@/pages/device/Instance/Detail/Running';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 const list = [
   {
@@ -56,6 +57,7 @@ const list = [
   },
 ];
 const InstanceDetail = observer(() => {
+  const intl = useIntl();
   const [tab, setTab] = useState<string>('detail');
   const getDetail = (id: string) => {
     service.detail(id).then((response) => {
@@ -79,9 +81,17 @@ const InstanceDetail = observer(() => {
       content={<Info />}
       extra={[
         statusMap[0],
-        <Button key="2">停用</Button>,
+        <Button key="2">
+          {intl.formatMessage({
+            id: 'pages.device.productDetail.disable',
+            defaultMessage: '停用',
+          })}
+        </Button>,
         <Button key="1" type="primary">
-          应用配置
+          {intl.formatMessage({
+            id: 'pages.device.productDetail.setting',
+            defaultMessage: '应用配置',
+          })}
         </Button>,
       ]}
     >

+ 6 - 6
src/pages/device/Instance/index.tsx

@@ -12,11 +12,11 @@ import {
   EyeOutlined,
   PlayCircleOutlined,
 } from '@ant-design/icons';
-import { useIntl } from '@@/plugin-locale/localeExports';
 import { CurdModel } from '@/components/BaseCrud/model';
 import { model } from '@formily/reactive';
 import Service from '@/pages/device/Instance/service';
 import type { MetadataItem } from '@/pages/device/Product/typings';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 const statusMap = new Map();
 statusMap.set('在线', 'success');
@@ -56,7 +56,7 @@ const Instance = () => {
     },
     {
       title: intl.formatMessage({
-        id: 'pages.table.equipmentName',
+        id: 'pages.table.deviceName',
         defaultMessage: '设备名称',
       }),
       dataIndex: 'name',
@@ -64,7 +64,7 @@ const Instance = () => {
     },
     {
       title: intl.formatMessage({
-        id: 'pages.device.instance.productName',
+        id: 'pages.table.productName',
         defaultMessage: '产品名称',
       }),
       dataIndex: 'productName',
@@ -92,7 +92,7 @@ const Instance = () => {
       filters: [
         {
           text: intl.formatMessage({
-            id: 'pages.device.instance.status.notEnabled',
+            id: 'pages.device.instance.status.notActive',
             defaultMessage: '未启用',
           }),
           value: 'notActive',
@@ -163,7 +163,7 @@ const Instance = () => {
         <a href={record.id} target="_blank" rel="noopener noreferrer" key="view">
           <Popconfirm
             title={intl.formatMessage({
-              id: 'pages.data.option.disable.tips',
+              id: 'pages.data.option.disabled.tips',
               defaultMessage: '确认禁用?',
             })}
             onConfirm={async () => {
@@ -182,7 +182,7 @@ const Instance = () => {
           >
             <Tooltip
               title={intl.formatMessage({
-                id: `pages.data.option.${record.state.value ? 'disable' : 'enable'}`,
+                id: `pages.data.option.${record.state.value ? 'disabled' : 'enabled'}`,
                 defaultMessage: record.state.value ? '禁用' : '启用',
               })}
             >

+ 2 - 2
src/pages/device/Product/Detail/BaseInfo/index.tsx

@@ -4,7 +4,7 @@ import { Form, FormItem, FormGrid, Password, FormLayout, PreviewText, Input } fr
 import { createForm } from '@formily/core';
 import { Card, Empty } from 'antd';
 import type { ISchema } from '@formily/json-schema';
-import { useEffect, useState } from 'react';
+import { SetStateAction, useEffect, useState } from 'react';
 import type { ConfigMetadata, ConfigProperty } from '@/pages/device/Product/typings';
 
 const componentMap = {
@@ -24,7 +24,7 @@ const BaseInfo = observer(() => {
 
   useEffect(() => {
     if (id) {
-      service.getConfigMetadata(id).then((config) => {
+      service.getConfigMetadata(id).then((config: { result: SetStateAction<ConfigMetadata[]> }) => {
         setMetadata(config.result);
       });
     }

+ 75 - 11
src/pages/device/Product/Detail/index.tsx

@@ -5,8 +5,10 @@ import BaseInfo from '@/pages/device/Product/Detail/BaseInfo';
 import { observer } from '@formily/react';
 import { productModel, statusMap } from '@/pages/device/Product';
 import { useEffect } from 'react';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 const ProductDetail = observer(() => {
+  const intl = useIntl();
   useEffect(() => {
     if (!productModel.current) history.goBack();
   }, []);
@@ -16,37 +18,99 @@ const ProductDetail = observer(() => {
       extraContent={<Space size={24} />}
       content={
         <Descriptions size="small" column={2}>
-          <Descriptions.Item label="产品ID">{productModel.current?.id}</Descriptions.Item>
-          <Descriptions.Item label="产品名称">{productModel.current?.name}</Descriptions.Item>
-          <Descriptions.Item label="所属品类">
+          <Descriptions.Item
+            label={intl.formatMessage({
+              id: 'pages.device.category',
+              defaultMessage: '产品ID',
+            })}
+          >
+            {productModel.current?.id}
+          </Descriptions.Item>
+          <Descriptions.Item
+            label={intl.formatMessage({
+              id: 'pages.table.productName',
+              defaultMessage: '产品名称',
+            })}
+          >
+            {productModel.current?.name}
+          </Descriptions.Item>
+          <Descriptions.Item
+            label={intl.formatMessage({
+              id: 'pages.device.productDetail.classifiedName',
+              defaultMessage: '所属品类',
+            })}
+          >
             {productModel.current?.classifiedName}
           </Descriptions.Item>
-          <Descriptions.Item label="消息协议">
+          <Descriptions.Item
+            label={intl.formatMessage({
+              id: 'pages.device.productDetail.protocolName',
+              defaultMessage: '消息协议',
+            })}
+          >
             {productModel.current?.protocolName}
           </Descriptions.Item>
-          <Descriptions.Item label="链接协议">
+          <Descriptions.Item
+            label={intl.formatMessage({
+              id: 'pages.device.productDetail.transportProtocol',
+              defaultMessage: '链接协议',
+            })}
+          >
             {productModel.current?.transportProtocol}
           </Descriptions.Item>
-          <Descriptions.Item label="创建时间">{productModel.current?.createTime}</Descriptions.Item>
+          <Descriptions.Item
+            label={intl.formatMessage({
+              id: 'pages.device.productDetail.createTime',
+              defaultMessage: '创建时间',
+            })}
+          >
+            {productModel.current?.createTime}
+          </Descriptions.Item>
         </Descriptions>
       }
       extra={[
         statusMap[productModel.current?.state || 0],
-        <Button key="2">停用</Button>,
+        <Button key="2">
+          {intl.formatMessage({
+            id: 'pages.device.productDetail.disable',
+            defaultMessage: '停用',
+          })}
+        </Button>,
         <Button key="1" type="primary">
-          应用配置
+          {intl.formatMessage({
+            id: 'pages.device.productDetail.setting',
+            defaultMessage: '应用配置',
+          })}
         </Button>,
       ]}
     >
       <Card>
         <Tabs defaultActiveKey={'base'}>
-          <Tabs.TabPane tab={'配置信息'} key={'base'}>
+          <Tabs.TabPane
+            tab={intl.formatMessage({
+              id: 'pages.device.productDetail.base',
+              defaultMessage: '配置信息',
+            })}
+            key={'base'}
+          >
             <BaseInfo />
           </Tabs.TabPane>
-          <Tabs.TabPane tab={'物模型'} key={'metadata'}>
+          <Tabs.TabPane
+            tab={intl.formatMessage({
+              id: 'pages.device.productDetail.metadata',
+              defaultMessage: '物模型',
+            })}
+            key={'metadata'}
+          >
             物模型
           </Tabs.TabPane>
-          <Tabs.TabPane tab={'告警设置'} key={'alarm'}>
+          <Tabs.TabPane
+            tab={intl.formatMessage({
+              id: 'pages.device.productDetail.alarm',
+              defaultMessage: '告警设置',
+            })}
+            key={'alarm'}
+          >
             告警设置
           </Tabs.TabPane>
         </Tabs>

+ 8 - 3
src/pages/device/Product/index.tsx

@@ -11,13 +11,13 @@ import {
   MinusOutlined,
   PlayCircleOutlined,
 } from '@ant-design/icons';
-import { useIntl } from '@@/plugin-locale/localeExports';
 import { lastValueFrom } from 'rxjs';
 import Service from '@/pages/device/Product/service';
 import { observer } from '@formily/react';
 import { model } from '@formily/reactive';
 import encodeQuery from '@/utils/encodeQuery';
 import { Link } from 'umi';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 export const service = new Service('device-product');
 export const statusMap = {
@@ -175,14 +175,19 @@ const Product = observer(() => {
                   <a key="download">
                     <DownloadOutlined
                       onClick={() => {
-                        message.success('下载');
+                        message.success(
+                          `${intl.formatMessage({
+                            id: 'pages.data.option.download',
+                            defaultMessage: '下载',
+                          })}`,
+                        );
                       }}
                     />
                   </a>
                 </Tooltip>,
                 <Tooltip
                   title={intl.formatMessage({
-                    id: `pages.data.option.${record.state ? 'disable' : 'enable'}`,
+                    id: `pages.data.option.${record.state ? 'disabled' : 'enabled'}`,
                     defaultMessage: record.state ? '禁用' : '启用',
                   })}
                   key={'state'}

+ 2 - 2
src/pages/edge/Device/index.tsx

@@ -1,5 +1,4 @@
 import { PageContainer } from '@ant-design/pro-layout';
-import { useIntl } from '@@/plugin-locale/localeExports';
 import { useRef } from 'react';
 import type { ActionType, ProColumns } from '@jetlinks/pro-table';
 import { Tooltip } from 'antd';
@@ -7,6 +6,7 @@ import { ArrowDownOutlined, BugOutlined, EditOutlined, MinusOutlined } from '@an
 import BaseCrud from '@/components/BaseCrud';
 import BaseService from '@/utils/BaseService';
 import type { DeviceItem } from '@/pages/edge/Device/typings';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 export const service = new BaseService<DeviceItem>('device/instance');
 const Device = () => {
@@ -41,7 +41,7 @@ const Device = () => {
     {
       dataIndex: 'productName',
       title: intl.formatMessage({
-        id: 'pages.edge.device.productName',
+        id: 'pages.table.productName',
         defaultMessage: '产品名称',
       }),
     },

+ 21 - 6
src/pages/edge/Product/index.tsx

@@ -1,12 +1,12 @@
 import { PageContainer } from '@ant-design/pro-layout';
 import BaseService from '@/utils/BaseService';
-import { useIntl } from '@@/plugin-locale/localeExports';
 import { useRef } from 'react';
 import type { ActionType, ProColumns } from '@jetlinks/pro-table';
 import { Tooltip } from 'antd';
 import { ArrowDownOutlined, BugOutlined, EditOutlined, MinusOutlined } from '@ant-design/icons';
 import BaseCrud from '@/components/BaseCrud';
 import type { ProductItem } from '@/pages/edge/Product/typings';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 export const service = new BaseService<ProductItem>('edge/product');
 const Product = () => {
@@ -21,18 +21,30 @@ const Product = () => {
     },
     {
       dataIndex: 'name',
-      title: '名称',
+      title: intl.formatMessage({
+        id: 'pages.table.name',
+        defaultMessage: '名称',
+      }),
     },
     {
       dataIndex: 'model',
-      title: '型号',
+      title: intl.formatMessage({
+        id: 'pages.media.device.model',
+        defaultMessage: '型号',
+      }),
     },
     {
       dataIndex: 'manufacturer',
-      title: '厂家',
+      title: intl.formatMessage({
+        id: 'pages.media.device.manufacturer',
+        defaultMessage: '厂家',
+      }),
     },
     {
-      title: '操作',
+      title: intl.formatMessage({
+        id: 'pages.data.option',
+        defaultMessage: '操作',
+      }),
       valueType: 'option',
       align: 'center',
       width: 200,
@@ -88,7 +100,10 @@ const Product = () => {
       <BaseCrud
         columns={columns}
         service={service}
-        title="通知配置"
+        title={intl.formatMessage({
+          id: 'pages.edge.product',
+          defaultMessage: '产品',
+        })}
         schema={schema}
         actionRef={actionRef}
       />

+ 1 - 1
src/pages/link/Gateway/index.tsx

@@ -99,7 +99,7 @@ const Gateway = () => {
         <a>
           <Tooltip
             title={intl.formatMessage({
-              id: 'pages.link.option.record',
+              id: 'pages.data.option.record',
               defaultMessage: '通知记录',
             })}
           >

+ 1 - 1
src/pages/link/Protocol/index.tsx

@@ -98,7 +98,7 @@ const Protocol = () => {
         <a>
           <Tooltip
             title={intl.formatMessage({
-              id: 'pages.link.option.record',
+              id: 'pages.data.option.record',
               defaultMessage: '通知记录',
             })}
           >

+ 2 - 2
src/pages/log/Access/index.tsx

@@ -27,7 +27,7 @@ const Access: React.FC = () => {
     },
     {
       title: intl.formatMessage({
-        id: 'pages.log.access.requestPath',
+        id: 'pages.log.access.url',
         defaultMessage: '请求路径',
       }),
       dataIndex: 'url',
@@ -35,7 +35,7 @@ const Access: React.FC = () => {
     },
     {
       title: intl.formatMessage({
-        id: 'pages.log.access.describe',
+        id: 'pages.table.description',
         defaultMessage: '说明',
       }),
       dataIndex: 'description',

+ 1 - 1
src/pages/log/System/index.tsx

@@ -23,7 +23,7 @@ const System = () => {
     },
     {
       title: intl.formatMessage({
-        id: 'pages.log.system.thread',
+        id: 'pages.log.system.threadName',
         defaultMessage: '线程',
       }),
       dataIndex: 'threadName',

+ 21 - 6
src/pages/media/Cascade/index.tsx

@@ -1,12 +1,12 @@
 import { PageContainer } from '@ant-design/pro-layout';
 import BaseService from '@/utils/BaseService';
-import { useIntl } from '@@/plugin-locale/localeExports';
 import { useRef } from 'react';
 import type { ActionType, ProColumns } from '@jetlinks/pro-table';
 import { Tooltip } from 'antd';
 import { ArrowDownOutlined, BugOutlined, EditOutlined, MinusOutlined } from '@ant-design/icons';
 import BaseCrud from '@/components/BaseCrud';
 import type { CascadeItem } from '@/pages/media/Cascade/typings';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 export const service = new BaseService<CascadeItem>('media/gb28181-cascade');
 const Cascade = () => {
@@ -21,19 +21,31 @@ const Cascade = () => {
     },
     {
       dataIndex: 'name',
-      title: '名称',
+      title: intl.formatMessage({
+        id: 'pages.table.name',
+        defaultMessage: '名称',
+      }),
     },
     {
       dataIndex: 'networkType',
-      title: '类型',
+      title: intl.formatMessage({
+        id: 'pages.table.type',
+        defaultMessage: '类型',
+      }),
     },
     {
       dataIndex: 'state',
-      title: '状态',
+      title: intl.formatMessage({
+        id: 'pages.searchTable.titleStatus',
+        defaultMessage: '状态',
+      }),
       render: (text, record) => record.status.value,
     },
     {
-      title: '操作',
+      title: intl.formatMessage({
+        id: 'pages.data.option',
+        defaultMessage: '操作',
+      }),
       valueType: 'option',
       align: 'center',
       width: 200,
@@ -89,7 +101,10 @@ const Cascade = () => {
       <BaseCrud
         columns={columns}
         service={service}
-        title="模拟测试"
+        title={intl.formatMessage({
+          id: 'pages.media.cascade',
+          defaultMessage: '模拟测试',
+        })}
         schema={schema}
         actionRef={actionRef}
       />

+ 6 - 3
src/pages/media/Device/index.tsx

@@ -1,5 +1,4 @@
 import { PageContainer } from '@ant-design/pro-layout';
-import { useIntl } from '@@/plugin-locale/localeExports';
 import { useRef } from 'react';
 import type { ActionType, ProColumns } from '@jetlinks/pro-table';
 import { Tooltip } from 'antd';
@@ -7,6 +6,7 @@ import { ArrowDownOutlined, BugOutlined, EditOutlined, MinusOutlined } from '@an
 import BaseCrud from '@/components/BaseCrud';
 import BaseService from '@/utils/BaseService';
 import type { DeviceItem } from '@/pages/media/Device/typings';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 export const service = new BaseService<DeviceItem>('media/device');
 const Device = () => {
@@ -90,7 +90,7 @@ const Device = () => {
     {
       dataIndex: 'networkType',
       title: intl.formatMessage({
-        id: 'pages.media.device.networkType',
+        id: 'pages.table.type',
         defaultMessage: '类型',
       }),
     },
@@ -161,7 +161,10 @@ const Device = () => {
       <BaseCrud
         columns={columns}
         service={service}
-        title="国标设备"
+        title={intl.formatMessage({
+          id: 'pages.media.device',
+          defaultMessage: '模拟测试',
+        })}
         schema={schema}
         actionRef={actionRef}
       />

+ 1 - 1
src/pages/notice/Config/index.tsx

@@ -98,7 +98,7 @@ const Config = () => {
         <a>
           <Tooltip
             title={intl.formatMessage({
-              id: 'pages.notice.option.record',
+              id: 'pages.data.option.record',
               defaultMessage: '通知记录',
             })}
           >

+ 1 - 1
src/pages/rule-engine/Scene/index.tsx

@@ -36,7 +36,7 @@ const Scene = () => {
     {
       dataIndex: 'triggers',
       title: intl.formatMessage({
-        id: 'pages.ruleEngine.scene.trigger',
+        id: 'pages.ruleEngine.scene.triggers',
         defaultMessage: '触发方式',
       }),
       render: () => 'todo',

+ 2 - 2
src/pages/simulator/Device/index.tsx

@@ -1,12 +1,12 @@
 import { PageContainer } from '@ant-design/pro-layout';
 import BaseService from '@/utils/BaseService';
 import type { DeviceItem } from '@/pages/simulator/Device/typings';
-import { useIntl } from '@@/plugin-locale/localeExports';
 import { useRef } from 'react';
 import type { ActionType, ProColumns } from '@jetlinks/pro-table';
 import { Tooltip } from 'antd';
 import { ArrowDownOutlined, BugOutlined, EditOutlined, MinusOutlined } from '@ant-design/icons';
 import BaseCrud from '@/components/BaseCrud';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 export const service = new BaseService<DeviceItem>('network/simulator');
 const Device = () => {
@@ -30,7 +30,7 @@ const Device = () => {
     {
       dataIndex: 'networkType',
       title: intl.formatMessage({
-        id: 'pages.simulator.device.networkType',
+        id: 'pages.table.type',
         defaultMessage: '类型',
       }),
     },

+ 3 - 3
src/pages/system/DataSource/index.tsx

@@ -4,13 +4,13 @@ import type { ProColumns } from '@jetlinks/pro-table';
 import { CurdModel } from '@/components/BaseCrud/model';
 import { message, Popconfirm, Tooltip } from 'antd';
 import { CloseCircleOutlined, EditOutlined, PlayCircleOutlined } from '@ant-design/icons';
-import { useIntl } from '@@/plugin-locale/localeExports';
 import type { ActionType } from '@jetlinks/pro-table';
 import { useEffect, useRef, useState } from 'react';
 import type { ISchema } from '@formily/json-schema';
 import Service from '@/pages/system/DataSource/service';
 import { from, mergeMap, toArray } from 'rxjs';
 import { map } from 'rxjs/operators';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 export const service = new Service('datasource/config');
 
@@ -59,7 +59,7 @@ const DataSource = () => {
     },
     {
       title: intl.formatMessage({
-        id: 'pages.system.datasource.type',
+        id: 'pages.table.type',
         defaultMessage: '类型',
       }),
       dataIndex: 'typeId',
@@ -159,7 +159,7 @@ const DataSource = () => {
           },
           typeId: {
             title: intl.formatMessage({
-              id: 'pages.system.datasource.type',
+              id: 'pages.table.type',
               defaultMessage: '类型',
             }),
             'x-component': 'Select',

+ 2 - 2
src/pages/system/OpenAPI/index.tsx

@@ -111,7 +111,7 @@ const OpenAPI: React.FC = () => {
         <a href={record.id} target="_blank" rel="noopener noreferrer" key="view">
           <Popconfirm
             title={intl.formatMessage({
-              id: 'pages.data.option.disable.tips',
+              id: 'pages.data.option.disabled.tips',
               defaultMessage: '确认禁用?',
             })}
             onConfirm={async () => {
@@ -130,7 +130,7 @@ const OpenAPI: React.FC = () => {
           >
             <Tooltip
               title={intl.formatMessage({
-                id: `pages.data.option.${record.status ? 'disable' : 'enable'}`,
+                id: `pages.data.option.${record.status ? 'disabled' : 'enabled'}`,
                 defaultMessage: record.status ? '禁用' : '启用',
               })}
             >

+ 2 - 2
src/pages/system/Permission/index.tsx

@@ -148,7 +148,7 @@ const Permission: React.FC = () => {
         <a href={record.id} target="_blank" rel="noopener noreferrer" key="view">
           <Popconfirm
             title={intl.formatMessage({
-              id: 'pages.data.option.disable.tips',
+              id: 'pages.data.option.disabled.tips',
               defaultMessage: '确认禁用?',
             })}
             onConfirm={async () => {
@@ -167,7 +167,7 @@ const Permission: React.FC = () => {
           >
             <Tooltip
               title={intl.formatMessage({
-                id: `pages.data.option.${record.status ? 'disable' : 'enable'}`,
+                id: `pages.data.option.${record.status ? 'disabled' : 'enabled'}`,
                 defaultMessage: record.status ? '禁用' : '启用',
               })}
             >

+ 5 - 2
src/pages/system/Role/index.tsx

@@ -3,10 +3,10 @@ import React, { useRef } from 'react';
 import { EditOutlined, KeyOutlined, MinusOutlined, UserAddOutlined } from '@ant-design/icons';
 import { Menu, message, Popconfirm, Tooltip } from 'antd';
 import type { ProColumns, ActionType } from '@jetlinks/pro-table';
-import { useIntl } from '@@/plugin-locale/localeExports';
 import BaseCrud from '@/components/BaseCrud';
 import { CurdModel } from '@/components/BaseCrud/model';
 import BaseService from '@/utils/BaseService';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 const menu = (
   <Menu>
@@ -55,7 +55,10 @@ const Role: React.FC = () => {
       dataIndex: 'name',
       copyable: true,
       ellipsis: true,
-      tip: '名称过长会自动收缩',
+      tip: intl.formatMessage({
+        id: 'pages.system.userName.tips',
+        defaultMessage: '用户名过长会自动收缩',
+      }),
       formItemProps: {
         rules: [
           {

+ 2 - 2
src/pages/system/Tenant/index.tsx

@@ -126,7 +126,7 @@ const Tenant = () => {
         <a href={record.tenant.id} target="_blank" rel="noopener noreferrer" key="view">
           <Popconfirm
             title={intl.formatMessage({
-              id: 'pages.data.option.disable.tips',
+              id: 'pages.data.option.disabled.tips',
               defaultMessage: '确认禁用?',
             })}
             onConfirm={async () => {
@@ -147,7 +147,7 @@ const Tenant = () => {
           >
             <Tooltip
               title={intl.formatMessage({
-                id: `pages.data.option.${record.tenant?.state.value ? 'disable' : 'enable'}`,
+                id: `pages.data.option.${record.tenant?.state.value ? 'disabled' : 'enabled'}`,
                 defaultMessage: record.tenant?.state?.value ? '禁用' : '启用',
               })}
             >

+ 5 - 5
src/pages/system/User/index.tsx

@@ -8,13 +8,13 @@ import {
 } from '@ant-design/icons';
 import { Menu, Tooltip, Popconfirm, message } from 'antd';
 import type { ProColumns, ActionType } from '@jetlinks/pro-table';
-import { useIntl } from '@@/plugin-locale/localeExports';
 import BaseCrud from '@/components/BaseCrud';
 import { CurdModel } from '@/components/BaseCrud/model';
 import BaseService from '@/utils/BaseService';
 import { observer } from '@formily/react';
 import { Store } from 'jetlinks-store';
 import SystemConst from '@/utils/const';
+import { useIntl } from '@@/plugin-locale/localeExports';
 
 const menu = (
   <Menu>
@@ -52,7 +52,7 @@ const User = observer(() => {
       ellipsis: true,
       align: 'center',
       tip: intl.formatMessage({
-        id: 'pages.system.user.name.tips',
+        id: 'pages.system.name.tips',
         defaultMessage: '姓名过长会自动收缩',
       }),
       sorter: true,
@@ -79,7 +79,7 @@ const User = observer(() => {
       ellipsis: true,
       align: 'center',
       tip: intl.formatMessage({
-        id: 'pages.system.userName.tip',
+        id: 'pages.system.userName.tips',
         defaultMessage: '用户名过长会自动收缩',
       }),
       formItemProps: {
@@ -167,7 +167,7 @@ const User = observer(() => {
         <a href={record.id} target="_blank" rel="noopener noreferrer" key="view">
           <Popconfirm
             title={intl.formatMessage({
-              id: 'pages.data.option.disable.tips',
+              id: 'pages.data.option.disabled.tips',
               defaultMessage: '确认禁用?',
             })}
             onConfirm={async () => {
@@ -186,7 +186,7 @@ const User = observer(() => {
           >
             <Tooltip
               title={intl.formatMessage({
-                id: `pages.data.option.${record.status ? 'disable' : 'enable'}`,
+                id: `pages.data.option.${record.status ? 'disabled' : 'enabled'}`,
                 defaultMessage: record.status ? '禁用' : '启用',
               })}
             >

+ 2 - 2
src/pages/visualization/Configuration/index.tsx

@@ -90,7 +90,7 @@ const Configuration = () => {
         <a>
           <Tooltip
             title={intl.formatMessage({
-              id: 'pages.visualization.option.record',
+              id: 'pages.visualization.option.copy',
               defaultMessage: '复制',
             })}
           >
@@ -100,7 +100,7 @@ const Configuration = () => {
         <a>
           <Tooltip
             title={intl.formatMessage({
-              id: 'pages.visualization.option.record',
+              id: 'pages.data.option.record',
               defaultMessage: '通知记录',
             })}
           >

+ 1 - 1
src/pages/visualization/Screen/index.tsx

@@ -102,7 +102,7 @@ const Screen = () => {
         <a>
           <Tooltip
             title={intl.formatMessage({
-              id: 'pages.link.option.record',
+              id: 'pages.data.option.record',
               defaultMessage: '通知记录',
             })}
           >