From 4a2bc6a458a10ad91f00564d379a75a64d2a7373 Mon Sep 17 00:00:00 2001 From: crschnick Date: Thu, 13 Jun 2024 16:21:24 +0000 Subject: [PATCH] Rework --- .../xpipe/app/comp/store/StoreEntryComp.java | 32 ++----------------- .../app/comp/store/StoreEntryWrapper.java | 18 +++++++++-- .../java/io/xpipe/app/ext/ActionProvider.java | 8 +++++ .../io/xpipe/app/storage/DataStorage.java | 12 ++++--- .../io/xpipe/app/storage/DataStoreEntry.java | 31 +++++++++++------- lang/app/strings/translations_da.properties | 5 +++ lang/app/strings/translations_de.properties | 5 +++ lang/app/strings/translations_en.properties | 5 +-- lang/app/strings/translations_es.properties | 5 +++ lang/app/strings/translations_fr.properties | 5 +++ lang/app/strings/translations_it.properties | 5 +++ lang/app/strings/translations_ja.properties | 5 +++ lang/app/strings/translations_nl.properties | 5 +++ lang/app/strings/translations_pt.properties | 5 +++ lang/app/strings/translations_ru.properties | 5 +++ lang/app/strings/translations_tr.properties | 5 +++ lang/app/strings/translations_zh.properties | 5 +++ lang/base/strings/translations_da.properties | 5 +++ lang/base/strings/translations_de.properties | 5 +++ lang/base/strings/translations_en.properties | 5 +++ lang/base/strings/translations_es.properties | 5 +++ lang/base/strings/translations_fr.properties | 5 +++ lang/base/strings/translations_it.properties | 5 +++ lang/base/strings/translations_ja.properties | 5 +++ lang/base/strings/translations_nl.properties | 5 +++ lang/base/strings/translations_pt.properties | 5 +++ lang/base/strings/translations_ru.properties | 5 +++ lang/base/strings/translations_tr.properties | 5 +++ lang/base/strings/translations_zh.properties | 5 +++ lang/proc/strings/translations_da.properties | 9 ++++++ lang/proc/strings/translations_de.properties | 9 ++++++ lang/proc/strings/translations_en.properties | 6 ++++ lang/proc/strings/translations_es.properties | 9 ++++++ lang/proc/strings/translations_fr.properties | 9 ++++++ lang/proc/strings/translations_it.properties | 9 ++++++ lang/proc/strings/translations_ja.properties | 9 ++++++ lang/proc/strings/translations_nl.properties | 9 ++++++ lang/proc/strings/translations_pt.properties | 9 ++++++ lang/proc/strings/translations_ru.properties | 9 ++++++ lang/proc/strings/translations_tr.properties | 9 ++++++ lang/proc/strings/translations_zh.properties | 9 ++++++ 41 files changed, 276 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java index 40bd3e71..8ac3bfa5 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java @@ -239,9 +239,7 @@ public abstract class StoreEntryComp extends SimpleComp { var button = new IconButtonComp(cs.getIcon(wrapper.getEntry().ref()), leaf != null ? () -> { ThreadHelper.runFailableAsync(() -> { - var action = leaf.createAction( - wrapper.getEntry().ref()); - action.execute(); + wrapper.runAction(leaf.createAction(wrapper.getEntry().ref()), leaf.showBusy()); }); } : null); if (branch != null) { @@ -314,26 +312,6 @@ public abstract class StoreEntryComp extends SimpleComp { contextMenu.getItems().add(browse); } - if (wrapper.getEntry().getValidity().isUsable()) { - var color = new Menu(AppI18n.get("color"), new FontIcon("mdi2f-format-color-fill")); - var none = new MenuItem("None"); - none.setOnAction(event -> { - wrapper.getEntry().setColor(null); - event.consume(); - }); - color.getItems().add(none); - - Arrays.stream(DataStoreColor.values()).forEach(dataStoreColor -> { - MenuItem m = new MenuItem(DataStoreFormatter.capitalize(dataStoreColor.getId())); - m.setOnAction(event -> { - wrapper.getEntry().setColor(dataStoreColor); - event.consume(); - }); - color.getItems().add(m); - }); - contextMenu.getItems().add(color); - } - if (DataStorage.get().isRootEntry(wrapper.getEntry())) { var color = new Menu(AppI18n.get("color"), new FontIcon("mdi2f-format-color-fill")); var none = new MenuItem("None"); @@ -473,9 +451,7 @@ public abstract class StoreEntryComp extends SimpleComp { run.textProperty().bind(AppI18n.observable("base.execute")); run.setOnAction(event -> { ThreadHelper.runFailableAsync(() -> { - p.getLeafDataStoreCallSite() - .createAction(wrapper.getEntry().ref()) - .execute(); + wrapper.runAction(leaf.createAction(wrapper.getEntry().ref()), leaf.showBusy()); }); }); menu.getItems().add(run); @@ -521,15 +497,13 @@ public abstract class StoreEntryComp extends SimpleComp { event.consume(); ThreadHelper.runFailableAsync(() -> { - var action = leaf.createAction(wrapper.getEntry().ref()); - action.execute(); + wrapper.runAction(leaf.createAction(wrapper.getEntry().ref()), leaf.showBusy()); }); }); return item; } - private static String DEFAULT_NOTES = null; private static String getDefaultNotes() { diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryWrapper.java b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryWrapper.java index 3cd10647..c548f5fd 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryWrapper.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryWrapper.java @@ -130,7 +130,7 @@ public class StoreEntryWrapper { color.setValue(entry.getColor()); notes.setValue(new StoreNotes(entry.getNotes(), entry.getNotes())); - busy.setValue(entry.isInRefresh()); + busy.setValue(entry.getBusyCounter().get() != 0); deletable.setValue(entry.getConfiguration().isDeletable() || AppPrefs.get().developerDisableGuiRestrictions().getValue()); @@ -222,12 +222,26 @@ public class StoreEntryWrapper { var found = getDefaultActionProvider().getValue(); entry.notifyUpdate(true, false); if (found != null) { - found.getDefaultDataStoreCallSite().createAction(entry.ref()).execute(); + var act = found.getDefaultDataStoreCallSite().createAction(entry.ref()); + runAction(act,found.getDefaultDataStoreCallSite().showBusy()); } else { entry.setExpanded(!entry.isExpanded()); } } + public void runAction(ActionProvider.Action action, boolean showBusy) throws Exception { + try { + if (showBusy) { + getEntry().incrementBusyCounter(); + } + action.execute(); + } finally { + if (showBusy) { + getEntry().decrementBusyCounter(); + } + } + } + public void toggleExpanded() { this.expanded.set(!expanded.getValue()); } diff --git a/app/src/main/java/io/xpipe/app/ext/ActionProvider.java b/app/src/main/java/io/xpipe/app/ext/ActionProvider.java index 8bc673a8..76d8f67b 100644 --- a/app/src/main/java/io/xpipe/app/ext/ActionProvider.java +++ b/app/src/main/java/io/xpipe/app/ext/ActionProvider.java @@ -88,6 +88,10 @@ public interface ActionProvider { default boolean isApplicable(DataStoreEntryRef o) { return true; } + + default boolean showBusy() { + return true; + } } interface DataStoreCallSite { @@ -109,6 +113,10 @@ public interface ActionProvider { String getIcon(DataStoreEntryRef store); Class getApplicableClass(); + + default boolean showBusy() { + return true; + } } interface BranchDataStoreCallSite extends DataStoreCallSite { diff --git a/app/src/main/java/io/xpipe/app/storage/DataStorage.java b/app/src/main/java/io/xpipe/app/storage/DataStorage.java index 984a4e1d..c1712a54 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStorage.java @@ -1,12 +1,14 @@ package io.xpipe.app.storage; import io.xpipe.app.comp.store.StoreSortMode; -import io.xpipe.app.ext.DataStorageExtensionProvider; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.util.FixedHierarchyStore; import io.xpipe.app.util.ThreadHelper; -import io.xpipe.core.store.*; +import io.xpipe.core.store.DataStore; +import io.xpipe.core.store.FixedChildStore; +import io.xpipe.core.store.LocalStore; +import io.xpipe.core.store.StorePath; import io.xpipe.core.util.UuidHelper; import javafx.util.Pair; import lombok.Getter; @@ -338,15 +340,15 @@ public abstract class DataStorage { return false; } - e.setInRefresh(true); + e.incrementBusyCounter(); List> newChildren; try { newChildren = ((FixedHierarchyStore) (e.getStore())).listChildren(e); - e.setInRefresh(false); } catch (Exception ex) { - e.setInRefresh(false); ErrorEvent.fromThrowable(ex).handle(); return false; + } finally { + e.decrementBusyCounter(); } diff --git a/app/src/main/java/io/xpipe/app/storage/DataStoreEntry.java b/app/src/main/java/io/xpipe/app/storage/DataStoreEntry.java index 55f41f03..f4455869 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStoreEntry.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStoreEntry.java @@ -21,6 +21,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.time.Instant; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -46,8 +47,7 @@ public class DataStoreEntry extends StorageElement { @NonFinal boolean expanded; - @NonFinal - boolean inRefresh; + AtomicInteger busyCounter = new AtomicInteger(); @Getter @NonFinal @@ -323,14 +323,21 @@ public class DataStoreEntry extends StorageElement { return getName(); } - public void setInRefresh(boolean newRefresh) { - var changed = inRefresh != newRefresh; - if (changed) { - this.inRefresh = newRefresh; + public void incrementBusyCounter() { + var r = busyCounter.incrementAndGet() == 1; + if (r) { notifyUpdate(false, false); } } + public boolean decrementBusyCounter() { + var r = busyCounter.decrementAndGet() == 0; + if (r) { + notifyUpdate(false, false); + } + return r; + } + public DataStoreEntryRef ref() { return new DataStoreEntryRef<>(this); } @@ -503,7 +510,7 @@ public class DataStoreEntry extends StorageElement { try { store.checkComplete(); - setInRefresh(true); + incrementBusyCounter(); if (store instanceof ValidatableStore l) { l.validate(); } else if (store instanceof FixedHierarchyStore h) { @@ -512,7 +519,7 @@ public class DataStoreEntry extends StorageElement { .collect(Collectors.toSet()); } } finally { - setInRefresh(false); + decrementBusyCounter(); } } @@ -547,14 +554,13 @@ public class DataStoreEntry extends StorageElement { public void initializeEntry() { if (store instanceof ExpandedLifecycleStore lifecycleStore) { try { - inRefresh = true; + incrementBusyCounter(); notifyUpdate(false, false); lifecycleStore.initializeValidate(); - inRefresh = false; } catch (Exception e) { - inRefresh = false; ErrorEvent.fromThrowable(e).handle(); } finally { + decrementBusyCounter(); notifyUpdate(false, false); } } @@ -564,12 +570,13 @@ public class DataStoreEntry extends StorageElement { public void finalizeEntry() { if (store instanceof ExpandedLifecycleStore lifecycleStore) { try { - inRefresh = true; + incrementBusyCounter(); notifyUpdate(false, false); lifecycleStore.finalizeValidate(); } catch (Exception e) { ErrorEvent.fromThrowable(e).handle(); } finally { + decrementBusyCounter(); notifyUpdate(false, false); } } diff --git a/lang/app/strings/translations_da.properties b/lang/app/strings/translations_da.properties index 95d7b210..73bc007b 100644 --- a/lang/app/strings/translations_da.properties +++ b/lang/app/strings/translations_da.properties @@ -473,3 +473,8 @@ api=API storeIntroImportDescription=Bruger du allerede XPipe på et andet system? Synkroniser dine eksisterende forbindelser på tværs af flere systemer via et eksternt git-repository. Du kan også synkronisere senere når som helst, hvis det ikke er sat op endnu. importConnections=Synkroniser forbindelser importConnectionsTitle=Importer forbindelser +showAllChildren=Vis alle børn +httpApi=HTTP API +isOnlySupportedLimit=understøttes kun med en professionel licens, når man har mere end $COUNT$ forbindelser +areOnlySupportedLimit=understøttes kun med en professionel licens, når man har mere end $COUNT$ forbindelser +enabled=Aktiveret diff --git a/lang/app/strings/translations_de.properties b/lang/app/strings/translations_de.properties index 878658da..0349fcfd 100644 --- a/lang/app/strings/translations_de.properties +++ b/lang/app/strings/translations_de.properties @@ -467,3 +467,8 @@ api=API storeIntroImportDescription=Benutzt du XPipe bereits auf einem anderen System? Synchronisiere deine bestehenden Verbindungen über mehrere Systeme hinweg über ein Remote-Git-Repository. Du kannst auch später jederzeit synchronisieren, wenn es noch nicht eingerichtet ist. importConnections=Synchronisierte Verbindungen importConnectionsTitle=Verbindungen importieren +showAllChildren=Alle Kinder anzeigen +httpApi=HTTP-API +isOnlySupportedLimit=wird nur mit einer professionellen Lizenz unterstützt, wenn mehr als $COUNT$ Verbindungen bestehen +areOnlySupportedLimit=werden nur mit einer professionellen Lizenz unterstützt, wenn mehr als $COUNT$ Verbindungen bestehen +enabled=Aktiviert diff --git a/lang/app/strings/translations_en.properties b/lang/app/strings/translations_en.properties index 564d4883..7770046d 100644 --- a/lang/app/strings/translations_en.properties +++ b/lang/app/strings/translations_en.properties @@ -475,5 +475,6 @@ importConnections=Sync connections importConnectionsTitle=Import Connections showAllChildren=Show all children httpApi=HTTP API -isOnlySupportedLimit=is only supported with a professional license when having more than $COUNT$ active connections -areOnlySupportedLimit=are only supported with a professional license when having more than $COUNT$ active connections +isOnlySupportedLimit=is only supported with a professional license when having more than $COUNT$ connections +areOnlySupportedLimit=are only supported with a professional license when having more than $COUNT$ connections +enabled=Enabled diff --git a/lang/app/strings/translations_es.properties b/lang/app/strings/translations_es.properties index 3228c8a9..0fd80ce3 100644 --- a/lang/app/strings/translations_es.properties +++ b/lang/app/strings/translations_es.properties @@ -454,3 +454,8 @@ api=API storeIntroImportDescription=¿Ya utilizas XPipe en otro sistema? Sincroniza tus conexiones existentes en varios sistemas a través de un repositorio git remoto. También puedes sincronizar más tarde en cualquier momento si aún no está configurado. importConnections=Sincronizar conexiones importConnectionsTitle=Importar conexiones +showAllChildren=Mostrar todos los niños +httpApi=API HTTP +isOnlySupportedLimit=sólo es compatible con una licencia profesional cuando tiene más de $COUNT$ conexiones +areOnlySupportedLimit=sólo son compatibles con una licencia profesional cuando tienen más de $COUNT$ conexiones +enabled=Activado diff --git a/lang/app/strings/translations_fr.properties b/lang/app/strings/translations_fr.properties index 5059c846..23a13e41 100644 --- a/lang/app/strings/translations_fr.properties +++ b/lang/app/strings/translations_fr.properties @@ -454,3 +454,8 @@ api=API storeIntroImportDescription=Tu utilises déjà XPipe sur un autre système ? Synchronise tes connexions existantes sur plusieurs systèmes grâce à un dépôt git distant. Tu peux aussi synchroniser plus tard à tout moment si ce n'est pas encore configuré. importConnections=Synchronisation des connexions importConnectionsTitle=Importer des connexions +showAllChildren=Afficher tous les enfants +httpApi=API HTTP +isOnlySupportedLimit=n'est pris en charge qu'avec une licence professionnelle lorsqu'il y a plus de $COUNT$ connexions +areOnlySupportedLimit=ne sont pris en charge qu'avec une licence professionnelle lorsqu'il y a plus de $COUNT$ connexions +enabled=Activé diff --git a/lang/app/strings/translations_it.properties b/lang/app/strings/translations_it.properties index 6344b77d..e03fa1dc 100644 --- a/lang/app/strings/translations_it.properties +++ b/lang/app/strings/translations_it.properties @@ -454,3 +454,8 @@ api=API storeIntroImportDescription=Stai già usando XPipe su un altro sistema? Sincronizza le connessioni esistenti su più sistemi attraverso un repository git remoto. Puoi anche sincronizzare in seguito, in qualsiasi momento, se non è ancora stato configurato. importConnections=Connessioni di sincronizzazione importConnectionsTitle=Importazione di connessioni +showAllChildren=Mostra tutti i bambini +httpApi=API HTTP +isOnlySupportedLimit=è supportato solo con una licenza professionale quando ci sono più di $COUNT$ connessioni +areOnlySupportedLimit=sono supportati solo con una licenza professionale quando ci sono più di $COUNT$ connessioni +enabled=Abilitato diff --git a/lang/app/strings/translations_ja.properties b/lang/app/strings/translations_ja.properties index a3c33cc6..b4760573 100644 --- a/lang/app/strings/translations_ja.properties +++ b/lang/app/strings/translations_ja.properties @@ -454,3 +454,8 @@ api=API storeIntroImportDescription=すでに他のシステムでXPipeを使っている?リモートgitリポジトリを通して、複数のシステム間で既存の接続を同期する。まだ設定されていない場合は、後からいつでも同期することもできる。 importConnections=シンク接続 importConnectionsTitle=コネクションのインポート +showAllChildren=すべての子供を表示する +httpApi=HTTP API +isOnlySupportedLimit=は、$COUNT$ を超える接続がある場合、プロフェッショナルライセンスでのみサポートされる。 +areOnlySupportedLimit=$COUNT$ 以上の接続がある場合、プロフェッショナルライセンスでのみサポートされる。 +enabled=有効にする diff --git a/lang/app/strings/translations_nl.properties b/lang/app/strings/translations_nl.properties index f5fc6bf9..efa21afb 100644 --- a/lang/app/strings/translations_nl.properties +++ b/lang/app/strings/translations_nl.properties @@ -454,3 +454,8 @@ api=API storeIntroImportDescription=Gebruik je XPipe al op een ander systeem? Synchroniseer je bestaande verbindingen over meerdere systemen via een remote git repository. Je kunt ook later synchroniseren op elk gewenst moment als het nog niet is ingesteld. importConnections=Synchronisatieverbindingen importConnectionsTitle=Verbindingen importeren +showAllChildren=Toon alle kinderen +httpApi=HTTP API +isOnlySupportedLimit=wordt alleen ondersteund met een professionele licentie bij meer dan $COUNT$ verbindingen +areOnlySupportedLimit=worden alleen ondersteund met een professionele licentie bij meer dan $COUNT$ verbindingen +enabled=Ingeschakeld diff --git a/lang/app/strings/translations_pt.properties b/lang/app/strings/translations_pt.properties index 1738708d..63879d58 100644 --- a/lang/app/strings/translations_pt.properties +++ b/lang/app/strings/translations_pt.properties @@ -454,3 +454,8 @@ api=API storeIntroImportDescription=Já estás a utilizar o XPipe noutro sistema? Sincroniza as tuas ligações existentes em vários sistemas através de um repositório git remoto. Também podes sincronizar mais tarde, a qualquer momento, se ainda não estiver configurado. importConnections=Sincroniza ligações importConnectionsTitle=Importar ligações +showAllChildren=Mostra todas as crianças +httpApi=API HTTP +isOnlySupportedLimit=só é suportado com uma licença profissional se tiver mais de $COUNT$ ligações +areOnlySupportedLimit=só são suportados com uma licença profissional quando têm mais de $COUNT$ ligações +enabled=Ativado diff --git a/lang/app/strings/translations_ru.properties b/lang/app/strings/translations_ru.properties index 9ff9b271..32b3fc25 100644 --- a/lang/app/strings/translations_ru.properties +++ b/lang/app/strings/translations_ru.properties @@ -454,3 +454,8 @@ api=API storeIntroImportDescription=Уже используешь XPipe на другой системе? Синхронизируй существующие соединения на нескольких системах через удаленный git-репозиторий. Ты также можешь синхронизировать позже в любой момент, если он еще не настроен. importConnections=Синхронизация соединений importConnectionsTitle=Импортные соединения +showAllChildren=Показать всех детей +httpApi=HTTP API +isOnlySupportedLimit=поддерживается только профессиональной лицензией при наличии более $COUNT$ соединений +areOnlySupportedLimit=поддерживаются только профессиональной лицензией при наличии более чем $COUNT$ соединений +enabled=Включено diff --git a/lang/app/strings/translations_tr.properties b/lang/app/strings/translations_tr.properties index 50993471..48afcd66 100644 --- a/lang/app/strings/translations_tr.properties +++ b/lang/app/strings/translations_tr.properties @@ -455,3 +455,8 @@ api=API storeIntroImportDescription=XPipe'ı zaten başka bir sistemde mi kullanıyorsunuz? Mevcut bağlantılarınızı uzak bir git deposu aracılığıyla birden fazla sistem arasında senkronize edin. Henüz kurulmamışsa daha sonra istediğiniz zaman senkronize edebilirsiniz. importConnections=Senkronizasyon bağlantıları importConnectionsTitle=Bağlantıları İçe Aktar +showAllChildren=Tüm çocukları göster +httpApi=HTTP API +isOnlySupportedLimit=yalnızca $COUNT$ adresinden daha fazla bağlantıya sahip olunduğunda profesyonel lisans ile desteklenir +areOnlySupportedLimit=yalnızca $COUNT$ adresinden daha fazla bağlantıya sahip olunduğunda profesyonel lisans ile desteklenir +enabled=Etkin diff --git a/lang/app/strings/translations_zh.properties b/lang/app/strings/translations_zh.properties index 6594f4b7..3f230851 100644 --- a/lang/app/strings/translations_zh.properties +++ b/lang/app/strings/translations_zh.properties @@ -454,3 +454,8 @@ api=应用程序接口 storeIntroImportDescription=已经在其他系统上使用 XPipe?通过远程 git 仓库在多个系统间同步您的现有连接。如果尚未设置,您也可以稍后随时同步。 importConnections=同步连接 importConnectionsTitle=导入连接 +showAllChildren=显示所有儿童 +httpApi=HTTP API +isOnlySupportedLimit=只有在连接数超过$COUNT$ 时才支持专业许可证 +areOnlySupportedLimit=只有在连接数超过$COUNT$ 时才支持专业许可证 +enabled=已启用 diff --git a/lang/base/strings/translations_da.properties b/lang/base/strings/translations_da.properties index aef50daa..5a1b4711 100644 --- a/lang/base/strings/translations_da.properties +++ b/lang/base/strings/translations_da.properties @@ -158,3 +158,8 @@ initScript=Kører på shell init shellScript=Gør script tilgængeligt under shell-session fileScript=Gør det muligt at kalde et script med filargumenter i filbrowseren runScript=Kør script ... +copyUrl=Kopier URL +fixedServiceGroup.displayName=Service-gruppe +fixedServiceGroup.displayDescription=Liste over tilgængelige tjenester på et system +mappedService.displayName=Service +mappedService.displayDescription=Interagere med en tjeneste, der er eksponeret af en container diff --git a/lang/base/strings/translations_de.properties b/lang/base/strings/translations_de.properties index 1003ca28..e1a4873e 100644 --- a/lang/base/strings/translations_de.properties +++ b/lang/base/strings/translations_de.properties @@ -149,3 +149,8 @@ initScript=Auf der Shell init ausführen shellScript=Skript während der Shell-Sitzung verfügbar machen fileScript=Skriptaufruf mit Dateiargumenten im Dateibrowser zulassen runScript=Skript ausführen ... +copyUrl=URL kopieren +fixedServiceGroup.displayName=Dienstgruppe +fixedServiceGroup.displayDescription=Liste der verfügbaren Dienste auf einem System +mappedService.displayName=Dienst +mappedService.displayDescription=Interaktion mit einem Dienst, der von einem Container angeboten wird diff --git a/lang/base/strings/translations_en.properties b/lang/base/strings/translations_en.properties index f88d90b9..f56a9e92 100644 --- a/lang/base/strings/translations_en.properties +++ b/lang/base/strings/translations_en.properties @@ -147,5 +147,10 @@ initScript=Run on shell init shellScript=Make script available during shell session fileScript=Allow script to be called with file arguments in the file browser runScript=Run script with +copyUrl=Copy URL +fixedServiceGroup.displayName=Service group +fixedServiceGroup.displayDescription=List the available services on a system +mappedService.displayName=Service +mappedService.displayDescription=Interact with a service exposed by a container diff --git a/lang/base/strings/translations_es.properties b/lang/base/strings/translations_es.properties index 1ccb84f9..6f01000e 100644 --- a/lang/base/strings/translations_es.properties +++ b/lang/base/strings/translations_es.properties @@ -147,3 +147,8 @@ initScript=Ejecutar en shell init shellScript=Hacer que el script esté disponible durante la sesión shell fileScript=Permitir llamar a un script con argumentos de archivo en el explorador de archivos runScript=Ejecutar script ... +copyUrl=Copiar URL +fixedServiceGroup.displayName=Grupo de servicios +fixedServiceGroup.displayDescription=Enumerar los servicios disponibles en un sistema +mappedService.displayName=Servicio +mappedService.displayDescription=Interactúa con un servicio expuesto por un contenedor diff --git a/lang/base/strings/translations_fr.properties b/lang/base/strings/translations_fr.properties index 67688086..bcbde2a1 100644 --- a/lang/base/strings/translations_fr.properties +++ b/lang/base/strings/translations_fr.properties @@ -147,3 +147,8 @@ initScript=Exécute sur le shell init shellScript=Rendre le script disponible pendant la session shell fileScript=Permet d'appeler un script avec des arguments de fichier dans le navigateur de fichiers runScript=Exécute le script ... +copyUrl=Copier l'URL +fixedServiceGroup.displayName=Groupe de service +fixedServiceGroup.displayDescription=Liste les services disponibles sur un système +mappedService.displayName=Service +mappedService.displayDescription=Interagir avec un service exposé par un conteneur diff --git a/lang/base/strings/translations_it.properties b/lang/base/strings/translations_it.properties index e6156585..0d360788 100644 --- a/lang/base/strings/translations_it.properties +++ b/lang/base/strings/translations_it.properties @@ -147,3 +147,8 @@ initScript=Eseguire su shell init shellScript=Rendere disponibile lo script durante la sessione di shell fileScript=Consente di richiamare uno script con argomenti di file nel browser di file runScript=Esegui script ... +copyUrl=Copia URL +fixedServiceGroup.displayName=Gruppo di servizio +fixedServiceGroup.displayDescription=Elenco dei servizi disponibili su un sistema +mappedService.displayName=Servizio +mappedService.displayDescription=Interagire con un servizio esposto da un contenitore diff --git a/lang/base/strings/translations_ja.properties b/lang/base/strings/translations_ja.properties index 8e50aec0..160be141 100644 --- a/lang/base/strings/translations_ja.properties +++ b/lang/base/strings/translations_ja.properties @@ -147,3 +147,8 @@ initScript=シェル init で実行する shellScript=シェルセッション中にスクリプトを利用可能にする fileScript=ファイルブラウザでファイル引数を指定してスクリプトを呼び出せるようにする runScript=スクリプトを実行する +copyUrl=URLをコピーする +fixedServiceGroup.displayName=サービスグループ +fixedServiceGroup.displayDescription=システムで利用可能なサービスをリストアップする +mappedService.displayName=サービス +mappedService.displayDescription=コンテナによって公開されたサービスとやりとりする diff --git a/lang/base/strings/translations_nl.properties b/lang/base/strings/translations_nl.properties index 23c29015..e54d9114 100644 --- a/lang/base/strings/translations_nl.properties +++ b/lang/base/strings/translations_nl.properties @@ -147,3 +147,8 @@ initScript=Uitvoeren op shell init shellScript=Script beschikbaar maken tijdens shellsessie fileScript=Laat toe dat een script wordt aangeroepen met bestandsargumenten in de bestandsbrowser runScript=Script uitvoeren ... +copyUrl=URL kopiëren +fixedServiceGroup.displayName=Servicegroep +fixedServiceGroup.displayDescription=Een lijst van beschikbare services op een systeem +mappedService.displayName=Service +mappedService.displayDescription=Interactie met een service die wordt aangeboden door een container diff --git a/lang/base/strings/translations_pt.properties b/lang/base/strings/translations_pt.properties index e843ddae..8d115e42 100644 --- a/lang/base/strings/translations_pt.properties +++ b/lang/base/strings/translations_pt.properties @@ -147,3 +147,8 @@ initScript=Corre no shell init shellScript=Torna o script disponível durante a sessão da shell fileScript=Permite que o script seja chamado com argumentos de ficheiro no navegador de ficheiros runScript=Executa o script ... +copyUrl=Copia o URL +fixedServiceGroup.displayName=Grupo de serviços +fixedServiceGroup.displayDescription=Lista os serviços disponíveis num sistema +mappedService.displayName=Serviço +mappedService.displayDescription=Interage com um serviço exposto por um contentor diff --git a/lang/base/strings/translations_ru.properties b/lang/base/strings/translations_ru.properties index ea07856f..3640e64f 100644 --- a/lang/base/strings/translations_ru.properties +++ b/lang/base/strings/translations_ru.properties @@ -147,3 +147,8 @@ initScript=Запуск на shell init shellScript=Сделать скрипт доступным во время сеанса оболочки fileScript=Разрешить вызов скрипта с аргументами в виде файлов в браузере файлов runScript=Запустите скрипт ... +copyUrl=Копировать URL +fixedServiceGroup.displayName=Группа услуг +fixedServiceGroup.displayDescription=Список доступных сервисов в системе +mappedService.displayName=Сервис +mappedService.displayDescription=Взаимодействие с сервисом, открываемым контейнером diff --git a/lang/base/strings/translations_tr.properties b/lang/base/strings/translations_tr.properties index 8945323f..3746f7bd 100644 --- a/lang/base/strings/translations_tr.properties +++ b/lang/base/strings/translations_tr.properties @@ -147,3 +147,8 @@ initScript=Kabuk başlangıcında çalıştır shellScript=Kabuk oturumu sırasında komut dosyasını kullanılabilir hale getirme fileScript=Kodun dosya tarayıcısında dosya bağımsız değişkenleriyle çağrılmasına izin ver runScript=Komut dosyasını çalıştır ... +copyUrl=URL'yi kopyala +fixedServiceGroup.displayName=Hizmet grubu +fixedServiceGroup.displayDescription=Bir sistemdeki mevcut hizmetleri listeleme +mappedService.displayName=Hizmet +mappedService.displayDescription=Bir konteyner tarafından sunulan bir hizmetle etkileşim diff --git a/lang/base/strings/translations_zh.properties b/lang/base/strings/translations_zh.properties index fe8f4534..ce985318 100644 --- a/lang/base/strings/translations_zh.properties +++ b/lang/base/strings/translations_zh.properties @@ -147,3 +147,8 @@ initScript=在 shell init 上运行 shellScript=在 shell 会话中提供脚本 fileScript=允许在文件浏览器中使用文件参数调用脚本 runScript=运行脚本 ... +copyUrl=复制 URL +fixedServiceGroup.displayName=服务组 +fixedServiceGroup.displayDescription=列出系统中可用的服务 +mappedService.displayName=服务 +mappedService.displayDescription=与容器暴露的服务交互 diff --git a/lang/proc/strings/translations_da.properties b/lang/proc/strings/translations_da.properties index bbc2e801..7dc24c6d 100644 --- a/lang/proc/strings/translations_da.properties +++ b/lang/proc/strings/translations_da.properties @@ -348,3 +348,12 @@ rdpUsernameDescription=Til brugeren for at logge ind som addressDescription=Hvor skal man oprette forbindelse til rdpAdditionalOptions=Yderligere RDP-muligheder rdpAdditionalOptionsDescription=Rå RDP-muligheder, der skal inkluderes, formateret på samme måde som i .rdp-filer +proxmoxVncConfirmTitle=VNC-opsætning +proxmoxVncConfirmHeader=Vil du aktivere VNC for den virtuelle maskine? +proxmoxVncConfirmContent=Dette opsætter en tilgængelig VNC-server og genstarter den virtuelle maskine. Du skal så vente, indtil maskinen er startet op igen, før du opretter forbindelse. +dockerContext.displayName=Docker-kontekst +dockerContext.displayDescription=Interagerer med containere i en bestemt kontekst +containerActions=Container-handlinger +vmActions=VM-handlinger +dockerContextActions=Kontekst-handlinger +k8sPodActions=Pod-handlinger diff --git a/lang/proc/strings/translations_de.properties b/lang/proc/strings/translations_de.properties index c4011c6c..c5dcfed8 100644 --- a/lang/proc/strings/translations_de.properties +++ b/lang/proc/strings/translations_de.properties @@ -326,3 +326,12 @@ rdpUsernameDescription=An Benutzer, der sich anmelden soll als addressDescription=Wohin soll die Verbindung gehen? rdpAdditionalOptions=Zusätzliche RDP-Optionen rdpAdditionalOptionsDescription=Rohe RDP-Optionen, die genauso formatiert sind wie in .rdp-Dateien +proxmoxVncConfirmTitle=VNC-Einrichtung +proxmoxVncConfirmHeader=Willst du VNC für die virtuelle Maschine aktivieren? +proxmoxVncConfirmContent=Dadurch wird ein zugänglicher VNC-Server eingerichtet und die virtuelle Maschine neu gestartet. Du solltest dann warten, bis die Maschine wieder hochgefahren ist, bevor du eine Verbindung herstellst. +dockerContext.displayName=Docker-Kontext +dockerContext.displayDescription=Interaktion mit Containern, die sich in einem bestimmten Kontext befinden +containerActions=Container-Aktionen +vmActions=VM-Aktionen +dockerContextActions=Kontextbezogene Aktionen +k8sPodActions=Pod-Aktionen diff --git a/lang/proc/strings/translations_en.properties b/lang/proc/strings/translations_en.properties index 2767416e..d986d2bb 100644 --- a/lang/proc/strings/translations_en.properties +++ b/lang/proc/strings/translations_en.properties @@ -327,3 +327,9 @@ rdpAdditionalOptionsDescription=Raw RDP options to include, formatted the same a proxmoxVncConfirmTitle=VNC setup proxmoxVncConfirmHeader=Do you want to enable VNC for the virtual machine? proxmoxVncConfirmContent=This will set up an accessible VNC server and restart the virtual machine. You should then wait until the machine has started up again before connecting. +dockerContext.displayName=Docker context +dockerContext.displayDescription=Interact with containers located in a specific context +containerActions=Container actions +vmActions=VM actions +dockerContextActions=Context actions +k8sPodActions=Pod actions \ No newline at end of file diff --git a/lang/proc/strings/translations_es.properties b/lang/proc/strings/translations_es.properties index 7049c890..3f92e906 100644 --- a/lang/proc/strings/translations_es.properties +++ b/lang/proc/strings/translations_es.properties @@ -322,3 +322,12 @@ rdpUsernameDescription=Para que el usuario inicie sesión como addressDescription=Dónde conectarse rdpAdditionalOptions=Opciones RDP adicionales rdpAdditionalOptionsDescription=Opciones RDP en bruto a incluir, con el mismo formato que en los archivos .rdp +proxmoxVncConfirmTitle=Configuración VNC +proxmoxVncConfirmHeader=¿Quieres activar VNC para la máquina virtual? +proxmoxVncConfirmContent=Esto configurará un servidor VNC accesible y reiniciará la máquina virtual. Deberás esperar a que la máquina se haya reiniciado antes de conectarte. +dockerContext.displayName=Contexto Docker +dockerContext.displayDescription=Interactúa con contenedores situados en un contexto específico +containerActions=Acciones del contenedor +vmActions=Acciones VM +dockerContextActions=Acciones contextuales +k8sPodActions=Acciones del pod diff --git a/lang/proc/strings/translations_fr.properties b/lang/proc/strings/translations_fr.properties index ca453428..94b1521f 100644 --- a/lang/proc/strings/translations_fr.properties +++ b/lang/proc/strings/translations_fr.properties @@ -322,3 +322,12 @@ rdpUsernameDescription=A l'utilisateur de se connecter en tant que addressDescription=Où se connecter rdpAdditionalOptions=Options RDP supplémentaires rdpAdditionalOptionsDescription=Options RDP brutes à inclure, formatées de la même manière que dans les fichiers .rdp +proxmoxVncConfirmTitle=Configuration de VNC +proxmoxVncConfirmHeader=Veux-tu activer VNC pour la machine virtuelle ? +proxmoxVncConfirmContent=Cela permet de mettre en place un serveur VNC accessible et de redémarrer la machine virtuelle. Tu dois alors attendre que la machine ait redémarré avant de te connecter. +dockerContext.displayName=Contexte Docker +dockerContext.displayDescription=Interagir avec des conteneurs situés dans un contexte spécifique +containerActions=Actions du conteneur +vmActions=Actions VM +dockerContextActions=Actions contextuelles +k8sPodActions=Actions de pods diff --git a/lang/proc/strings/translations_it.properties b/lang/proc/strings/translations_it.properties index 3cb56b8c..e6c884df 100644 --- a/lang/proc/strings/translations_it.properties +++ b/lang/proc/strings/translations_it.properties @@ -322,3 +322,12 @@ rdpUsernameDescription=All'utente di accedere come addressDescription=Dove connettersi rdpAdditionalOptions=Opzioni RDP aggiuntive rdpAdditionalOptionsDescription=Opzioni RDP grezze da includere, formattate come nei file .rdp +proxmoxVncConfirmTitle=Configurazione di VNC +proxmoxVncConfirmHeader=Vuoi abilitare VNC per la macchina virtuale? +proxmoxVncConfirmContent=In questo modo verrà configurato un server VNC accessibile e verrà riavviata la macchina virtuale. Dovrai quindi attendere che la macchina si sia riavviata prima di connetterti. +dockerContext.displayName=Contesto Docker +dockerContext.displayDescription=Interagire con contenitori situati in un contesto specifico +containerActions=Azioni del contenitore +vmActions=Azioni della VM +dockerContextActions=Azioni contestuali +k8sPodActions=Azioni del pod diff --git a/lang/proc/strings/translations_ja.properties b/lang/proc/strings/translations_ja.properties index 3fc48dc2..69ed375d 100644 --- a/lang/proc/strings/translations_ja.properties +++ b/lang/proc/strings/translations_ja.properties @@ -322,3 +322,12 @@ rdpUsernameDescription=としてログインする addressDescription=接続先 rdpAdditionalOptions=RDPの追加オプション rdpAdditionalOptionsDescription=.rdpファイルと同じ書式で、RDPの生オプションを含める。 +proxmoxVncConfirmTitle=VNCのセットアップ +proxmoxVncConfirmHeader=仮想マシンのVNCを有効にするか? +proxmoxVncConfirmContent=これでアクセス可能なVNCサーバーがセットアップされ、仮想マシンが再起動する。その後、マシンが再び起動するまで待ってから接続する。 +dockerContext.displayName=Dockerコンテキスト +dockerContext.displayDescription=特定のコンテキストにあるコンテナと対話する +containerActions=コンテナアクション +vmActions=VMアクション +dockerContextActions=コンテキストアクション +k8sPodActions=ポッドアクション diff --git a/lang/proc/strings/translations_nl.properties b/lang/proc/strings/translations_nl.properties index 059787fe..272f6960 100644 --- a/lang/proc/strings/translations_nl.properties +++ b/lang/proc/strings/translations_nl.properties @@ -322,3 +322,12 @@ rdpUsernameDescription=Naar gebruiker om in te loggen als addressDescription=Waar je verbinding mee moet maken rdpAdditionalOptions=Extra RDP opties rdpAdditionalOptionsDescription=Rauwe RDP-opties om op te nemen, in dezelfde opmaak als in .rdp-bestanden +proxmoxVncConfirmTitle=VNC-instelling +proxmoxVncConfirmHeader=Wil je VNC inschakelen voor de virtuele machine? +proxmoxVncConfirmContent=Hiermee wordt een toegankelijke VNC-server opgezet en wordt de virtuele machine opnieuw opgestart. Je moet dan wachten tot de machine weer is opgestart voordat je verbinding maakt. +dockerContext.displayName=Docker context +dockerContext.displayDescription=Interactie met containers in een specifieke context +containerActions=Container acties +vmActions=VM-acties +dockerContextActions=Context acties +k8sPodActions=Pod acties diff --git a/lang/proc/strings/translations_pt.properties b/lang/proc/strings/translations_pt.properties index 621510b4..4dc225db 100644 --- a/lang/proc/strings/translations_pt.properties +++ b/lang/proc/strings/translations_pt.properties @@ -322,3 +322,12 @@ rdpUsernameDescription=Para que o utilizador inicie sessão como addressDescription=Onde te deves ligar rdpAdditionalOptions=Opções adicionais de RDP rdpAdditionalOptionsDescription=Opções RDP brutas a incluir, formatadas da mesma forma que nos ficheiros .rdp +proxmoxVncConfirmTitle=Configuração do VNC +proxmoxVncConfirmHeader=Pretendes ativar o VNC para a máquina virtual? +proxmoxVncConfirmContent=Isto irá configurar um servidor VNC acessível e reiniciar a máquina virtual. Deves esperar até que a máquina seja reiniciada antes de te ligares. +dockerContext.displayName=Contexto do Docker +dockerContext.displayDescription=Interage com contentores localizados num contexto específico +containerActions=Acções de contentor +vmActions=Acções VM +dockerContextActions=Acções de contexto +k8sPodActions=Acções de pod diff --git a/lang/proc/strings/translations_ru.properties b/lang/proc/strings/translations_ru.properties index 3227cd4a..3b6c79cf 100644 --- a/lang/proc/strings/translations_ru.properties +++ b/lang/proc/strings/translations_ru.properties @@ -322,3 +322,12 @@ rdpUsernameDescription=Чтобы пользователь вошел в сис addressDescription=К чему подключиться rdpAdditionalOptions=Дополнительные опции RDP rdpAdditionalOptionsDescription=Необработанные опции RDP, которые нужно включить, в том же формате, что и в файлах .rdp +proxmoxVncConfirmTitle=Настройка VNC +proxmoxVncConfirmHeader=Хочешь ли ты включить VNC для виртуальной машины? +proxmoxVncConfirmContent=Это настроит доступный VNC-сервер и перезапустит виртуальную машину. Затем тебе следует подождать, пока машина снова запустится, прежде чем подключаться. +dockerContext.displayName=Контекст Docker +dockerContext.displayDescription=Взаимодействуй с контейнерами, расположенными в определенном контексте +containerActions=Действия с контейнером +vmActions=Действия виртуальной машины +dockerContextActions=Контекстные действия +k8sPodActions=Действия в капсуле diff --git a/lang/proc/strings/translations_tr.properties b/lang/proc/strings/translations_tr.properties index e04a50af..663fd0b3 100644 --- a/lang/proc/strings/translations_tr.properties +++ b/lang/proc/strings/translations_tr.properties @@ -322,3 +322,12 @@ rdpUsernameDescription=Kullanıcı olarak oturum açmak için addressDescription=Nereye bağlanmalı rdpAdditionalOptions=Ek RDP seçenekleri rdpAdditionalOptionsDescription=Dahil edilecek ham RDP seçenekleri, .rdp dosyalarında olduğu gibi biçimlendirilir +proxmoxVncConfirmTitle=VNC kurulumu +proxmoxVncConfirmHeader=Sanal makine için VNC'yi etkinleştirmek istiyor musunuz? +proxmoxVncConfirmContent=Bu, erişilebilir bir VNC sunucusu kuracak ve sanal makineyi yeniden başlatacaktır. Daha sonra bağlanmadan önce makinenin tekrar başlamasını beklemelisiniz. +dockerContext.displayName=Docker bağlamı +dockerContext.displayDescription=Belirli bir bağlamda bulunan konteynerlerle etkileşim +containerActions=Konteyner eylemleri +vmActions=VM eylemleri +dockerContextActions=Bağlam eylemleri +k8sPodActions=Pod eylemleri diff --git a/lang/proc/strings/translations_zh.properties b/lang/proc/strings/translations_zh.properties index fa968f3b..412fab15 100644 --- a/lang/proc/strings/translations_zh.properties +++ b/lang/proc/strings/translations_zh.properties @@ -322,3 +322,12 @@ rdpUsernameDescription=用户以 addressDescription=连接到哪里 rdpAdditionalOptions=其他 RDP 选项 rdpAdditionalOptionsDescription=要包含的原始 RDP 选项,格式与 .rdp 文件相同 +proxmoxVncConfirmTitle=VNC 设置 +proxmoxVncConfirmHeader=您要为虚拟机启用 VNC 吗? +proxmoxVncConfirmContent=这将设置一个可访问的 VNC 服务器,并重新启动虚拟机。然后,您应等待虚拟机再次启动后再进行连接。 +dockerContext.displayName=Docker 上下文 +dockerContext.displayDescription=与位于特定环境中的容器交互 +containerActions=容器操作 +vmActions=虚拟机操作 +dockerContextActions=上下文操作 +k8sPodActions=Pod 操作