@xen-orchestra/web-core 0.45.0 → 0.47.0
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/lib/components/console/VtsLayoutConsole.vue +1 -1
- package/lib/components/console/VtsRemoteConsole.vue +3 -2
- package/lib/components/tab/TabItem.vue +2 -3
- package/lib/components/table/cells/VtsLinkCell.vue +23 -4
- package/lib/components/ui/quick-task-panel/UiQuickTaskPanel.vue +2 -2
- package/lib/components/ui/tree-item-label/UiTreeItemLabel.vue +2 -2
- package/lib/composables/table-state.composable.ts +1 -1
- package/lib/icons/object-icons.ts +22 -0
- package/lib/icons/status-icons.ts +3 -3
- package/lib/locales/cs.json +30 -4
- package/lib/locales/da.json +2 -2
- package/lib/locales/en.json +38 -9
- package/lib/locales/fr.json +38 -9
- package/lib/packages/remote-resource/sse.store.ts +3 -1
- package/lib/tables/column-definitions/date-column.ts +1 -1
- package/lib/tables/column-definitions/link-or-text-column.ts +22 -0
- package/lib/tables/column-sets/snapshot-columns.ts +19 -0
- package/lib/tables/column-sets/vm-backup-archive-columns.ts +15 -0
- package/lib/tables/column-sets/vm-backup-run-colums.ts +15 -0
- package/lib/utils/ip-address.utils.ts +18 -0
- package/package.json +1 -1
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
<script lang="ts" setup>
|
|
9
9
|
import { useDisabled } from '@core/composables/disabled.composable'
|
|
10
10
|
import { useUiStore } from '@core/stores/ui.store'
|
|
11
|
-
import { storeToRefs } from 'pinia'
|
|
12
11
|
import { computed } from 'vue'
|
|
13
12
|
|
|
14
13
|
const props = withDefaults(
|
|
@@ -20,13 +19,13 @@ const props = withDefaults(
|
|
|
20
19
|
{ tag: 'span' }
|
|
21
20
|
)
|
|
22
21
|
|
|
23
|
-
const
|
|
22
|
+
const uiStore = useUiStore()
|
|
24
23
|
|
|
25
24
|
const isDisabled = useDisabled(() => props.disabled)
|
|
26
25
|
|
|
27
26
|
const classNames = computed(() => {
|
|
28
27
|
return [
|
|
29
|
-
isSmall
|
|
28
|
+
uiStore.isSmall ? 'typo-caption-small' : 'typo-caption',
|
|
30
29
|
{
|
|
31
30
|
disabled: isDisabled.value,
|
|
32
31
|
active: props.active,
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<UiTableCell>
|
|
3
|
-
<
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
<div class="vts-link-cell">
|
|
4
|
+
<UiLink size="medium" :icon :to :href :target class="link">
|
|
5
|
+
<slot />
|
|
6
|
+
<VtsIcon v-if="rightIcon" v-tooltip="rightIcon.tooltip ?? false" :name="rightIcon.icon" size="medium" />
|
|
7
|
+
</UiLink>
|
|
8
|
+
<span v-if="slots.suffix" class="interpunct" />
|
|
9
|
+
<slot name="suffix" />
|
|
10
|
+
</div>
|
|
7
11
|
</UiTableCell>
|
|
8
12
|
</template>
|
|
9
13
|
|
|
@@ -24,9 +28,24 @@ export type VtsLinkCellProps = LinkOptions & {
|
|
|
24
28
|
}
|
|
25
29
|
|
|
26
30
|
defineProps<VtsLinkCellProps>()
|
|
31
|
+
|
|
32
|
+
const slots = defineSlots<{
|
|
33
|
+
default(): any
|
|
34
|
+
suffix?(): any
|
|
35
|
+
}>()
|
|
27
36
|
</script>
|
|
28
37
|
|
|
29
38
|
<style lang="postcss" scoped>
|
|
39
|
+
.vts-link-cell {
|
|
40
|
+
display: flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
gap: 0.8rem;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.interpunct::before {
|
|
46
|
+
content: '•';
|
|
47
|
+
}
|
|
48
|
+
|
|
30
49
|
.link {
|
|
31
50
|
line-height: 1.5;
|
|
32
51
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!-- WIP -->
|
|
2
2
|
<template>
|
|
3
|
-
<div :class="{ mobile: isSmall }" class="ui-quick-task-panel">
|
|
3
|
+
<div :class="{ mobile: uiStore.isSmall }" class="ui-quick-task-panel">
|
|
4
4
|
<VtsQuickTaskTabBar
|
|
5
5
|
v-model="currentTab"
|
|
6
6
|
:failure-count="failureTasks.length"
|
|
@@ -24,7 +24,7 @@ const props = defineProps<{
|
|
|
24
24
|
loading?: boolean
|
|
25
25
|
}>()
|
|
26
26
|
|
|
27
|
-
const
|
|
27
|
+
const uiStore = useUiStore()
|
|
28
28
|
|
|
29
29
|
const currentTab = ref<TaskTab>('pending')
|
|
30
30
|
|
|
@@ -20,11 +20,11 @@
|
|
|
20
20
|
@click="emit('toggle')"
|
|
21
21
|
/>
|
|
22
22
|
<div v-else class="h-line" />
|
|
23
|
-
<a
|
|
23
|
+
<a :href class="link typo-body-bold-small" @click="navigate">
|
|
24
24
|
<slot name="icon">
|
|
25
25
|
<VtsIcon :name="icon" size="medium" class="icon" />
|
|
26
26
|
</slot>
|
|
27
|
-
<div class="text text-ellipsis">
|
|
27
|
+
<div v-tooltip class="text text-ellipsis">
|
|
28
28
|
<slot />
|
|
29
29
|
</div>
|
|
30
30
|
</a>
|
|
@@ -48,8 +48,8 @@ export function useTableState(config: {
|
|
|
48
48
|
|
|
49
49
|
return computed(() => {
|
|
50
50
|
return (
|
|
51
|
-
handleStateInput('busy', config.busy) ??
|
|
52
51
|
handleStateInput('error', config.error) ??
|
|
52
|
+
handleStateInput('busy', config.busy) ??
|
|
53
53
|
handleStateInput('no-data', config.empty)
|
|
54
54
|
)
|
|
55
55
|
})
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
faArrowLeft,
|
|
7
7
|
faBarsProgress,
|
|
8
8
|
faBoxesStacked,
|
|
9
|
+
faCamera,
|
|
9
10
|
faCircle,
|
|
10
11
|
faCity,
|
|
11
12
|
faClock,
|
|
@@ -118,6 +119,21 @@ const schedule = defineIcon([
|
|
|
118
119
|
},
|
|
119
120
|
])
|
|
120
121
|
|
|
122
|
+
const camera = defineIcon([
|
|
123
|
+
{
|
|
124
|
+
icon: faCircle,
|
|
125
|
+
color: 'var(--color-neutral-background-primary)',
|
|
126
|
+
translate: [7, 5.5],
|
|
127
|
+
size: 13,
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
icon: faCamera,
|
|
131
|
+
color: 'var(--color-neutral-txt-primary)',
|
|
132
|
+
translate: [7, 5.5],
|
|
133
|
+
size: 10,
|
|
134
|
+
},
|
|
135
|
+
])
|
|
136
|
+
|
|
121
137
|
export const objectIcons = defineIconPack({
|
|
122
138
|
instance: constructIcon(faSatellite),
|
|
123
139
|
pool: constructIcon(faCity),
|
|
@@ -159,6 +175,12 @@ export const objectIcons = defineIconPack({
|
|
|
159
175
|
'vm:suspended': [constructIcon(faDesktop), ...constructCircleStatus('suspended-circle')],
|
|
160
176
|
'vm:warning': [constructIcon(faDesktop), ...constructCircleStatus('warning-circle')],
|
|
161
177
|
'vm:halted': [constructIcon(faDesktop), ...constructCircleStatus('halted-circle')],
|
|
178
|
+
'vm-snapshot': [
|
|
179
|
+
constructIcon(faDesktop),
|
|
180
|
+
{
|
|
181
|
+
icon: camera,
|
|
182
|
+
},
|
|
183
|
+
],
|
|
162
184
|
sr: constructIcon(faDatabase),
|
|
163
185
|
'sr:unknown': [
|
|
164
186
|
{
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineIconPack, type IconSingleConfig } from '@core/packages/icon'
|
|
2
2
|
import {
|
|
3
|
-
faSquare as checkboxEmpty,
|
|
4
3
|
faCircle as circleEmpty,
|
|
4
|
+
faSquare as checkboxEmpty,
|
|
5
5
|
type IconDefinition,
|
|
6
6
|
} from '@fortawesome/free-regular-svg-icons'
|
|
7
7
|
import {
|
|
@@ -51,11 +51,11 @@ export const statusIcons = defineIconPack({
|
|
|
51
51
|
'paused-circle': [
|
|
52
52
|
{
|
|
53
53
|
icon: faCircle,
|
|
54
|
-
color: 'var(--color-
|
|
54
|
+
color: 'var(--color-info-item-base)',
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
icon: faPause,
|
|
58
|
-
color: 'var(--color-
|
|
58
|
+
color: 'var(--color-info-txt-item)',
|
|
59
59
|
size: 8,
|
|
60
60
|
},
|
|
61
61
|
],
|
package/lib/locales/cs.json
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"account-organization-more": "Účet, organizace a další…",
|
|
11
11
|
"action:add": "Přidat",
|
|
12
12
|
"action:add-filter": "Přidat filtr",
|
|
13
|
+
"action:add-group": "Přidat skupinu",
|
|
13
14
|
"action:add-host-internal-network-in-xo-5": "Přidat vnitřní síť hostitele v XO-5",
|
|
14
15
|
"action:add-network-in-xo-5": "Přidat síť v XO-5",
|
|
15
16
|
"action:add-sort": "Přidat řazení",
|
|
@@ -26,9 +27,12 @@
|
|
|
26
27
|
"action:copy-info-json": "Zkopírovat informace do JSON",
|
|
27
28
|
"action:create": "Vytvořit",
|
|
28
29
|
"action:delete": "Smazat",
|
|
30
|
+
"action:delete-filter": "Smazat filtr",
|
|
31
|
+
"action:delete-group": "Smazat skupinu",
|
|
29
32
|
"action:delete-vms": "Smazat 1 virt. stroj | Smazat {n} virt. strojů",
|
|
30
33
|
"action:deploy": "Nasadit",
|
|
31
34
|
"action:deploy-xoa": "Nasadit XOA",
|
|
35
|
+
"action:duplicate": "Zduplikovat",
|
|
32
36
|
"action:edit": "Upravit",
|
|
33
37
|
"action:edit-config": "Upravit nastavení",
|
|
34
38
|
"action:enable-light-mode": "Zapnout světlý režim",
|
|
@@ -50,10 +54,15 @@
|
|
|
50
54
|
"action:log-out": "Odhlásit",
|
|
51
55
|
"action:migrate": "Přestěhovat",
|
|
52
56
|
"action:migrate-n-vms": "Přestěhovat 1 virt. stroj | Přestěhovat {n} virt. strojů",
|
|
57
|
+
"action:move-filters-to-parent-group": "Přesunout filtry do nadřazené skupiny",
|
|
53
58
|
"action:open": "Otevřít",
|
|
54
59
|
"action:open-app": "Otevřít {name}",
|
|
55
60
|
"action:open-console-in-new-tab": "Otevřít konzoli v novém panelu",
|
|
56
61
|
"action:pick-template": "Vybrat šablonu",
|
|
62
|
+
"action:plus-and": "+ @:and",
|
|
63
|
+
"action:plus-or": "+ @:or",
|
|
64
|
+
"action:query-builder:delete-filter": "Smazat filtr",
|
|
65
|
+
"action:query-builder:delete-group": "Smazat skupinu",
|
|
57
66
|
"action:reboot": "Restartovat",
|
|
58
67
|
"action:reformat": "Přeformátovat",
|
|
59
68
|
"action:resume": "Navázat v chodu",
|
|
@@ -83,8 +92,10 @@
|
|
|
83
92
|
"action:start": "Spustit",
|
|
84
93
|
"action:start-on-host": "Spustit na konkrétním hostiteli",
|
|
85
94
|
"action:suspend": "Uspat",
|
|
95
|
+
"action:turn-into-group": "Přeměnit na skupinu",
|
|
86
96
|
"action:unselect-all": "Zrušit výběr všeho",
|
|
87
97
|
"action:update": "Aktualizovat",
|
|
98
|
+
"action:use-query-builder": "Použít nástroj pro sestavování dotazů",
|
|
88
99
|
"action:visit-pool-dashboard": "Přejít na přehled fondu",
|
|
89
100
|
"add-or": "+NEBO",
|
|
90
101
|
"admin-login": "Přihlašovací jméno správce",
|
|
@@ -108,6 +119,8 @@
|
|
|
108
119
|
"all-good!": "Všechno v pořádku!",
|
|
109
120
|
"all-quiet-launchpad": "Na startovní rampě klid",
|
|
110
121
|
"allow-self-signed-ssl": "Je možné že bude třeba ve vámi využívaném prohlížeči povolit samy sebou podepsané SSL certifikáty",
|
|
122
|
+
"and": "A",
|
|
123
|
+
"any-property": "Jakákoli vlastnost",
|
|
111
124
|
"api-error-details": "Podrobnosti o chybě API rozhraní",
|
|
112
125
|
"api-info-details": "Podrobnosti o informaci z API",
|
|
113
126
|
"api-warning-details": "Podrobnosti o varování z API",
|
|
@@ -174,7 +187,7 @@
|
|
|
174
187
|
"checkpoint-snapshot": "Zachycený stav – kontrolní bod",
|
|
175
188
|
"click-to-display-alarms:": "Kliknutím zobrazíte výstrahy:",
|
|
176
189
|
"click-to-return-default-pool": "Kliknutím sem se vrátíte na výchozí fond",
|
|
177
|
-
"cloud-init-config": "
|
|
190
|
+
"cloud-init-config": "Cloud Init config",
|
|
178
191
|
"color-mode:auto": "Automatický režim",
|
|
179
192
|
"coming-soon!": "Už brzy!",
|
|
180
193
|
"community": "Komunita",
|
|
@@ -276,6 +289,7 @@
|
|
|
276
289
|
"fast-clone": "Rychlý klon",
|
|
277
290
|
"fetching-fresh-data": "Získávání aktuálních údajů",
|
|
278
291
|
"field:exceeds-max-characters": "Je třeba, aby zadání v kolonce bylo dlouhé nejvýše {max} znaků.",
|
|
292
|
+
"filter-actions": "Akce filtru",
|
|
279
293
|
"following-hosts-unreachable": "Následující hostitelé nejsou dosažitelní",
|
|
280
294
|
"for-backup": "Pro zálohu",
|
|
281
295
|
"for-replication": "Pro replikaci",
|
|
@@ -415,6 +429,7 @@
|
|
|
415
429
|
"loading": "Načítání…",
|
|
416
430
|
"loading-hosts": "Načítání hostitelů…",
|
|
417
431
|
"local": "Lokální",
|
|
432
|
+
"locked": "Uzamčeno",
|
|
418
433
|
"locking-mode": "Režim zamykání",
|
|
419
434
|
"locking-mode-default": "Výchozí režim zamykání",
|
|
420
435
|
"login": "Přihlášení",
|
|
@@ -460,6 +475,7 @@
|
|
|
460
475
|
"multi-creation": "Vícenásobné vytvoření",
|
|
461
476
|
"multi-pathing": "Propojování vícero cestami",
|
|
462
477
|
"n-cpus": "1 procesor | {n} procesory | {n} procesorů",
|
|
478
|
+
"n-gb": "{n} GB",
|
|
463
479
|
"n-gb-left": "{n} GB zbývá",
|
|
464
480
|
"n-gb-required": "{n} GB vyžadováno",
|
|
465
481
|
"n-hosts": "1 hostitel | {n} hostitelů",
|
|
@@ -612,24 +628,34 @@
|
|
|
612
628
|
"provisioning": "Přednastavování",
|
|
613
629
|
"proxy": "Proxy",
|
|
614
630
|
"proxy-url": "URL proxy",
|
|
631
|
+
"public-key": "Veřejný klíč",
|
|
632
|
+
"public-key-already-exists": "Veřejný klíč už existuje",
|
|
633
|
+
"public-key-mandatory": "Veřejný klíč je třeba zadat",
|
|
615
634
|
"pxe": "PXE",
|
|
635
|
+
"query-builder": "Nástroj pro sestavování dotazů",
|
|
636
|
+
"query-builder:label": "Vyhledávací engine",
|
|
616
637
|
"query-builder:operator:contains": "Obsahuje",
|
|
638
|
+
"query-builder:operator:empty": "Je prázdné",
|
|
617
639
|
"query-builder:operator:ends-with": "Končí na",
|
|
618
640
|
"query-builder:operator:equals": "Rovno",
|
|
619
641
|
"query-builder:operator:is": "Je",
|
|
620
642
|
"query-builder:operator:is-false": "Neplatí",
|
|
621
643
|
"query-builder:operator:is-not": "Není",
|
|
622
644
|
"query-builder:operator:is-true": "Platí",
|
|
645
|
+
"query-builder:operator:matches-glob": "Shoduje se glob",
|
|
623
646
|
"query-builder:operator:matches-regex": "Odpovídá regulárnímu výrazu",
|
|
624
647
|
"query-builder:operator:not-contain": "Neobsahuje",
|
|
648
|
+
"query-builder:operator:not-empty": "Není prázdné",
|
|
625
649
|
"query-builder:operator:not-end-with": "Nekončí na",
|
|
626
650
|
"query-builder:operator:not-equal": "Není rovno",
|
|
651
|
+
"query-builder:operator:not-match-glob": "Neshoduje se glob",
|
|
627
652
|
"query-builder:operator:not-match-regex": "Neodpovídá regulárnímu výrazu",
|
|
628
653
|
"query-builder:operator:not-start-with": "Nezačíná na",
|
|
629
654
|
"query-builder:operator:starts-with": "Začíná na",
|
|
630
|
-
"query-
|
|
631
|
-
"query-search-bar:
|
|
632
|
-
"query-search-bar:
|
|
655
|
+
"query-builder:placeholder": "Sestavte si svůj dotaz…",
|
|
656
|
+
"query-search-bar:label": "@:query-builder:label",
|
|
657
|
+
"query-search-bar:placeholder": "@:query-builder:placeholder",
|
|
658
|
+
"query-search-bar:use-query-builder": "@:query-builder",
|
|
633
659
|
"quick-actions": "Rychlé akce",
|
|
634
660
|
"quick-info": "Stručné informace",
|
|
635
661
|
"ram": "Operační paměť",
|
package/lib/locales/da.json
CHANGED
|
@@ -152,8 +152,8 @@
|
|
|
152
152
|
"console-unavailable": "Konsol ikke tilgængelig",
|
|
153
153
|
"console-unavailable-reason": "Konsollen er i øjeblikket utilgængelig, fordi {type} er slukket.",
|
|
154
154
|
"copied": "Kopieret",
|
|
155
|
-
"core-socket": "Kerne (
|
|
156
|
-
"cores-with-sockets": "Kerner (
|
|
155
|
+
"core-socket": "Kerne (sokkel)",
|
|
156
|
+
"cores-with-sockets": "Kerner (sokler)",
|
|
157
157
|
"cpu": "CPU",
|
|
158
158
|
"cpu-model": "CPU model",
|
|
159
159
|
"cpu-usage": "CPU forbrug",
|
package/lib/locales/en.json
CHANGED
|
@@ -136,17 +136,21 @@
|
|
|
136
136
|
"backed-up-pools": "Backed up Pools",
|
|
137
137
|
"backed-up-vms": "Backed up VMs",
|
|
138
138
|
"backup": "Backup",
|
|
139
|
+
"backup-archive-status": "Backup archive status",
|
|
139
140
|
"backup-issues": "Backup issues",
|
|
140
141
|
"backup-job": "Backup job",
|
|
141
142
|
"backup-jobs": "Backup jobs",
|
|
143
|
+
"backup-jobs:see-all": "See all backup jobs",
|
|
142
144
|
"backup-network": "Backup network",
|
|
143
145
|
"backup-repositories": "Backup repositories",
|
|
144
|
-
"backup-repository": "Backup repository
|
|
146
|
+
"backup-repository": "Backup repository",
|
|
147
|
+
"backup-repository-type": "Backup repository (local, NFS, SMB)",
|
|
145
148
|
"backup-targets": "Backup targets",
|
|
146
149
|
"backup:full": "Full backup",
|
|
147
150
|
"backup:full-replication": "Full replication",
|
|
148
151
|
"backup:incremental": "Incremental backup",
|
|
149
152
|
"backup:incremental-replication": "Incremental replication",
|
|
153
|
+
"backup:last-replication": "Last replication",
|
|
150
154
|
"backup:mirror:full": "Mirror full backup",
|
|
151
155
|
"backup:mirror:incremental": "Mirror incremental backup",
|
|
152
156
|
"backup:pool-metadata": "Pool metadata",
|
|
@@ -163,10 +167,13 @@
|
|
|
163
167
|
"backups:jobs:skipped-runs": "Skipped runs, no errors",
|
|
164
168
|
"backups:jobs:status": "Backup jobs status",
|
|
165
169
|
"backups:vms-protection": "VMs protection",
|
|
166
|
-
"backups:vms-protection:
|
|
167
|
-
"backups:vms-protection:
|
|
170
|
+
"backups:vms-protection:active-protected": "In at least 1 active job & protected",
|
|
171
|
+
"backups:vms-protection:active-unprotected": "In at least 1 active job but unprotected",
|
|
172
|
+
"backups:vms-protection:no-active-job": "In no active job",
|
|
173
|
+
"backups:vms-protection:no-job": "In no job",
|
|
174
|
+
"backups:vms-protection:protected": "In at least 1 job & protected",
|
|
168
175
|
"backups:vms-protection:tooltip": "A VM is protected if it's in a backup job, with an enabled schedule, and the last run succeeded",
|
|
169
|
-
"backups:vms-protection:unprotected": "In at least 1
|
|
176
|
+
"backups:vms-protection:unprotected": "In at least 1 job but unprotected",
|
|
170
177
|
"bios-default": "bios (default)",
|
|
171
178
|
"bios-info": "BIOS info",
|
|
172
179
|
"bond": "Bond",
|
|
@@ -231,6 +238,7 @@
|
|
|
231
238
|
"crash-dump-storage-repository": "Crash dump storage repository",
|
|
232
239
|
"created-by": "Created by",
|
|
233
240
|
"created-on": "Created on",
|
|
241
|
+
"creation-date": "Creation date",
|
|
234
242
|
"cron-pattern": "Cron pattern",
|
|
235
243
|
"current": "Current",
|
|
236
244
|
"current-attach": "Current attach",
|
|
@@ -326,6 +334,7 @@
|
|
|
326
334
|
"hosts-status": "Hosts status",
|
|
327
335
|
"hyper-threading": "Hyper threading (SMT)",
|
|
328
336
|
"id": "ID",
|
|
337
|
+
"included": "Included",
|
|
329
338
|
"in-last-three-runs": "In their last 3 runs",
|
|
330
339
|
"in-progress": "In progress",
|
|
331
340
|
"info": "Info",
|
|
@@ -344,6 +353,7 @@
|
|
|
344
353
|
"ipv4-addresses": "IPv4 addresses",
|
|
345
354
|
"ipv6-address": "IPv6 address",
|
|
346
355
|
"ipv6-addresses": "IPv6 addresses",
|
|
356
|
+
"is-part-of-one-active-job": "This VM is currently part of at least one active job. The last job it participated in will appear here once it has been executed.",
|
|
347
357
|
"is-primary-host": "{name} is primary host",
|
|
348
358
|
"iscsi-iqn": "iSCSI IQN",
|
|
349
359
|
"iso-dvd": "ISO/DVD",
|
|
@@ -417,8 +427,12 @@
|
|
|
417
427
|
"language": "Language",
|
|
418
428
|
"language-preferences": "Language preferences",
|
|
419
429
|
"last": "Last",
|
|
430
|
+
"last-n-backup-archives": "Last backup archive | Last {n} backup archives",
|
|
431
|
+
"last-n-backup-runs": "Last backup run | Last {n} backup runs",
|
|
420
432
|
"last-n-runs": "Last run | Last {n} runs",
|
|
433
|
+
"last-revert": "Last revert",
|
|
421
434
|
"last-run-number": "Last run #{n}",
|
|
435
|
+
"last-snapshot": "Last snapshot",
|
|
422
436
|
"last-week": "Last week",
|
|
423
437
|
"learn-more": "Learn more",
|
|
424
438
|
"lets-go!": "Let's go!",
|
|
@@ -427,7 +441,7 @@
|
|
|
427
441
|
"license-type": "License type",
|
|
428
442
|
"licensing": "Licensing",
|
|
429
443
|
"load-average": "Load average",
|
|
430
|
-
"loading": "Loading
|
|
444
|
+
"loading": "Loading",
|
|
431
445
|
"loading-hosts": "Loading hosts…",
|
|
432
446
|
"local": "Local",
|
|
433
447
|
"locked": "Locked",
|
|
@@ -443,11 +457,13 @@
|
|
|
443
457
|
"management-agent-not-detected": "Management agent not detected",
|
|
444
458
|
"management-agent-version": "Management agent version",
|
|
445
459
|
"management-ip": "Management IP",
|
|
460
|
+
"manual": "Manual",
|
|
446
461
|
"manufacturer-info": "Manufacturer info",
|
|
447
462
|
"master": "Primary host",
|
|
448
463
|
"maximum-cpu-limit": "Maximum CPU limit",
|
|
449
464
|
"maximum-dynamic-memory": "Maximum dynamic memory",
|
|
450
465
|
"maximum-static-memory": "Maximum static memory",
|
|
466
|
+
"memory": "Memory",
|
|
451
467
|
"memory-usage": "Memory usage",
|
|
452
468
|
"merge-backups-synchronously": "Merge backups synchronously",
|
|
453
469
|
"message": "Message",
|
|
@@ -505,17 +521,17 @@
|
|
|
505
521
|
"new-vm": "New VM",
|
|
506
522
|
"new-vm:add": "Add a new VM",
|
|
507
523
|
"new-vm:description": "VM description",
|
|
508
|
-
"new-vm:install-source": "Installation source",
|
|
509
524
|
"new-vm:feature-not-supported": "This is our new VM creation form. Cloud-init configuration, Advanced options and vTPM management are not yet supported. Updated version will be available soon in 2026. In the meanwhile, full feature set is available here in {xo-5}",
|
|
525
|
+
"new-vm:install-source": "Installation source",
|
|
510
526
|
"new-vm:name": "VM name",
|
|
511
527
|
"new-vm:network-config": "Network configuration is only compatible with {noCloudLink}.",
|
|
512
|
-
"new-vm:network-config-more": "See {documentationLink} for more info.",
|
|
513
528
|
"new-vm:network-config-documentation": "Network config documentation",
|
|
529
|
+
"new-vm:network-config-more": "See {documentationLink} for more info.",
|
|
514
530
|
"new-vm:network-config-nocloud-datasource": "the NoCloud datasource",
|
|
515
531
|
"new-vm:user-config-variables": "Template variables",
|
|
516
|
-
"new-vm:user-config-variables-name": "{'{name}'}: the VM's name. It must not contain '_'",
|
|
517
|
-
"new-vm:user-config-variables-index": "{'{index}'}: the VM's index, it will take 0 in case of single VM",
|
|
518
532
|
"new-vm:user-config-variables-escape": "Escape any variable with a preceding backslash '\\'",
|
|
533
|
+
"new-vm:user-config-variables-index": "{'{index}'}: the VM's index, it will take 0 in case of single VM",
|
|
534
|
+
"new-vm:user-config-variables-name": "{'{name}'}: the VM's name. It must not contain '_'",
|
|
519
535
|
"news": "News",
|
|
520
536
|
"news-name": "{name} news",
|
|
521
537
|
"nic-type": "NIC type",
|
|
@@ -532,14 +548,18 @@
|
|
|
532
548
|
"no-data-to-calculate": "No data to calculate",
|
|
533
549
|
"no-host-attached": "No hosts attached",
|
|
534
550
|
"no-host-detected": "No hosts detected",
|
|
551
|
+
"no-job-vm": "This VM isn’t part of any running job.",
|
|
535
552
|
"no-network-detected": "No networks detected",
|
|
536
553
|
"no-pbd-attached": "No PBDs attached",
|
|
537
554
|
"no-pif-detected": "No PIFs detected",
|
|
555
|
+
"no-pools-detected": "No pools detected",
|
|
556
|
+
"no-replicated-vm": "This VM isn’t being replicated. Configure a replication job to enable it.",
|
|
538
557
|
"no-result": "No results",
|
|
539
558
|
"no-schedule-available": "No schedules available",
|
|
540
559
|
"no-selected-vm-can-be-exported": "No selected VM can be exported",
|
|
541
560
|
"no-selected-vm-can-be-migrated": "No selected VM can be migrated",
|
|
542
561
|
"no-server-detected": "No servers detected",
|
|
562
|
+
"no-snapshot-detected": "No snapshots detected",
|
|
543
563
|
"no-storage-repository-detected": "No storage repositories detected",
|
|
544
564
|
"no-task": "No tasks",
|
|
545
565
|
"no-task-detected": "No tasks detected",
|
|
@@ -551,6 +571,7 @@
|
|
|
551
571
|
"none": "None",
|
|
552
572
|
"normal": "Normal",
|
|
553
573
|
"not-found": "Not found",
|
|
574
|
+
"not-included": "Not included",
|
|
554
575
|
"not-resident-on": "Not resident on",
|
|
555
576
|
"not-running": "Not running",
|
|
556
577
|
"not-yet-available": "Information is not yet available",
|
|
@@ -583,6 +604,7 @@
|
|
|
583
604
|
"other-properties": "Other properties",
|
|
584
605
|
"other-settings": "Other settings",
|
|
585
606
|
"page-not-found": "This page is not to be found…",
|
|
607
|
+
"page-please-wait": "Hold tight, astronaut! The page is getting ready to take off.{newline}We're just aligning the thrusters and calibrating the systems. It won't be long now, stay tuned!",
|
|
586
608
|
"pagination:all": "@:all",
|
|
587
609
|
"partially-connected": "Partially connected",
|
|
588
610
|
"password": "Password",
|
|
@@ -600,6 +622,7 @@
|
|
|
600
622
|
"pifs": "PIFs",
|
|
601
623
|
"pifs-status": "PIFs status",
|
|
602
624
|
"please-confirm-to-continue": "This action cannot be undone. Are you sure you want to continue?",
|
|
625
|
+
"please-wait": "Please wait",
|
|
603
626
|
"pool": "Pool",
|
|
604
627
|
"pool-connection-error-auth-failed": "An error occurred while connecting to the pool. The username or password appears to be incorrect.",
|
|
605
628
|
"pool-connection-error-duplicate": "An error occurred while connecting to the pool. This pool seems to be already connected.",
|
|
@@ -634,6 +657,7 @@
|
|
|
634
657
|
"property": "Property",
|
|
635
658
|
"protect-from-accidental-deletion": "Protect from accidental deletion",
|
|
636
659
|
"protect-from-accidental-shutdown": "Protect from accidental shutdown",
|
|
660
|
+
"protection-status": "Protection status",
|
|
637
661
|
"provider-solutions": "{provider} solutions",
|
|
638
662
|
"provisioning": "Provisioning",
|
|
639
663
|
"proxy": "Proxy",
|
|
@@ -722,9 +746,11 @@
|
|
|
722
746
|
"show-by": "Show by",
|
|
723
747
|
"shutdown-blocked": "Shutdown Blocked",
|
|
724
748
|
"size": "Size",
|
|
749
|
+
"size-on-disk": "Size on disk",
|
|
725
750
|
"skipped": "Skipped",
|
|
726
751
|
"smart-mode": "Smart mode",
|
|
727
752
|
"snapshot": "Snapshot",
|
|
753
|
+
"snapshot-created-on": "Snapshot created on",
|
|
728
754
|
"snapshot-mode": "Snapshot mode",
|
|
729
755
|
"snapshots": "Snapshots",
|
|
730
756
|
"sockets-with-cores-per-socket": "{nSockets} sockets × {nCores} cores/socket",
|
|
@@ -826,11 +852,13 @@
|
|
|
826
852
|
"total-used:": "Total used:",
|
|
827
853
|
"transfer-size": "Transfer size",
|
|
828
854
|
"translation-tool": "Translation tool",
|
|
855
|
+
"trigger": "Trigger",
|
|
829
856
|
"unable-to-connect-to": "Unable to connect to {ip}",
|
|
830
857
|
"unable-to-connect-to-the-pool": "Unable to connect to the pool",
|
|
831
858
|
"unable-to-connect-to-xo-server": "Unable to connect to XO server.",
|
|
832
859
|
"unknown": "Unknown",
|
|
833
860
|
"unlocked": "Unlocked",
|
|
861
|
+
"unnamed": "Unnamed",
|
|
834
862
|
"unreachable-hosts": "Unreachable hosts",
|
|
835
863
|
"unreachable-hosts-reload-page": "Done, reload the page",
|
|
836
864
|
"untitled": "Untitled",
|
|
@@ -839,6 +867,7 @@
|
|
|
839
867
|
"used": "Used",
|
|
840
868
|
"used-for-backup": "Used for backup",
|
|
841
869
|
"used-space": "Used space",
|
|
870
|
+
"used-space-on-sr": "Used space on SR",
|
|
842
871
|
"user-config": "User config",
|
|
843
872
|
"username": "Username",
|
|
844
873
|
"uuid": "UUID",
|
package/lib/locales/fr.json
CHANGED
|
@@ -136,17 +136,21 @@
|
|
|
136
136
|
"backed-up-pools": "Pools sauvegardés",
|
|
137
137
|
"backed-up-vms": "VMs sauvegardées",
|
|
138
138
|
"backup": "Sauvegarde",
|
|
139
|
+
"backup-archive-status": "Statut de l'archive",
|
|
139
140
|
"backup-issues": "Problèmes de sauvegarde",
|
|
140
141
|
"backup-job": "Job de sauvegarde",
|
|
141
142
|
"backup-jobs": "Jobs de sauvegarde",
|
|
143
|
+
"backup-jobs:see-all": "Voir toutes les sauvegardes",
|
|
142
144
|
"backup-network": "Réseau de sauvegarde",
|
|
143
145
|
"backup-repositories": "Dépôts de sauvegarde",
|
|
144
|
-
"backup-repository": "Dépôt de sauvegarde
|
|
146
|
+
"backup-repository": "Dépôt de sauvegarde",
|
|
147
|
+
"backup-repository-type": "Dépôt de sauvegarde (local, NFS, SMB)",
|
|
145
148
|
"backup-targets": "Cibles de sauvegarde",
|
|
146
149
|
"backup:full": "Sauvegarde complète",
|
|
147
150
|
"backup:full-replication": "Réplication complète",
|
|
148
151
|
"backup:incremental": "Sauvegarde incrémentielle",
|
|
149
152
|
"backup:incremental-replication": "Réplication incrémentielle",
|
|
153
|
+
"backup:last-replication": "Dernière réplication",
|
|
150
154
|
"backup:mirror:full": "Sauvegarde complète en miroir",
|
|
151
155
|
"backup:mirror:incremental": "Sauvegarde incrémentielle en miroir",
|
|
152
156
|
"backup:pool-metadata": "Métadonnées du pool",
|
|
@@ -163,10 +167,13 @@
|
|
|
163
167
|
"backups:jobs:skipped-runs": "Runs ignorés, pas d'erreurs",
|
|
164
168
|
"backups:jobs:status": "Statut des sauvegardes",
|
|
165
169
|
"backups:vms-protection": "Protection des VMs",
|
|
166
|
-
"backups:vms-protection:
|
|
167
|
-
"backups:vms-protection:
|
|
170
|
+
"backups:vms-protection:active-protected": "Dans au moins 1 job actif et protégé",
|
|
171
|
+
"backups:vms-protection:active-unprotected": "Dans au moins 1 job actif mais non protégé",
|
|
172
|
+
"backups:vms-protection:no-active-job": "Dans aucun job actif",
|
|
173
|
+
"backups:vms-protection:no-job": "Dans aucun job",
|
|
174
|
+
"backups:vms-protection:protected": "Dans au moins 1 job et protégé",
|
|
168
175
|
"backups:vms-protection:tooltip": "Une VM est protégée si elle se trouve dans un job, avec une planification activée, et si la dernière exécution a réussi",
|
|
169
|
-
"backups:vms-protection:unprotected": "Dans au moins 1 job
|
|
176
|
+
"backups:vms-protection:unprotected": "Dans au moins 1 job mais sans protection",
|
|
170
177
|
"bios-default": "bios (défaut)",
|
|
171
178
|
"bios-info": "Information du BIOS",
|
|
172
179
|
"bond": "Bond",
|
|
@@ -231,6 +238,7 @@
|
|
|
231
238
|
"crash-dump-storage-repository": "Dépôt de stockage des log de crash",
|
|
232
239
|
"created-by": "Créé par",
|
|
233
240
|
"created-on": "Créé le",
|
|
241
|
+
"creation-date": "Date de création",
|
|
234
242
|
"cron-pattern": "Pattern cron",
|
|
235
243
|
"current": "Actuel",
|
|
236
244
|
"current-attach": "Attachement actuel",
|
|
@@ -326,6 +334,7 @@
|
|
|
326
334
|
"hosts-status": "Statut des hôtes",
|
|
327
335
|
"hyper-threading": "Hyper-threading (SMT)",
|
|
328
336
|
"id": "ID",
|
|
337
|
+
"included": "Inclus",
|
|
329
338
|
"in-last-three-runs": "Dans leurs trois derniers runs",
|
|
330
339
|
"in-progress": "En cours",
|
|
331
340
|
"info": "Info",
|
|
@@ -344,6 +353,7 @@
|
|
|
344
353
|
"ipv4-addresses": "Adresses IPv4",
|
|
345
354
|
"ipv6-address": "Adresse IPv6",
|
|
346
355
|
"ipv6-addresses": "Adresses IPv6",
|
|
356
|
+
"is-part-of-one-active-job": "Cette VM fait partie d'au moins un job actif. La dernière tâche à laquelle elle a participé apparaîtra ici une fois qu'elle aura été exécutée.",
|
|
347
357
|
"is-primary-host": "{name} est l'hôte primaire",
|
|
348
358
|
"iscsi-iqn": "iSCSI IQN",
|
|
349
359
|
"iso-dvd": "ISO/DVD",
|
|
@@ -417,8 +427,12 @@
|
|
|
417
427
|
"language": "Langue",
|
|
418
428
|
"language-preferences": "Choix de la langue",
|
|
419
429
|
"last": "Dernier",
|
|
430
|
+
"last-n-backup-archives": "Dernier run d'archivage | {n} derniers archivages",
|
|
431
|
+
"last-n-backup-runs": "Dernier run de sauvegarde | {n} dernières sauvegardes",
|
|
420
432
|
"last-n-runs": "Dernier run | {n} derniers runs",
|
|
433
|
+
"last-revert": "Dernière restauration",
|
|
421
434
|
"last-run-number": "Dernière exécution #{n}",
|
|
435
|
+
"last-snapshot": "Dernier instantané",
|
|
422
436
|
"last-week": "Semaine dernière",
|
|
423
437
|
"learn-more": "En savoir plus",
|
|
424
438
|
"lets-go!": "Allons-y !",
|
|
@@ -427,7 +441,7 @@
|
|
|
427
441
|
"license-type": "Type de licence",
|
|
428
442
|
"licensing": "Licences",
|
|
429
443
|
"load-average": "Charge système",
|
|
430
|
-
"loading": "Chargement
|
|
444
|
+
"loading": "Chargement",
|
|
431
445
|
"loading-hosts": "Chargement des hôtes…",
|
|
432
446
|
"local": "Local",
|
|
433
447
|
"locked": "Verrouillé",
|
|
@@ -443,11 +457,13 @@
|
|
|
443
457
|
"management-agent-not-detected": "Agent de gestion non détecté",
|
|
444
458
|
"management-agent-version": "Version de l'agent de gestion",
|
|
445
459
|
"management-ip": "IP principale",
|
|
460
|
+
"manual": "Manuel",
|
|
446
461
|
"manufacturer-info": "Informations sur le fabricant",
|
|
447
462
|
"master": "Hôte primaire",
|
|
448
463
|
"maximum-cpu-limit": "Nombre maximal de CPU",
|
|
449
464
|
"maximum-dynamic-memory": "Mémoire dynamique maximale",
|
|
450
465
|
"maximum-static-memory": "Mémoire statique maximale",
|
|
466
|
+
"memory": "Mémoire",
|
|
451
467
|
"memory-usage": "Utilisation de la mémoire",
|
|
452
468
|
"merge-backups-synchronously": "Fusionner les sauvegardes de manière synchrone",
|
|
453
469
|
"message": "Message",
|
|
@@ -505,17 +521,17 @@
|
|
|
505
521
|
"new-vm": "Nouvelle VM",
|
|
506
522
|
"new-vm:add": "Ajouter une nouvelle VM",
|
|
507
523
|
"new-vm:description": "Description de la VM",
|
|
508
|
-
"new-vm:install-source": "Source d'installation",
|
|
509
524
|
"new-vm:feature-not-supported": "Ceci est notre nouveau formulaire de création de VM. La configuration Cloud-init, les options avancées et la gestion vTPM ne sont pas encore prises en charge. Une version mise à jour sera disponible prochainement en 2026. En attendant, l'ensemble des fonctionnalités est disponible ici sur {xo-5}",
|
|
525
|
+
"new-vm:install-source": "Source d'installation",
|
|
510
526
|
"new-vm:name": "Nom de la VM",
|
|
511
527
|
"new-vm:network-config": "La configuration réseau est uniquement compatible avec {noCloudLink}.",
|
|
512
|
-
"new-vm:network-config-more": "Voir {documentationLink} pour plus d'informations.",
|
|
513
528
|
"new-vm:network-config-documentation": "la documentation de la configuration réseau",
|
|
529
|
+
"new-vm:network-config-more": "Voir {documentationLink} pour plus d'informations.",
|
|
514
530
|
"new-vm:network-config-nocloud-datasource": "la source de données NoCloud",
|
|
515
531
|
"new-vm:user-config-variables": "Variables de modèle",
|
|
516
|
-
"new-vm:user-config-variables-name": "{'{name}'}: le nom de la VM. Il ne doit pas contenir '_'",
|
|
517
|
-
"new-vm:user-config-variables-index": "{'{index}'}: l'index de la VM, il prendra 0 en cas de VM unique",
|
|
518
532
|
"new-vm:user-config-variables-escape": "Échapper toute variable avec un antislash précédant '\\'",
|
|
533
|
+
"new-vm:user-config-variables-index": "{'{index}'}: l'index de la VM, il prendra 0 en cas de VM unique",
|
|
534
|
+
"new-vm:user-config-variables-name": "{'{name}'}: le nom de la VM. Il ne doit pas contenir '_'",
|
|
519
535
|
"news": "Actualités",
|
|
520
536
|
"news-name": "Actualités {name}",
|
|
521
537
|
"nic-type": "Type de carte réseau (NIC)",
|
|
@@ -532,14 +548,18 @@
|
|
|
532
548
|
"no-data-to-calculate": "Aucune donnée à calculer",
|
|
533
549
|
"no-host-attached": "Aucun hôte attaché",
|
|
534
550
|
"no-host-detected": "Aucun hôte détecté",
|
|
551
|
+
"no-job-vm": "Cette VM ne fait partie d'aucun job actif.",
|
|
535
552
|
"no-network-detected": "Aucun réseau détecté",
|
|
536
553
|
"no-pbd-attached": "Aucun PBD attaché",
|
|
537
554
|
"no-pif-detected": "Aucun PIF détecté",
|
|
555
|
+
"no-pools-detected": "Aucun pool détecté",
|
|
556
|
+
"no-replicated-vm": "Cette VM n'est pas répliquée. Configurez une tâche de réplication pour l'activer.",
|
|
538
557
|
"no-result": "Aucun résultat",
|
|
539
558
|
"no-schedule-available": "Aucune planification disponible",
|
|
540
559
|
"no-selected-vm-can-be-exported": "Aucune VM sélectionnée ne peut être exportée",
|
|
541
560
|
"no-selected-vm-can-be-migrated": "Aucune VM sélectionnée ne peut être migrée",
|
|
542
561
|
"no-server-detected": "Aucun serveur détecté",
|
|
562
|
+
"no-snapshot-detected": "Aucun instantané détecté",
|
|
543
563
|
"no-storage-repository-detected": "Aucun dépôt de stockage détecté",
|
|
544
564
|
"no-task": "Aucune tâche",
|
|
545
565
|
"no-task-detected": "Aucune tâche détectée",
|
|
@@ -551,6 +571,7 @@
|
|
|
551
571
|
"none": "Aucun",
|
|
552
572
|
"normal": "Normal",
|
|
553
573
|
"not-found": "Non trouvé",
|
|
574
|
+
"not-included": "Non inclus",
|
|
554
575
|
"not-resident-on": "Non résident sur",
|
|
555
576
|
"not-running": "Pas en cours d'exécution",
|
|
556
577
|
"not-yet-available": "Information pas encore disponible",
|
|
@@ -583,6 +604,7 @@
|
|
|
583
604
|
"other-properties": "Autres propriétés",
|
|
584
605
|
"other-settings": "Autres paramètres",
|
|
585
606
|
"page-not-found": "Cette page est introuvable…",
|
|
607
|
+
"page-please-wait": "Accrochez-vous, astronaute ! La page est sur le point de décoller.{newline}Nous alignons les propulseurs et calibrons les systèmes. Plus que quelques instants, restez à l'écoute !",
|
|
586
608
|
"pagination:all": "Tous",
|
|
587
609
|
"partially-connected": "Partiellement connecté",
|
|
588
610
|
"password": "Mot de passe",
|
|
@@ -600,6 +622,7 @@
|
|
|
600
622
|
"pifs": "PIFs",
|
|
601
623
|
"pifs-status": "Statut des PIFs",
|
|
602
624
|
"please-confirm-to-continue": "Cette action ne peut pas être annulée. Êtes-vous sûr de vouloir continuer ?",
|
|
625
|
+
"please-wait": "Veuillez patienter",
|
|
603
626
|
"pool": "Pool",
|
|
604
627
|
"pool-connection-error-auth-failed": "Une erreur s'est produite lors de la connexion au pool. Le nom d'utilisateur ou le mot de passe semble incorrect.",
|
|
605
628
|
"pool-connection-error-duplicate": "Une erreur s'est produite lors de la connexion au pool, il semble déjà être connecté.",
|
|
@@ -634,6 +657,7 @@
|
|
|
634
657
|
"property": "Propriété",
|
|
635
658
|
"protect-from-accidental-deletion": "Protection contre les suppressions accidentelles",
|
|
636
659
|
"protect-from-accidental-shutdown": "Protection contre les extinctions accidentelles",
|
|
660
|
+
"protection-status": "Statut de la protection",
|
|
637
661
|
"provider-solutions": "Solutions {provider}",
|
|
638
662
|
"provisioning": "Provisionnement",
|
|
639
663
|
"proxy": "Proxy",
|
|
@@ -722,9 +746,11 @@
|
|
|
722
746
|
"show-by": "Afficher par",
|
|
723
747
|
"shutdown-blocked": "Arrêt bloqué",
|
|
724
748
|
"size": "Taille",
|
|
749
|
+
"size-on-disk": "Taille sur le disque",
|
|
725
750
|
"skipped": "Ignoré",
|
|
726
751
|
"smart-mode": "Mode intelligent",
|
|
727
752
|
"snapshot": "Instantané",
|
|
753
|
+
"snapshot-created-on": "Instantané créé le",
|
|
728
754
|
"snapshot-mode": "Mode de sauvegarde",
|
|
729
755
|
"snapshots": "Instantanés",
|
|
730
756
|
"sockets-with-cores-per-socket": "{nSockets} sockets × {nCores} cœurs/socket",
|
|
@@ -826,11 +852,13 @@
|
|
|
826
852
|
"total-used:": "Total utilisé :",
|
|
827
853
|
"transfer-size": "Taille transférée",
|
|
828
854
|
"translation-tool": "Outil de traduction",
|
|
855
|
+
"trigger": "Déclencheur",
|
|
829
856
|
"unable-to-connect-to": "Impossible de se connecter à {ip}",
|
|
830
857
|
"unable-to-connect-to-the-pool": "Impossible de se connecter au Pool",
|
|
831
858
|
"unable-to-connect-to-xo-server": "Impossible de se connecter au serveur XO.",
|
|
832
859
|
"unknown": "Inconnu",
|
|
833
860
|
"unlocked": "Déverrouillé",
|
|
861
|
+
"unnamed": "Sans nom",
|
|
834
862
|
"unreachable-hosts": "Hôtes inaccessibles",
|
|
835
863
|
"unreachable-hosts-reload-page": "C'est fait. Rafraîchir la page",
|
|
836
864
|
"untitled": "Sans titre",
|
|
@@ -839,6 +867,7 @@
|
|
|
839
867
|
"used": "Utilisé",
|
|
840
868
|
"used-for-backup": "Utilisé pour la sauvegarde",
|
|
841
869
|
"used-space": "Espace utilisé",
|
|
870
|
+
"used-space-on-sr": "Espace utilisé sur le SR",
|
|
842
871
|
"user-config": "Configuration utilisateur",
|
|
843
872
|
"username": "Nom d'utilisateur",
|
|
844
873
|
"uuid": "UUID",
|
|
@@ -54,6 +54,8 @@ export const useSseStore = defineStore('sse', () => {
|
|
|
54
54
|
|
|
55
55
|
const hasErrorSse = computed(() => isError.value || sse.value.errorSse !== null)
|
|
56
56
|
|
|
57
|
+
const isConnected = computed(() => sse.value.id !== undefined)
|
|
58
|
+
|
|
57
59
|
function setErrorSse(error: unknown | null) {
|
|
58
60
|
sse.value.errorSse = error
|
|
59
61
|
}
|
|
@@ -164,5 +166,5 @@ export const useSseStore = defineStore('sse', () => {
|
|
|
164
166
|
window.location.reload()
|
|
165
167
|
}
|
|
166
168
|
|
|
167
|
-
return { watch, unwatch, retry, hasErrorSse, setErrorSse, setPing }
|
|
169
|
+
return { watch, unwatch, retry, hasErrorSse, setErrorSse, setPing, isConnected }
|
|
168
170
|
})
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import VtsLinkCell, { type VtsLinkCellProps } from '@core/components/table/cells/VtsLinkCell.vue'
|
|
2
|
+
import VtsTextCell from '@core/components/table/cells/VtsTextCell.vue'
|
|
3
|
+
import { defineColumn } from '@core/packages/table'
|
|
4
|
+
import { renderHeadCell } from '@core/tables/helpers/render-head-cell.ts'
|
|
5
|
+
import type { HeaderConfig } from '@core/tables/types.ts'
|
|
6
|
+
import { h } from 'vue'
|
|
7
|
+
|
|
8
|
+
export const useLinkOrTextColumn = defineColumn((config?: HeaderConfig) => ({
|
|
9
|
+
renderHead: () => renderHeadCell(config?.headerIcon, config?.headerLabel),
|
|
10
|
+
renderBody: (link: { label: string; suffix?: string } & VtsLinkCellProps) => {
|
|
11
|
+
const { label, suffix, ...linkCellProps } = link
|
|
12
|
+
|
|
13
|
+
if (!linkCellProps.href && !linkCellProps.to) {
|
|
14
|
+
return h(VtsTextCell, () => label)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return h(VtsLinkCell, linkCellProps, {
|
|
18
|
+
default: () => label,
|
|
19
|
+
suffix: suffix ? () => h('span', suffix) : undefined,
|
|
20
|
+
})
|
|
21
|
+
},
|
|
22
|
+
}))
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineColumns } from '@core/packages/table'
|
|
2
|
+
import { useDateColumn } from '@core/tables/column-definitions/date-column.ts'
|
|
3
|
+
import { useLinkColumn } from '@core/tables/column-definitions/link-column.ts'
|
|
4
|
+
import { useLinkOrTextColumn } from '@core/tables/column-definitions/link-or-text-column.ts'
|
|
5
|
+
import { useSelectItemColumn } from '@core/tables/column-definitions/select-item-column.ts'
|
|
6
|
+
import { useTruncatedTextColumn } from '@core/tables/column-definitions/truncated-text-column.ts'
|
|
7
|
+
import { useI18n } from 'vue-i18n'
|
|
8
|
+
|
|
9
|
+
export const useSnapshotColumns = defineColumns(() => {
|
|
10
|
+
const { t } = useI18n()
|
|
11
|
+
|
|
12
|
+
return {
|
|
13
|
+
name: useLinkColumn({ headerLabel: () => t('name') }),
|
|
14
|
+
description: useTruncatedTextColumn({ headerLabel: () => t('description') }),
|
|
15
|
+
creationDate: useDateColumn({ headerLabel: () => t('creation-date'), dateStyle: 'short', timeStyle: 'medium' }),
|
|
16
|
+
trigger: useLinkOrTextColumn({ headerLabel: () => t('trigger'), headerIcon: 'fa:square-caret-down' }),
|
|
17
|
+
selectItem: useSelectItemColumn(),
|
|
18
|
+
}
|
|
19
|
+
})
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineColumns } from '@core/packages/table/define-columns.ts'
|
|
2
|
+
import { useDateColumn } from '@core/tables/column-definitions/date-column'
|
|
3
|
+
import { useLinkColumn } from '@core/tables/column-definitions/link-column'
|
|
4
|
+
import { useNumberColumn } from '@core/tables/column-definitions/number-column'
|
|
5
|
+
import { useI18n } from 'vue-i18n'
|
|
6
|
+
|
|
7
|
+
export const useBackupArchiveColumns = defineColumns(() => {
|
|
8
|
+
const { t } = useI18n()
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
date: useDateColumn({ headerLabel: () => t('date'), dateStyle: 'short', timeStyle: 'medium' }),
|
|
12
|
+
backupRepository: useLinkColumn({ headerLabel: () => t('backup-repository') }),
|
|
13
|
+
sizeOnDisk: useNumberColumn({ headerLabel: () => t('size-on-disk') }),
|
|
14
|
+
}
|
|
15
|
+
})
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineColumns } from '@core/packages/table/define-columns.ts'
|
|
2
|
+
import { useDateColumn } from '@core/tables/column-definitions/date-column'
|
|
3
|
+
import { useLinkColumn } from '@core/tables/column-definitions/link-column'
|
|
4
|
+
import { useStatusColumn } from '@core/tables/column-definitions/status-column.ts'
|
|
5
|
+
import { useI18n } from 'vue-i18n'
|
|
6
|
+
|
|
7
|
+
export const useBackupRunColumns = defineColumns(() => {
|
|
8
|
+
const { t } = useI18n()
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
date: useDateColumn({ headerLabel: () => t('date'), dateStyle: 'short', timeStyle: 'medium' }),
|
|
12
|
+
backupArchiveStatus: useStatusColumn({ headerLabel: () => t('backup-archive-status') }),
|
|
13
|
+
backupJob: useLinkColumn({ headerLabel: () => t('backup-job') }),
|
|
14
|
+
}
|
|
15
|
+
})
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const getIpAddressesByDevice = (addresses: Record<string, string>) =>
|
|
2
|
+
Object.entries(addresses).reduce<Record<string, string[]>>((acc, [key, address]) => {
|
|
3
|
+
const [device] = key.split('/')
|
|
4
|
+
acc[device] = acc[device] ?? []
|
|
5
|
+
acc[device].push(address)
|
|
6
|
+
return acc
|
|
7
|
+
}, {})
|
|
8
|
+
|
|
9
|
+
export const getUniqueIpAddressesForDevice = (
|
|
10
|
+
addresses: Record<string, string> | undefined,
|
|
11
|
+
device: string
|
|
12
|
+
): string[] => {
|
|
13
|
+
if (!addresses) {
|
|
14
|
+
return []
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return [...new Set(getIpAddressesByDevice(addresses)[device])]
|
|
18
|
+
}
|