@xen-orchestra/web-core 0.24.0 → 0.26.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.
@@ -1,4 +1,6 @@
1
1
  {
2
+ "2nd-last": "2e laatste",
3
+ "3rd-last": "3e laatste",
2
4
  "about": "Over",
3
5
  "access-forum": "Open forum",
4
6
  "access-xoa": "Open XOA",
@@ -12,19 +14,20 @@
12
14
  "admin-password-confirm": "Bevestig beheerder wachtwoord",
13
15
  "affinity-host": "Voorkeur host",
14
16
  "alarm-type.cpu_usage": "CPU gebruik overschrijdt {n}",
15
- "alarm-type.disk_usage": "Schijfgebruik overschrijdt {n}%",
16
- "alarm-type.fs_usage": "Bestandssysteem gebruik overschrijdt {n}%",
17
- "alarm-type.log_fs_usage": "Logbestandssysteem gebruik overschrijdt {n}%",
18
- "alarm-type.mem_usage": "Geheugengebruik overschrijdt {n}%",
19
- "alarm-type.memory_free_kib": "Het vrije geheugen is minder dan {n}%",
20
- "alarm-type.network_usage": "Netwerkgebruik overschrijdt {n}%",
21
- "alarm-type.physical_utilisation": "Fysiek gebruik overschrijdt {n}%",
22
- "alarm-type.sr_io_throughput_total_per_host": "SR IO doorvoer totaal per host overschrijdt {n}%",
17
+ "alarm-type.disk_usage": "Schijfgebruik overschrijdt @:n-percent",
18
+ "alarm-type.fs_usage": "Bestandssysteem gebruik overschrijdt @:n-percent",
19
+ "alarm-type.log_fs_usage": "Logbestandssysteem gebruik overschrijdt @:n-percent",
20
+ "alarm-type.mem_usage": "Geheugengebruik overschrijdt @:n-percent",
21
+ "alarm-type.memory_free_kib": "Het vrije geheugen is minder dan @:n-percent",
22
+ "alarm-type.network_usage": "Netwerkgebruik overschrijdt @:n-percent",
23
+ "alarm-type.physical_utilisation": "Fysiek gebruik overschrijdt @:n-percent",
24
+ "alarm-type.sr_io_throughput_total_per_host": "SR IO doorvoer totaal per host overschrijdt @:n-percent",
23
25
  "alarm-type.unknown": "Onbekend alarmtype",
24
26
  "alarms": "Alarmen",
25
27
  "all-done": "Helemaal klaar!",
26
28
  "all-good": "Alles goed!",
27
29
  "allow-self-signed-ssl": "Mogelijk moet je zelf ondertekende SSL-certificaten toestaan in je browser",
30
+ "api-error-details": "API foutdetails",
28
31
  "appearance": "Uiterlijk",
29
32
  "ascending": "oplopend",
30
33
  "auto-generated": "Automatisch gegenereerd",
@@ -35,6 +38,7 @@
35
38
  "back-site-dashboard": "Ga terug naar je omgeving dashboard",
36
39
  "backup": "Back-up",
37
40
  "backup-issues": "Back-up problemen",
41
+ "backup-network": "Back-up netwerk",
38
42
  "backup-repository": "Back-upopslag (lokaal, NFS, SMB)",
39
43
  "backups": "Back-ups",
40
44
  "backups.jobs": "Opdrachten",
@@ -76,6 +80,10 @@
76
80
  "confirm-cancel": "Weet je zeker dat je wilt annuleren?",
77
81
  "confirm-delete": "Je staat op het punt om {0} te verwijderen",
78
82
  "connected": "Verbonden",
83
+ "connecting": "Verbinden",
84
+ "connection": "Verbinding",
85
+ "connection-failed": "Verbinding mislukt",
86
+ "connections": "Verbindingen",
79
87
  "console": "Console",
80
88
  "console-actions": "Console acties",
81
89
  "console-clipboard": "Console klembord",
@@ -124,7 +132,9 @@
124
132
  "cpu-usage": "Processorgebruik",
125
133
  "cpu-weight": "CPU-gewicht",
126
134
  "cpus": "CPU's",
135
+ "crash-dump-storage-repository": "Crashdump opslagplaats",
127
136
  "create": "Aanmaken",
137
+ "created-on": "Gemaakt op",
128
138
  "custom-config": "Aangepaste configuratie",
129
139
  "dark-mode.auto": "Automatische donkere modus",
130
140
  "dark-mode.disable": "Donkere modus uitschakelen",
@@ -132,6 +142,7 @@
132
142
  "dashboard": "Dashboard",
133
143
  "default-behavior": "Standaard gedrag",
134
144
  "default-locking-mode": "Standaard vergrendelingsmodus",
145
+ "default-storage-repository": "Standaard opslagplaats",
135
146
  "delete": "Verwijderen",
136
147
  "delete-vms": "Verwijder 1 VM | Verwijder {n} VMs",
137
148
  "deploy": "Uitrollen",
@@ -162,6 +173,7 @@
162
173
  "enabled": "Ingeschakeld",
163
174
  "end-of-life": "Einde van het leven",
164
175
  "eol": "EOL",
176
+ "error": "Fout",
165
177
  "error-no-data": "Fout, kan geen gegevens verzamelen.",
166
178
  "error-occurred": "Er heeft zich een fout voorgedaan",
167
179
  "exit-fullscreen": "Volledig scherm afsluiten",
@@ -173,6 +185,7 @@
173
185
  "export-vm": "VM exporteren",
174
186
  "export-vms": "VMs exporteren",
175
187
  "export-vms-manually-information": "Sommige VM-exports konden niet automatisch starten, waarschijnlijk door je browserinstellingen. Om ze te exporteren, moet je op elke VM klikken. (Je kunt ook de link kopiëren.)",
188
+ "failure": "Storing",
176
189
  "fast-clone": "Snel klonen",
177
190
  "fetching-fresh-data": "Nieuwe gegevens ophalen",
178
191
  "filter.comparison.contains": "Bevat",
@@ -194,6 +207,7 @@
194
207
  "for-replication": "Voor replicatie",
195
208
  "force-reboot": "Opnieuw opstarten forceren",
196
209
  "force-shutdown": "Afsluiten forceren",
210
+ "forget": "Vergeten",
197
211
  "fullscreen": "Volledig scherm",
198
212
  "fullscreen-leave": "Volledig scherm verlaten",
199
213
  "gateway": "Gateway",
@@ -204,6 +218,7 @@
204
218
  "gzip": "gzip",
205
219
  "hardware": "Hardware",
206
220
  "hardware-specifications": "Hardwarespecificaties",
221
+ "heartbeat-storage-repository": "Hartslag opslagplaats",
207
222
  "here": "Hier",
208
223
  "high-availability": "Hoge beschikbaarheid (HA)",
209
224
  "host": "Host",
@@ -226,6 +241,7 @@
226
241
  "in-last-three-jobs": "Tijdens hun laatste drie opdrachten",
227
242
  "install-settings": "Installatie instellingen",
228
243
  "interfaces": "Interface | Interface | Interfaces",
244
+ "interrupted": "Onderbroken",
229
245
  "invalid-field": "Ongeldig veld",
230
246
  "ip-address": "IP-adres",
231
247
  "ip-addresses": "IP-adressen",
@@ -233,6 +249,7 @@
233
249
  "is-primary-host": "{name} is primaire host",
234
250
  "iscsi-iqn": "iSCSI IQN",
235
251
  "iso-dvd": "ISO/DVD",
252
+ "job-name": "Taak naam",
236
253
  "job.vm-copy.bad-power-state": "VM moet worden stopgezet",
237
254
  "job.vm-copy.in-progress": "Bezig met kopiëren…",
238
255
  "job.vm-copy.missing-vms": "Geen VM om te kopiëren",
@@ -280,6 +297,7 @@
280
297
  "keep-me-logged": "Houd me ingelogd",
281
298
  "keep-page-open": "Vernieuw of verlaat de tab niet voor het einde van de implementatie.",
282
299
  "language": "Taal",
300
+ "last": "Laatste",
283
301
  "last-week": "Vorige week",
284
302
  "learn-more": "Meer informatie",
285
303
  "license-socket": "Licentie socket",
@@ -308,6 +326,7 @@
308
326
  "memory-usage": "Geheugengebruik",
309
327
  "migrate": "Migreren",
310
328
  "migrate-n-vms": "1 VM migreren | {n} VM's migreren",
329
+ "migration-compression": "Migratiecompressie",
311
330
  "minimum-cpu-limit": "Minimale CPU-limiet",
312
331
  "minimum-dynamic-memory": "Minimaal dynamisch geheugen",
313
332
  "minimum-static-memory": "Minimaal statisch geheugen",
@@ -321,6 +340,7 @@
321
340
  "n-hosts": "1 host | {n} hosts",
322
341
  "n-hosts-awaiting-patch": "{n} host wacht op deze patch {n} hosts wachten op deze patch",
323
342
  "n-missing": "{n} ontbreekt",
343
+ "n-percent": "{n} %",
324
344
  "n-vms": "1 VM | {n} VMs",
325
345
  "name": "Naam",
326
346
  "nested-virtualization": "Geneste virtualisatie",
@@ -353,10 +373,12 @@
353
373
  "no-results": "Geen resultaten",
354
374
  "no-selected-vm-can-be-exported": "Geen van de geselecteerde VM's kan worden geëxporteerd",
355
375
  "no-selected-vm-can-be-migrated": "Geen van de geselecteerde VM's kan worden gemigreerd",
376
+ "no-server-detected": "Geen server gedetecteerd",
356
377
  "no-tasks": "Geen taken",
357
378
  "no-vif-detected": "Geen VIF gedetecteerd",
358
379
  "none": "Geen",
359
380
  "not-found": "Niet gevonden",
381
+ "not-running": "Wordt niet uitgevoerd",
360
382
  "not-yet-available": "Informatie is nog niet beschikbaar",
361
383
  "object": "Object",
362
384
  "object-not-found": "Object {id} kan niet worden gevonden…",
@@ -385,6 +407,7 @@
385
407
  "please-confirm": "Graag bevestigen",
386
408
  "pool": "Pool",
387
409
  "pool-cpu-usage": "Pool processor gebruik",
410
+ "pool-management": "Pool beheer",
388
411
  "pool-ram-usage": "Pool geheugen gebruik",
389
412
  "pools": "Pools",
390
413
  "pools-status": "Pools status",
@@ -402,11 +425,14 @@
402
425
  "property": "Eigenschap",
403
426
  "protect-from-accidental-deletion": "Bescherm tegen per ongeluk verwijderen",
404
427
  "protect-from-accidental-shutdown": "Beschermen tegen per ongeluk afsluiten",
428
+ "proxy-url": "Proxy URL",
405
429
  "pxe": "PXE",
406
430
  "quick-info": "Snelle informatie",
407
431
  "ram": "RAM",
408
432
  "ram-provisioning": "RAM reservering",
409
433
  "ram-usage": "RAM gebruik",
434
+ "read": "Lezen",
435
+ "read-only": "Alleen-lezen",
410
436
  "reboot": "Opnieuw opstarten",
411
437
  "receive": "Ontvangen",
412
438
  "reformat": "Formatteren",
@@ -437,6 +463,7 @@
437
463
  "select.network": "Selecteer een netwerk",
438
464
  "select.storage": "Selecteer een opslag",
439
465
  "selected-vms-in-execution": "Enkele geselecteerde VM's draaien",
466
+ "self-signed-certificates": "Zelf ondertekende certificaten",
440
467
  "send": "Verstuur",
441
468
  "send-ctrl-alt-del": "Verstuur Ctrl+Alt+Del",
442
469
  "send-us-feedback": "Stuur ons feedback",
@@ -445,6 +472,7 @@
445
472
  "sidebar.search-tree-view": "Zoeken in boomstructuur",
446
473
  "sidebar.vms-treeview": "VM's boomstructuur",
447
474
  "size": "Grootte",
475
+ "skipped": "Overgeslagen",
448
476
  "snapshot": "Snapshot",
449
477
  "sockets-with-cores-per-socket": "{nSockets} socket(s) × {nCores} kern(en)/socket(s)",
450
478
  "software-tooling": "Software & hulpmiddelen",
@@ -472,6 +500,7 @@
472
500
  "storage-repositories": "Opslagplaatsen",
473
501
  "storage-repository": "Opslagplaats",
474
502
  "storage-usage": "Opslaggebruik",
503
+ "success": "Succes",
475
504
  "summary": "Overzicht",
476
505
  "support": "Ondersteuning",
477
506
  "suspend": "Opschorten",
@@ -510,6 +539,7 @@
510
539
  "total-storage-repository": "Totale opslagplaats",
511
540
  "total-used": "Totaal gebruikt",
512
541
  "total-used:": "Totaal gebruikt:",
542
+ "unable-to-connect-to-the-pool": "Kan geen verbinding maken met de pool",
513
543
  "unknown": "Onbekend",
514
544
  "unlocked": "Ontgrendeld",
515
545
  "unreachable-hosts": "Onbereikbare hosts",
@@ -517,10 +547,12 @@
517
547
  "up-to-date": "Actueel",
518
548
  "used": "Gebruikt",
519
549
  "user-config": "Gebruikersconfiguratie",
550
+ "username": "Gebruikersnaam",
520
551
  "uuid": "UUID",
521
552
  "vcpus": "vCPU | vCPU | vCPU's",
522
553
  "vcpus-assigned": "Toegewezen vCPU's",
523
554
  "vcpus-used": "Gebruikte vCPU's",
555
+ "vdi-throughput": "VDI-doorvoer",
524
556
  "vdis": "VDI | VDI | VDI's",
525
557
  "version": "Versie",
526
558
  "vga": "VGA",
@@ -533,15 +565,20 @@
533
565
  "virtual-tpm": "Virtuele TPM (VTPM)",
534
566
  "virtualization-boot-settings": "Virtualisatie & opstartinstellingen",
535
567
  "virtualization-mode": "Virtualisatiemodus",
568
+ "virtualization-type": "Virtualisatietype",
536
569
  "vlan": "VLAN",
537
570
  "vm": "VM",
538
571
  "vm-description": "VM beschrijving",
539
572
  "vm-is-running": "De VM draait",
540
573
  "vm-limit-topology": "VM-limiettopologie",
541
574
  "vm-management": "VM-beheer",
575
+ "vm-status.halted": "Gestopt",
576
+ "vm-status.paused": "Gepauzeerd",
577
+ "vm-status.running": "Draait",
578
+ "vm-status.suspended": "Geschorst",
542
579
  "vm.active": "Actief",
543
580
  "vm.inactive": "Inactief",
544
- "vms": "VM | VM's",
581
+ "vms": "VM | VM | VM's",
545
582
  "vms-status": "VM's status",
546
583
  "vms-status.halted": "Gestopt",
547
584
  "vms-status.inactive": "Inactief",
@@ -551,6 +588,7 @@
551
588
  "vms-status.suspended": "Geschorst",
552
589
  "vms-status.unknown": "Onbekend",
553
590
  "vms-status.unknown.tooltip": "XO heeft de verbinding met de pool verloren",
591
+ "write": "Schrijven",
554
592
  "xo-backups": "XO back-ups",
555
593
  "xo-lite-under-construction": "XOLite is in ontwikkeling",
556
594
  "xo-replications": "XO replicaties",
@@ -1,4 +1,6 @@
1
1
  {
2
+ "2nd-last": "2-й последний",
3
+ "3rd-last": "3-й последний",
2
4
  "about": "О нас",
3
5
  "access-forum": "Перейти на форум",
4
6
  "access-xoa": "Доступ к XOA",
@@ -10,20 +12,22 @@
10
12
  "admin-login": "Логин администратора",
11
13
  "admin-password": "Пароль администратора",
12
14
  "admin-password-confirm": "Подтвердите пароль администратора",
13
- "alarm-type.cpu_usage": "Загрузка ЦПУ превышает {n}%",
14
- "alarm-type.disk_usage": "Использование диска превышает {n}%",
15
- "alarm-type.fs_usage": "Использование файловой системы превышает {n}%",
16
- "alarm-type.log_fs_usage": "Использование файловой системы Log превышает {n}%",
17
- "alarm-type.mem_usage": "Использование памяти превышает {n}%",
18
- "alarm-type.memory_free_kib": "Свободной памяти меньше {n}%",
19
- "alarm-type.network_usage": "Использование сети превышает {n}%",
20
- "alarm-type.physical_utilisation": "Физическое использование превышает {n}%",
21
- "alarm-type.sr_io_throughput_total_per_host": "Общая пропускная способность SR IO на один хост превышает {n}%",
15
+ "affinity-host": "Близкий хост",
16
+ "alarm-type.cpu_usage": "Загрузка ЦПУ превышает @:n-percent",
17
+ "alarm-type.disk_usage": "Использование диска превышает @:n-percent",
18
+ "alarm-type.fs_usage": "Использование файловой системы превышает @:n-percent",
19
+ "alarm-type.log_fs_usage": "Использование файловой системы Log превышает @:n-percent",
20
+ "alarm-type.mem_usage": "Использование памяти превышает @:n-percent",
21
+ "alarm-type.memory_free_kib": "Свободной памяти меньше @:n-percent",
22
+ "alarm-type.network_usage": "Использование сети превышает @:n-percent",
23
+ "alarm-type.physical_utilisation": "Физическое использование превышает @:n-percent",
24
+ "alarm-type.sr_io_throughput_total_per_host": "Общая пропускная способность SR IO на один хост превышает @:n-percent",
22
25
  "alarm-type.unknown": "Неизвестный тип оповещения",
23
26
  "alarms": "Тревога",
24
27
  "all-done": "Выполнено!",
25
28
  "all-good": "Все в порядке!",
26
29
  "allow-self-signed-ssl": "Возможно, вам потребуется разрешить самоподписанные SSL-сертификаты в вашем браузере",
30
+ "api-error-details": "Детали ошибки API",
27
31
  "appearance": "Внешний вид",
28
32
  "ascending": "по возрастанию",
29
33
  "auto-generated": "Автоматически сгенерированный",
@@ -34,6 +38,7 @@
34
38
  "back-site-dashboard": "Вернитесь на панель управления вашего сайта",
35
39
  "backup": "Резервное копирование",
36
40
  "backup-issues": "Проблемы с резервным копированием",
41
+ "backup-network": "Резервная сеть",
37
42
  "backup-repository": "Хранилище резервных копий (local, NFS, SMB)",
38
43
  "backups": "Резервные копии",
39
44
  "backups.jobs": "Работы",
@@ -49,6 +54,7 @@
49
54
  "backups.vms-protection.unprotected": "По крайней мере на 1 работе, но без защиты",
50
55
  "best-effort": "лучшее усилие",
51
56
  "bios-default": "bios (по умолчанию)",
57
+ "bios-info": "Информация о BIOS",
52
58
  "bond": "Bond",
53
59
  "bond-devices": "Устройства Bond",
54
60
  "bond-status": "Статус Bond",
@@ -74,13 +80,20 @@
74
80
  "confirm-cancel": "Вы уверены, что хотите отменить?",
75
81
  "confirm-delete": "Вы собираетесь удалить {0}",
76
82
  "connected": "Подключен",
83
+ "connecting": "соединяется",
84
+ "connection": "соединение",
85
+ "connection-failed": "Соединение неудачно",
86
+ "connections": "Соединения",
77
87
  "console": "Консоль",
78
88
  "console-actions": "Действия с консоли",
79
89
  "console-clipboard": "Буфер обмена консоли",
80
90
  "console-unavailable": "Консоль недоступна",
91
+ "control-domain-memory": "Память домена управления",
81
92
  "copy": "Копировать",
82
93
  "copy-all": "Копировать всё",
94
+ "copy-host": "Скопировать хост",
83
95
  "copy-info-json": "Скопировать информацию в JSON",
96
+ "core-socket": "Ядро (сокет)",
84
97
  "core.close": "Закрыть",
85
98
  "core.copied": "Скопировано",
86
99
  "core.copy-id": "Скопировать ID",
@@ -90,6 +103,8 @@
90
103
  "core.hide": "Скрыть",
91
104
  "core.open": "Открыть",
92
105
  "core.pagination.all": "Все",
106
+ "core.pagination.show-by": "Показать по",
107
+ "core.query-search-bar.label": "поисковый движок",
93
108
  "core.query-search-bar.placeholder": "Впишите свой запрос…",
94
109
  "core.query-search-bar.use-query-builder": "Использовать конструктор запросов",
95
110
  "core.quick-actions": "Быстрые действия",
@@ -99,6 +114,7 @@
99
114
  "core.select.n-selected-of": "{count} выбрано из {total} объектов",
100
115
  "core.select.none": "Ничего не выбирать",
101
116
  "core.select.unselect": "Снять выбор",
117
+ "core.show-by": "Показать по",
102
118
  "core.sidebar.close": "Закрыть боковую панель",
103
119
  "core.sidebar.open": "Открыть боковую панель",
104
120
  "core.sidebar.unlock": "Разблокировать боковую панель",
@@ -110,6 +126,7 @@
110
126
  "cpu-usage": "Использование CPU",
111
127
  "cpus": "CPUs",
112
128
  "create": "Создать",
129
+ "created-on": "Создан на",
113
130
  "custom-config": "Пользовательская конфигурация",
114
131
  "dark-mode.auto": "Автоматический тёмный режим",
115
132
  "dark-mode.disable": "Отключить тёмный режим",
@@ -173,6 +190,7 @@
173
190
  "mtu": "MTU",
174
191
  "n-gb-left": "{n} Гб осталось",
175
192
  "n-gb-required": "{n} Гб требуется",
193
+ "n-percent": "{n} %",
176
194
  "new-vif": "Новый VIF",
177
195
  "new-vm": "Новая ВМ",
178
196
  "new-vm.add": "Добавить новую ВМ",
@@ -180,6 +198,7 @@
180
198
  "new-vm.name": "Название ВМ",
181
199
  "news": "Новости",
182
200
  "not-found": "Не найдено",
201
+ "not-running": "не запущен",
183
202
  "not-yet-available": "Информация пока недоступна",
184
203
  "object": "Объект",
185
204
  "object-not-found": "Объект {id} не найден…",
@@ -195,6 +214,7 @@
195
214
  "pifs-status": "PIFs статус",
196
215
  "please-confirm": "Пожалуйста подтвердите",
197
216
  "pxe": "PXE",
217
+ "read": "читать",
198
218
  "scan-pifs": "Сканировать PIFs",
199
219
  "send": "Отправить",
200
220
  "send-ctrl-alt-del": "Отправить Ctrl+Alt+Del",
@@ -211,14 +231,23 @@
211
231
  "static-ip": "Статичный IP",
212
232
  "uuid": "UUID",
213
233
  "vcpus": "vCPU | vCPU | vCPUs",
234
+ "vdi-throughput": "Пропускная способность VDI",
214
235
  "vdis": "VDI | VDI | VDIs",
215
236
  "vif": "VIF",
216
237
  "vif-device": "VIF #{device}",
217
238
  "vifs": "VIFs",
239
+ "virtualization-type": "Тип виртуализации",
218
240
  "vlan": "VLAN",
219
241
  "vm-description": "Описание ВМ",
242
+ "vm-status.halted": "остановлен",
243
+ "vm-status.paused": "Пауза",
244
+ "vm-status.running": "Запущенный",
245
+ "vm-status.suspended": "Приостановлен",
220
246
  "vms-status.unknown": "Неизвестный",
247
+ "write": "Писать",
248
+ "xo-backups": "резервные копии XO",
221
249
  "xo-lite-under-construction": "XOLite находится в разработке",
250
+ "xo-replications": "Репликации XO",
222
251
  "xoa-admin-account": "Аккаунт администратора XOA",
223
252
  "xoa-deploy": "Развёртывание XOA",
224
253
  "xoa-deploy-failed": "Развёртывание не удалось!",
@@ -11,15 +11,15 @@
11
11
  "admin-password": "Admin-lösenord",
12
12
  "admin-password-confirm": "Bekräfta admin-lösenord",
13
13
  "affinity-host": "Fokus-host",
14
- "alarm-type.cpu_usage": "CPU-användning överskrider {n}%",
15
- "alarm-type.disk_usage": "Disk-användning överskrider {n}%",
16
- "alarm-type.fs_usage": "FS-användning överskrider {n}%",
17
- "alarm-type.log_fs_usage": "Logg-FS-användning överskrider {n}%",
18
- "alarm-type.mem_usage": "Minnes-användning överskrider {n}%",
19
- "alarm-type.memory_free_kib": "Ledigt minne är under {n}%",
20
- "alarm-type.network_usage": "Nätverks-användning överskrider {n}%",
21
- "alarm-type.physical_utilisation": "Fysiskt nyttjande överskrider {n}%",
22
- "alarm-type.sr_io_throughput_total_per_host": "SR IO genomströmning totalt per host överskrider {n}%",
14
+ "alarm-type.cpu_usage": "CPU-användning överskrider @:n-percent",
15
+ "alarm-type.disk_usage": "Disk-användning överskrider @:n-percent",
16
+ "alarm-type.fs_usage": "FS-användning överskrider @:n-percent",
17
+ "alarm-type.log_fs_usage": "Logg-FS-användning överskrider @:n-percent",
18
+ "alarm-type.mem_usage": "Minnes-användning överskrider @:n-percent",
19
+ "alarm-type.memory_free_kib": "Ledigt minne är under @:n-percent",
20
+ "alarm-type.network_usage": "Nätverks-användning överskrider @:n-percent",
21
+ "alarm-type.physical_utilisation": "Fysiskt nyttjande överskrider @:n-percent",
22
+ "alarm-type.sr_io_throughput_total_per_host": "SR IO genomströmning totalt per host överskrider @:n-percent",
23
23
  "alarm-type.unknown": "Okänd larm-typ",
24
24
  "alarms": "Larm",
25
25
  "all-good": "Allt är bra!",
@@ -320,6 +320,7 @@
320
320
  "n-hosts": "1 host | {n} hostar",
321
321
  "n-hosts-awaiting-patch": "{n} hosten väntar på denna uppdatering | {n} hostarna väntar på denna uppdatering",
322
322
  "n-missing": "{n} saknas",
323
+ "n-percent": "{n}%",
323
324
  "n-vms": "1 VM | {n} VM:ar",
324
325
  "name": "Namn",
325
326
  "nested-virtualization": "Nästlad virtualisering",
@@ -0,0 +1,64 @@
1
+ import { useTimeoutPoll } from '@vueuse/core'
2
+ import type { MaybeRefOrGetter } from '@vueuse/shared'
3
+ // eslint-disable-next-line import/namespace,import/default,import/no-named-as-default,import/no-named-as-default-member -- https://github.com/pamelafox/ndjson-readablestream/pull/13
4
+ import readNDJSONStream from 'ndjson-readablestream'
5
+ import { computed, isRef, toValue, watch } from 'vue'
6
+
7
+ export function defineRequest<TState>(options: {
8
+ url: string
9
+ state: () => TState
10
+ onDataReceived: (state: TState, data: unknown) => void
11
+ }): () => TState
12
+
13
+ export function defineRequest<TArgs extends any[], TState>(options: {
14
+ url: (...args: TArgs) => string
15
+ state: () => TState
16
+ onDataReceived: (state: TState, data: unknown) => void
17
+ onUrlChange: (state: TState) => void
18
+ }): (...args: { [K in keyof TArgs]: MaybeRefOrGetter<TArgs[K]> }) => TState
19
+
20
+ export function defineRequest<TArgs extends any[], TState>(options: {
21
+ url: string | ((...args: TArgs) => string)
22
+ state: () => TState
23
+ onDataReceived: (state: TState, data: unknown) => void
24
+ onUrlChange?: (state: TState) => void
25
+ }) {
26
+ return function useRequest(...args: { [K in keyof TArgs]: MaybeRefOrGetter<TArgs[K]> }) {
27
+ const urlOption = options.url
28
+
29
+ const url = typeof urlOption === 'function' ? computed(() => urlOption(...(args.map(toValue) as TArgs))) : urlOption
30
+
31
+ const state = options.state()
32
+
33
+ async function execute() {
34
+ const response = await fetch(toValue(url))
35
+
36
+ if (!response.ok) {
37
+ throw new Error(`Failed to fetch: ${response.statusText}`)
38
+ }
39
+
40
+ if (!response.body) {
41
+ throw new Error('Response body is empty')
42
+ }
43
+
44
+ for await (const event of readNDJSONStream(response.body)) {
45
+ options.onDataReceived(state, event)
46
+ }
47
+ }
48
+
49
+ const { resume, pause } = useTimeoutPoll(execute, 10000, {
50
+ immediate: true,
51
+ immediateCallback: true,
52
+ })
53
+
54
+ if (isRef(url)) {
55
+ watch(url, () => {
56
+ pause()
57
+ options.onUrlChange?.(state)
58
+ resume()
59
+ })
60
+ }
61
+
62
+ return state
63
+ }
64
+ }
@@ -8,5 +8,5 @@ export const usePanelStore = defineStore('panel', () => {
8
8
  const open = () => (isExpanded.value = true)
9
9
  const close = () => (isExpanded.value = false)
10
10
 
11
- return { open, close, isExpanded: computed(() => uiStore.isDesktop || isExpanded.value) }
11
+ return { open, close, isExpanded: computed(() => !uiStore.isMobile || isExpanded.value) }
12
12
  })
@@ -51,15 +51,18 @@ export const useSidebarStore = defineStore('layout', () => {
51
51
  ifElse(isResizing, [load, resume], [pause, unload])
52
52
 
53
53
  watch(
54
- () => uiStore.isMobile,
55
- isMobile => {
56
- // keep the state of desktop expansion
54
+ () => ({
55
+ isMobile: uiStore.isMobile,
56
+ isDesktopLarge: uiStore.isDesktopLarge,
57
+ }),
58
+ ({ isMobile, isDesktopLarge }) => {
57
59
  if (isMobile) {
58
60
  desktopState = isExpanded.value
61
+ } else {
62
+ isExpanded.value = isDesktopLarge ? true : desktopState
59
63
  }
60
-
61
- isExpanded.value = desktopState && !isMobile
62
- }
64
+ },
65
+ { immediate: true }
63
66
  )
64
67
 
65
68
  return {
@@ -8,11 +8,14 @@ export const useUiStore = defineStore('ui', () => {
8
8
 
9
9
  const { store: colorMode } = useColorMode({ initialValue: 'auto' })
10
10
 
11
- const { desktop: isDesktop } = useBreakpoints({
11
+ const breakpoints = useBreakpoints({
12
12
  desktop: 1024,
13
+ desktopLarge: 1440,
13
14
  })
14
15
 
15
- const isMobile = computed(() => !isDesktop.value)
16
+ const isMobile = breakpoints.smaller('desktop')
17
+ const isDesktop = breakpoints.between('desktop', 'desktopLarge')
18
+ const isDesktopLarge = breakpoints.greater('desktopLarge')
16
19
 
17
20
  const router = useRouter()
18
21
  const route = useRoute()
@@ -27,8 +30,9 @@ export const useUiStore = defineStore('ui', () => {
27
30
  return {
28
31
  colorMode,
29
32
  currentHostOpaqueRef,
30
- isDesktop,
31
33
  isMobile,
34
+ isDesktop,
35
+ isDesktopLarge,
32
36
  hasUi,
33
37
  }
34
38
  })
@@ -0,0 +1,10 @@
1
+ export enum HttpCodes {
2
+ Ok = 200,
3
+ Created = 201,
4
+ NoContent = 204,
5
+ Unauthorized = 401,
6
+ NotFound = 404,
7
+ Conflict = 409,
8
+ UnprocessableEntity = 422,
9
+ InternalServerError = 500,
10
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@xen-orchestra/web-core",
3
3
  "type": "module",
4
- "version": "0.24.0",
4
+ "version": "0.26.0",
5
5
  "private": false,
6
6
  "exports": {
7
7
  "./*": {
@@ -26,6 +26,7 @@
26
26
  "human-format": "^1.2.1",
27
27
  "iterable-backoff": "^0.1.0",
28
28
  "lodash-es": "^4.17.21",
29
+ "ndjson-readablestream": "^1.2.0",
29
30
  "placement.js": "^1.0.0-beta.5",
30
31
  "simple-icons": "^14.14.0",
31
32
  "vue-echarts": "^6.6.8"
@@ -1,53 +0,0 @@
1
- import { useTimestamp } from '@vueuse/core'
2
- import { computed, type MaybeRefOrGetter, toValue } from 'vue'
3
- import { useI18n } from 'vue-i18n'
4
-
5
- export enum SECONDS {
6
- MINUTE = 60,
7
- HOUR = SECONDS.MINUTE * 60,
8
- DAY = SECONDS.HOUR * 24,
9
- WEEK = SECONDS.DAY * 7,
10
- MONTH = SECONDS.DAY * 30,
11
- YEAR = SECONDS.DAY * 365,
12
- }
13
-
14
- export type TimeThreshold = [number, Intl.RelativeTimeFormatUnit]
15
-
16
- const timeThresholds: TimeThreshold[] = [
17
- [SECONDS.MINUTE, 'second'],
18
- [SECONDS.HOUR, 'minute'],
19
- [SECONDS.DAY, 'hour'],
20
- [SECONDS.WEEK, 'day'],
21
- [SECONDS.MONTH, 'week'],
22
- [SECONDS.YEAR, 'month'],
23
- [Infinity, 'year'],
24
- ]
25
-
26
- export function useTimeAgo(referenceDate: MaybeRefOrGetter<Date | number | string>) {
27
- const { locale } = useI18n()
28
-
29
- const formatter = computed(() => new Intl.RelativeTimeFormat(locale.value, { numeric: 'auto' }))
30
-
31
- const now = useTimestamp({ interval: 1000 })
32
-
33
- const referenceTime = computed(() => new Date(toValue(referenceDate)).getTime())
34
-
35
- const distance = computed(() => {
36
- const diff = Math.trunc((referenceTime.value - now.value) / 1000)
37
-
38
- if (Math.abs(diff) < 60) {
39
- return Math.trunc(diff / 10) * 10 || 0 // Avoid recomputing when the value changes from 0 to -0
40
- }
41
-
42
- return timeThresholds.reduce(
43
- (acc, [threshold]) => (Math.abs(acc) < threshold ? acc : Math.trunc(acc / threshold) * threshold),
44
- diff
45
- )
46
- })
47
-
48
- return computed(() => {
49
- const index = timeThresholds.findIndex(([threshold]) => Math.abs(distance.value) < threshold)
50
- const divisor = index > 0 ? timeThresholds[index - 1][0] : 1
51
- return formatter.value.format(Math.trunc(distance.value / divisor), timeThresholds[index][1])
52
- })
53
- }