dashboard-shell-shell 3.0.5-test.2 → 3.0.5-test.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/icons/iconfont.css +4 -1
- package/assets/images/pl/dark/logo.png +0 -0
- package/assets/styles/all.scss +3 -1
- package/assets/styles/base/_variables.scss +5 -5
- package/assets/styles/global/_button.scss +8 -8
- package/assets/styles/global/_select.scss +1 -1
- package/assets/styles/global/_tooltip.scss +9 -5
- package/assets/styles/themes/_light.scss +3 -1
- package/assets/styles/vendor/vue-select.scss +2 -1
- package/assets/translations/zh-hans.yaml +140 -11
- package/components/ActionDropdown.vue +1 -1
- package/components/ButtonDropdown.vue +3 -1
- package/components/CodeMirror.vue +6 -4
- package/components/ContainerResourceLimit.vue +2 -2
- package/components/CopyToClipboard.vue +15 -0
- package/components/Drawer/Chrome.vue +2 -2
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +30 -27
- package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +1 -1
- package/components/Drawer/ResourceDetailDrawer/index.vue +5 -4
- package/components/ExplorerMembers.vue +28 -4
- package/components/GlobalRoleBindings.vue +48 -112
- package/components/PodSecurityAdmission.vue +1 -1
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +1 -3
- package/components/Resource/Detail/Metadata/KeyValue.vue +8 -4
- package/components/Resource/Detail/Metadata/index.vue +3 -1
- package/components/Resource/Detail/TitleBar/Title.vue +4 -3
- package/components/Resource/Detail/TitleBar/Top.vue +2 -0
- package/components/Resource/Detail/TitleBar/composables.ts +16 -1
- package/components/Resource/Detail/TitleBar/index.vue +113 -25
- package/components/ResourceDetail/Masthead/index.vue +1 -1
- package/components/ResourceDetail/Masthead/latest.vue +1 -1
- package/components/ResourceDetail/Masthead/legacy.vue +236 -165
- package/components/ResourceDetail/legacy.vue +44 -28
- package/components/ResourceList/Masthead.vue +11 -15
- package/components/SideNav.vue +1 -1
- package/components/SortableTable/index.vue +9 -4
- package/components/Tabbed/index.vue +6 -1
- package/components/auth/Principal.vue +42 -13
- package/components/auth/RoleDetailEdit.vue +11 -7
- package/components/breadcrumb/index.vue +124 -0
- package/components/form/ArrayList.vue +164 -147
- package/components/form/ArrayListGrouped.vue +3 -1
- package/components/form/ChangePassword.vue +1 -1
- package/components/form/Command.vue +4 -5
- package/components/form/Footer.vue +1 -0
- package/components/form/HealthCheck.vue +0 -2
- package/components/form/HookOption.vue +87 -58
- package/components/form/InputWithSelect.vue +8 -7
- package/components/form/KeyValue.vue +20 -2
- package/components/form/LabeledSelect.vue +6 -3
- package/components/form/Labels.vue +2 -2
- package/components/form/MatchExpressions.vue +3 -4
- package/components/form/Members/ClusterMembershipEditor.vue +1 -1
- package/components/form/Members/ClusterPermissionsEditor.vue +5 -5
- package/components/form/Members/MembershipEditor.vue +2 -2
- package/components/form/NameNsDescription.vue +1 -1
- package/components/form/Networking.vue +6 -9
- package/components/form/NodeAffinity.vue +29 -28
- package/components/form/PodAffinity.vue +23 -23
- package/components/form/Probe.vue +15 -11
- package/components/form/ResourceQuota/Namespace.vue +4 -4
- package/components/form/ResourceQuota/NamespaceRow.vue +11 -9
- package/components/form/ResourceQuota/Project.vue +4 -4
- package/components/form/ResourceQuota/ProjectRow.vue +36 -30
- package/components/form/ResourceSelector.vue +1 -1
- package/components/form/Security.vue +1 -3
- package/components/form/Select.vue +6 -1
- package/components/form/ServiceNameSelect.vue +2 -5
- package/components/form/ServicePorts.vue +149 -75
- package/components/form/Taints.vue +2 -1
- package/components/form/Tolerations.vue +12 -9
- package/components/form/ValueFromResource.vue +110 -96
- package/components/form/WorkloadPorts.vue +143 -123
- package/components/nav/Header.vue +3 -4
- package/components/nav/NamespaceFilter.vue +15 -21
- package/components/nav/TopLevelMenu.vue +99 -125
- package/components/nav/Type.vue +3 -3
- package/config/product/explorer.js +4 -1
- package/config/router/navigation-guards/index.js +52 -3
- package/detail/node.vue +28 -23
- package/dialog/AddCustomBadgeDialog.vue +17 -9
- package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +9 -6
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +3 -1
- package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
- package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
- package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
- package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
- package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
- package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
- package/edit/networking.k8s.io.ingress/Certificate.vue +7 -5
- package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
- package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
- package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
- package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -3
- package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
- package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +12 -11
- package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
- package/edit/persistentvolume/index.vue +3 -1
- package/edit/persistentvolumeclaim.vue +2 -0
- package/edit/secret/index.vue +2 -2
- package/edit/service.vue +4 -1
- package/edit/storage.k8s.io.storageclass/index.vue +10 -8
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
- package/edit/workload/Job.vue +31 -34
- package/edit/workload/Upgrading.vue +5 -5
- package/edit/workload/index.vue +21 -17
- package/edit/workload/storage/Mount.vue +1 -0
- package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
- package/edit/workload/storage/azureDisk.vue +14 -10
- package/edit/workload/storage/azureFile.vue +9 -7
- package/edit/workload/storage/csi/index.vue +6 -9
- package/edit/workload/storage/emptyDir.vue +7 -5
- package/edit/workload/storage/gcePersistentDisk.vue +9 -7
- package/edit/workload/storage/hostPath.vue +7 -5
- package/edit/workload/storage/nfs.vue +8 -6
- package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
- package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +20 -15
- package/edit/workload/storage/secret.vue +9 -6
- package/edit/workload/storage/vsphereVolume.vue +11 -7
- package/initialize/app-extended.js +7 -1
- package/package.json +1 -1
- package/pages/account/index.vue +95 -115
- package/pages/auth/setup.vue +35 -16
- package/pages/c/_cluster/auth/roles/index.vue +38 -5
- package/pages/c/_cluster/explorer/ConfigBadge.vue +1 -1
- package/pages/c/_cluster/explorer/tools/index.vue +6 -6
- package/pages/home.vue +3 -4
- package/pkg/tsconfig.json +9 -9
- package/pkg/vue.config.js +1 -1
- package/plugins/dashboard-store/resource-class.js +28 -27
- package/rancher-components/BadgeState/BadgeState.vue +33 -52
- package/rancher-components/Banner/Banner.vue +6 -3
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +31 -2
- package/rancher-components/RcDropdown/RcDropdownMenu.vue +8 -7
- package/scripts/publish-shell.sh +1 -1
- package/store/i18n.js +4 -0
- package/store/type-map.js +1 -1
- package/types/shell/index.d.ts +4 -30
- package/utils/error.js +3 -1
- package/utils/errorTranslate.json +247 -2
- package/vue.config.js +1 -1
|
@@ -63,60 +63,41 @@ export default defineComponent({
|
|
|
63
63
|
</script>
|
|
64
64
|
|
|
65
65
|
<template>
|
|
66
|
-
<
|
|
67
|
-
<
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
/>{{ msg }}
|
|
72
|
-
</span>
|
|
66
|
+
<div style="display: flex;flex-direction: row;align-items: center;font-size: 12px;">
|
|
67
|
+
<div :class="{ [bg]: true }"></div>
|
|
68
|
+
<span style="margin-left: 5px;">{{ msg }}</span>
|
|
69
|
+
|
|
70
|
+
</div>
|
|
73
71
|
</template>
|
|
74
|
-
|
|
75
72
|
<style lang="scss" scoped>
|
|
76
|
-
.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
border:
|
|
81
|
-
border-radius: 20px;
|
|
82
|
-
|
|
83
|
-
&.bg-info {
|
|
84
|
-
border-color: var(--info);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
&.bg-error {
|
|
88
|
-
border-color: var(--error);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
&.bg-warning {
|
|
92
|
-
border-color: var(--warning);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Successful states are de-emphasized by using [text-]color instead of background-color
|
|
96
|
-
&.bg-success {
|
|
97
|
-
color: var(--success);
|
|
98
|
-
background: transparent;
|
|
99
|
-
border-color: var(--success);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Added badge-disabled instead of bg-disabled since bg-disabled is used in other places with !important styling, an investigation is needed to make the naming consistent
|
|
103
|
-
&.badge-disabled {
|
|
104
|
-
color: var(--badge-state-disabled-text);
|
|
105
|
-
background-color: var( --badge-state-disabled-bg);
|
|
106
|
-
border: 1px solid var(--badge-state-disabled-border);
|
|
107
|
-
}
|
|
73
|
+
.bg-error {
|
|
74
|
+
width: 10px; /* 圆点的宽度 */
|
|
75
|
+
height: 10px; /* 圆点的高度 */
|
|
76
|
+
background-color: #DD0C17; /* 圆点的颜色 */
|
|
77
|
+
border-radius: 50%; /* 设置为圆形 */
|
|
108
78
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
79
|
+
.bg-darker {
|
|
80
|
+
width: 10px; /* 圆点的宽度 */
|
|
81
|
+
height: 10px; /* 圆点的高度 */
|
|
82
|
+
background-color: #DD0C17; /* 圆点的颜色 */
|
|
83
|
+
border-radius: 50%; /* 设置为圆形 */
|
|
84
|
+
}
|
|
85
|
+
.bg-success {
|
|
86
|
+
width: 10px; /* 圆点的宽度 */
|
|
87
|
+
height: 10px; /* 圆点的高度 */
|
|
88
|
+
background-color: #95F204 !important; /* 圆点的颜色 */
|
|
89
|
+
border-radius: 50%; /* 设置为圆形 */
|
|
90
|
+
}
|
|
91
|
+
.bg-warning {
|
|
92
|
+
width: 10px; /* 圆点的宽度 */
|
|
93
|
+
height: 10px; /* 圆点的高度 */
|
|
94
|
+
background-color: #DAC342; /* 圆点的颜色 */
|
|
95
|
+
border-radius: 50%; /* 设置为圆形 */
|
|
96
|
+
}
|
|
97
|
+
.bg-info {
|
|
98
|
+
width: 10px; /* 圆点的宽度 */
|
|
99
|
+
height: 10px; /* 圆点的高度 */
|
|
100
|
+
background-color: #1890FF; /* 圆点的颜色 */
|
|
101
|
+
border-radius: 50%; /* 设置为圆形 */
|
|
121
102
|
}
|
|
122
103
|
</style>
|
|
@@ -164,6 +164,7 @@ $icon-size: 24px;
|
|
|
164
164
|
margin: 0px 0px 20px 0px;
|
|
165
165
|
position: relative;
|
|
166
166
|
width: 100%;
|
|
167
|
+
min-height: 32px;
|
|
167
168
|
color: var(--body-text);
|
|
168
169
|
|
|
169
170
|
&__icon {
|
|
@@ -201,13 +202,15 @@ $icon-size: 24px;
|
|
|
201
202
|
}
|
|
202
203
|
|
|
203
204
|
&__content {
|
|
204
|
-
padding:
|
|
205
|
+
padding: 0px 10px;
|
|
205
206
|
transition: all 0.2s ease;
|
|
206
207
|
line-height: 12px;
|
|
207
208
|
width: 100%;
|
|
208
209
|
border-left: solid $left-border-size transparent;
|
|
209
210
|
display: flex;
|
|
210
211
|
gap: 3px;
|
|
212
|
+
height: 32px;
|
|
213
|
+
align-items: center;
|
|
211
214
|
word-wrap:break-word;
|
|
212
215
|
word-break:break-all;
|
|
213
216
|
|
|
@@ -227,8 +230,8 @@ $icon-size: 24px;
|
|
|
227
230
|
}
|
|
228
231
|
|
|
229
232
|
.info & {
|
|
230
|
-
background: var(--info-banner-bg);
|
|
231
|
-
|
|
233
|
+
// background: var(--info-banner-bg);
|
|
234
|
+
background: #f2f2f2;
|
|
232
235
|
border-color: var(--info);
|
|
233
236
|
}
|
|
234
237
|
|
|
@@ -123,8 +123,8 @@ export default defineComponent({
|
|
|
123
123
|
&.null {
|
|
124
124
|
|
|
125
125
|
.status-icon {
|
|
126
|
-
top:
|
|
127
|
-
right:
|
|
126
|
+
top: 8px !important;
|
|
127
|
+
right: 25px !important;
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
|
|
@@ -146,6 +146,35 @@ export default defineComponent({
|
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
+
.labeled-select{
|
|
150
|
+
.labeled-tooltip{
|
|
151
|
+
&.null {
|
|
152
|
+
.status-icon {
|
|
153
|
+
top: 10px !important;
|
|
154
|
+
right: 25px !important;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
&.error {
|
|
159
|
+
|
|
160
|
+
.status-icon {
|
|
161
|
+
top: 9px !important;
|
|
162
|
+
right: 20px;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
.labeled-input{
|
|
168
|
+
.labeled-tooltip{
|
|
169
|
+
&.null {
|
|
170
|
+
.status-icon {
|
|
171
|
+
top: 10px !important;
|
|
172
|
+
right: 10px !important;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
149
178
|
// Ensure code blocks inside tootips don't look awful
|
|
150
179
|
.v-popper__popper.v-popper--theme-tooltip {
|
|
151
180
|
.v-popper__inner {
|
|
@@ -33,10 +33,10 @@ const hasOptions = (options: DropdownOption[]) => {
|
|
|
33
33
|
:data-testid="dataTestid"
|
|
34
34
|
:aria-label="buttonAriaLabel"
|
|
35
35
|
>
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
<div v-if="showIcon">
|
|
37
|
+
<i data-v-5db2c2c7="" class="icon icon-actions" alt="More actions icon"></i>
|
|
38
|
+
</div>
|
|
39
|
+
<a v-else href="javascript:;">操作</a>
|
|
40
40
|
</rc-dropdown-trigger>
|
|
41
41
|
<template #dropdownCollection>
|
|
42
42
|
<template
|
|
@@ -58,15 +58,16 @@ const hasOptions = (options: DropdownOption[]) => {
|
|
|
58
58
|
</template> -->
|
|
59
59
|
{{ a.label }}
|
|
60
60
|
</rc-dropdown-item>
|
|
61
|
-
<rc-dropdown-separator
|
|
61
|
+
<!-- <rc-dropdown-separator
|
|
62
62
|
v-else
|
|
63
|
-
/>
|
|
63
|
+
/> -->
|
|
64
64
|
</template>
|
|
65
65
|
<rc-dropdown-item
|
|
66
66
|
v-if="!hasOptions(options)"
|
|
67
67
|
disabled
|
|
68
68
|
>
|
|
69
|
-
|
|
69
|
+
<!-- No actions available -->
|
|
70
|
+
暂无可执行的操作。
|
|
70
71
|
</rc-dropdown-item>
|
|
71
72
|
</template>
|
|
72
73
|
</rc-dropdown>
|
package/scripts/publish-shell.sh
CHANGED
package/store/i18n.js
CHANGED
|
@@ -108,6 +108,7 @@ export const getters = {
|
|
|
108
108
|
...args
|
|
109
109
|
};
|
|
110
110
|
|
|
111
|
+
moreArgs['count'] = moreArgs['count'] !== undefined ? moreArgs['count'] : 1
|
|
111
112
|
return formatter.format(moreArgs);
|
|
112
113
|
} else {
|
|
113
114
|
return '?';
|
|
@@ -231,6 +232,9 @@ export const actions = {
|
|
|
231
232
|
if ( !selected || !exists) {
|
|
232
233
|
selected = 'zh-hans';
|
|
233
234
|
}
|
|
235
|
+
|
|
236
|
+
// selected = 'none'
|
|
237
|
+
selected = 'zh-hans'
|
|
234
238
|
|
|
235
239
|
return dispatch('switchTo', selected);
|
|
236
240
|
},
|
package/store/type-map.js
CHANGED
|
@@ -515,7 +515,7 @@ export const getters = {
|
|
|
515
515
|
|
|
516
516
|
groupsForVirTypes(state) {
|
|
517
517
|
return (product, name) => {
|
|
518
|
-
return state
|
|
518
|
+
return state?.virtualTypes?.[product]?.find(item => item.name === name)?.icon;
|
|
519
519
|
};
|
|
520
520
|
},
|
|
521
521
|
|
package/types/shell/index.d.ts
CHANGED
|
@@ -3053,37 +3053,24 @@ export default class Resource {
|
|
|
3053
3053
|
divider: boolean;
|
|
3054
3054
|
action?: undefined;
|
|
3055
3055
|
label?: undefined;
|
|
3056
|
-
icon?: undefined;
|
|
3057
3056
|
enabled?: undefined;
|
|
3057
|
+
altAction?: undefined;
|
|
3058
3058
|
bulkable?: undefined;
|
|
3059
3059
|
bulkAction?: undefined;
|
|
3060
3060
|
weight?: undefined;
|
|
3061
|
-
altAction?: undefined;
|
|
3062
3061
|
} | {
|
|
3063
3062
|
action: string;
|
|
3064
3063
|
label: any;
|
|
3065
|
-
icon: string;
|
|
3066
3064
|
enabled: any;
|
|
3067
3065
|
divider?: undefined;
|
|
3066
|
+
altAction?: undefined;
|
|
3068
3067
|
bulkable?: undefined;
|
|
3069
3068
|
bulkAction?: undefined;
|
|
3070
3069
|
weight?: undefined;
|
|
3071
|
-
altAction?: undefined;
|
|
3072
|
-
} | {
|
|
3073
|
-
action: string;
|
|
3074
|
-
label: any;
|
|
3075
|
-
icon: string;
|
|
3076
|
-
bulkable: boolean;
|
|
3077
|
-
bulkAction: string;
|
|
3078
|
-
enabled: boolean;
|
|
3079
|
-
weight: number;
|
|
3080
|
-
divider?: undefined;
|
|
3081
|
-
altAction?: undefined;
|
|
3082
3070
|
} | {
|
|
3083
3071
|
action: string;
|
|
3084
3072
|
altAction: string;
|
|
3085
3073
|
label: any;
|
|
3086
|
-
icon: string;
|
|
3087
3074
|
bulkable: boolean;
|
|
3088
3075
|
enabled: any;
|
|
3089
3076
|
bulkAction: string;
|
|
@@ -3095,37 +3082,24 @@ export default class Resource {
|
|
|
3095
3082
|
divider: boolean;
|
|
3096
3083
|
action?: undefined;
|
|
3097
3084
|
label?: undefined;
|
|
3098
|
-
icon?: undefined;
|
|
3099
3085
|
enabled?: undefined;
|
|
3086
|
+
altAction?: undefined;
|
|
3100
3087
|
bulkable?: undefined;
|
|
3101
3088
|
bulkAction?: undefined;
|
|
3102
3089
|
weight?: undefined;
|
|
3103
|
-
altAction?: undefined;
|
|
3104
3090
|
} | {
|
|
3105
3091
|
action: string;
|
|
3106
3092
|
label: any;
|
|
3107
|
-
icon: string;
|
|
3108
3093
|
enabled: any;
|
|
3109
3094
|
divider?: undefined;
|
|
3095
|
+
altAction?: undefined;
|
|
3110
3096
|
bulkable?: undefined;
|
|
3111
3097
|
bulkAction?: undefined;
|
|
3112
3098
|
weight?: undefined;
|
|
3113
|
-
altAction?: undefined;
|
|
3114
|
-
} | {
|
|
3115
|
-
action: string;
|
|
3116
|
-
label: any;
|
|
3117
|
-
icon: string;
|
|
3118
|
-
bulkable: boolean;
|
|
3119
|
-
bulkAction: string;
|
|
3120
|
-
enabled: boolean;
|
|
3121
|
-
weight: number;
|
|
3122
|
-
divider?: undefined;
|
|
3123
|
-
altAction?: undefined;
|
|
3124
3099
|
} | {
|
|
3125
3100
|
action: string;
|
|
3126
3101
|
altAction: string;
|
|
3127
3102
|
label: any;
|
|
3128
|
-
icon: string;
|
|
3129
3103
|
bulkable: boolean;
|
|
3130
3104
|
enabled: any;
|
|
3131
3105
|
bulkAction: string;
|
package/utils/error.js
CHANGED
|
@@ -199,9 +199,11 @@ export function translateError(error) {
|
|
|
199
199
|
|
|
200
200
|
if (matches) {
|
|
201
201
|
if (matches.length == 1) {
|
|
202
|
+
console.log('00045', error);
|
|
202
203
|
error = error.replace(regex, translation.replacement);
|
|
203
204
|
} else {
|
|
204
|
-
error = translation.
|
|
205
|
+
error = error.replace(regex, (...args) => translation.replacement.replace(/\$([1-9]\d*)/g, (_, idx) => args[Number(idx)] || ''))
|
|
206
|
+
console.log('00046', error);
|
|
205
207
|
}
|
|
206
208
|
}
|
|
207
209
|
}
|
|
@@ -1,5 +1,246 @@
|
|
|
1
1
|
{
|
|
2
2
|
"translations": [
|
|
3
|
+
{
|
|
4
|
+
"pattern": "The new password must not be the same as the current password",
|
|
5
|
+
"replacement": "新密码不能与当前密码相同,请重新设置",
|
|
6
|
+
"flags": "gi"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"pattern": "guest memory is greater than the configured maxguest memory",
|
|
10
|
+
"replacement": "内存已超过所配置的最大客户机内存",
|
|
11
|
+
"flags": "gi"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"pattern": "memory hotplug is only available for vms with at least (\\d+[a-z]*) of guest memory",
|
|
15
|
+
"replacement": "内存热插拔仅适用于客户机内存至少为 $1 的虚拟机",
|
|
16
|
+
"flags": "gi"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"pattern": "storage class must contain csi\\.storage\\.k8s\\.io/(provisioner-secret-name|provisioner-secret-namespace|node-stage-secret-name|node-stage-secret-namespace|node-publish-secret-name|node-publish-secret-namespace)(?:,\\s*)?(.*)",
|
|
20
|
+
"replacement": "存储池必须包含以下 CSI 密钥注解:$1$2",
|
|
21
|
+
"flags": "gi"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"pattern": "sourceimagename is required when image source type is \"clone\"",
|
|
25
|
+
"replacement": "镜像来源类型为“克隆”时,必须填写源镜像名称",
|
|
26
|
+
"flags": "gi"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"pattern": "([^\"\\s]+) exceeds the file size limit of (\\d+) bytes",
|
|
30
|
+
"replacement": "文件 '$1' 超过大小限制 $2 字节",
|
|
31
|
+
"flags": "gi"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"pattern": "failure while starting vmi: virtualmachineinstance\\.kubevirt\\.io \"([^\"]+)\" is invalid: metadata\\.labels: invalid value: \"([^\"]+)\": name part must consist of alphanumeric characters, '-', '_' or '\\.', and must start and end with an alphanumeric character",
|
|
35
|
+
"replacement": "启动虚拟机实例失败:'$1' 标签值 '$2' 无效,只能包含字母、数字、'-','_'或'.',且以字母/数字开头和结尾",
|
|
36
|
+
"flags": "gi"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"pattern": "virtualmachine\\.kubevirt\\.io \"([^\"]+)\" is invalid:[\\s\\S]*?metadata\\.labels: invalid value: \"([^\"]*)\"[\\s\\S]*?regex used for validation is '([^']+)'",
|
|
40
|
+
"replacement": "虚拟机 '$1' 标签值 '$2' 无效:只能包含字母、数字、'-','_' 或 '.',且以字母/数字开头结尾(正则:$3)",
|
|
41
|
+
"flags": "gi"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"pattern": "virtualmachine\\.kubevirt\\.io \"([^\"]+)\" is invalid:[\\s\\S]*?spec\\.template: Invalid value: corev1\\.PodTemplateSpec \\{[\\s\\S]*?spec: corev1\\.PodSpec \\{[\\s\\S]*?containers: \\[corev1\\.Container \\{[\\s\\S]*?image: \"([^\"]*)\",[\\s\\S]*?\\}\\],[\\s\\S]*?nodeSelector: map\\[([^:]+): ([^\\]]+)\\],[\\s\\S]*?\\},[\\s\\S]*?\\},[\\s\\S]*?\\},[\\s\\S]*?regex used for validation is '([^']+)'",
|
|
45
|
+
"replacement": "虚拟机 '$1' 的镜像 '$2' 无法在节点标签 '$3=$4' 的节点上运行(正则:$5)",
|
|
46
|
+
"flags": "gi"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"pattern": "role is locked and cannot be assigned",
|
|
50
|
+
"replacement": "角色已被锁定,不能再分配",
|
|
51
|
+
"flags": "gi"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"pattern": "invalid current password",
|
|
55
|
+
"replacement": "当前密码输入错误,请重新输入",
|
|
56
|
+
"flags": "gi"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"pattern": "spec\\.template\\.spec\\.podaffinity\\.requiredduringschedulingignoredduringexecution\\[(\\d+)\\]\\.topologykey: required value: can not be empty[\\s\\S]*?regex used for validation is '([^']+)'",
|
|
60
|
+
"replacement": "拓扑键不能为空",
|
|
61
|
+
"flags": "gi"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"pattern": "pcidevice ([^\\s]+) has no iommugroup available",
|
|
65
|
+
"replacement": "PCI 设备 '$1' 没有可用的 IOMMU 组",
|
|
66
|
+
"flags": "gi"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"pattern": "invalidbodycontent 422: failed to parse totalsnapshotsizequota: quantities must match the regular expression '\\^\\(\\[\\+\\-\\]\\?\\[0-9\\.\\]\\+\\)\\(\\[eeinumkkmgtp\\]\\*\\[\\-\\+\\]\\?\\[0-9\\]\\*\\)\\$'",
|
|
70
|
+
"replacement": "快照配额不能为空",
|
|
71
|
+
"flags": "gi"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"pattern": "secrets \"([^\"]+)\" already exists",
|
|
75
|
+
"replacement": "密钥 \"$1\" 已存在",
|
|
76
|
+
"flags": "gi"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"pattern": "backup target is invalid",
|
|
80
|
+
"replacement": "备份目标无效",
|
|
81
|
+
"flags": "gi"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"pattern": "failed to list objects with param:[\\s\\S]*?server gave http response to https client",
|
|
85
|
+
"replacement": "列举对象失败:服务器返回 HTTP 响应,但客户端使用 HTTPS,请检查协议配置",
|
|
86
|
+
"flags": "gi"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"pattern": "clusternetwork\\.network\\.harvesterhci\\.io \"([^\"]+)\" is invalid: metadata\\.name: invalid value: \"([^\"]*)\": a lowercase rfc 1123 subdomain must consist of lower case alphanumeric characters, '-' or '\\.', and must start and end with an alphanumeric character",
|
|
90
|
+
"replacement": "集群网络名称 '$1' 无效:须符合 RFC 1123 子域名规则,只能使用小写字母、数字、'-' 或 '.',且以字母或数字开头和结尾",
|
|
91
|
+
"flags": "gi"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"pattern": "loadbalancer\\.loadbalancer\\.harvesterhci\\.io \"([^\"]+)\" is invalid: \\[spec\\.listeners\\[(\\d+)\\]\\.(backendport|port): required value[^\\]]*\\]",
|
|
95
|
+
"replacement": "负载均衡器 '$1' 配置无效:第 $2 个监听器的 $3 为必填项",
|
|
96
|
+
"flags": "gi"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"pattern": "can't delete cluster network (\\S+) because vlanconfig\\(s\\) \\[(.*?)\\] under this clusternetwork are still existing",
|
|
100
|
+
"replacement": "无法删除集群网络 '$1',因其下仍存在 VLAN 配置 [$2]",
|
|
101
|
+
"flags": "gi"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"pattern": "value: (\\d+) must be in range \\[1 \\.\\. (\\d+)\\]",
|
|
105
|
+
"replacement": "值 $1 超出范围,必须在 1–$2 之间",
|
|
106
|
+
"flags": "gi"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"pattern": "can't delete vlanconfig (\\S+) because it is blocked by vm\\(s\\) ([^/]+)/(\\S+) which must be stopped at first",
|
|
110
|
+
"replacement": "无法删除 VLAN 配置 '$1':需先停止虚拟机 '$2/$3'",
|
|
111
|
+
"flags": "gi"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"pattern": "cannot find nfs path",
|
|
115
|
+
"replacement": "无法找到 NFS 路径",
|
|
116
|
+
"flags": "gi"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"pattern": "get \"([^\"]+)\": unsupported protocol scheme \"\"",
|
|
120
|
+
"replacement": "url 无效",
|
|
121
|
+
"flags": "gi"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"pattern": "cannot mount nfs ([^\\s]+)[\\s\\S]*?no such file or directory[\\s\\S]*?cannot mount using nfsv4",
|
|
125
|
+
"replacement": "备份存储的端点无法访问",
|
|
126
|
+
"flags": "gi"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"pattern": "can't create nad ([^/]+)/([^\\s]+) because the gateway ([^\\s]+) is invalid",
|
|
130
|
+
"replacement": "无法创建虚拟网络 '$1/$2',因为网关 '$3' 无效",
|
|
131
|
+
"flags": "gi"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"pattern": "can't create nad ([^/]+)/([^\\s]+) because the cidr ([^\\s]+) is invalid",
|
|
135
|
+
"replacement": "无法创建虚拟网络 '$1/$2',因为 CIDR '$3' 无效",
|
|
136
|
+
"flags": "gi"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"pattern": "no matching backup found for url ([^\\s]+) and backing image ([^\\s]+)",
|
|
140
|
+
"replacement": "未找到与 URL $1 和镜像 $2 匹配的备份",
|
|
141
|
+
"flags": "gi"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"pattern": "take virtual machine snapshot ([^\\s]+) successfully\\.",
|
|
145
|
+
"replacement": "虚拟机快照 '$1' 创建成功。",
|
|
146
|
+
"flags": "gi"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"pattern": "delete virtual machine snapshot ([^\\s]+) successfully\\.",
|
|
150
|
+
"replacement": "虚拟机快照 '$1' 删除成功。",
|
|
151
|
+
"flags": "gi"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"pattern": "restore virtual machine snapshot ([^\\s]+) successfully\\.",
|
|
155
|
+
"replacement": "虚拟机快照 '$1' 恢复成功。",
|
|
156
|
+
"flags": "gi"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"pattern": "update virtual machine snapshot ([^\\s]+) successfully\\.",
|
|
160
|
+
"replacement": "虚拟机快照 '$1' 更新成功。",
|
|
161
|
+
"flags": "gi"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"pattern": "failed to create subnet ([^\\s]+), conflict with existing subnet ([^\\s]+)",
|
|
165
|
+
"replacement": "创建子网 '$1' 失败,地址段与现有子网 '$2' 冲突",
|
|
166
|
+
"flags": "gi"
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"pattern": "subnet\\.kubeovn\\.io \"([^\"]*)\" is invalid: metadata\\.name: invalid value: \"([^\"]*)\": metadata\\.name in body should match '\\^\\[\\^0-9\\]'",
|
|
170
|
+
"replacement": "子网名称 '$1' 无效:名称不能以数字开头",
|
|
171
|
+
"flags": "gi"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"pattern": "(\\S+) conflict with v4 loopback cidr (\\S+)",
|
|
175
|
+
"replacement": "地址段 $1 与 IPv4 回环地址段 $2 冲突",
|
|
176
|
+
"flags": "gi"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"pattern": "can't delete subnet when any ips in using",
|
|
180
|
+
"replacement": "子网中仍有 IP 地址正在使用,无法删除",
|
|
181
|
+
"flags": "gi"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"pattern": "subnet ([^\\s]+) is still using the nad ([^\\s]+) default",
|
|
185
|
+
"replacement": "子网 '$1' 正在使用虚拟网络 '$2',请先删除子网 '$1' ",
|
|
186
|
+
"flags": "gi"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"pattern": "can't delete vpc when any subnet in the vpc",
|
|
190
|
+
"replacement": "VPC 内仍存在子网,无法删除该 VPC",
|
|
191
|
+
"flags": "gi"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"pattern": "(\\S+) in allowsubnets is not a valid address",
|
|
195
|
+
"replacement": "允许互通子网地址 $1 无效",
|
|
196
|
+
"flags": "gi"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"pattern": "gateway (\\S+) is not in cidr (\\S+)",
|
|
200
|
+
"replacement": "网关地址 $1 不在 CIDR $2 范围内",
|
|
201
|
+
"flags": "gi"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"pattern": "subnet ([^\\s]+) is using the provider ([^\\s]+) already",
|
|
205
|
+
"replacement": "子网 '$1' 已使用虚拟网络 '$2'",
|
|
206
|
+
"flags": "gi"
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"pattern": "invalid next hop ip",
|
|
210
|
+
"replacement": "无效的下一跳地址",
|
|
211
|
+
"flags": "gi"
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"pattern": "number of sockets in cpu topology is greater than the maximum sockets allowed, number of sockets in cpu topology is greater than the maximum sockets allowed",
|
|
215
|
+
"replacement": "CPU 拓扑中的 socket 数量已超过最大允许值",
|
|
216
|
+
"flags": "gi"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"pattern": "number of sockets in cpu topology is greater than the maximum sockets allowed",
|
|
220
|
+
"replacement": "CPU 拓扑中的 socket 数量已超过最大允许值",
|
|
221
|
+
"flags": "gi"
|
|
222
|
+
},
|
|
223
|
+
|
|
224
|
+
{
|
|
225
|
+
"pattern": "not a default subnet join as provider is ([^\\s]+)",
|
|
226
|
+
"replacement": "非默认子网,当前以提供者 $1 加入",
|
|
227
|
+
"flags": "gi"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"pattern": "subnet ([^\\s]+) cidr ([^\\s]+) is invalid, due to invalid cidr address: ([^\\s]+)",
|
|
231
|
+
"replacement": "子网 '$1' 的 CIDR 地址 '$2' 无效:不是合法的 CIDR 格式",
|
|
232
|
+
"flags": "gi"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"pattern": "validation failed in api: vpc.kubeovn.io \"([^\"]*)\" is invalid: metadata\\.name: invalid value: \"([^\"]*)\": a lowercase rfc 1123 subdomain must consist of lower case alphanumeric characters, '-' or '\\.', and must start and end with an alphanumeric character \\(e\\.g\\..*?\\)",
|
|
236
|
+
"replacement": "校验失败:VPC 名称 \"$1\" 不符合 RFC 1123 子域名规则,只能使用小写字母、数字、'-' 或 '.',且必须以字母/数字开头和结尾",
|
|
237
|
+
"flags": "gi"
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"pattern": "validation 失败 in api",
|
|
241
|
+
"replacement": "API 校验失败",
|
|
242
|
+
"flags": "gi"
|
|
243
|
+
},
|
|
3
244
|
{
|
|
4
245
|
"pattern": "can't connect to backup target[\\s\\S]*no route to host",
|
|
5
246
|
"replacement": "无法连接到备份目标:网络不可达,请检查备份服务器地址与路由",
|
|
@@ -817,11 +1058,11 @@
|
|
|
817
1058
|
},
|
|
818
1059
|
{
|
|
819
1060
|
"pattern": "virtualmachinebackup.harvesterhci.io",
|
|
820
|
-
"replacement": "
|
|
1061
|
+
"replacement": "虚拟机备份恢复"
|
|
821
1062
|
},
|
|
822
1063
|
{
|
|
823
1064
|
"pattern": "virtualmachinebackup.cloudhci.io",
|
|
824
|
-
"replacement": "
|
|
1065
|
+
"replacement": "虚拟机备份恢复"
|
|
825
1066
|
},
|
|
826
1067
|
{
|
|
827
1068
|
"pattern": "vlanconfigs.network.harvesterhci.io",
|
|
@@ -1328,6 +1569,10 @@
|
|
|
1328
1569
|
"pattern": ""备份" 是必填项。",
|
|
1329
1570
|
"replacement": "\"快照/备份\" 是必填项"
|
|
1330
1571
|
},
|
|
1572
|
+
{
|
|
1573
|
+
"pattern": "namespaces",
|
|
1574
|
+
"replacement": "资源组"
|
|
1575
|
+
},
|
|
1331
1576
|
{
|
|
1332
1577
|
"pattern": "%",
|
|
1333
1578
|
"replacement": ""
|
package/vue.config.js
CHANGED
|
@@ -157,7 +157,7 @@ const getLoaders = (SHELL_ABS) => [
|
|
|
157
157
|
test: /\.m?[tj]sx?$/,
|
|
158
158
|
// This excludes no modules except for node_modules/@rancher/... so that plugins can properly compile
|
|
159
159
|
// when referencing @rancher/shell
|
|
160
|
-
exclude: /node_modules\/(?!(
|
|
160
|
+
exclude: /node_modules\/(?!(dashboard-shell-shell)\/).*/,
|
|
161
161
|
use: [
|
|
162
162
|
{
|
|
163
163
|
loader: 'cache-loader',
|