@xen-orchestra/web-core 0.48.2 → 0.50.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.
Files changed (43) hide show
  1. package/lib/assets/creating.svg +566 -0
  2. package/lib/components/delete-button/VtsDeleteButton.vue +27 -0
  3. package/lib/components/menu/VtsActionsMenu.vue +53 -0
  4. package/lib/components/modal/VtsModalList.vue +1 -1
  5. package/lib/components/operation-card/VtsOperationCard.vue +51 -0
  6. package/lib/components/operation-error-card/VtsOperationErrorCard.vue +38 -0
  7. package/lib/components/operation-pending-card/VtsOperationPendingCard.vue +23 -0
  8. package/lib/components/state-hero/VtsStateHero.vue +1 -0
  9. package/lib/components/table/cells/VtsActionCell.vue +44 -0
  10. package/lib/composables/default-tab.composable.md +17 -11
  11. package/lib/composables/default-tab.composable.ts +10 -4
  12. package/lib/locales/cs.json +25 -9
  13. package/lib/locales/da.json +3 -3
  14. package/lib/locales/de.json +5 -6
  15. package/lib/locales/en.json +45 -7
  16. package/lib/locales/es.json +276 -195
  17. package/lib/locales/fa.json +3 -3
  18. package/lib/locales/fi.json +1 -1
  19. package/lib/locales/fr.json +44 -6
  20. package/lib/locales/it.json +5 -4
  21. package/lib/locales/ko.json +3 -1
  22. package/lib/locales/nb-NO.json +2 -2
  23. package/lib/locales/nl.json +23 -7
  24. package/lib/locales/pl.json +1 -1
  25. package/lib/locales/pt-BR.json +5 -6
  26. package/lib/locales/pt.json +5 -6
  27. package/lib/locales/ru.json +60 -13
  28. package/lib/locales/sk.json +216 -17
  29. package/lib/locales/sv.json +5 -6
  30. package/lib/locales/uk.json +1 -1
  31. package/lib/locales/zh-Hans.json +23 -7
  32. package/lib/packages/form-bindings/README.md +102 -0
  33. package/lib/packages/form-bindings/index.ts +1 -0
  34. package/lib/packages/form-bindings/use-form-bindings.ts +61 -0
  35. package/lib/packages/remote-resource/define-remote-resource.ts +6 -1
  36. package/lib/packages/remote-resource/sse.store.ts +1 -1
  37. package/lib/packages/table/define-columns.ts +4 -3
  38. package/lib/tables/column-definitions/action-column.ts +21 -0
  39. package/lib/tables/column-definitions/button-icon-column.ts +2 -2
  40. package/lib/tables/column-definitions/text-column.ts +1 -1
  41. package/lib/tables/column-sets/vdi-columns.ts +2 -2
  42. package/lib/tables/column-sets/vif-columns.ts +2 -2
  43. package/package.json +3 -3
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <UiButton
3
+ v-tooltip="tooltip"
4
+ size="medium"
5
+ variant="tertiary"
6
+ accent="danger"
7
+ left-icon="action:delete"
8
+ :disabled
9
+ :busy
10
+ >
11
+ {{ t('action:delete') }}
12
+ </UiButton>
13
+ </template>
14
+
15
+ <script setup lang="ts">
16
+ import UiButton from '@core/components/ui/button/UiButton.vue'
17
+ import { vTooltip } from '@core/directives/tooltip.directive'
18
+ import { useI18n } from 'vue-i18n'
19
+
20
+ defineProps<{
21
+ busy?: boolean
22
+ disabled?: boolean
23
+ tooltip?: string | false
24
+ }>()
25
+
26
+ const { t } = useI18n()
27
+ </script>
@@ -0,0 +1,53 @@
1
+ <template>
2
+ <MenuList placement="bottom-end">
3
+ <template #trigger="{ open }">
4
+ <UiButtonIcon
5
+ v-tooltip="{
6
+ placement: 'top',
7
+ content: t('quick-actions'),
8
+ }"
9
+ icon="action:more-actions"
10
+ accent="brand"
11
+ :size
12
+ @click="open($event)"
13
+ />
14
+ </template>
15
+ <MenuItem
16
+ v-for="(action, index) of actions"
17
+ :key="index"
18
+ :icon="action.icon"
19
+ :disabled="action.disabled"
20
+ :busy="action.busy"
21
+ :on-click="action.onClick"
22
+ >
23
+ {{ action.label }}
24
+ <i v-if="action.hint">{{ action.hint }}</i>
25
+ </MenuItem>
26
+ </MenuList>
27
+ </template>
28
+
29
+ <script setup lang="ts">
30
+ import MenuItem from '@core/components/menu/MenuItem.vue'
31
+ import MenuList from '@core/components/menu/MenuList.vue'
32
+ import type { ButtonIconSize } from '@core/components/ui/button-icon/UiButtonIcon.vue'
33
+ import UiButtonIcon from '@core/components/ui/button-icon/UiButtonIcon.vue'
34
+ import { vTooltip } from '@core/directives/tooltip.directive.ts'
35
+ import type { IconName } from '@core/icons'
36
+ import { useI18n } from 'vue-i18n'
37
+
38
+ const { size = 'small', actions = [] } = defineProps<{
39
+ size?: ButtonIconSize
40
+ actions?: ActionItem[]
41
+ }>()
42
+
43
+ const { t } = useI18n()
44
+
45
+ export type ActionItem = {
46
+ label: string
47
+ hint?: string
48
+ icon?: IconName
49
+ onClick: () => any
50
+ disabled?: boolean
51
+ busy?: boolean
52
+ }
53
+ </script>
@@ -25,7 +25,7 @@ const modalStore = useModalStore()
25
25
  position: fixed;
26
26
  inset: 0;
27
27
  background-color: var(--color-opacity-primary);
28
- z-index: 1011;
28
+ z-index: 1012;
29
29
 
30
30
  .modal-component:not(:last-child) {
31
31
  filter: brightness(0.8);
@@ -0,0 +1,51 @@
1
+ <template>
2
+ <UiCard class="vts-operation-card">
3
+ <VtsStateHero format="card" :type size="medium" no-background />
4
+ <div class="container" :class="{ mobile: uiStore.isSmall }">
5
+ <span class="typo-h1 title">
6
+ {{ title }}
7
+ </span>
8
+ <VtsStateHero v-if="type === 'creating'" format="card" type="busy" size="medium" no-background />
9
+ <slot />
10
+ </div>
11
+ </UiCard>
12
+ </template>
13
+
14
+ <script lang="ts" setup>
15
+ import VtsStateHero, { type StateHeroType } from '@core/components/state-hero/VtsStateHero.vue'
16
+ import UiCard from '@core/components/ui/card/UiCard.vue'
17
+ import { useUiStore } from '@core/stores/ui.store.ts'
18
+
19
+ defineProps<{
20
+ title: string
21
+ type: StateHeroType
22
+ }>()
23
+
24
+ defineSlots<{
25
+ default?(): any
26
+ }>()
27
+
28
+ const uiStore = useUiStore()
29
+ </script>
30
+
31
+ <style lang="postcss" scoped>
32
+ .vts-operation-card {
33
+ .title {
34
+ text-align: center;
35
+ color: var(--color-neutral-txt-primary);
36
+ }
37
+
38
+ .container {
39
+ display: flex;
40
+ flex-direction: column;
41
+ align-items: center;
42
+ gap: 4rem;
43
+ margin: 0 auto;
44
+ width: 50%;
45
+
46
+ &.mobile {
47
+ width: 100%;
48
+ }
49
+ }
50
+ }
51
+ </style>
@@ -0,0 +1,38 @@
1
+ <template>
2
+ <VtsOperationCard :title type="error">
3
+ <UiAlert v-if="errorMessage !== undefined || slots['error-message']" accent="danger">
4
+ <slot name="error-message">{{ errorMessage }}</slot>
5
+ </UiAlert>
6
+ <slot name="error-details">
7
+ <UiLogEntryViewer
8
+ v-if="error !== undefined"
9
+ :label="t('api-error-details')"
10
+ accent="danger"
11
+ size="small"
12
+ :content="error"
13
+ />
14
+ </slot>
15
+ <slot name="actions" />
16
+ </VtsOperationCard>
17
+ </template>
18
+
19
+ <script lang="ts" setup>
20
+ import VtsOperationCard from '@core/components/operation-card/VtsOperationCard.vue'
21
+ import UiAlert from '@core/components/ui/alert/UiAlert.vue'
22
+ import UiLogEntryViewer from '@core/components/ui/log-entry-viewer/UiLogEntryViewer.vue'
23
+ import { useI18n } from 'vue-i18n'
24
+
25
+ defineProps<{
26
+ title: string
27
+ errorMessage?: string
28
+ error?: Error
29
+ }>()
30
+
31
+ const slots = defineSlots<{
32
+ 'error-message'?(): any
33
+ 'error-details'?(): any
34
+ actions?(): any
35
+ }>()
36
+
37
+ const { t } = useI18n()
38
+ </script>
@@ -0,0 +1,23 @@
1
+ <template>
2
+ <VtsOperationCard :title type="creating">
3
+ <UiAlert v-if="message !== undefined || slots.message" accent="info">
4
+ <slot name="message">
5
+ {{ message }}
6
+ </slot>
7
+ </UiAlert>
8
+ </VtsOperationCard>
9
+ </template>
10
+
11
+ <script lang="ts" setup>
12
+ import VtsOperationCard from '@core/components/operation-card/VtsOperationCard.vue'
13
+ import UiAlert from '@core/components/ui/alert/UiAlert.vue'
14
+
15
+ defineProps<{
16
+ title: string
17
+ message?: string
18
+ }>()
19
+
20
+ const slots = defineSlots<{
21
+ message?(): any
22
+ }>()
23
+ </script>
@@ -30,6 +30,7 @@ export type StateHeroType =
30
30
  | 'offline'
31
31
  | 'all-good'
32
32
  | 'all-done'
33
+ | 'creating'
33
34
 
34
35
  const { format, type, size } = defineProps<{
35
36
  format: StateHeroFormat
@@ -0,0 +1,44 @@
1
+ <template>
2
+ <UiTableCell align="center">
3
+ <div class="vts-action-cell">
4
+ <UiButtonIcon
5
+ :icon="buttonIcon"
6
+ :accent="buttonAccent"
7
+ :size="buttonSize"
8
+ :target-scale="1.5"
9
+ @click="emit('click')"
10
+ />
11
+ <VtsActionsMenu v-if="actions.length" :actions />
12
+ </div>
13
+ </UiTableCell>
14
+ </template>
15
+
16
+ <script setup lang="ts">
17
+ import VtsActionsMenu, { type ActionItem } from '@core/components/menu/VtsActionsMenu.vue'
18
+ import type { ButtonIconAccent, ButtonIconSize } from '@core/components/ui/button-icon/UiButtonIcon.vue'
19
+ import UiButtonIcon from '@core/components/ui/button-icon/UiButtonIcon.vue'
20
+ import UiTableCell from '@core/components/ui/table-cell/UiTableCell.vue'
21
+ import type { IconName } from '@core/icons'
22
+
23
+ const {
24
+ buttonAccent = 'brand',
25
+ buttonSize = 'small',
26
+ actions = [],
27
+ } = defineProps<{
28
+ buttonIcon: IconName
29
+ buttonAccent?: ButtonIconAccent
30
+ buttonSize?: ButtonIconSize
31
+ actions?: ActionItem[]
32
+ }>()
33
+
34
+ const emit = defineEmits<{
35
+ click: []
36
+ }>()
37
+ </script>
38
+
39
+ <style scoped lang="postcss">
40
+ .vts-action-cell {
41
+ display: flex;
42
+ gap: 0.8rem;
43
+ }
44
+ </style>
@@ -7,7 +7,8 @@ This composable manages automatic navigation to default tabs and remembers the l
7
7
  The composable watches route changes and:
8
8
 
9
9
  - Automatically redirects to the remembered or default tab when navigating to the base dispatcher route
10
- - Stores the current tab in localStorage for future visits
10
+ - Stores the last visited tab when switching between objects of the same type (e.g., VM → VM)
11
+ - Resets to default tab when navigating to a different object type or any other page
11
12
  - Uses the naming convention `{dispatcherRouteName}/{tabName}` for tab route names
12
13
 
13
14
  ## Parameters
@@ -21,22 +22,27 @@ The composable watches route changes and:
21
22
 
22
23
  ```typescript
23
24
  // In the dispatcher page component (e.g., `pages/pool/[id].vue`)
24
- useDefaultTab('pool/[id]', 'dashboard')
25
+ useDefaultTab('/pool/[id]', 'dashboard')
25
26
 
26
- // User first navigates to /pool/123
27
+ // User navigates to /pool/123
27
28
  // → Automatic redirect to /pool/123/dashboard (default tab)
28
29
 
29
- // User then navigates to /pool/123/stats
30
- // → 'stats' is stored as the last visited tab for this route
30
+ // User navigates to /pool/123/system
31
+ // → 'system' is stored as the last visited tab
31
32
 
32
- // Finally, user navigates to /pool/456
33
- // → Automatic redirect to /pool/456/stats
33
+ // User navigates to /pool/456 (same object type)
34
+ // → Automatic redirect to /pool/456/system (tab remembered)
35
+
36
+ // User navigates to /vm/789 (different object type)
37
+ // → Automatic redirect to /vm/789/dashboard (Tab memory is reset)
38
+
39
+ // User navigates back to /pool/456
40
+ // → Automatic redirect to /pool/456/dashboard (default tab)
34
41
  ```
35
42
 
36
43
  ## Storage
37
44
 
38
- Tab preferences are stored in localStorage under the key `default-tabs` with the structure:
45
+ Tab memory is stored in localStorage using two different keys:
39
46
 
40
- ```typescript
41
- Map<string, string> // dispatcherRouteName -> lastVisitedTab
42
- ```
47
+ - `tab-memory.dispatcher` — the dispatcher route name of the last visited object type
48
+ - `tab-memory.last` the last visited tab name
@@ -1,17 +1,22 @@
1
- import { useLocalStorage } from '@vueuse/core'
2
1
  import { watch } from 'vue'
3
2
  import { type RouteLocationRaw, type RouteRecordName, useRoute, useRouter } from 'vue-router'
4
3
 
4
+ const TAB_MEMORY_DISPATCHER = 'tab-memory.dispatcher'
5
+ const TAB_MEMORY_LAST = 'tab-memory.last'
6
+
5
7
  export function useDefaultTab(dispatcherRouteName: RouteRecordName & string, defaultTab: string) {
6
- const storage = useLocalStorage('default-tabs', new Map<string, string>())
7
8
  const router = useRouter()
8
9
  const route = useRoute()
9
10
 
11
+ // TODO: Delete after 2 to 3 months (once all users have cleared their local storage)
12
+ localStorage.removeItem('default-tabs')
13
+
10
14
  watch(
11
15
  () => route.name as string,
12
16
  name => {
13
17
  if (name === dispatcherRouteName) {
14
- const tabName = storage.value.get(dispatcherRouteName) ?? defaultTab
18
+ const isSameDispatcher = localStorage.getItem(TAB_MEMORY_DISPATCHER) === dispatcherRouteName
19
+ const tabName = (isSameDispatcher ? localStorage.getItem(TAB_MEMORY_LAST) : null) ?? defaultTab
15
20
  void router.replace({ name: `${dispatcherRouteName}/${tabName}` } as RouteLocationRaw)
16
21
  } else if (!name.startsWith(dispatcherRouteName)) {
17
22
  return
@@ -19,7 +24,8 @@ export function useDefaultTab(dispatcherRouteName: RouteRecordName & string, def
19
24
 
20
25
  const tab = name.slice(dispatcherRouteName.length).split('/')[1] ?? defaultTab
21
26
 
22
- storage.value.set(dispatcherRouteName, tab)
27
+ localStorage.setItem(TAB_MEMORY_DISPATCHER, dispatcherRouteName)
28
+ localStorage.setItem(TAB_MEMORY_LAST, tab)
23
29
  },
24
30
  { immediate: true }
25
31
  )
@@ -29,9 +29,10 @@
29
29
  "action:delete": "Smazat",
30
30
  "action:delete-filter": "Smazat filtr",
31
31
  "action:delete-group": "Smazat skupinu",
32
- "action:delete-vms": "Smazat 1 virt. stroj | Smazat {n} virt. strojů",
32
+ "action:delete-n-vms": "Smazat 1 virt. stroj | Smazat {n} virt. strojů",
33
33
  "action:deploy": "Nasadit",
34
34
  "action:deploy-xoa": "Nasadit XOA",
35
+ "action:download-bugtools-archive": "Stáhnout archiv s výstupem bugtools",
35
36
  "action:duplicate": "Zduplikovat",
36
37
  "action:edit": "Upravit",
37
38
  "action:edit-config": "Upravit nastavení",
@@ -150,6 +151,7 @@
150
151
  "backup:full-replication": "Úplná replikace",
151
152
  "backup:incremental": "Přírůstková záloha",
152
153
  "backup:incremental-replication": "Přírůstková replikace",
154
+ "backup:last-replication": "Poslední replikace",
153
155
  "backup:mirror:full": "Zrcadlová úplná záloha",
154
156
  "backup:mirror:incremental": "Zrcadlová přírůstková záloha",
155
157
  "backup:pool-metadata": "Metadata fondu",
@@ -162,7 +164,7 @@
162
164
  "backups:jobs:issues-ran-without-hitch": "Všechny vaše úlohy zálohování proběhly bez závady.",
163
165
  "backups:jobs:last-seven-days": "V uplynulých 7 dnech",
164
166
  "backups:jobs:no-recent-run": "Žádný nedávný běh",
165
- "backups:jobs:running-good": "Běží v pořádku",
167
+ "backups:jobs:running-good": "Vše v pořádku",
166
168
  "backups:jobs:skipped-runs": "Přeskočená spouštění, žádné chyby",
167
169
  "backups:jobs:status": "Stav úloh zálohování",
168
170
  "backups:vms-protection": "Ochrana virt. strojů",
@@ -237,6 +239,7 @@
237
239
  "crash-dump-storage-repository": "Repozitář úložiště výpisů pádů",
238
240
  "created-by": "Vytvořil/a",
239
241
  "created-on": "Vytvořeno",
242
+ "creation-date": "Datum vytvoření",
240
243
  "cron-pattern": "Vzorec plánování (cron)",
241
244
  "current": "Stávající",
242
245
  "current-attach": "Stávající připojení",
@@ -334,6 +337,7 @@
334
337
  "id": "Identif.",
335
338
  "in-last-three-runs": "V jejich posledních 3 spuštěních",
336
339
  "in-progress": "V přípravě",
340
+ "included": "Včetně",
337
341
  "info": "Informace",
338
342
  "infos": "Informace",
339
343
  "install-settings": "Nastavení instalace",
@@ -358,21 +362,20 @@
358
362
  "job-name": "Název úlohy",
359
363
  "job:arg:host-required": "Je zapotřebí hostitele",
360
364
  "job:arg:missing-payload": "Chybí náklad",
361
- "job:arg:name-label-required": "Je zapotřebí popisek názvu",
365
+ "job:arg:name-required": "Je zapotřebí popisek názvu",
362
366
  "job:arg:password-required": "Je zapotřebí heslo",
363
367
  "job:arg:pool-id-required": "Je zapotřebí identifikátor fondu",
364
368
  "job:arg:sr-vdi-required": "Je zapotřebí VDI repozitáře úložiště",
365
369
  "job:arg:template-uuid-required": "Je zapotřebí UUID šablony",
366
370
  "job:arg:username-required": "Je zapotřebí uživatelské jméno",
367
- "job:server-create:in-progress": "Probíhá vytváření…",
371
+ "job:delete:in-progress": "Probíhá mazání…",
372
+ "job:create:in-progress": "Probíhá vytváření…",
368
373
  "job:vm-copy:bad-power-state": "Je třeba, aby virt. stroj byl zastavený",
369
374
  "job:vm-copy:in-progress": "Probíhá kopírování…",
370
375
  "job:vm-copy:missing-vm": "Žádný virt. stroj ke zkopírování",
371
- "job:vm-create:in-progress": "Probíhá vytváření…",
372
376
  "job:vm-create:incomplete-install-mode": "Instalační režim je nekompletní",
373
377
  "job:vm-delete:bad-power-state": "Je třeba, aby virt. stroj byl zastavený",
374
378
  "job:vm-delete:blocked-operation": "Smazání virt. stroje je blokováno",
375
- "job:vm-delete:in-progress": "Probíhá mazání…",
376
379
  "job:vm-delete:missing-vm": "Žádný virt. stroj ke smazání",
377
380
  "job:vm-export:in-progress": "Probíhá export…",
378
381
  "job:vm-export:missing-compression": "Je třeba zadat kompresi",
@@ -427,7 +430,9 @@
427
430
  "last-n-backup-archives": "Poslední archiv zálohy | Posledních {n} archivů záloh",
428
431
  "last-n-backup-runs": "Poslední spouštění zálohy | Posledních {n} spuštěních záloh",
429
432
  "last-n-runs": "Naposledy spuštěno | Posledních {n} spuštění",
433
+ "last-revert": "Poslední navrácení do předchozího stavu",
430
434
  "last-run-number": "Poslední běh č. {n}",
435
+ "last-snapshot": "Poslední zachycený stav",
431
436
  "last-week": "Uplynulý týden",
432
437
  "learn-more": "Zjistit více",
433
438
  "lets-go!": "Pojďme!",
@@ -436,7 +441,7 @@
436
441
  "license-type": "Typ licence",
437
442
  "licensing": "Licencování",
438
443
  "load-average": "Průměrné vytížení",
439
- "loading": "Načítání…",
444
+ "loading": "Načítání",
440
445
  "loading-hosts": "Načítání hostitelů…",
441
446
  "local": "Lokální",
442
447
  "locked": "Uzamčeno",
@@ -452,11 +457,13 @@
452
457
  "management-agent-not-detected": "Agent pro správu nezjištěn",
453
458
  "management-agent-version": "Verze agenta pro správu",
454
459
  "management-ip": "IP adresa správy",
460
+ "manual": "Ručně",
455
461
  "manufacturer-info": "Informace o výrobci",
456
462
  "master": "Hlavní hostitel",
457
463
  "maximum-cpu-limit": "Limit procesoru nejvýše",
458
464
  "maximum-dynamic-memory": "Dynamické přidělované paměti nejvýše",
459
465
  "maximum-static-memory": "Staticky přidělené paměti nejvýše",
466
+ "memory": "Paměť",
460
467
  "memory-usage": "Využití paměti",
461
468
  "merge-backups-synchronously": "Sloučit zálohy synchronně",
462
469
  "message": "Zpráva",
@@ -474,7 +481,7 @@
474
481
  "modal:confirm-vm-force-shutdown": "Potvrďte vynucení vypnutí virt. stroje",
475
482
  "modal:confirm-vm-reboot": "Potvrďte restart virt. stroje",
476
483
  "modal:confirm-vm-shutdown": "Potvrďte vypnutí virt. stroje",
477
- "modal:vm-force-reboot-message": "Toto virtuální stroj okamžitě vypne bez čekání na korektní vypnutí. Může dojít ke ztrátě a probíhající procesy budou přerušeny.",
484
+ "modal:vm-force-reboot-message": "Toto virtuální stroj okamžitě restartuje bez čekání na korektní vypnutí. Může dojít ke ztrátě dat a probíhající procesy budou přerušeny.",
478
485
  "modal:vm-force-shutdown-message": "Toto virtuální stroj okamžitě vypne bez čekání na korektní vypnutí. Může dojít ke ztrátě dat a probíhající procesy budou přerušeny.",
479
486
  "modal:vm-reboot-message": "Provede korektní restart virtuálního stroje jeho vypnutím a opětovným spuštěním. Spuštěné procesy budou korektně ukončeny.",
480
487
  "modal:vm-shutdown-message": "Provede korektní vypnutí virtuálního stroje. Veškeré spuštěné procesy budou ukončeny a uživatelé odpojeni. Virt. stroj je později možné znovu spustit z webového rozhraní.",
@@ -552,6 +559,7 @@
552
559
  "no-selected-vm-can-be-exported": "Žádný z označených virt. strojů není možné exportovat",
553
560
  "no-selected-vm-can-be-migrated": "Žádný z označených virt. strojů není možné přestěhovat",
554
561
  "no-server-detected": "Nezjištěny žádné servery",
562
+ "no-snapshot-detected": "Nezjištěny žádné zachycené stavy",
555
563
  "no-storage-repository-detected": "Nezjištěny žádné repozitáře úložišť",
556
564
  "no-task": "Žádné úlohy",
557
565
  "no-task-detected": "Nezjištěny žádné úlohy",
@@ -563,6 +571,7 @@
563
571
  "none": "Žádný",
564
572
  "normal": "Normální",
565
573
  "not-found": "Nenalezeno",
574
+ "not-included": "Vyjma",
566
575
  "not-resident-on": "Nenacházející se na",
567
576
  "not-running": "Nespuštěné",
568
577
  "not-yet-available": "Informace zatím ještě není k dispozici",
@@ -595,6 +604,7 @@
595
604
  "other-properties": "Ostatní vlastnosti",
596
605
  "other-settings": "Ostatní nastavení",
597
606
  "page-not-found": "Tato stránka není k nalezení…",
607
+ "page-please-wait": "Držte se pevně, astronaute! Tato stránka se připravuje odstartovat.{newline}Jen ještě zarovnáváme trysky a kalibrujeme systémy. Nebude to už dlouho trvat, zůstaňte na příjmu!",
598
608
  "pagination:all": "Vše",
599
609
  "partially-connected": "Částečně připojeno",
600
610
  "password": "Heslo",
@@ -612,6 +622,7 @@
612
622
  "pifs": "FYZICKÁ ROZHRANÍ",
613
623
  "pifs-status": "Stav FYZICKÝCH ROZHRANÍ",
614
624
  "please-confirm-to-continue": "Tuto akci nelze vzít zpět. Opravdu chcete pokračovat?",
625
+ "please-wait": "Čekejte prosím",
615
626
  "pool": "Fond",
616
627
  "pool-connection-error-auth-failed": "Při připojování k fondu došlo k chybě. Zdá se, že uživatelské jméno nebo heslo není správné.",
617
628
  "pool-connection-error-duplicate": "Při připojování k fondu došlo k chybě. Zdá se, že už je připojený.",
@@ -739,6 +750,7 @@
739
750
  "skipped": "Přeskočeno",
740
751
  "smart-mode": "Inteligentní režim",
741
752
  "snapshot": "Zachytit stav",
753
+ "snapshot-created-on": "Zachycený stav vytvořen",
742
754
  "snapshot-mode": "Režim zachyceného stavu",
743
755
  "snapshots": "Zachycené stavy",
744
756
  "sockets-with-cores-per-socket": "{nSockets} patic × {nCores} jader/patici",
@@ -759,7 +771,7 @@
759
771
  "start-console": "Aby bylo možné přistupovat ke konzoli a navázat ve fungování, {type} zapněte!",
760
772
  "start-date": "Počáteční datum",
761
773
  "start-delay": "Prodleva zapnutí",
762
- "start-host": "Pro navázání ve fungování hostitele ho zapněte (případně sem zavítejte později, až bude zapnutý).",
774
+ "start-host": "Aby začal znovu fungovat, hostitele zapněte (případně sem zavítejte později, až bude zapnutý).",
763
775
  "start-vm": "Aby bylo možné přistupovat k jeho konzoli a podrobnostem k nastavení, je třeba ho spustit.",
764
776
  "started": "Spuštěné",
765
777
  "state": "Stav",
@@ -778,6 +790,7 @@
778
790
  "status:suspended": "Uspáno",
779
791
  "status:unknown": "Neznámé | Neznámý",
780
792
  "status:unreachable": "Nedosažitelné",
793
+ "step-n-of": "Krok {current} / {total}",
781
794
  "storage": "Úložiště",
782
795
  "storage-configuration": "Nastavení úložiště",
783
796
  "storage-format": "Formát úložiště",
@@ -840,11 +853,13 @@
840
853
  "total-used:": "Celkem využito:",
841
854
  "transfer-size": "Objem přenosu",
842
855
  "translation-tool": "Nástroj pro překládání",
856
+ "trigger": "Spouštěč",
843
857
  "unable-to-connect-to": "Nebylo možné se připojit k {ip}",
844
858
  "unable-to-connect-to-the-pool": "Nebylo možné se připojit k fondu",
845
859
  "unable-to-connect-to-xo-server": "Nebylo možné se připojit k XO serveru.",
846
860
  "unknown": "Neznámé",
847
861
  "unlocked": "Odemčeno",
862
+ "unnamed": "Bez názvu",
848
863
  "unreachable-hosts": "Nedosažitelní hostitelé",
849
864
  "unreachable-hosts-reload-page": "Hotovo, načtěte stránku znovu",
850
865
  "untitled": "Bez názvu",
@@ -853,6 +868,7 @@
853
868
  "used": "Využito",
854
869
  "used-for-backup": "Použito pro zálohu",
855
870
  "used-space": "Využitý prostor",
871
+ "used-space-on-sr": "Použitý prostor na repozitáři úložiště",
856
872
  "user-config": "Nastavení uživatele",
857
873
  "username": "Uživatelské jméno",
858
874
  "uuid": "UUID",
@@ -22,7 +22,7 @@
22
22
  "action:copy-info-json": "Kopier information til JSON",
23
23
  "action:create": "Opret",
24
24
  "action:delete": "Slet",
25
- "action:delete-vms": "Slet 1 VM | Slet {n} VM'er",
25
+ "action:delete-n-vms": "Slet 1 VM | Slet {n} VM'er",
26
26
  "action:deploy": "Indsætte",
27
27
  "action:deploy-xoa": "Installer XOA",
28
28
  "action:edit": "Rediger",
@@ -241,11 +241,11 @@
241
241
  "iscsi-iqn": "iSCSI IQN",
242
242
  "iso-dvd": "ISO/DVD",
243
243
  "job-name": "Job navn",
244
+ "job:delete:in-progress": "Sletning er i gang…",
244
245
  "job:vm-copy:bad-power-state": "VM skal stoppes",
245
246
  "job:vm-copy:in-progress": "Kopiering i gang…",
246
247
  "job:vm-copy:missing-vm": "Ingen VM at kopiere",
247
248
  "job:vm-delete:bad-power-state": "VM skal stoppes",
248
- "job:vm-delete:in-progress": "Sletning er i gang…",
249
249
  "job:vm-delete:missing-vm": "Ingen VM at slette",
250
250
  "job:vm-export:in-progress": "Eksport er i gang…",
251
251
  "job:vm-export:missing-compression": "Komprimering skal angives",
@@ -277,7 +277,7 @@
277
277
  "last-week": "Sidste uge",
278
278
  "learn-more": "Lær mere",
279
279
  "licensing": "Licensering",
280
- "loading": "Indlæser",
280
+ "loading": "Indlæser",
281
281
  "local": "Lokal",
282
282
  "login": "Log ind",
283
283
  "mac-address": "MAC-adresse",
@@ -29,7 +29,7 @@
29
29
  "action:delete": "Löschen",
30
30
  "action:delete-filter": "Filter löschen",
31
31
  "action:delete-group": "Gruppe löschen",
32
- "action:delete-vms": "1 VM löschen | {n} VMs löschen",
32
+ "action:delete-n-vms": "1 VM löschen | {n} VMs löschen",
33
33
  "action:deploy": "Bereitstellen",
34
34
  "action:deploy-xoa": "XOA bereitstellen",
35
35
  "action:duplicate": "Duplizieren",
@@ -351,21 +351,20 @@
351
351
  "job-name": "Job Name",
352
352
  "job:arg:host-required": "Host ist erforderlich",
353
353
  "job:arg:missing-payload": "Nutzlast fehlt",
354
- "job:arg:name-label-required": "Ein Name ist erforderlich",
354
+ "job:arg:name-required": "Ein Name ist erforderlich",
355
355
  "job:arg:password-required": "Passwort erforderlich",
356
356
  "job:arg:pool-id-required": "Pool ID erforderlich",
357
357
  "job:arg:sr-vdi-required": "SR VDI ist erforderlich",
358
358
  "job:arg:template-uuid-required": "Template UUID ist erforderlich",
359
359
  "job:arg:username-required": "Benutzername ist erforderlich",
360
- "job:server-create:in-progress": "Erstellung läuft…",
360
+ "job:delete:in-progress": "Löschung läuft…",
361
+ "job:create:in-progress": "Erstellung läuft…",
361
362
  "job:vm-copy:bad-power-state": "Die VM muss angehalten werden",
362
363
  "job:vm-copy:in-progress": "Kopiervorgang läuft…",
363
364
  "job:vm-copy:missing-vm": "Keine VM zu kopieren",
364
- "job:vm-create:in-progress": "Erstellung läuft…",
365
365
  "job:vm-create:incomplete-install-mode": "Installationsmodus ist unvollständig",
366
366
  "job:vm-delete:bad-power-state": "Die VM muss gestoppt werden",
367
367
  "job:vm-delete:blocked-operation": "VM Löschung ist gesperrt",
368
- "job:vm-delete:in-progress": "Löschung läuft…",
369
368
  "job:vm-delete:missing-vm": "Keine VM zu löschen",
370
369
  "job:vm-export:in-progress": "Export läuft…",
371
370
  "job:vm-export:missing-compression": "Kompression ist erforderlich",
@@ -427,7 +426,7 @@
427
426
  "license-type": "Lizenztyp",
428
427
  "licensing": "Lizensierung",
429
428
  "load-average": "Durchschnittsauslastung",
430
- "loading": "Ladevorgang läuft",
429
+ "loading": "Ladevorgang läuft",
431
430
  "loading-hosts": "Lade Hosts…",
432
431
  "local": "Lokal",
433
432
  "locked": "Gesperrt",