diff --git a/docs/en/test/3-1-E2E-form-operation.md b/docs/en/test/3-1-E2E-form-operation.md index 2bca0222..6e19983b 100644 --- a/docs/en/test/3-1-E2E-form-operation.md +++ b/docs/en/test/3-1-E2E-form-operation.md @@ -260,7 +260,7 @@ Looking at the structure and style of the elements through the page, I found tha // check attach successful cy.tableSearchText(name) .goToDetail() - .clickDetailTab('Volume') + .clickDetailTab('Volumes') .tableSearchText(volumeName) .checkColumnValue(2, 'In-use'); }); @@ -490,7 +490,7 @@ Looking at the structure and style of the elements through the page, I found tha cy.tableSearchText(name) .goToDetail() - .clickDetailTab('Sub User', 'userGroup'); + .clickDetailTab('Sub Users', 'userGroup'); }); ``` diff --git a/docs/zh/test/3-1-E2E-form-operation.md b/docs/zh/test/3-1-E2E-form-operation.md index 4e68e95c..d074bc94 100644 --- a/docs/zh/test/3-1-E2E-form-operation.md +++ b/docs/zh/test/3-1-E2E-form-operation.md @@ -260,7 +260,7 @@ // check attach successful cy.tableSearchText(name) .goToDetail() - .clickDetailTab('Volume') + .clickDetailTab('Volumes') .tableSearchText(volumeName) .checkColumnValue(2, 'In-use'); }); @@ -490,7 +490,7 @@ cy.tableSearchText(name) .goToDetail() - .clickDetailTab('Sub User', 'userGroup'); + .clickDetailTab('Sub Users', 'userGroup'); }); ``` diff --git a/src/components/FormItem/NetworkSelectTable/index.jsx b/src/components/FormItem/NetworkSelectTable/index.jsx index b19b167a..408ad2c5 100644 --- a/src/components/FormItem/NetworkSelectTable/index.jsx +++ b/src/components/FormItem/NetworkSelectTable/index.jsx @@ -57,18 +57,18 @@ export class NetworkSelectTable extends Component { get networkTabs() { const tabs = [ - { title: t('Current Project Network'), key: 'project' }, - { title: t('Shared Network'), key: 'shared' }, + { title: t('Current Project Networks'), key: 'project' }, + { title: t('Shared Networks'), key: 'shared' }, ]; if (this.showExternal) { tabs.push({ - title: t('External Network'), + title: t('External Networks'), key: 'external', }); } if (this.hasAdminRole) { tabs.push({ - title: t('All Network'), + title: t('All Networks'), key: 'all', }); } diff --git a/src/layouts/admin-menu.jsx b/src/layouts/admin-menu.jsx index 6d2e9bb3..82c4760c 100644 --- a/src/layouts/admin-menu.jsx +++ b/src/layouts/admin-menu.jsx @@ -49,7 +49,7 @@ const renderMenu = (t) => { children: [ { path: '/compute/instance-admin', - name: t('Instance'), + name: t('Instances'), key: 'instanceAdmin', level: 1, children: [ @@ -64,7 +64,7 @@ const renderMenu = (t) => { }, { path: '/compute/instance-snapshot-admin', - name: t('Instance Snapshot'), + name: t('Instance Snapshots'), key: 'instanceSnapshotAdmin', level: 1, children: [ @@ -79,7 +79,7 @@ const renderMenu = (t) => { }, { path: '/compute/flavor-admin', - name: t('Flavor'), + name: t('Flavors'), key: 'flavorAdmin', level: 1, children: [ @@ -100,7 +100,7 @@ const renderMenu = (t) => { }, { path: '/compute/server-group-admin', - name: t('Server Group'), + name: t('Server Groups'), key: 'serverGroupAdmin', level: 1, children: [ @@ -115,7 +115,7 @@ const renderMenu = (t) => { }, { path: '/compute/image-admin', - name: t('Image'), + name: t('Images'), key: 'imageAdmin', level: 1, children: [ @@ -158,7 +158,7 @@ const renderMenu = (t) => { }, { path: '/compute/baremetal-node-admin', - name: t('Bare Metal Setting'), + name: t('Bare Metal Nodes'), key: 'baremetalNodeAdmin', endpoints: 'ironic', level: 1, @@ -178,7 +178,7 @@ const renderMenu = (t) => { }, { path: /^\/compute\/baremetal-node-admin\/edit\/.[^/]+$/, - name: t('Bare Metal Node Edit'), + name: t('Edit Bare Metal Node'), key: 'baremetalNodeEditAdmin', routePath: '/compute/baremetal-node-admin/detail/:id', level: 2, @@ -195,7 +195,7 @@ const renderMenu = (t) => { children: [ { path: '/storage/volume-admin', - name: t('Volume'), + name: t('Volumes'), key: 'volumeAdmin', level: 1, endpoints: 'cinder', @@ -227,7 +227,7 @@ const renderMenu = (t) => { }, { path: '/storage/snapshot-admin', - name: t('Volume Snapshot'), + name: t('Volume Snapshots'), key: 'snapshotAdmin', level: 1, endpoints: 'cinder', @@ -243,7 +243,7 @@ const renderMenu = (t) => { }, { path: '/storage/volume-type-admin', - name: t('Volume Type'), + name: t('Volume Types'), key: 'volumeTypeAdmin', level: 1, endpoints: 'cinder', @@ -266,7 +266,7 @@ const renderMenu = (t) => { }, { path: '/storage/storage-admin', - name: t('Storage Backend'), + name: t('Storage Backends'), key: 'storageBackendAdmin', level: 1, endpoints: 'cinder', @@ -297,7 +297,7 @@ const renderMenu = (t) => { }, { path: '/network/virtual_adapter_admin', - name: t('Virtual Adapter'), + name: t('Virtual Adapters'), key: 'virtualAdapterAdmin', level: 1, children: [ @@ -312,7 +312,7 @@ const renderMenu = (t) => { }, { path: '/network/qos-policy-admin', - name: t('QoS Policy'), + name: t('QoS Policies'), key: 'networkQosAdmin', endpoints: 'neutron_qos', level: 1, @@ -389,7 +389,7 @@ const renderMenu = (t) => { }, { path: '/network/vpn-admin', - name: t('VPN'), + name: t('VPNs'), key: 'vpnAdmin', endpoints: 'neutron_vpn', level: 1, @@ -429,7 +429,7 @@ const renderMenu = (t) => { children: [ { path: '/share/share-admin', - name: t('Share'), + name: t('Shares'), key: 'shareAdmin', level: 1, children: [ @@ -444,7 +444,7 @@ const renderMenu = (t) => { }, { path: '/share/share-type-admin', - name: t('Share Type'), + name: t('Share Types'), key: 'shareTypeAdmin', level: 1, children: [ @@ -459,7 +459,7 @@ const renderMenu = (t) => { }, { path: '/share/share-group-type-admin', - name: t('Share Group Type'), + name: t('Share Group Types'), key: 'shareGroupTypeAdmin', level: 1, children: [ @@ -474,7 +474,7 @@ const renderMenu = (t) => { }, { path: '/share/share-network-admin', - name: t('Share Network'), + name: t('Share Networks'), key: 'shareNetworkAdmin', level: 1, children: [ @@ -489,7 +489,7 @@ const renderMenu = (t) => { }, { path: '/share/share-server-admin', - name: t('Share Server'), + name: t('Share Servers'), key: 'shareServerAdmin', level: 1, children: [ @@ -504,7 +504,7 @@ const renderMenu = (t) => { }, { path: '/share/share-instance-admin', - name: t('Share Instance'), + name: t('Share Instances'), key: 'shareInstanceAdmin', level: 1, children: [ @@ -519,7 +519,7 @@ const renderMenu = (t) => { }, { path: '/share/share-group-admin', - name: t('Share Group'), + name: t('Share Groups'), key: 'shareGroupAdmin', level: 1, children: [ @@ -725,7 +725,7 @@ const renderMenu = (t) => { children: [ { path: '/database/instances-admin', - name: t('Database Instance'), + name: t('Database Instances'), key: 'databaseInstancesAdmin', level: 1, children: [ @@ -756,7 +756,7 @@ const renderMenu = (t) => { }, { path: '/monitor-center/physical-node-admin', - name: t('Physical Node'), + name: t('Physical Nodes'), key: 'monitorPhysicalNodeAdmin', level: 1, children: [], @@ -764,7 +764,7 @@ const renderMenu = (t) => { }, { path: '/monitor-center/storage-cluster-admin', - name: t('Storage Cluster'), + name: t('Storage Clusters'), key: 'monitorStorageClusterAdmin', level: 1, children: [], @@ -772,7 +772,7 @@ const renderMenu = (t) => { }, { path: '/monitor-center/openstack-service-admin', - name: t('OpenStack Service'), + name: t('OpenStack Services'), key: 'monitorOpenstackServiceAdmin', level: 1, children: [], @@ -780,7 +780,7 @@ const renderMenu = (t) => { }, { path: '/monitor-center/other-service-admin', - name: t('Other Service'), + name: t('Other Services'), key: 'monitorOtherServiceAdmin', level: 1, children: [], @@ -863,7 +863,7 @@ const renderMenu = (t) => { children: [ { path: /^\/container\/hosts-admin\/detail\/.[^/]+$/, - name: t('Hosts Detail'), + name: t('Host Detail'), key: 'zuHostsDetailAdmin', level: 2, routePath: '/container/hosts-admin/detail/:id', diff --git a/src/layouts/menu.jsx b/src/layouts/menu.jsx index 6acbc340..365cd981 100644 --- a/src/layouts/menu.jsx +++ b/src/layouts/menu.jsx @@ -47,7 +47,7 @@ const renderMenu = (t) => { children: [ { path: '/compute/instance', - name: t('Instance'), + name: t('Instances'), key: 'instance', level: 1, children: [ @@ -74,7 +74,7 @@ const renderMenu = (t) => { }, { path: '/compute/instance-snapshot', - name: t('Instance Snapshot'), + name: t('Instance Snapshots'), key: 'instanceSnapshot', level: 1, children: [ @@ -89,7 +89,7 @@ const renderMenu = (t) => { }, { path: '/compute/flavor', - name: t('Flavor'), + name: t('Flavors'), key: 'flavor', level: 1, children: [ @@ -104,7 +104,7 @@ const renderMenu = (t) => { }, { path: '/compute/server-group', - name: t('Server Group'), + name: t('Server Groups'), key: 'serverGroup', level: 1, children: [ @@ -119,7 +119,7 @@ const renderMenu = (t) => { }, { path: '/compute/image', - name: t('Image'), + name: t('Images'), key: 'image', level: 1, children: [ @@ -163,7 +163,7 @@ const renderMenu = (t) => { children: [ { path: '/storage/volume', - name: t('Volume'), + name: t('Volumes'), key: 'volume', level: 1, endpoints: 'cinder', @@ -201,7 +201,7 @@ const renderMenu = (t) => { }, { path: '/storage/snapshot', - name: t('Volume Snapshot'), + name: t('Volume Snapshots'), key: 'snapshot', level: 1, endpoints: 'cinder', @@ -263,7 +263,7 @@ const renderMenu = (t) => { }, { path: '/network/virtual_adapter', - name: t('Virtual Adapter'), + name: t('Virtual Adapters'), key: 'virtualAdapter', level: 1, children: [ @@ -278,7 +278,7 @@ const renderMenu = (t) => { }, { path: '/network/qos-policy', - name: t('QoS Policy'), + name: t('QoS Policies'), key: 'networkQos', endpoints: 'neutron_qos', level: 1, @@ -367,7 +367,7 @@ const renderMenu = (t) => { }, { path: '/network/certificate', - name: t('Certificate Management'), + name: t('Certificates'), key: 'certificate', endpoints: 'barbican', level: 1, @@ -390,7 +390,7 @@ const renderMenu = (t) => { }, { path: '/network/vpn', - name: t('VPN'), + name: t('VPNs'), key: 'vpn', endpoints: 'neutron_vpn', level: 1, @@ -430,7 +430,7 @@ const renderMenu = (t) => { children: [ { path: '/share/share', - name: t('Share'), + name: t('Shares'), key: 'share', level: 1, children: [ @@ -451,7 +451,7 @@ const renderMenu = (t) => { }, { path: '/share/share-network', - name: t('Share Network'), + name: t('Share Networks'), key: 'shareNetwork', level: 1, children: [ @@ -466,7 +466,7 @@ const renderMenu = (t) => { }, { path: '/share/share-group', - name: t('Share Group'), + name: t('Share Groups'), key: 'shareGroup', level: 1, children: [ @@ -550,7 +550,7 @@ const renderMenu = (t) => { children: [ { path: '/database/instances', - name: t('Database Instance'), + name: t('Database Instances'), key: 'databaseInstances', level: 1, children: [ @@ -669,7 +669,7 @@ const renderMenu = (t) => { }, { path: '/container-infra/cluster-template', - name: t('Cluster Template'), + name: t('Cluster Templates'), key: 'clusterTemplate', endpoints: 'magnum', level: 1, diff --git a/src/locales/en.json b/src/locales/en.json index f1e4c2a4..98cd647c 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -43,13 +43,13 @@ "Access Control": "Access Control", "Access Key": "Access Key", "Access Level": "Access Level", - "Access Rule": "Access Rule", + "Access Rules": "Access Rules", "Access Rules Status": "Access Rules Status", "Access To": "Access To", "Access Type": "Access Type", "Access Type Setting": "Access Type Setting", "Action": "Action", - "Action Log": "Action Log", + "Action Logs": "Action Logs", "Active": "Active", "Active Status": "Active Status", "Add": "Add", @@ -102,18 +102,18 @@ "All": "All", "All Flavors": "All Flavors", "All ICMP": "All ICMP", - "All Image": "All Image", - "All Network": "All Network", + "All Images": "All Images", + "All Networks": "All Networks", "All Port": "All Port", "All Proto": "All Proto", - "All QoS Policy": "All QoS Policy", + "All QoS Policies": "All QoS Policies", "All TCP": "All TCP", "All UDP": "All UDP", "All data downloaded.": "All data downloaded.", "All network segments are indicated by \"*\", not \"0.0.0.0/0\"": "All network segments are indicated by \"*\", not \"0.0.0.0/0\"", "Allocate IP": "Allocate IP", "Allocation Pools": "Allocation Pools", - "Allowed Address Pair": "Allowed Address Pair", + "Allowed Address Pairs": "Allowed Address Pairs", "Allowed Host": "Allowed Host", "Always": "Always", "American Samoa": "American Samoa", @@ -184,6 +184,7 @@ "Availability Zone Hints": "Availability Zone Hints", "Availability Zone Info": "Availability Zone Info", "Availability Zone Name": "Availability Zone Name", + "Availability Zones": "Availability Zones", "Availability zone refers to a physical area where power and network are independent of each other in the same area. In the same region, the availability zone and the availability zone can communicate with each other in the intranet, and the available zones can achieve fault isolation.": "Availability zone refers to a physical area where power and network are independent of each other in the same area. In the same region, the availability zone and the availability zone can communicate with each other in the intranet, and the available zones can achieve fault isolation.", "Available": "Available", "Available Zone": "Available Zone", @@ -202,7 +203,6 @@ "Backup File": "Backup File", "Backup File Location": "Backup File Location", "Backup Mode": "Backup Mode", - "Backup Name": "Backup Name", "Backups": "Backups", "Backups & Snapshots": "Backups & Snapshots", "Bad Gateway (code: 502) ": "Bad Gateway (code: 502) ", @@ -216,13 +216,11 @@ "Bare Metal": "Bare Metal", "Bare Metal Enroll": "Bare Metal Enroll", "Bare Metal Node Detail": "Bare Metal Node Detail", - "Bare Metal Node Edit": "Bare Metal Node Edit", - "Bare Metal Setting": "Bare Metal Setting", + "Bare Metal Nodes": "Bare Metal Nodes", "BareMetal Parameters": "BareMetal Parameters", "Base Config": "Base Config", "Base Info": "Base Info", "Base Role": "Base Role", - "BaseDetail": "BaseDetail", "Basic Parameters": "Basic Parameters", "Batch Allocate": "Batch Allocate", "Belarus": "Belarus", @@ -236,10 +234,10 @@ "Bind Device Type": "Bind Device Type", "Bind Resource": "Bind Resource", "Binding": "Binding", - "Binding Group": "Binding Group", + "Binding Groups": "Binding Groups", "Binding Instance": "Binding Instance", "Binding Profile": "Binding Profile", - "Binding User": "Binding User", + "Binding Users": "Binding Users", "Blank Volume": "Blank Volume", "Block Device Mapping": "Block Device Mapping", "Block Migrate": "Block Migrate", @@ -263,6 +261,7 @@ "Burst limit": "Burst limit", "Burundi": "Burundi", "CA Certificate": "CA Certificate", + "CA Certificates": "CA Certificates", "CHECK COMPLETE": "CHECK COMPLETE", "CIDR": "CIDR", "CIDR Format Error(e.g. 192.168.0.0/24, 2001:DB8::/48)": "CIDR Format Error(e.g. 192.168.0.0/24, 2001:DB8::/48)", @@ -279,6 +278,7 @@ "CPU usage Num (Core)": "CPU usage Num (Core)", "CPU value is { cpu }, NUMA CPU value is { totalCpu }, need to be equal. ": "CPU value is { cpu }, NUMA CPU value is { totalCpu }, need to be equal. ", "CPU(Core)": "CPU(Core)", + "CPUs": "CPUs", "CREATE COMPLETE": "CREATE COMPLETE", "CREATE FAILED": "CREATE FAILED", "CREATE IN PROGRESS": "CREATE IN PROGRESS", @@ -306,9 +306,9 @@ "Cert": "Cert", "Certificate Content": "Certificate Content", "Certificate Detail": "Certificate Detail", - "Certificate Management": "Certificate Management", "Certificate Name": "Certificate Name", "Certificate Type": "Certificate Type", + "Certificates": "Certificates", "Chad": "Chad", "Change Password": "Change Password", "Change Type": "Change Type", @@ -356,6 +356,7 @@ "Cluster Template": "Cluster Template", "Cluster Template Detail": "Cluster Template Detail", "Cluster Template Name": "Cluster Template Name", + "Cluster Templates": "Cluster Templates", "Cluster Type": "Cluster Type", "Clusters": "Clusters", "Cocos (Keeling) Islands": "Cocos (Keeling) Islands", @@ -463,7 +464,7 @@ "Create Default Pool": "Create Default Pool", "Create Domain": "Create Domain", "Create Encryption": "Create Encryption", - "Create Extra Specs": "Create Extra Specs", + "Create Extra Spec": "Create Extra Spec", "Create Failed": "Create Failed", "Create Flavor": "Create Flavor", "Create Folder": "Create Folder", @@ -544,9 +545,9 @@ "Current Password": "Current Password", "Current Path: ": "Current Path: ", "Current Project": "Current Project", - "Current Project Image": "Current Project Image", - "Current Project Network": "Current Project Network", - "Current Project QoS Policy": "Current Project QoS Policy", + "Current Project Images": "Current Project Images", + "Current Project Networks": "Current Project Networks", + "Current Project QoS Policies": "Current Project QoS Policies", "Current QoS policy name": "Current QoS policy name", "Current Status": "Current Status", "Current Storage Backend": "Current Storage Backend", @@ -592,6 +593,7 @@ "Database Instance Detail": "Database Instance Detail", "Database Instance Name": "Database Instance Name", "Database Instance Status": "Database Instance Status", + "Database Instances": "Database Instances", "Database Name": "Database Name", "Database Port": "Database Port", "Database Service": "Database Service", @@ -610,7 +612,6 @@ "Delete": "Delete", "Delete Allowed Address Pair": "Delete Allowed Address Pair", "Delete Application Credential": "Delete Application Credential", - "Delete Backup": "Delete Backup", "Delete Bandwidth Egress Rules": "Delete Bandwidth Egress Rules", "Delete Bandwidth Ingress Rules": "Delete Bandwidth Ingress Rules", "Delete Capsule": "Delete Capsule", @@ -782,7 +783,7 @@ "Edit Default Pool": "Edit Default Pool", "Edit Domain": "Edit Domain", "Edit Domain Permission": "Edit Domain Permission", - "Edit Extra Specs": "Edit Extra Specs", + "Edit Extra Spec": "Edit Extra Spec", "Edit Flavor": "Edit Flavor", "Edit Health Monitor": "Edit Health Monitor", "Edit Host Aggregate": "Edit Host Aggregate", @@ -898,9 +899,9 @@ "External Network": "External Network", "External Network ID": "External Network ID", "External Network Info": "External Network Info", + "External Networks": "External Networks", "External Port": "External Port", "Extra Infos": "Extra Infos", - "Extra Spec": "Extra Spec", "Extra Specs": "Extra Specs", "FAKE": "FAKE", "FLAT": "FLAT", @@ -987,7 +988,6 @@ "Gateway IP": "Gateway IP", "Gateway Time-out (code: 504) ": "Gateway Time-out (code: 504) ", "Gateway ip {gateway_ip} conflicts with allocation pool {pool}": "Gateway ip {gateway_ip} conflicts with allocation pool {pool}", - "General Info": "General Info", "General Purpose": "General Purpose", "Georgia": "Georgia", "Germany": "Germany", @@ -1046,6 +1046,7 @@ "Host Aggregates": "Host Aggregates", "Host Average Network IO": "Host Average Network IO", "Host CPU Usage": "Host CPU Usage", + "Host Detail": "Host Detail", "Host Disk Average IOPS": "Host Disk Average IOPS", "Host Memory Usage": "Host Memory Usage", "Host Routes": "Host Routes", @@ -1064,6 +1065,7 @@ "ID/Floating IP": "ID/Floating IP", "ID/Name": "ID/Name", "IGMP": "IGMP", + "IKE Policies": "IKE Policies", "IKE Policy": "IKE Policy", "IKE Version": "IKE Version", "IP": "IP", @@ -1082,6 +1084,7 @@ "IPMI Username": "IPMI Username", "IPMITool": "IPMITool", "IPXE": "IPXE", + "IPsec Policies": "IPsec Policies", "IPsec Policy": "IPsec Policy", "IPsec Site Connection": "IPsec Site Connection", "IPsec Site Connections": "IPsec Site Connections", @@ -1128,6 +1131,7 @@ "Image Size": "Image Size", "Image Snapshot Pending": "Image Snapshot Pending", "Image Uploading": "Image Uploading", + "Images": "Images", "Immediate effect": "Immediate effect", "Immediately delete": "Immediately delete", "Implied Roles": "Implied Roles", @@ -1197,17 +1201,18 @@ "Instance Snapshot": "Instance Snapshot", "Instance Snapshot Detail": "Instance Snapshot Detail", "Instance Snapshot Name": "Instance Snapshot Name", + "Instance Snapshots": "Instance Snapshots", "Instance Status": "Instance Status", "Instances": "Instances", "Instances \"{ name }\" are locked, can not delete them.": "Instances \"{ name }\" are locked, can not delete them.", "Insufficient {name} quota to create resources(left { quota }, input { input }).": "Insufficient {name} quota to create resources(left { quota }, input { input }).", "Interactive": "Interactive", - "Interface": "Interface", "Interface Info": "Interface Info", "Interface Name:": "Interface Name:", "Interface for vendor-specific functionality on this node": "Interface for vendor-specific functionality on this node", "Interface used for attaching and detaching volumes on this node": "Interface used for attaching and detaching volumes on this node", "Interface used for configuring RAID on this node": "Interface used for configuring RAID on this node", + "Interfaces": "Interfaces", "Internal Ip Address": "Internal Ip Address", "Internal Network Bandwidth(Gbps)": "Internal Network Bandwidth(Gbps)", "Internal Port": "Internal Port", @@ -1318,6 +1323,7 @@ "Listener Number": "Listener Number", "Listener Protocol": "Listener Protocol", "Listener Protocol Port": "Listener Protocol Port", + "Listeners": "Listeners", "Lithuania": "Lithuania", "Live Migrate": "Live Migrate", "Live Migration At Destination": "Live Migration At Destination", @@ -1368,7 +1374,7 @@ "Manage Error": "Manage Error", "Manage Host": "Manage Host", "Manage Metadata": "Manage Metadata", - "Manage QoS": "Manage QoS", + "Manage QoS Spec": "Manage QoS Spec", "Manage Resource Types": "Manage Resource Types", "Manage Security Group": "Manage Security Group", "Manage Starting": "Manage Starting", @@ -1404,7 +1410,6 @@ "Maximum interval time for each health check response": "Maximum interval time for each health check response", "Mayotte": "Mayotte", "Mem": "Mem", - "Member": "Member", "Member Count": "Member Count", "Member Detail": "Member Detail", "Member Num": "Member Num", @@ -1583,7 +1588,7 @@ "Only a MAC address or an OpenFlow based datapath_id of the switch are accepted in this field": "Only a MAC address or an OpenFlow based datapath_id of the switch are accepted in this field", "Only subnets that are already connected to the router can be selected.": "Only subnets that are already connected to the router can be selected.", "Open External Gateway": "Open External Gateway", - "OpenStack Service": "OpenStack Service", + "OpenStack Services": "OpenStack Services", "Operating Status": "Operating Status", "Operating System": "Operating System", "Operation Name": "Operation Name", @@ -1598,6 +1603,7 @@ "Original Password": "Original Password", "Other Protocol": "Other Protocol", "Other Service": "Other Service", + "Other Services": "Other Services", "Others": "Others", "Out Cluster": "Out Cluster", "Out of Sync": "Out of Sync", @@ -1662,6 +1668,7 @@ "Physical CPU Usage": "Physical CPU Usage", "Physical Network": "Physical Network", "Physical Node": "Physical Node", + "Physical Nodes": "Physical Nodes", "Physical Storage Usage": "Physical Storage Usage", "Pitcairn": "Pitcairn", "Platform Info": "Platform Info", @@ -1788,8 +1795,8 @@ "Project Range": "Project Range", "Project Scope": "Project Scope", "Project Scope (Project Name: Role Names)": "Project Scope (Project Name: Role Names)", - "Project User": "Project User", - "Project User Group": "Project User Group", + "Project User Groups": "Project User Groups", + "Project Users": "Project Users", "Projects": "Projects", "Promote": "Promote", "Properties": "Properties", @@ -1804,22 +1811,24 @@ "Public": "Public", "Public Access": "Public Access", "Public Address": "Public Address", - "Public Image": "Public Image", + "Public Images": "Public Images", "Public Key": "Public Key", "Published In": "Published In", "Published Out": "Published Out", "Puerto Rico": "Puerto Rico", "QCOW2 - QEMU image format": "QCOW2 - QEMU image format", "Qatar": "Qatar", - "QoS": "QoS", "QoS Bandwidth Egress Limit": "QoS Bandwidth Egress Limit", "QoS Bandwidth Ingress Limit": "QoS Bandwidth Ingress Limit", "QoS Bandwidth Limit": "QoS Bandwidth Limit", "QoS Detail": "QoS Detail", + "QoS Policies": "QoS Policies", "QoS Policy": "QoS Policy", "QoS Policy Detail": "QoS Policy Detail", "QoS Policy ID": "QoS Policy ID", - "QoS Specs ID": "QoS Specs ID", + "QoS Spec": "QoS Spec", + "QoS Spec ID": "QoS Spec ID", + "QoS Specs": "QoS Specs", "QoS policies": "QoS policies", "Qos Policy": "Qos Policy", "Queued": "Queued", @@ -2003,9 +2012,11 @@ "Senegal": "Senegal", "Serbia": "Serbia", "Server Certificate": "Server Certificate", + "Server Certificates": "Server Certificates", "Server Group": "Server Group", "Server Group Detail": "Server Group Detail", "Server Group Member": "Server Group Member", + "Server Groups": "Server Groups", "Server Status": "Server Status", "Server Type": "Server Type", "Service": "Service", @@ -2027,26 +2038,33 @@ "Share Group Detail": "Share Group Detail", "Share Group Type": "Share Group Type", "Share Group Type Detail": "Share Group Type Detail", + "Share Group Types": "Share Group Types", + "Share Groups": "Share Groups", "Share Id": "Share Id", "Share Instance": "Share Instance", "Share Instance Detail": "Share Instance Detail", + "Share Instances": "Share Instances", "Share Network": "Share Network", "Share Network Detail": "Share Network Detail", "Share Network Subnet": "Share Network Subnet", "Share Network Subnets": "Share Network Subnets", + "Share Networks": "Share Networks", "Share Protocol": "Share Protocol", "Share Replica ID": "Share Replica ID", "Share Server": "Share Server", "Share Server Detail": "Share Server Detail", + "Share Servers": "Share Servers", "Share Type": "Share Type", "Share Type Detail": "Share Type Detail", "Share Type ID": "Share Type ID", "Share Type Name": "Share Type Name", "Share Types": "Share Types", "Shared": "Shared", - "Shared Image": "Shared Image", + "Shared Images": "Shared Images", "Shared Network": "Shared Network", - "Shared QoS Policy": "Shared QoS Policy", + "Shared Networks": "Shared Networks", + "Shared QoS Policies": "Shared QoS Policies", + "Shares": "Shares", "Shelve": "Shelve", "Shelve Instance": "Shelve Instance", "Shelved": "Shelved", @@ -2146,27 +2164,27 @@ "Stop refreshing data every {num} seconds": "Stop refreshing data every {num} seconds", "Stopped": "Stopped", "Storage": "Storage", - "Storage Backend": "Storage Backend", + "Storage Backends": "Storage Backends", "Storage Capacity(GiB)": "Storage Capacity(GiB)", - "Storage Cluster": "Storage Cluster", "Storage Cluster Bandwidth": "Storage Cluster Bandwidth", "Storage Cluster IOPS": "Storage Cluster IOPS", "Storage Cluster OSD Latency": "Storage Cluster OSD Latency", "Storage Cluster Status": "Storage Cluster Status", "Storage Cluster Usage": "Storage Cluster Usage", + "Storage Clusters": "Storage Clusters", "Storage IOPS": "Storage IOPS", "Storage Interface": "Storage Interface", "Storage Policy": "Storage Policy", "Storage Pool Capacity Usage": "Storage Pool Capacity Usage", "Storage Types": "Storage Types", - "Sub User": "Sub User", + "Sub Users": "Sub Users", "Subnet": "Subnet", "Subnet Count": "Subnet Count", "Subnet ID": "Subnet ID", "Subnet Name": "Subnet Name", "Subnets": "Subnets", - "Subordinate Project": "Subordinate Project", - "Subordinate User Group": "Subordinate User Group", + "Subordinate Projects": "Subordinate Projects", + "Subordinate User Groups": "Subordinate User Groups", "Succeeded": "Succeeded", "Success": "Success", "Sudan": "Sudan", @@ -2469,10 +2487,11 @@ "VNC": "VNC", "VNIC Type": "VNIC Type", "VPN": "VPN", - "VPN EndPoint Group": "VPN EndPoint Group", - "VPN Gateway": "VPN Gateway", + "VPN EndPoint Groups": "VPN EndPoint Groups", + "VPN Gateways": "VPN Gateways", "VPN Service": "VPN Service", "VPN Service ID": "VPN Service ID", + "VPNs": "VPNs", "VRRP": "VRRP", "Valid": "Valid", "Value": "Value", @@ -2482,6 +2501,7 @@ "Vendor Interface": "Vendor Interface", "Venezuela": "Venezuela", "Verifying": "Verifying", + "Version": "Version", "Vietnam": "Vietnam", "View": "View", "View Detail": "View Detail", @@ -2490,6 +2510,7 @@ "Virtual Adapter": "Virtual Adapter", "Virtual Adapter Detail": "Virtual Adapter Detail", "Virtual Adapter ID": "Virtual Adapter ID", + "Virtual Adapters": "Virtual Adapters", "Virtual LAN": "Virtual LAN", "Virtual LANs": "Virtual LANs", "Virtual Resource Num": "Virtual Resource Num", @@ -2519,6 +2540,7 @@ "Volume Transfer": "Volume Transfer", "Volume Type": "Volume Type", "Volume Type Detail": "Volume Type Detail", + "Volume Types": "Volume Types", "Volumes": "Volumes", "Wallis And Futuna Islands": "Wallis And Futuna Islands", "Warn": "Warn", @@ -2570,7 +2592,6 @@ "authorized by group ": "authorized by group ", "availability zones": "availability zones", "available": "available", - "backup": "backup", "bare metal node": "bare metal node", "bare metal nodes": "bare metal nodes", "be copied": "be copied", diff --git a/src/locales/zh.json b/src/locales/zh.json index 1827b9d8..1e1218c7 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -43,13 +43,13 @@ "Access Control": "访问控制", "Access Key": "访问密钥", "Access Level": "访问级别", - "Access Rule": "访问规则", + "Access Rules": "访问规则", "Access Rules Status": "访问规则状态", "Access To": "访问", "Access Type": "访问类型", "Access Type Setting": "访问类型设置", "Action": "操作", - "Action Log": "操作日志", + "Action Logs": "操作日志", "Active": "运行中", "Active Status": "运行", "Add": "添加", @@ -102,18 +102,18 @@ "All": "全部", "All Flavors": "全部架构", "All ICMP": "所有ICMP协议", - "All Image": "全部镜像", - "All Network": "所有网络", + "All Images": "全部镜像", + "All Networks": "所有网络", "All Port": "所有端口", "All Proto": "所有协议", - "All QoS Policy": "所有QoS策略", + "All QoS Policies": "所有QoS策略", "All TCP": "所有TCP协议", "All UDP": "所有UDP协议", "All data downloaded.": "所有数据已完成下载。", "All network segments are indicated by \"*\", not \"0.0.0.0/0\"": "所有网络段用 “*” 表示,协议不支持 “0.0.0.0/0” 表示所有网段", "Allocate IP": "申请IP", "Allocation Pools": "分配地址池", - "Allowed Address Pair": "可用地址对", + "Allowed Address Pairs": "可用地址对", "Allowed Host": "可用主机", "Always": "总是", "American Samoa": "萨摩亚", @@ -184,6 +184,7 @@ "Availability Zone Hints": "预期可用域", "Availability Zone Info": "可用域信息", "Availability Zone Name": "可用域名称", + "Availability Zones": "可用域", "Availability zone refers to a physical area where power and network are independent of each other in the same area. In the same region, the availability zone and the availability zone can communicate with each other in the intranet, and the available zones can achieve fault isolation.": "可用区是指在同一地域内,电力和网络互相独立的物理区域。在同一地域内可用区与可用区之间内网互通,可用区之间能做到故障隔离。", "Available": "可用", "Available Zone": "可用域", @@ -202,7 +203,6 @@ "Backup File": "备份文件", "Backup File Location": "备份文件地址", "Backup Mode": "备份方式", - "Backup Name": "备份名称", "Backups": "备份", "Backups & Snapshots": "备份和快照", "Bad Gateway (code: 502) ": "无效网关(错误码:502)", @@ -216,13 +216,11 @@ "Bare Metal": "裸机", "Bare Metal Enroll": "裸机注册", "Bare Metal Node Detail": "裸机节点详情", - "Bare Metal Node Edit": "编辑裸机节点", - "Bare Metal Setting": "裸机配置", + "Bare Metal Nodes": "裸机节点", "BareMetal Parameters": "裸机参数", "Base Config": "基础配置", "Base Info": "基本信息", "Base Role": "基础角色", - "BaseDetail": "详情", "Basic Parameters": "基本参数", "Batch Allocate": "批量申请", "Belarus": "白俄罗斯", @@ -236,10 +234,10 @@ "Bind Device Type": "绑定设备类型", "Bind Resource": "绑定资源", "Binding": "绑定", - "Binding Group": "绑定的用户组", + "Binding Groups": "绑定的用户组", "Binding Instance": "绑定云主机", "Binding Profile": "", - "Binding User": "绑定的用户", + "Binding Users": "绑定的用户", "Blank Volume": "空白盘", "Block Device Mapping": "创建块设备中", "Block Migrate": "块迁移", @@ -263,6 +261,7 @@ "Burst limit": "突发限制", "Burundi": "布隆迪", "CA Certificate": "CA证书", + "CA Certificates": "CA证书", "CHECK COMPLETE": "检查完成", "CIDR": "网络地址", "CIDR Format Error(e.g. 192.168.0.0/24, 2001:DB8::/48)": "CIDR格式错误(如:192.168.0.0/24, 2001:DB8::/48)", @@ -279,6 +278,7 @@ "CPU usage Num (Core)": "CPU使用量 (核)", "CPU value is { cpu }, NUMA CPU value is { totalCpu }, need to be equal. ": "CPU核数是 { cpu },NUMA节点的CPU核数是{ totalCpu },需要一致。", "CPU(Core)": "CPU(核数)", + "CPUs": "CPU", "CREATE COMPLETE": "创建完成", "CREATE FAILED": "创建失败", "CREATE IN PROGRESS": "创建中", @@ -306,9 +306,9 @@ "Cert": "", "Certificate Content": "证书内容", "Certificate Detail": "证书详情", - "Certificate Management": "证书管理", "Certificate Name": "证书名称", "Certificate Type": "证书类型", + "Certificates": "证书", "Chad": "乍得", "Change Password": "修改密码", "Change Type": "修改类型", @@ -356,6 +356,7 @@ "Cluster Template": "集群模板", "Cluster Template Detail": "集群模板详情", "Cluster Template Name": "集群模板名称", + "Cluster Templates": "集群模板", "Cluster Type": "集群类型", "Clusters": "集群", "Cocos (Keeling) Islands": "科科斯群岛", @@ -463,7 +464,7 @@ "Create Default Pool": "创建资源池", "Create Domain": "创建域", "Create Encryption": "创建加密", - "Create Extra Specs": "创建额外规格", + "Create Extra Spec": "创建额外规格", "Create Failed": "创建失败", "Create Flavor": "创建云主机类型", "Create Folder": "创建文件夹", @@ -544,9 +545,9 @@ "Current Password": "原密码", "Current Path: ": "当前路径:", "Current Project": "当前项目", - "Current Project Image": "本项目镜像", - "Current Project Network": "当前项目网络", - "Current Project QoS Policy": "当前项目QoS策略", + "Current Project Images": "当前项目镜像", + "Current Project Networks": "当前项目网络", + "Current Project QoS Policies": "当前项目QoS策略", "Current QoS policy name": "当前QoS策略名称", "Current Status": "当前状态", "Current Storage Backend": "当前存储后端", @@ -592,6 +593,7 @@ "Database Instance Detail": "数据库实例详情", "Database Instance Name": "数据库实例名称", "Database Instance Status": "数据库实例状态", + "Database Instances": "数据库实例", "Database Name": "数据库名称", "Database Port": "数据库端口", "Database Service": "数据库服务", @@ -610,7 +612,6 @@ "Delete": "删除", "Delete Allowed Address Pair": "删除可用地址对", "Delete Application Credential": "删除应用凭证", - "Delete Backup": "删除备份", "Delete Bandwidth Egress Rules": "删除带宽出方向限制", "Delete Bandwidth Ingress Rules": "删除带宽入方向限制", "Delete Capsule": "删除集合", @@ -782,7 +783,7 @@ "Edit Default Pool": "编辑资源池", "Edit Domain": "编辑域", "Edit Domain Permission": "编辑域角色", - "Edit Extra Specs": "编辑额外规格", + "Edit Extra Spec": "编辑额外规格", "Edit Flavor": "编辑云主机类型", "Edit Health Monitor": "编辑健康检查器", "Edit Host Aggregate": "编辑主机集合", @@ -898,9 +899,9 @@ "External Network": "外部网络", "External Network ID": "外部网络ID", "External Network Info": "外部网络信息", + "External Networks": "外部网络", "External Port": "源端口", "Extra Infos": "额外信息", - "Extra Spec": "额外规格", "Extra Specs": "额外规格", "FAKE": "FAKE", "FLAT": "FLAT", @@ -987,7 +988,6 @@ "Gateway IP": "网关IP", "Gateway Time-out (code: 504) ": "网关超时(错误码:504 )", "Gateway ip {gateway_ip} conflicts with allocation pool {pool}": "网关地址 {gateway_ip} 和分配地址池 {pool} 冲突", - "General Info": "通用信息", "General Purpose": "通用型", "Georgia": "格鲁吉亚", "Germany": "德国", @@ -1046,6 +1046,7 @@ "Host Aggregates": "主机集合", "Host Average Network IO": "主机平均网络进出宽带", "Host CPU Usage": "主机CPU使用率", + "Host Detail": "主机详情", "Host Disk Average IOPS": "主机平均硬盘IOPS", "Host Memory Usage": "主机内存使用率", "Host Routes": "主机路由", @@ -1064,6 +1065,7 @@ "ID/Floating IP": "ID/浮动IP", "ID/Name": "ID/名称", "IGMP": "", + "IKE Policies": "IKE策略", "IKE Policy": "IKE策略", "IKE Version": "IKE版本", "IP": "IP", @@ -1082,6 +1084,7 @@ "IPMI Username": "IPMI用户名", "IPMITool": "", "IPXE": "", + "IPsec Policies": "IPsec策略", "IPsec Policy": "IPsec策略", "IPsec Site Connection": "IPsec站点连接", "IPsec Site Connections": "IPsec站点连接", @@ -1128,6 +1131,7 @@ "Image Size": "镜像大小", "Image Snapshot Pending": "镜像快照等待上传", "Image Uploading": "镜像上传中", + "Images": "镜像", "Immediate effect": "即时生效", "Immediately delete": "立即删除", "Implied Roles": "隐含角色", @@ -1197,17 +1201,18 @@ "Instance Snapshot": "云主机快照", "Instance Snapshot Detail": "云主机快照详情", "Instance Snapshot Name": "云主机快照名称", + "Instance Snapshots": "云主机快照", "Instance Status": "云主机状态", "Instances": "云主机", "Instances \"{ name }\" are locked, can not delete them.": "云主机\"{ name }\"被锁定,无法删除。", "Insufficient {name} quota to create resources(left { quota }, input { input }).": "{ name }配额不足,无法创建资源,请进行资源数量或配额的调整(剩余{ quota },输入{ input })。", "Interactive": "可交互", - "Interface": "网卡", "Interface Info": "接口信息", "Interface Name:": "网卡ID:", "Interface for vendor-specific functionality on this node": "用于在此节点上特定Vendor功能的接口", "Interface used for attaching and detaching volumes on this node": "用于在此节点上挂载与卸载云硬盘的接口", "Interface used for configuring RAID on this node": "用于在此节点上配置RAID的接口", + "Interfaces": "网卡", "Internal Ip Address": "目标IP", "Internal Network Bandwidth(Gbps)": "内网带宽(Gbps)", "Internal Port": "目标端口", @@ -1318,6 +1323,7 @@ "Listener Number": "监听器数量", "Listener Protocol": "监听器协议", "Listener Protocol Port": "监听器协议端口", + "Listeners": "监听器", "Lithuania": "立陶宛", "Live Migrate": "热迁移", "Live Migration At Destination": "热迁移至目标地址", @@ -1368,7 +1374,7 @@ "Manage Error": "管理失败", "Manage Host": "管理主机", "Manage Metadata": "管理元数据", - "Manage QoS": "管理QoS", + "Manage QoS Spec": "管理QoS规格", "Manage Resource Types": "管理资源类型", "Manage Security Group": "管理安全组", "Manage Starting": "管理开始", @@ -1404,7 +1410,6 @@ "Maximum interval time for each health check response": "每个健康检查响应的最大间隔时间", "Mayotte": "马约特", "Mem": "内存", - "Member": "成员", "Member Count": "成员数量", "Member Detail": "成员详情", "Member Num": "成员数量", @@ -1583,7 +1588,7 @@ "Only a MAC address or an OpenFlow based datapath_id of the switch are accepted in this field": "只可填写交换机的Mac地址或者交换机基于openflow的数据路径ID", "Only subnets that are already connected to the router can be selected.": "仅可选择已经连接过路由器的子网。", "Open External Gateway": "开启公网网关", - "OpenStack Service": "OpenStack服务", + "OpenStack Services": "OpenStack服务", "Operating Status": "操作状态", "Operating System": "操作系统", "Operation Name": "操作名称", @@ -1598,6 +1603,7 @@ "Original Password": "原始密码", "Other Protocol": "其他协议", "Other Service": "其他服务", + "Other Services": "其他服务", "Others": "其他", "Out Cluster": "集群外", "Out of Sync": "不同步", @@ -1662,6 +1668,7 @@ "Physical CPU Usage": "物理CPU使用量", "Physical Network": "物理网络", "Physical Node": "物理节点", + "Physical Nodes": "物理节点", "Physical Storage Usage": "物理存储使用量", "Pitcairn": "皮特凯恩岛", "Platform Info": "平台概况", @@ -1788,8 +1795,8 @@ "Project Range": "项目范围", "Project Scope": "所属项目", "Project Scope (Project Name: Role Names)": "所属项目(项目名称:角色名称)", - "Project User": "项目用户", - "Project User Group": "项目用户组", + "Project User Groups": "项目用户组", + "Project Users": "项目用户", "Projects": "项目", "Promote": "推动", "Properties": "属性", @@ -1804,22 +1811,24 @@ "Public": "公有", "Public Access": "公开访问", "Public Address": "公共地址", - "Public Image": "公有镜像", + "Public Images": "公有镜像", "Public Key": "公钥", "Published In": "", "Published Out": "", "Puerto Rico": "波多黎各", "QCOW2 - QEMU image format": "QCOW2-QEMU 镜像格式", "Qatar": "卡塔尔", - "QoS": "", "QoS Bandwidth Egress Limit": "QoS出方向带宽限制", "QoS Bandwidth Ingress Limit": "QoS入方向带宽限制", "QoS Bandwidth Limit": "QoS带宽限制", "QoS Detail": "QoS详情", + "QoS Policies": "QoS策略", "QoS Policy": "QoS策略", "QoS Policy Detail": "QoS策略详情", "QoS Policy ID": "QoS策略ID", - "QoS Specs ID": "QoS规格ID", + "QoS Spec": "QoS规格", + "QoS Spec ID": "QoS规格ID", + "QoS Specs": "QoS规格", "QoS policies": "QoS策略", "Qos Policy": "QoS策略", "Queued": "已排队", @@ -2003,9 +2012,11 @@ "Senegal": "塞内加尔", "Serbia": "塞尔维亚共和国", "Server Certificate": "服务器证书", + "Server Certificates": "服务器证书", "Server Group": "云主机组", "Server Group Detail": "云主机组详情", "Server Group Member": "云主机组成员", + "Server Groups": "云主机组", "Server Status": "服务状态", "Server Type": "服务类型", "Service": "服务", @@ -2027,26 +2038,33 @@ "Share Group Detail": "共享组详情", "Share Group Type": "共享组类型", "Share Group Type Detail": "共享组类型详情", + "Share Group Types": "共享组类型", + "Share Groups": "共享组", "Share Id": "共享ID", "Share Instance": "共享实例", "Share Instance Detail": "共享实例详情", + "Share Instances": "共享实例", "Share Network": "共享网络", "Share Network Detail": "共享网络详情", "Share Network Subnet": "共享网络子网", "Share Network Subnets": "共享网络子网", + "Share Networks": "共享网络", "Share Protocol": "共享协议", "Share Replica ID": "共享副本ID", "Share Server": "共享服务器", "Share Server Detail": "共享服务器详情", + "Share Servers": "共享服务器", "Share Type": "共享类型", "Share Type Detail": "共享类型详情", "Share Type ID": "共享类型ID", "Share Type Name": "共享类型名称", "Share Types": "共享类型", "Shared": "共享", - "Shared Image": "共享镜像", + "Shared Images": "共享镜像", "Shared Network": "共享网络", - "Shared QoS Policy": "共享QoS策略", + "Shared Networks": "共享网络", + "Shared QoS Policies": "共享QoS策略", + "Shares": "共享", "Shelve": "归档", "Shelve Instance": "归档云主机", "Shelved": "已归档", @@ -2146,27 +2164,27 @@ "Stop refreshing data every {num} seconds": "关闭每{num}秒自动刷新数据", "Stopped": "已关闭", "Storage": "存储", - "Storage Backend": "存储后端", + "Storage Backends": "存储后端", "Storage Capacity(GiB)": "存储容量(GiB)", - "Storage Cluster": "存储集群", "Storage Cluster Bandwidth": "存储集群带宽", "Storage Cluster IOPS": "存储集群IOPS", "Storage Cluster OSD Latency": "存储集群OSD延迟", "Storage Cluster Status": "存储集群状态", "Storage Cluster Usage": "存储集群使用率", + "Storage Clusters": "存储集群", "Storage IOPS": "存储IOPS", "Storage Interface": "Storage接口", "Storage Policy": "存储权限", "Storage Pool Capacity Usage": "存储池容量使用情况", "Storage Types": "存储类型", - "Sub User": "组内用户列表", + "Sub Users": "组内用户列表", "Subnet": "子网", "Subnet Count": "子网数量", "Subnet ID": "子网ID", "Subnet Name": "子网名称", "Subnets": "子网", - "Subordinate Project": "所属项目列表", - "Subordinate User Group": "所属用户组列表", + "Subordinate Projects": "所属项目列表", + "Subordinate User Groups": "所属用户组列表", "Succeeded": "成功", "Success": "成功", "Sudan": "苏丹", @@ -2469,10 +2487,11 @@ "VNC": "", "VNIC Type": "VNIC类型", "VPN": "VPN", - "VPN EndPoint Group": "VPN端点组", - "VPN Gateway": "VPN网关", + "VPN EndPoint Groups": "VPN端点组", + "VPN Gateways": "VPN网关", "VPN Service": "VPN服务", "VPN Service ID": "VPN服务ID", + "VPNs": "VPN", "VRRP": "", "Valid": "有效", "Value": "值", @@ -2482,6 +2501,7 @@ "Vendor Interface": "", "Venezuela": "委内瑞拉", "Verifying": "验证", + "Version": "版本", "Vietnam": "越南", "View": "查看", "View Detail": "查看详情", @@ -2490,6 +2510,7 @@ "Virtual Adapter": "虚拟网卡", "Virtual Adapter Detail": "虚拟网卡详情", "Virtual Adapter ID": "虚拟网卡ID", + "Virtual Adapters": "虚拟网卡", "Virtual LAN": "虚拟网卡", "Virtual LANs": "块虚拟网卡", "Virtual Resource Num": "虚拟资源用量", @@ -2519,6 +2540,7 @@ "Volume Transfer": "云硬盘传输", "Volume Type": "云硬盘类型", "Volume Type Detail": "云硬盘类型详情", + "Volume Types": "云硬盘类型", "Volumes": "云硬盘", "Wallis And Futuna Islands": "沃利斯和富图纳群岛", "Warn": "警告", @@ -2570,7 +2592,6 @@ "authorized by group ": "由组授权", "availability zones": "可用域", "available": "可用", - "backup": "备份", "bare metal node": "裸机节点", "bare metal nodes": "裸机节点", "be copied": "复制", diff --git a/src/pages/base/containers/AdminOverview/components/ResourceOverview.jsx b/src/pages/base/containers/AdminOverview/components/ResourceOverview.jsx index 88ff583e..d5385845 100644 --- a/src/pages/base/containers/AdminOverview/components/ResourceOverview.jsx +++ b/src/pages/base/containers/AdminOverview/components/ResourceOverview.jsx @@ -28,13 +28,13 @@ import styles from '../style.less'; export const card = [ { key: 'serviceNum', - label: t('Instance'), + label: t('Instances'), avatar: adminInstance, to: '/compute/instance-admin', }, { key: 'volumeNum', - label: t('Volume'), + label: t('Volumes'), avatar: adminVolume, to: '/storage/volume-admin', }, diff --git a/src/pages/base/containers/Overview/components/QuotaOverview.jsx b/src/pages/base/containers/Overview/components/QuotaOverview.jsx index 9b409834..18240066 100644 --- a/src/pages/base/containers/Overview/components/QuotaOverview.jsx +++ b/src/pages/base/containers/Overview/components/QuotaOverview.jsx @@ -30,7 +30,7 @@ const colors = { const keyPairTitle = ( - {t('Key Pair')} + {t('Key Pairs')} @@ -46,7 +46,7 @@ export const quotaCardList = [ { text: t('vCPUs'), key: 'cores' }, { text: t('Memory (GiB)'), key: 'ram' }, { text: keyPairTitle, key: 'key_pairs' }, - { text: t('Server Group'), key: 'server_groups' }, + { text: t('Server Groups'), key: 'server_groups' }, ], }, { @@ -79,13 +79,13 @@ export const quotaCardList = [ text: t('Network'), type: 'networks', value: [ - { text: t('Router'), key: 'router' }, - { text: t('Network'), key: 'network' }, - { text: t('Subnet'), key: 'subnet' }, - { text: t('Floating IP'), key: 'floatingip' }, - { text: t('Port'), key: 'port' }, - { text: t('Security Group'), key: 'security_group' }, - { text: t('Security Group Rule'), key: 'security_group_rule' }, + { text: t('Routers'), key: 'router' }, + { text: t('Networks'), key: 'network' }, + { text: t('Subnets'), key: 'subnet' }, + { text: t('Floating IPs'), key: 'floatingip' }, + { text: t('Ports'), key: 'port' }, + { text: t('Security Groups'), key: 'security_group' }, + { text: t('Security Group Rules'), key: 'security_group_rule' }, ], }, ]; @@ -94,13 +94,13 @@ export const shareQuotaCard = { text: t('Share'), type: 'share', value: [ - { text: t('Share'), key: 'shares' }, + { text: t('Shares'), key: 'shares' }, { text: t('Share Gigabytes(GiB)'), key: 'share_gigabytes', }, - { text: t('Share Network'), key: 'share_networks' }, - { text: t('Share Group'), key: 'share_groups' }, + { text: t('Share Networks'), key: 'share_networks' }, + { text: t('Share Groups'), key: 'share_groups' }, ], }; @@ -112,7 +112,7 @@ export const zunQuotaCard = { text: t('Containers'), key: 'zun_containers', }, - { text: t('CPU'), key: 'zun_cpu' }, + { text: t('CPUs'), key: 'zun_cpu' }, { text: t('Memory (MiB)'), key: 'zun_memory' }, { text: t('Disk (GiB)'), key: 'zun_disk' }, ], diff --git a/src/pages/base/containers/Overview/index.jsx b/src/pages/base/containers/Overview/index.jsx index 2d6b0e9c..54393847 100644 --- a/src/pages/base/containers/Overview/index.jsx +++ b/src/pages/base/containers/Overview/index.jsx @@ -28,25 +28,25 @@ import ProjectInfo from './components/ProjectInfo'; const actions = [ { key: 'instance', - label: t('Instance'), + label: t('Instances'), avatar: overviewInstance, to: '/compute/instance', }, { key: 'volume', - label: t('Volume'), + label: t('Volumes'), avatar: overviewVolume, to: '/storage/volume', }, { key: 'network', - label: t('Network'), + label: t('Networks'), avatar: overviewNetwork, to: '/network/networks', }, { key: 'router', - label: t('Router'), + label: t('Routers'), avatar: overviewRouter, to: '/network/router', }, diff --git a/src/pages/compute/containers/Flavor/Detail/index.jsx b/src/pages/compute/containers/Flavor/Detail/index.jsx index f3bec3c2..e9c25a78 100644 --- a/src/pages/compute/containers/Flavor/Detail/index.jsx +++ b/src/pages/compute/containers/Flavor/Detail/index.jsx @@ -78,12 +78,12 @@ export class Detail extends Base { get tabs() { const tabs = [ { - title: t('BaseDetail'), - key: 'BaseDetail', + title: t('Detail'), + key: 'detail', component: BaseDetail, }, { - title: t('Instance'), + title: t('Instances'), key: 'members', component: Members, }, diff --git a/src/pages/compute/containers/HostAggregate/index.jsx b/src/pages/compute/containers/HostAggregate/index.jsx index a2309480..17190d2d 100644 --- a/src/pages/compute/containers/HostAggregate/index.jsx +++ b/src/pages/compute/containers/HostAggregate/index.jsx @@ -26,7 +26,7 @@ export class HostAggregate extends Base { component: Aggregate, }, { - title: t('Availability Zone'), + title: t('Availability Zones'), key: 'availabilityZone', component: AvailabilityZone, }, diff --git a/src/pages/compute/containers/Image/Detail/index.jsx b/src/pages/compute/containers/Image/Detail/index.jsx index 66e7418f..957f1c46 100644 --- a/src/pages/compute/containers/Image/Detail/index.jsx +++ b/src/pages/compute/containers/Image/Detail/index.jsx @@ -87,8 +87,8 @@ export class ImageDetail extends Base { get tabs() { const tabs = [ { - title: t('BaseDetail'), - key: 'BaseDetail', + title: t('Detail'), + key: 'detail', component: BaseDetail, }, ]; diff --git a/src/pages/compute/containers/Image/index.jsx b/src/pages/compute/containers/Image/index.jsx index 0ba9cb67..d361a61d 100644 --- a/src/pages/compute/containers/Image/index.jsx +++ b/src/pages/compute/containers/Image/index.jsx @@ -20,24 +20,24 @@ export class TabImage extends Base { get tabs() { const tabs = [ { - title: t('Current Project Image'), + title: t('Current Project Images'), key: 'project', component: Image, }, { - title: t('Public Image'), + title: t('Public Images'), key: 'public', component: Image, }, { - title: t('Shared Image'), + title: t('Shared Images'), key: 'shared', component: Image, }, ]; if (this.hasAdminRole) { tabs.push({ - title: t('All Image'), + title: t('All Images'), key: 'all', component: Image, }); diff --git a/src/pages/compute/containers/Instance/Detail/ActionLog/index.jsx b/src/pages/compute/containers/Instance/Detail/ActionLog/index.jsx index 523ddc7d..866f3504 100644 --- a/src/pages/compute/containers/Instance/Detail/ActionLog/index.jsx +++ b/src/pages/compute/containers/Instance/Detail/ActionLog/index.jsx @@ -9,7 +9,7 @@ export class ActionLog extends Base { } get name() { - return t('Action Log'); + return t('Action Logs'); } get rowKey() { diff --git a/src/pages/compute/containers/Instance/Detail/index.jsx b/src/pages/compute/containers/Instance/Detail/index.jsx index aa0e3a53..9ee72cf6 100644 --- a/src/pages/compute/containers/Instance/Detail/index.jsx +++ b/src/pages/compute/containers/Instance/Detail/index.jsx @@ -119,17 +119,17 @@ export class InstanceDetail extends Base { get tabs() { const tabs = [ { - title: t('BaseDetail'), - key: 'BaseDetail', + title: t('Detail'), + key: 'detail', component: BaseDetail, }, { - title: t('Instance Snapshot'), + title: t('Instance Snapshots'), key: 'snapshots', component: Snapshots, }, { - title: t('Interface'), + title: t('Interfaces'), key: 'interface', component: VirtualAdapter, }, @@ -139,19 +139,19 @@ export class InstanceDetail extends Base { component: FloatingIps, }, { - title: t('Security Group'), + title: t('Security Groups'), key: 'securityGroup', component: SecurityGroup, }, { - title: t('Action Log'), + title: t('Action Logs'), key: 'action', component: ActionLog, }, ]; if (this.enableCinder) { tabs.splice(1, 0, { - title: t('Volume'), + title: t('Volumes'), key: 'volumes', component: Volumes, }); diff --git a/src/pages/compute/containers/Keypair/Detail/index.jsx b/src/pages/compute/containers/Keypair/Detail/index.jsx index 116af7d7..5a8ada73 100644 --- a/src/pages/compute/containers/Keypair/Detail/index.jsx +++ b/src/pages/compute/containers/Keypair/Detail/index.jsx @@ -56,8 +56,8 @@ export class KeypairDetail extends Base { get tabs() { const tabs = [ { - title: t('BaseDetail'), - key: 'BaseDetail', + title: t('Detail'), + key: 'detail', component: BaseDetail, }, ]; diff --git a/src/pages/configuration/containers/Metadata/Detail/index.jsx b/src/pages/configuration/containers/Metadata/Detail/index.jsx index 44f6bddb..eb12446c 100644 --- a/src/pages/configuration/containers/Metadata/Detail/index.jsx +++ b/src/pages/configuration/containers/Metadata/Detail/index.jsx @@ -57,8 +57,8 @@ export class MetadataDetail extends Base { get tabs() { const tabs = [ { - title: t('BaseDetail'), - key: 'BaseDetail', + title: t('Detail'), + key: 'detail', component: BaseDetail, }, ]; diff --git a/src/pages/configuration/containers/SystemInfo/NeutronAgent/Detail/index.jsx b/src/pages/configuration/containers/SystemInfo/NeutronAgent/Detail/index.jsx index c4c3cb58..d4a4aa9c 100644 --- a/src/pages/configuration/containers/SystemInfo/NeutronAgent/Detail/index.jsx +++ b/src/pages/configuration/containers/SystemInfo/NeutronAgent/Detail/index.jsx @@ -79,20 +79,20 @@ export class KeypairDetail extends Base { get tabs() { const tabs = [ { - title: t('BaseDetail'), - key: 'BaseDetail', + title: t('Detail'), + key: 'detail', component: BaseDetail, }, ]; if (this.detailData.agent_type === 'L3 agent') { tabs.push({ - title: t('Router'), + title: t('Routers'), key: 'router', component: Router, }); } else if (this.detailData.agent_type === 'DHCP agent') { tabs.push({ - title: t('Network'), + title: t('Networks'), key: 'network', component: Network, }); diff --git a/src/pages/container-infra/containers/ClusterTemplates/Detail/index.jsx b/src/pages/container-infra/containers/ClusterTemplates/Detail/index.jsx index 590d2041..fb64ec22 100644 --- a/src/pages/container-infra/containers/ClusterTemplates/Detail/index.jsx +++ b/src/pages/container-infra/containers/ClusterTemplates/Detail/index.jsx @@ -59,7 +59,7 @@ export class ClusterTemplateDetail extends Base { get tabs() { return [ { - title: t('General Info'), + title: t('Detail'), key: 'general_info', component: BaseDetail, }, diff --git a/src/pages/container-infra/containers/Clusters/Detail/index.jsx b/src/pages/container-infra/containers/Clusters/Detail/index.jsx index 4e4b7b2d..26461895 100644 --- a/src/pages/container-infra/containers/Clusters/Detail/index.jsx +++ b/src/pages/container-infra/containers/Clusters/Detail/index.jsx @@ -82,7 +82,7 @@ export class ClustersDetail extends Base { get tabs() { return [ { - title: t('General Info'), + title: t('Detail'), key: 'general_info', component: BaseDetail, }, diff --git a/src/pages/container-service/containers/Capsules/Detail/index.jsx b/src/pages/container-service/containers/Capsules/Detail/index.jsx index 509118c5..b746e6f4 100644 --- a/src/pages/container-service/containers/Capsules/Detail/index.jsx +++ b/src/pages/container-service/containers/Capsules/Detail/index.jsx @@ -62,7 +62,7 @@ export class CapsulesDetail extends Base { get tabs() { return [ { - title: t('General Info'), + title: t('Detail'), key: 'general_info', component: BaseDetail, }, diff --git a/src/pages/container-service/containers/Containers/Detail/index.jsx b/src/pages/container-service/containers/Containers/Detail/index.jsx index bccf61df..87c03179 100644 --- a/src/pages/container-service/containers/Containers/Detail/index.jsx +++ b/src/pages/container-service/containers/Containers/Detail/index.jsx @@ -58,7 +58,7 @@ export class ContainerDetail extends Base { get tabs() { return [ { - title: t('General Info'), + title: t('Detail'), key: 'general_info', component: BaseDetail, }, diff --git a/src/pages/container-service/containers/Hosts/Detail/index.jsx b/src/pages/container-service/containers/Hosts/Detail/index.jsx index 5c831a69..4bc5c3f4 100644 --- a/src/pages/container-service/containers/Hosts/Detail/index.jsx +++ b/src/pages/container-service/containers/Hosts/Detail/index.jsx @@ -60,8 +60,8 @@ export class HostsDetail extends Base { get tabs() { return [ { - title: t('BaseDetail'), - key: 'BaseDetail', + title: t('Detail'), + key: 'detail', component: BaseDetail, }, ]; diff --git a/src/pages/database/containers/Backups/Detail/index.jsx b/src/pages/database/containers/Backups/Detail/index.jsx index 8d4eeb20..0ad6ee43 100644 --- a/src/pages/database/containers/Backups/Detail/index.jsx +++ b/src/pages/database/containers/Backups/Detail/index.jsx @@ -50,7 +50,7 @@ export class BackupsDetail extends Base { get tabs() { return [ { - title: t('General Info'), + title: t('Detail'), key: 'general_info', component: BaseDetail, }, diff --git a/src/pages/database/containers/Configurations/Detail/index.jsx b/src/pages/database/containers/Configurations/Detail/index.jsx index b6302b15..af81226f 100644 --- a/src/pages/database/containers/Configurations/Detail/index.jsx +++ b/src/pages/database/containers/Configurations/Detail/index.jsx @@ -48,7 +48,7 @@ export class ConfigurationsDetail extends Base { get tabs() { return [ { - title: t('General Info'), + title: t('Detail'), key: 'general_info', component: BaseDetail, }, diff --git a/src/pages/database/containers/Instances/Detail/index.jsx b/src/pages/database/containers/Instances/Detail/index.jsx index 6fbb1b29..88471917 100644 --- a/src/pages/database/containers/Instances/Detail/index.jsx +++ b/src/pages/database/containers/Instances/Detail/index.jsx @@ -71,7 +71,7 @@ export class InstancesDetail extends Base { get tabs() { return [ { - title: t('General Info'), + title: t('Detail'), key: 'general_info', component: BaseDetail, }, diff --git a/src/pages/identity/containers/Project/Detail/index.jsx b/src/pages/identity/containers/Project/Detail/index.jsx index 36bca937..4c82dff5 100644 --- a/src/pages/identity/containers/Project/Detail/index.jsx +++ b/src/pages/identity/containers/Project/Detail/index.jsx @@ -80,12 +80,12 @@ export class Detail extends Base { get tabs() { const tabs = [ { - title: t('Project User'), + title: t('Project Users'), key: 'user', component: User, }, { - title: t('Project User Group'), + title: t('Project User Groups'), key: 'userGroup', component: UserGroup, }, diff --git a/src/pages/identity/containers/Role/Detail/index.jsx b/src/pages/identity/containers/Role/Detail/index.jsx index 089fe4d0..1b691b99 100644 --- a/src/pages/identity/containers/Role/Detail/index.jsx +++ b/src/pages/identity/containers/Role/Detail/index.jsx @@ -62,12 +62,12 @@ export class RoleDetail extends Base { component: BaseDetail, }, { - title: t('Binding User'), + title: t('Binding Users'), key: 'user', component: User, }, { - title: t('Binding Group'), + title: t('Binding Groups'), key: 'group', component: Group, }, diff --git a/src/pages/identity/containers/User/Detail/index.jsx b/src/pages/identity/containers/User/Detail/index.jsx index 553953d6..ab2359a1 100644 --- a/src/pages/identity/containers/User/Detail/index.jsx +++ b/src/pages/identity/containers/User/Detail/index.jsx @@ -92,12 +92,12 @@ export class UserDetail extends Base { get tabs() { const tabs = [ { - title: t('Subordinate Project'), + title: t('Subordinate Projects'), key: 'user', component: Project, }, { - title: t('Subordinate User Group'), + title: t('Subordinate User Groups'), key: 'userGroup', component: UserGroup, }, diff --git a/src/pages/identity/containers/UserGroup/Detail/index.jsx b/src/pages/identity/containers/UserGroup/Detail/index.jsx index f12fa292..7afc37e7 100644 --- a/src/pages/identity/containers/UserGroup/Detail/index.jsx +++ b/src/pages/identity/containers/UserGroup/Detail/index.jsx @@ -65,13 +65,13 @@ export class Detail extends Base { get tabs() { const tabs = [ { - title: t('Subordinate Project'), + title: t('Subordinate Projects'), key: 'project', component: Project, }, { - title: t('Sub User'), - key: 'userGroup', + title: t('Sub Users'), + key: 'user', component: User, }, ]; diff --git a/src/pages/network/containers/Certificate/Detail/Container/index.jsx b/src/pages/network/containers/Certificate/Detail/Container/index.jsx index 55564b45..24c025ad 100644 --- a/src/pages/network/containers/Certificate/Detail/Container/index.jsx +++ b/src/pages/network/containers/Certificate/Detail/Container/index.jsx @@ -51,7 +51,7 @@ export class Detail extends Base { get tabs() { return [ { - title: t('BaseDetail'), + title: t('Detail Info'), key: 'detail_info', component: BaseDetail, }, diff --git a/src/pages/network/containers/Certificate/Detail/Secret/index.jsx b/src/pages/network/containers/Certificate/Detail/Secret/index.jsx index 1697744e..02275fd2 100644 --- a/src/pages/network/containers/Certificate/Detail/Secret/index.jsx +++ b/src/pages/network/containers/Certificate/Detail/Secret/index.jsx @@ -49,7 +49,7 @@ export class Detail extends Base { get tabs() { return [ { - title: t('BaseDetail'), + title: t('Detail Info'), key: 'detail_info', component: BaseDetail, }, diff --git a/src/pages/network/containers/Certificate/index.jsx b/src/pages/network/containers/Certificate/index.jsx index aa8b26ee..75c6faad 100644 --- a/src/pages/network/containers/Certificate/index.jsx +++ b/src/pages/network/containers/Certificate/index.jsx @@ -20,12 +20,12 @@ export class Certificate extends Base { get tabs() { const tabs = [ { - title: t('Server Certificate'), + title: t('Server Certificates'), key: 'SERVER', component: CertificateTab, }, { - title: t('CA Certificate'), + title: t('CA Certificates'), key: 'CA', component: CertificateTab, }, diff --git a/src/pages/network/containers/FloatingIp/Detail/index.jsx b/src/pages/network/containers/FloatingIp/Detail/index.jsx index 89ddf217..6e4b6a8f 100644 --- a/src/pages/network/containers/FloatingIp/Detail/index.jsx +++ b/src/pages/network/containers/FloatingIp/Detail/index.jsx @@ -72,8 +72,8 @@ export class FloatingIpDetail extends Base { get tabs() { const tabs = [ { - title: t('BaseDetail'), - key: 'BaseDetail', + title: t('Detail'), + key: 'detail', component: BaseDetail, }, ]; diff --git a/src/pages/network/containers/LoadBalancers/Listener/Detail/index.jsx b/src/pages/network/containers/LoadBalancers/Listener/Detail/index.jsx index 04f5f051..67e8486d 100644 --- a/src/pages/network/containers/LoadBalancers/Listener/Detail/index.jsx +++ b/src/pages/network/containers/LoadBalancers/Listener/Detail/index.jsx @@ -81,7 +81,7 @@ export class ListenerDetail extends Base { component: BaseDetail, }, { - title: t('Member'), + title: t('Members'), key: 'members', component: Members, }, diff --git a/src/pages/network/containers/LoadBalancers/LoadBalancerInstance/Detail/index.jsx b/src/pages/network/containers/LoadBalancers/LoadBalancerInstance/Detail/index.jsx index 41863c71..e021afb1 100644 --- a/src/pages/network/containers/LoadBalancers/LoadBalancerInstance/Detail/index.jsx +++ b/src/pages/network/containers/LoadBalancers/LoadBalancerInstance/Detail/index.jsx @@ -92,7 +92,7 @@ export class LoadBalancerDetail extends Base { get tabs() { const tabs = [ { - title: t('Listener'), + title: t('Listeners'), key: 'listener', component: Listeners, }, diff --git a/src/pages/network/containers/Network/Detail/index.jsx b/src/pages/network/containers/Network/Detail/index.jsx index 2f1cfb92..7deda6e6 100644 --- a/src/pages/network/containers/Network/Detail/index.jsx +++ b/src/pages/network/containers/Network/Detail/index.jsx @@ -133,8 +133,8 @@ export class NetworkDetail extends Base { get tabs() { const tabs = [ { - title: t('BaseDetail'), - key: 'BaseDetail', + title: t('Detail'), + key: 'detail', component: Detail, }, { diff --git a/src/pages/network/containers/Network/index.jsx b/src/pages/network/containers/Network/index.jsx index c6a6b26f..12e7dcf2 100644 --- a/src/pages/network/containers/Network/index.jsx +++ b/src/pages/network/containers/Network/index.jsx @@ -20,24 +20,24 @@ export class Network extends Base { get tabs() { const tabs = [ { - title: t('Current Project Network'), + title: t('Current Project Networks'), key: 'projectNetwork', component: NetworkTab, }, { - title: t('Shared Network'), + title: t('Shared Networks'), key: 'sharedNetwork', component: NetworkTab, }, { - title: t('External Network'), + title: t('External Networks'), key: 'externalNetwork', component: NetworkTab, }, ]; if (this.hasAdminRole) { tabs.push({ - title: t('All Network'), + title: t('All Networks'), key: 'allNetwork', component: NetworkTab, }); diff --git a/src/pages/network/containers/QoSPolicy/Detail/index.jsx b/src/pages/network/containers/QoSPolicy/Detail/index.jsx index c378abdd..1c9ff5b2 100644 --- a/src/pages/network/containers/QoSPolicy/Detail/index.jsx +++ b/src/pages/network/containers/QoSPolicy/Detail/index.jsx @@ -86,12 +86,12 @@ export class QoSPolicyDetail extends Base { get tabs() { const tabs = [ { - title: t('BaseDetail'), - key: 'BaseDetail', + title: t('Detail'), + key: 'detail', component: BaseDetail, }, { - title: t('Floating IP'), + title: t('Floating IPs'), key: 'fip', component: FloatingIp, }, diff --git a/src/pages/network/containers/QoSPolicy/index.jsx b/src/pages/network/containers/QoSPolicy/index.jsx index 930cee76..0361c8bb 100644 --- a/src/pages/network/containers/QoSPolicy/index.jsx +++ b/src/pages/network/containers/QoSPolicy/index.jsx @@ -29,19 +29,19 @@ export class QoSPolicy extends Base { get tabs() { const tabs = [ { - title: t('Current Project QoS Policy'), + title: t('Current Project QoS Policies'), key: 'projectQoSPolicy', component: QoSPolicyComponent, }, { - title: t('Shared QoS Policy'), + title: t('Shared QoS Policies'), key: 'sharedQoSPolicy', component: QoSPolicyComponent, }, ]; if (this.hasAdminRole) { tabs.push({ - title: t('All QoS Policy'), + title: t('All QoS Policies'), key: 'allQoSPolicy', component: QoSPolicyComponent, }); diff --git a/src/pages/network/containers/VPN/IPsecSiteConnection/Detail/index.jsx b/src/pages/network/containers/VPN/IPsecSiteConnection/Detail/index.jsx index 94e2e73f..be3081d8 100644 --- a/src/pages/network/containers/VPN/IPsecSiteConnection/Detail/index.jsx +++ b/src/pages/network/containers/VPN/IPsecSiteConnection/Detail/index.jsx @@ -93,8 +93,8 @@ export class IPsecSiteConnection extends Base { get tabs() { const tabs = [ { - title: t('BaseDetail'), - key: 'BaseDetail', + title: t('Detail'), + key: 'detail', component: BaseDetail, }, ]; diff --git a/src/pages/network/containers/VPN/index.jsx b/src/pages/network/containers/VPN/index.jsx index ddd1f2b0..e7e533e6 100644 --- a/src/pages/network/containers/VPN/index.jsx +++ b/src/pages/network/containers/VPN/index.jsx @@ -37,22 +37,22 @@ export class VPN extends Base { get tabs() { return [ { - title: t('VPN Gateway'), + title: t('VPN Gateways'), key: 'vpn_gateway', component: VPNGateway, }, { - title: t('VPN EndPoint Group'), + title: t('VPN EndPoint Groups'), key: 'vpn_endpoint_groups', component: EndPointGroup, }, { - title: t('IKE Policy'), + title: t('IKE Policies'), key: 'ike_policy', component: IKEPolicy, }, { - title: t('IPsec Policy'), + title: t('IPsec Policies'), key: 'ipsec_policy', component: IPsecPolicy, }, diff --git a/src/pages/network/containers/VirtualAdapter/Detail/AllowedAddressPair/index.jsx b/src/pages/network/containers/VirtualAdapter/Detail/AllowedAddressPair/index.jsx index fe775fa2..bc9953ac 100644 --- a/src/pages/network/containers/VirtualAdapter/Detail/AllowedAddressPair/index.jsx +++ b/src/pages/network/containers/VirtualAdapter/Detail/AllowedAddressPair/index.jsx @@ -56,7 +56,7 @@ export class AllowedAddressPair extends Base { } get name() { - return t('Allowed Address Pair'); + return t('Allowed Address Pairs'); } get actionConfigs() { diff --git a/src/pages/network/containers/VirtualAdapter/Detail/index.jsx b/src/pages/network/containers/VirtualAdapter/Detail/index.jsx index c6bd224b..35c9a256 100644 --- a/src/pages/network/containers/VirtualAdapter/Detail/index.jsx +++ b/src/pages/network/containers/VirtualAdapter/Detail/index.jsx @@ -90,8 +90,8 @@ export class VirtualAdapterDetail extends Base { get tabs() { const tabs = [ { - title: t('BaseDetail'), - key: 'BaseDetail', + title: t('Detail'), + key: 'detail', component: BaseDetail, }, { @@ -105,7 +105,7 @@ export class VirtualAdapterDetail extends Base { component: SecurityGroups, }, { - title: t('Allowed Address Pair'), + title: t('Allowed Address Pairs'), key: 'allowed_address_pair', component: AllowedAddressPair, }, diff --git a/src/pages/share/containers/Share/Detail/index.jsx b/src/pages/share/containers/Share/Detail/index.jsx index 827ff49c..6af23646 100644 --- a/src/pages/share/containers/Share/Detail/index.jsx +++ b/src/pages/share/containers/Share/Detail/index.jsx @@ -76,7 +76,7 @@ export class Detail extends Base { component: Metadata, }, { - title: t('Access Rule'), + title: t('Access Rules'), key: 'rule', component: AccessRule, }, diff --git a/src/pages/share/containers/ShareGroup/Detail/index.jsx b/src/pages/share/containers/ShareGroup/Detail/index.jsx index 9f03c46f..86218d4f 100644 --- a/src/pages/share/containers/ShareGroup/Detail/index.jsx +++ b/src/pages/share/containers/ShareGroup/Detail/index.jsx @@ -70,7 +70,7 @@ export class Detail extends Base { component: BaseDetail, }, { - title: t('Share'), + title: t('Shares'), key: 'share', component: Share, }, diff --git a/src/pages/share/containers/ShareGroupType/Detail/ExtraSpec/actions/Create.jsx b/src/pages/share/containers/ShareGroupType/Detail/ExtraSpec/actions/Create.jsx index 2404033e..4c5f3b8f 100644 --- a/src/pages/share/containers/ShareGroupType/Detail/ExtraSpec/actions/Create.jsx +++ b/src/pages/share/containers/ShareGroupType/Detail/ExtraSpec/actions/Create.jsx @@ -19,10 +19,10 @@ import globalGroupSpecStore from 'stores/manila/group-spec'; export class Create extends ModalAction { static id = 'create'; - static title = t('Create Extra Specs'); + static title = t('Create Extra Spec'); get name() { - return t('Create Extra Specs'); + return t('Create Extra Spec'); } static policy = 'share_group_types_spec:create'; diff --git a/src/pages/share/containers/ShareGroupType/Detail/ExtraSpec/actions/Edit.jsx b/src/pages/share/containers/ShareGroupType/Detail/ExtraSpec/actions/Edit.jsx index f7ec3c0a..d2ab5be2 100644 --- a/src/pages/share/containers/ShareGroupType/Detail/ExtraSpec/actions/Edit.jsx +++ b/src/pages/share/containers/ShareGroupType/Detail/ExtraSpec/actions/Edit.jsx @@ -19,12 +19,12 @@ import globalGroupSpecStore from 'stores/manila/group-spec'; export class Edit extends ModalAction { static id = 'edit'; - static title = t('Edit Extra Specs'); + static title = t('Edit Extra Spec'); static buttonText = t('Edit'); get name() { - return t('Edit Extra Specs'); + return t('Edit Extra Spec'); } get instanceName() { diff --git a/src/pages/share/containers/ShareGroupType/Detail/index.jsx b/src/pages/share/containers/ShareGroupType/Detail/index.jsx index 95a3aef0..10f4f178 100644 --- a/src/pages/share/containers/ShareGroupType/Detail/index.jsx +++ b/src/pages/share/containers/ShareGroupType/Detail/index.jsx @@ -53,7 +53,7 @@ export class Detail extends Base { get tabs() { return [ { - title: t('Extra Spec'), + title: t('Extra Specs'), key: 'extraSpec', component: ExtraSpec, }, diff --git a/src/pages/share/containers/ShareNetwork/Detail/index.jsx b/src/pages/share/containers/ShareNetwork/Detail/index.jsx index 4607a0eb..533567d1 100644 --- a/src/pages/share/containers/ShareNetwork/Detail/index.jsx +++ b/src/pages/share/containers/ShareNetwork/Detail/index.jsx @@ -69,7 +69,7 @@ export class Detail extends Base { component: BaseDetail, }, { - title: t('Share'), + title: t('Shares'), key: 'share', component: Share, }, diff --git a/src/pages/share/containers/ShareServer/Detail/index.jsx b/src/pages/share/containers/ShareServer/Detail/index.jsx index 250c722d..fd1c9d1f 100644 --- a/src/pages/share/containers/ShareServer/Detail/index.jsx +++ b/src/pages/share/containers/ShareServer/Detail/index.jsx @@ -69,7 +69,7 @@ export class Detail extends Base { component: BaseDetail, }, { - title: t('Share'), + title: t('Shares'), key: 'share', component: Share, }, diff --git a/src/pages/share/containers/ShareType/Detail/ExtraSpec/actions/Create.jsx b/src/pages/share/containers/ShareType/Detail/ExtraSpec/actions/Create.jsx index bb1d7eda..9f55db2b 100644 --- a/src/pages/share/containers/ShareType/Detail/ExtraSpec/actions/Create.jsx +++ b/src/pages/share/containers/ShareType/Detail/ExtraSpec/actions/Create.jsx @@ -19,10 +19,10 @@ import globalExtraSpecStore from 'stores/manila/extra-spec'; export class Create extends ModalAction { static id = 'create'; - static title = t('Create Extra Specs'); + static title = t('Create Extra Spec'); get name() { - return t('Create Extra Specs'); + return t('Create Extra Spec'); } static policy = 'share_types_extra_spec:create'; diff --git a/src/pages/share/containers/ShareType/Detail/ExtraSpec/actions/Edit.jsx b/src/pages/share/containers/ShareType/Detail/ExtraSpec/actions/Edit.jsx index 4222b06e..54e9ce25 100644 --- a/src/pages/share/containers/ShareType/Detail/ExtraSpec/actions/Edit.jsx +++ b/src/pages/share/containers/ShareType/Detail/ExtraSpec/actions/Edit.jsx @@ -19,12 +19,12 @@ import globalExtraSpecStore from 'stores/manila/extra-spec'; export class Edit extends ModalAction { static id = 'edit'; - static title = t('Edit Extra Specs'); + static title = t('Edit Extra Spec'); static buttonText = t('Edit'); get name() { - return t('Edit Extra Specs'); + return t('Edit Extra Spec'); } get instanceName() { diff --git a/src/pages/share/containers/ShareType/Detail/index.jsx b/src/pages/share/containers/ShareType/Detail/index.jsx index daf27c3f..595b9e7b 100644 --- a/src/pages/share/containers/ShareType/Detail/index.jsx +++ b/src/pages/share/containers/ShareType/Detail/index.jsx @@ -58,12 +58,12 @@ export class Detail extends Base { get tabs() { return [ { - title: t('Extra Spec'), + title: t('Extra Specs'), key: 'ExtraSpec', component: ExtraSpec, }, { - title: t('Share'), + title: t('Shares'), key: 'share', component: Share, }, diff --git a/src/pages/storage/containers/Container/Detail/index.jsx b/src/pages/storage/containers/Container/Detail/index.jsx index 744efb03..d46921e4 100644 --- a/src/pages/storage/containers/Container/Detail/index.jsx +++ b/src/pages/storage/containers/Container/Detail/index.jsx @@ -211,14 +211,14 @@ export class ContainerObject extends Base { valueRender: 'sinceTime', }, { - title: t('Detail Info'), + title: t('Detail'), dataIndex: 'detail', isHideable: true, render: (_, data) => { const content = ; return ( - {t('Detail Info')} + {t('Detail')} ); }, diff --git a/src/pages/storage/containers/Volume/Detail/index.jsx b/src/pages/storage/containers/Volume/Detail/index.jsx index 7e5b6f87..d6c383f8 100644 --- a/src/pages/storage/containers/Volume/Detail/index.jsx +++ b/src/pages/storage/containers/Volume/Detail/index.jsx @@ -94,12 +94,12 @@ export class VolumeDetail extends Base { component: BaseDetail, }, { - title: t('Volume Backup'), + title: t('Volume Backups'), key: 'backup', component: Backup, }, { - title: t('Volume Snapshot'), + title: t('Volume Snapshots'), key: 'snapshot', component: Snapshot, }, diff --git a/src/pages/storage/containers/VolumeType/QosSpec/Detail/ExtraSpec/actions/Create.jsx b/src/pages/storage/containers/VolumeType/QosSpec/Detail/ExtraSpec/actions/Create.jsx index 61ea3d1f..da22082e 100644 --- a/src/pages/storage/containers/VolumeType/QosSpec/Detail/ExtraSpec/actions/Create.jsx +++ b/src/pages/storage/containers/VolumeType/QosSpec/Detail/ExtraSpec/actions/Create.jsx @@ -19,10 +19,10 @@ import globalQosSpecKeyStore from 'stores/cinder/qos-spec-key'; export class Create extends ModalAction { static id = 'create'; - static title = t('Create Extra Specs'); + static title = t('Create Extra Spec'); get name() { - return t('Create Extra Specs'); + return t('Create Extra Spec'); } static policy = 'volume_extension:qos_specs_manage:update'; diff --git a/src/pages/storage/containers/VolumeType/QosSpec/Detail/ExtraSpec/actions/Edit.jsx b/src/pages/storage/containers/VolumeType/QosSpec/Detail/ExtraSpec/actions/Edit.jsx index a3b4ef70..0d3fd80e 100644 --- a/src/pages/storage/containers/VolumeType/QosSpec/Detail/ExtraSpec/actions/Edit.jsx +++ b/src/pages/storage/containers/VolumeType/QosSpec/Detail/ExtraSpec/actions/Edit.jsx @@ -19,12 +19,12 @@ import globalQosSpecKeyStore from 'stores/cinder/qos-spec-key'; export class Edit extends ModalAction { static id = 'edit'; - static title = t('Edit Extra Specs'); + static title = t('Edit Extra Spec'); static buttonText = t('Edit'); get name() { - return t('Edit Extra Specs'); + return t('Edit Extra Spec'); } get defaultValue() { diff --git a/src/pages/storage/containers/VolumeType/QosSpec/Detail/index.jsx b/src/pages/storage/containers/VolumeType/QosSpec/Detail/index.jsx index 964f725a..3981d863 100644 --- a/src/pages/storage/containers/VolumeType/QosSpec/Detail/index.jsx +++ b/src/pages/storage/containers/VolumeType/QosSpec/Detail/index.jsx @@ -57,7 +57,7 @@ export class Detail extends Base { get tabs() { const tabs = [ { - title: t('Extra Spec'), + title: t('Extra Specs'), key: 'ExtraSpec', component: ExtraSpec, }, diff --git a/src/pages/storage/containers/VolumeType/VolumeType/Detail/ExtraSpec/actions/Create.jsx b/src/pages/storage/containers/VolumeType/VolumeType/Detail/ExtraSpec/actions/Create.jsx index 35bfe47d..32332665 100644 --- a/src/pages/storage/containers/VolumeType/VolumeType/Detail/ExtraSpec/actions/Create.jsx +++ b/src/pages/storage/containers/VolumeType/VolumeType/Detail/ExtraSpec/actions/Create.jsx @@ -19,10 +19,10 @@ import globalExtraSpecStore from 'stores/cinder/extra-spec'; export class Create extends ModalAction { static id = 'create'; - static title = t('Create Extra Specs'); + static title = t('Create Extra Spec'); get name() { - return t('Create Extra Specs'); + return t('Create Extra Spec'); } static policy = 'volume_extension:types_extra_specs:create'; diff --git a/src/pages/storage/containers/VolumeType/VolumeType/Detail/ExtraSpec/actions/Edit.jsx b/src/pages/storage/containers/VolumeType/VolumeType/Detail/ExtraSpec/actions/Edit.jsx index 479659f6..930237be 100644 --- a/src/pages/storage/containers/VolumeType/VolumeType/Detail/ExtraSpec/actions/Edit.jsx +++ b/src/pages/storage/containers/VolumeType/VolumeType/Detail/ExtraSpec/actions/Edit.jsx @@ -19,12 +19,12 @@ import globalExtraSpecStore from 'stores/cinder/extra-spec'; export class Edit extends ModalAction { static id = 'edit'; - static title = t('Edit Extra Specs'); + static title = t('Edit Extra Spec'); static buttonText = t('Edit'); get name() { - return t('Edit Extra Specs'); + return t('Edit Extra Spec'); } get instanceName() { diff --git a/src/pages/storage/containers/VolumeType/VolumeType/Detail/index.jsx b/src/pages/storage/containers/VolumeType/VolumeType/Detail/index.jsx index 4ba5d442..9a945a56 100644 --- a/src/pages/storage/containers/VolumeType/VolumeType/Detail/index.jsx +++ b/src/pages/storage/containers/VolumeType/VolumeType/Detail/index.jsx @@ -54,7 +54,7 @@ export class Detail extends Base { valueRender: 'yesNo', }, { - title: t('QoS Specs ID'), + title: t('QoS Spec ID'), dataIndex: 'qos_specs_id', valueRender: 'noValue', }, @@ -65,7 +65,7 @@ export class Detail extends Base { const { encryption } = this.detailData; const tabs = [ { - title: t('Extra Spec'), + title: t('Extra Specs'), key: 'ExtraSpec', component: ExtraSpec, }, diff --git a/src/pages/storage/containers/VolumeType/VolumeType/actions/ManageQos.jsx b/src/pages/storage/containers/VolumeType/VolumeType/actions/ManageQos.jsx index 33ff9c96..30d2a7ec 100644 --- a/src/pages/storage/containers/VolumeType/VolumeType/actions/ManageQos.jsx +++ b/src/pages/storage/containers/VolumeType/VolumeType/actions/ManageQos.jsx @@ -21,7 +21,7 @@ import globalQosSpecStore from 'stores/cinder/qos-spec'; export class ManageQos extends ModalAction { static id = 'manage-qos'; - static title = t('Manage QoS'); + static title = t('Manage QoS Spec'); get name() { return t('manage qos spec'); @@ -73,7 +73,7 @@ export class ManageQos extends ModalAction { }, { name: 'qosSpec', - label: t('QoS'), + label: t('QoS Spec'), type: 'select-table', required: false, data: this.QosMap, diff --git a/src/pages/storage/containers/VolumeType/index.jsx b/src/pages/storage/containers/VolumeType/index.jsx index 30cc3bea..36eeae84 100644 --- a/src/pages/storage/containers/VolumeType/index.jsx +++ b/src/pages/storage/containers/VolumeType/index.jsx @@ -21,12 +21,12 @@ export class VolumeTypaAll extends Base { get tabs() { const tabs = [ { - title: t('Volume Type'), + title: t('Volume Types'), key: 'volume-type', component: VolumeType, }, { - title: t('QoS'), + title: t('QoS Specs'), key: 'qos', component: QosSpec, }, diff --git a/src/resources/neutron/qos-policy.jsx b/src/resources/neutron/qos-policy.jsx index e922f8b1..16f17630 100644 --- a/src/resources/neutron/qos-policy.jsx +++ b/src/resources/neutron/qos-policy.jsx @@ -145,7 +145,7 @@ export function getQoSPolicyTabs(extraProps = {}) { }; const ret = [ { - title: t('Current Project QoS Policy'), + title: t('Current Project QoS Policies'), key: 'project', props: merge({}, baseProps, { ...getQosPolicySelectTableProps({ self: this }), @@ -155,7 +155,7 @@ export function getQoSPolicyTabs(extraProps = {}) { }), }, { - title: t('Shared QoS Policy'), + title: t('Shared QoS Policies'), key: 'shared', props: merge({}, baseProps, { ...getQosPolicySelectTableProps({ shared: true, self: this }), @@ -168,7 +168,7 @@ export function getQoSPolicyTabs(extraProps = {}) { if (this.hasAdminRole) { ret.push({ - title: t('All QoS Policy'), + title: t('All QoS Policies'), key: 'all', props: merge({}, baseProps, { ...getQosPolicySelectTableProps({ all: true, self: this }), diff --git a/test/e2e/integration/pages/compute/aggregate.spec.js b/test/e2e/integration/pages/compute/aggregate.spec.js index 7fa45d18..e4ba0a3c 100644 --- a/test/e2e/integration/pages/compute/aggregate.spec.js +++ b/test/e2e/integration/pages/compute/aggregate.spec.js @@ -77,6 +77,6 @@ describe('The Aggregate Page', () => { }); it('successfully availability zone', () => { - cy.clickTab('Availability Zone', 'availabilityZone'); + cy.clickTab('Availability Zones', 'availabilityZone'); }); }); diff --git a/test/e2e/integration/pages/compute/flavor.spec.js b/test/e2e/integration/pages/compute/flavor.spec.js index 19ad0f06..f5816266 100644 --- a/test/e2e/integration/pages/compute/flavor.spec.js +++ b/test/e2e/integration/pages/compute/flavor.spec.js @@ -50,7 +50,7 @@ describe('The Flavor Page', () => { .checkTableFirstRow(name) .goToDetail() .checkDetailName(name) - .clickDetailTab('Instance', 'members'); + .clickDetailTab('Instances', 'members'); cy.goBackToList(listUrl); }); diff --git a/test/e2e/integration/pages/compute/image.spec.js b/test/e2e/integration/pages/compute/image.spec.js index cb8a6eca..ad13e3ba 100644 --- a/test/e2e/integration/pages/compute/image.spec.js +++ b/test/e2e/integration/pages/compute/image.spec.js @@ -48,7 +48,7 @@ describe('The Image Page', () => { }); it('successfully list', () => { - cy.clickTab('Public Image', 'public').clickTab('Shared Image', 'shared'); + cy.clickTab('Public Images', 'public').clickTab('Shared Images', 'shared'); }); it('successfully create', () => { diff --git a/test/e2e/integration/pages/compute/instance.spec.js b/test/e2e/integration/pages/compute/instance.spec.js index b7f218ee..c5282c2d 100644 --- a/test/e2e/integration/pages/compute/instance.spec.js +++ b/test/e2e/integration/pages/compute/instance.spec.js @@ -74,10 +74,10 @@ describe('The Instance Page', () => { it('successfully detail', () => { cy.tableSearchText(name).checkTableFirstRow(name).goToDetail(); cy.checkDetailName(name); - cy.clickDetailTab('Volume', 'volumes') - .clickDetailTab('Interface', 'interface') + cy.clickDetailTab('Volumes', 'volumes') + .clickDetailTab('Interfaces', 'interface') .clickDetailTab('Floating IPs', 'floatingIps') - .clickDetailTab('Security Group', 'securityGroup'); + .clickDetailTab('Security Groups', 'securityGroup'); cy.goBackToList(listUrl); }); diff --git a/test/e2e/integration/pages/compute/ironic.spec.js b/test/e2e/integration/pages/compute/ironic.spec.js index 98730440..6b16ad2e 100644 --- a/test/e2e/integration/pages/compute/ironic.spec.js +++ b/test/e2e/integration/pages/compute/ironic.spec.js @@ -82,9 +82,9 @@ onlyOn(ironicServiceEnabled, () => { it('successfully detail', () => { cy.tableSearchText(name).checkTableFirstRow(name).goToDetail(); cy.checkDetailName(name); - cy.clickDetailTab('Interface', 'interface') + cy.clickDetailTab('Interfaces', 'interface') .clickDetailTab('Floating IPs', 'floatingIps') - .clickDetailTab('Security Group', 'securityGroup'); + .clickDetailTab('Security Groups', 'securityGroup'); cy.goBackToList(listUrl); }); diff --git a/test/e2e/integration/pages/configuration/system.spec.js b/test/e2e/integration/pages/configuration/system.spec.js index 0f1a2b0b..bb9d78ab 100644 --- a/test/e2e/integration/pages/configuration/system.spec.js +++ b/test/e2e/integration/pages/configuration/system.spec.js @@ -101,14 +101,14 @@ describe('The System Info Page', () => { cy.clickTab(NeutronAgentsTab) .tableSearchText('l3') .goToDetail(0) - .clickDetailTab('Router', 'router'); + .clickDetailTab('Routers', 'router'); }); it('successfully neutron agent l3 remove router', () => { cy.clickTab(NeutronAgentsTab) .tableSearchText('l3') .goToDetail(0) - .clickDetailTab('Router') + .clickDetailTab('Routers') .tableSearchText(routerName) .clickActionButtonByTitle('Remove') .clickConfirmActionSubmitButton(10000); @@ -129,14 +129,14 @@ describe('The System Info Page', () => { cy.clickTab(NeutronAgentsTab) .tableSearchText('dhcp') .goToDetail(0) - .clickDetailTab('Network', 'network'); + .clickDetailTab('Networks', 'network'); }); it('successfully neutron agent dhcp remove network', () => { cy.clickTab(NeutronAgentsTab) .tableSearchText('dhcp') .goToDetail(0) - .clickDetailTab('Network') + .clickDetailTab('Networks') .tableSearchText(networkName) .clickActionButtonByTitle('Remove') .clickConfirmActionSubmitButton(); @@ -146,7 +146,7 @@ describe('The System Info Page', () => { cy.clickTab(NeutronAgentsTab) .tableSearchText('dhcp') .goToDetail(0) - .clickDetailTab('Network') + .clickDetailTab('Networks') .clickHeaderButton(1) .wait(5000) .formTableSelectBySearch('network', networkName) diff --git a/test/e2e/integration/pages/identity/project.spec.js b/test/e2e/integration/pages/identity/project.spec.js index dcaa1fd2..b42bfe8c 100644 --- a/test/e2e/integration/pages/identity/project.spec.js +++ b/test/e2e/integration/pages/identity/project.spec.js @@ -42,7 +42,7 @@ describe('The Project Page', () => { cy.tableSearchText(name) .goToDetail() .checkDetailName(name) - .clickDetailTab('Project User Group', 'userGroup') + .clickDetailTab('Project User Groups', 'userGroup') .clickDetailTab('Project Quota', 'quota'); cy.goBackToList(listUrl); }); diff --git a/test/e2e/integration/pages/identity/role.spec.js b/test/e2e/integration/pages/identity/role.spec.js index e98f9839..e3820581 100644 --- a/test/e2e/integration/pages/identity/role.spec.js +++ b/test/e2e/integration/pages/identity/role.spec.js @@ -25,8 +25,8 @@ describe('The Role Page', () => { it('successfully detail', () => { cy.tableSearchText(name) .goToDetail() - .clickDetailTab('Binding User', 'user') - .clickDetailTab('Binding Group', 'group'); + .clickDetailTab('Binding Users', 'user') + .clickDetailTab('Binding Groups', 'group'); cy.goBackToList(listUrl); }); }); diff --git a/test/e2e/integration/pages/identity/user-group.spec.js b/test/e2e/integration/pages/identity/user-group.spec.js index 7c31cf59..fbbd6bfc 100644 --- a/test/e2e/integration/pages/identity/user-group.spec.js +++ b/test/e2e/integration/pages/identity/user-group.spec.js @@ -39,8 +39,8 @@ describe('The User Group Page', () => { cy.tableSearchText(name) .goToDetail() .checkDetailName(name) - .clickDetailTab('Sub User', 'userGroup') - .clickDetailTab('Subordinate Project', 'project'); + .clickDetailTab('Sub Users', 'user') + .clickDetailTab('Subordinate Projects', 'project'); cy.goBackToList(listUrl); }); @@ -51,9 +51,7 @@ describe('The User Group Page', () => { .formTransferRight('select_user', username) .clickModalActionSubmitButton(); - cy.tableSearchText(name) - .goToDetail() - .clickDetailTab('Sub User', 'userGroup'); + cy.tableSearchText(name).goToDetail().clickDetailTab('Sub Users', 'user'); }); it('successfully edit', () => { diff --git a/test/e2e/integration/pages/identity/user.spec.js b/test/e2e/integration/pages/identity/user.spec.js index a334fd87..ea25d6b5 100644 --- a/test/e2e/integration/pages/identity/user.spec.js +++ b/test/e2e/integration/pages/identity/user.spec.js @@ -68,8 +68,8 @@ describe('The User Page', () => { it('successfully detail', () => { cy.tableSearchText(name) .goToDetail() - .clickDetailTab('Subordinate User Group', 'userGroup') - .clickDetailTab('Subordinate Project', 'user'); + .clickDetailTab('Subordinate User Groups', 'userGroup') + .clickDetailTab('Subordinate Projects', 'user'); cy.goBackToList(listUrl); }); diff --git a/test/e2e/integration/pages/manila/share-type.spec.js b/test/e2e/integration/pages/manila/share-type.spec.js index 64db7f28..19ea9736 100644 --- a/test/e2e/integration/pages/manila/share-type.spec.js +++ b/test/e2e/integration/pages/manila/share-type.spec.js @@ -50,15 +50,15 @@ onlyOn(manilaServiceEnabled, () => { cy.tableSimpleSearchText(name) .goToDetail() .checkDetailName(name) - .clickDetailTab('Extra Spec', 'ExtraSpec') - .clickDetailTab('Share', 'share'); + .clickDetailTab('Extra Specs', 'ExtraSpec') + .clickDetailTab('Shares', 'share'); cy.goBackToList(listUrl); }); it('successfully create extra specs', () => { cy.tableSimpleSearchText(name) .goToDetail() - .clickDetailTab('Extra Spec') + .clickDetailTab('Extra Specs') .wait(5000) .clickHeaderButton(1) .formInput('keyName', extraKeyName) @@ -69,7 +69,7 @@ onlyOn(manilaServiceEnabled, () => { it('successfully edit extra specs', () => { cy.tableSimpleSearchText(name) .goToDetail() - .clickDetailTab('Extra Spec') + .clickDetailTab('Extra Specs') .wait(5000) .tableSearchText(extraKeyName) .clickActionButtonByTitle('Edit') @@ -80,7 +80,7 @@ onlyOn(manilaServiceEnabled, () => { it('successfully delete extra specs', () => { cy.tableSimpleSearchText(name) .goToDetail() - .clickDetailTab('Extra Spec') + .clickDetailTab('Extra Specs') .wait(5000) .tableSearchText(extraKeyName) .clickFirstActionButton() diff --git a/test/e2e/integration/pages/network/lb.spec.js b/test/e2e/integration/pages/network/lb.spec.js index 0cf5189c..9b2f4a6c 100644 --- a/test/e2e/integration/pages/network/lb.spec.js +++ b/test/e2e/integration/pages/network/lb.spec.js @@ -184,7 +184,7 @@ onlyOn(lbServiceEnabled, () => { .goToDetail(1, 2000) .tableSearchText(listener) .goToDetail(0, 2000) - .clickDetailTab('Member', 'members'); + .clickDetailTab('Members', 'members'); }); it('successfully create listener member', () => { @@ -192,7 +192,7 @@ onlyOn(lbServiceEnabled, () => { .goToDetail(1, 2000) .tableSearchText(listener) .goToDetail(0, 2000) - .clickDetailTab('Member') + .clickDetailTab('Members') .clickHeaderButton(1) .formButtonClick('extMembers') .get('.ant-form-item') @@ -209,7 +209,7 @@ onlyOn(lbServiceEnabled, () => { .goToDetail(1, 2000) .tableSearchText(listener) .goToDetail(0, 2000) - .clickDetailTab('Member') + .clickDetailTab('Members') .clickFirstActionButton() .wait(2000) .formInput('weight', 2) @@ -222,7 +222,7 @@ onlyOn(lbServiceEnabled, () => { .goToDetail(1, 2000) .tableSearchText(listener) .goToDetail(0, 2000) - .clickDetailTab('Member') + .clickDetailTab('Members') .clickConfirmActionButton('Delete') .goBackToList() .tableSearchText(listener) diff --git a/test/e2e/integration/pages/network/network.spec.js b/test/e2e/integration/pages/network/network.spec.js index ea374eab..e02a77c4 100644 --- a/test/e2e/integration/pages/network/network.spec.js +++ b/test/e2e/integration/pages/network/network.spec.js @@ -28,10 +28,10 @@ describe('The Network Page', () => { }); it('successfully fetch List', () => { - cy.clickTab('Shared Network', 'sharedNetwork'); - cy.clickTab('External Network', 'externalNetwork'); + cy.clickTab('Shared Networks', 'sharedNetwork'); + cy.clickTab('External Networks', 'externalNetwork'); // cy.clickTab('All Network', 'allNetwork'); - cy.clickTab('Current Project Network', 'projectNetwork'); + cy.clickTab('Current Project Networks', 'projectNetwork'); }); it('successfully create with subnet', () => { diff --git a/test/e2e/integration/pages/network/virtual-adapter.spec.js b/test/e2e/integration/pages/network/virtual-adapter.spec.js index 2fda1674..a99f5530 100644 --- a/test/e2e/integration/pages/network/virtual-adapter.spec.js +++ b/test/e2e/integration/pages/network/virtual-adapter.spec.js @@ -66,15 +66,15 @@ describe('The Virtual Adapter Page', () => { .checkDetailName(name) .clickDetailTab('Fixed IPs', 'ips') .clickDetailTab('Security Groups', 'groups') - .clickDetailTab('Allowed Address Pair', 'allowed_address_pair') - .clickDetailTab('BaseDetail', 'BaseDetail'); + .clickDetailTab('Allowed Address Pairs', 'allowed_address_pair') + .clickDetailTab('Detail', 'detail'); cy.goBackToList(listUrl); }); it('successfully create allowed address pair', () => { cy.tableSearchText(name) .goToDetail() - .clickDetailTab('Allowed Address Pair') + .clickDetailTab('Allowed Address Pairs') .clickHeaderButton(1) .formSelect('ip_version') .formInput('ip_address', '10.10.10.1/24') @@ -86,7 +86,7 @@ describe('The Virtual Adapter Page', () => { it('successfully delete allowed address pair', () => { cy.tableSearchText(name) .goToDetail() - .clickDetailTab('Allowed Address Pair') + .clickDetailTab('Allowed Address Pairs') .clickConfirmActionInFirst(); }); diff --git a/test/e2e/integration/pages/network/vpn.spec.js b/test/e2e/integration/pages/network/vpn.spec.js index 370fd931..b0544442 100644 --- a/test/e2e/integration/pages/network/vpn.spec.js +++ b/test/e2e/integration/pages/network/vpn.spec.js @@ -59,7 +59,7 @@ onlyOn(vpnServiceEnabled, () => { }); it('successfully create local endpoint', () => { - cy.clickTab('VPN EndPoint Group', 'vpn_endpoint_groups') + cy.clickTab('VPN EndPoint Groups', 'vpn_endpoint_groups') .clickHeaderButton(1) .wait(5000) .formInput('name', endpointLocal) @@ -72,7 +72,7 @@ onlyOn(vpnServiceEnabled, () => { }); it('successfully create peer endpoint', () => { - cy.clickTab('VPN EndPoint Group', 'vpn_endpoint_groups') + cy.clickTab('VPN EndPoint Groups', 'vpn_endpoint_groups') .clickHeaderButton(1) .formInput('name', endpointPeer) .formText('description', endpointPeer) @@ -83,7 +83,7 @@ onlyOn(vpnServiceEnabled, () => { }); it('successfully create ike policy', () => { - cy.clickTab('IKE Policy', 'ike_policy') + cy.clickTab('IKE Policies', 'ike_policy') .clickHeaderButton(1) .formInput('name', ikePolicy) .formText('description', ikePolicy) @@ -91,7 +91,7 @@ onlyOn(vpnServiceEnabled, () => { }); it('successfully create ipsec policy', () => { - cy.clickTab('IPsec Policy', 'ipsec_policy') + cy.clickTab('IPsec Policies', 'ipsec_policy') .clickHeaderButton(1) .formInput('name', ipsecPolicy) .formText('description', ipsecPolicy) @@ -118,7 +118,10 @@ onlyOn(vpnServiceEnabled, () => { }); it('successfully detail ipsec site connection', () => { - cy.clickTab('IPsec Site Connections', 'ipsec_site_connections').tableSearchText(ipsecSiteConnection); + cy.clickTab( + 'IPsec Site Connections', + 'ipsec_site_connections' + ).tableSearchText(ipsecSiteConnection); cy.goToDetail().wait(30000); cy.goBackToList(listUrl); }); @@ -138,7 +141,7 @@ onlyOn(vpnServiceEnabled, () => { }); it('successfully edit ipsec policy', () => { - cy.clickTab('IPsec Policy') + cy.clickTab('IPsec Policies') .tableSearchText(ipsecPolicy) .clickFirstActionButton() .formText('description', 'description') @@ -146,13 +149,13 @@ onlyOn(vpnServiceEnabled, () => { }); it('successfully delete ipsec policy', () => { - cy.clickTab('IPsec Policy') + cy.clickTab('IPsec Policies') .tableSearchText(ipsecPolicy) .clickConfirmActionButton('Delete'); }); it('successfully edit ike policy', () => { - cy.clickTab('IKE Policy') + cy.clickTab('IKE Policies') .tableSearchText(ikePolicy) .clickFirstActionButton() .formText('description', 'description') @@ -160,13 +163,13 @@ onlyOn(vpnServiceEnabled, () => { }); it('successfully delete ike policy', () => { - cy.clickTab('IKE Policy') + cy.clickTab('IKE Policies') .tableSearchText(ikePolicy) .clickConfirmActionButton('Delete'); }); it('successfully edit endpoint', () => { - cy.clickTab('VPN EndPoint Group') + cy.clickTab('VPN EndPoint Groups') .tableSearchText(endpointLocal) .clickFirstActionButton() .formText('description', 'description') @@ -174,7 +177,7 @@ onlyOn(vpnServiceEnabled, () => { }); it('successfully delete endpoint', () => { - cy.clickTab('VPN EndPoint Group') + cy.clickTab('VPN EndPoint Groups') .tableSearchText(endpointLocal) .clickConfirmActionButton('Delete') .wait(5000) diff --git a/test/e2e/integration/pages/storage/backup.spec.js b/test/e2e/integration/pages/storage/backup.spec.js index 3ce0bd29..2bae5d99 100644 --- a/test/e2e/integration/pages/storage/backup.spec.js +++ b/test/e2e/integration/pages/storage/backup.spec.js @@ -71,7 +71,7 @@ onlyOn(backupServiceEnabled, () => { cy.visitPage(volumeListUrl) .tableSearchText(volumeName) .goToDetail() - .clickDetailTab('Volume Backup', 'backup') + .clickDetailTab('Volume Backups', 'backup') .tableSearchText(name) .goToDetail(); }); diff --git a/test/e2e/integration/pages/storage/qos.spec.js b/test/e2e/integration/pages/storage/qos.spec.js index 36caaa64..c4c755df 100644 --- a/test/e2e/integration/pages/storage/qos.spec.js +++ b/test/e2e/integration/pages/storage/qos.spec.js @@ -19,7 +19,7 @@ describe('The Qos Specs Page', () => { const name = `e2e-qos-${Cypress._.random(0, 1e6)}`; beforeEach(() => { - cy.loginAdmin(listUrl).clickTab('QoS'); + cy.loginAdmin(listUrl).clickTab('QoS Specs'); }); it('successfully create', () => { diff --git a/test/e2e/integration/pages/storage/snapshot.spec.js b/test/e2e/integration/pages/storage/snapshot.spec.js index cc413aec..6adef202 100644 --- a/test/e2e/integration/pages/storage/snapshot.spec.js +++ b/test/e2e/integration/pages/storage/snapshot.spec.js @@ -50,7 +50,7 @@ describe('The Volume Snapshot Page', () => { cy.visitPage(volumeListUrl) .tableSearchText(volumeName) .goToDetail() - .clickDetailTab('Volume Snapshot', 'snapshot') + .clickDetailTab('Volume Snapshots', 'snapshot') .tableSearchText(name) .goToDetail(); }); diff --git a/test/e2e/integration/pages/storage/volume-type.spec.js b/test/e2e/integration/pages/storage/volume-type.spec.js index d33b6ea5..bfe693ee 100644 --- a/test/e2e/integration/pages/storage/volume-type.spec.js +++ b/test/e2e/integration/pages/storage/volume-type.spec.js @@ -27,7 +27,7 @@ describe('The Volume Type Page', () => { }); it('successfully prepare resource', () => { - cy.clickTab('QoS') + cy.clickTab('QoS Specs') .clickHeaderButton(1) .formInput('name', qosName) .formSelect('consumer') @@ -51,7 +51,7 @@ describe('The Volume Type Page', () => { it('successfully create extra specs', () => { cy.tableSearchText(name) .goToDetail() - .clickDetailTab('Extra Spec') + .clickDetailTab('Extra Specs') .wait(5000) .clickHeaderButton(1) .formInput('keyname', extraKeyName) @@ -62,7 +62,7 @@ describe('The Volume Type Page', () => { it('successfully edit extra specs', () => { cy.tableSearchText(name) .goToDetail() - .clickDetailTab('Extra Spec') + .clickDetailTab('Extra Specs') .wait(5000) .tableSearchText(extraKeyName) .clickActionButtonByTitle('Edit') @@ -73,7 +73,7 @@ describe('The Volume Type Page', () => { it('successfully delete extra specs', () => { cy.tableSearchText(name) .goToDetail() - .clickDetailTab('Extra Spec') + .clickDetailTab('Extra Specs') .wait(5000) .tableSearchText(extraKeyName) .clickFirstActionButton() diff --git a/test/e2e/integration/pages/storage/volume.spec.js b/test/e2e/integration/pages/storage/volume.spec.js index 903f5634..aad94d8c 100644 --- a/test/e2e/integration/pages/storage/volume.spec.js +++ b/test/e2e/integration/pages/storage/volume.spec.js @@ -77,8 +77,8 @@ describe('The Volume Page', () => { .checkTableFirstRow(name) .goToDetail() .checkDetailName(name); - cy.clickDetailTab('Volume Backup', 'backup').clickDetailTab( - 'Volume Snapshot', + cy.clickDetailTab('Volume Backups', 'backup').clickDetailTab( + 'Volume Snapshots', 'snapshot' ); cy.goBackToList(listUrl); @@ -94,7 +94,7 @@ describe('The Volume Page', () => { cy.tableSearchText(name) .goToDetail() - .clickDetailTab('Volume Snapshot') + .clickDetailTab('Volume Snapshots') .tableSearchText(snapshotName) .checkTableFirstRow(snapshotName);