diff --git a/app/src/main/java/io/xpipe/app/fxcomps/impl/DataStoreFlowChoiceComp.java b/app/src/main/java/io/xpipe/app/fxcomps/impl/DataStoreFlowChoiceComp.java deleted file mode 100644 index b7319340..00000000 --- a/app/src/main/java/io/xpipe/app/fxcomps/impl/DataStoreFlowChoiceComp.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.xpipe.app.fxcomps.impl; - -import io.xpipe.app.core.AppI18n; -import io.xpipe.app.fxcomps.SimpleComp; -import io.xpipe.core.store.DataFlow; - -import javafx.beans.property.Property; -import javafx.beans.property.SimpleObjectProperty; -import javafx.beans.value.ObservableValue; -import javafx.scene.layout.Region; - -import lombok.EqualsAndHashCode; -import lombok.Value; - -import java.util.LinkedHashMap; - -@Value -@EqualsAndHashCode(callSuper = true) -public class DataStoreFlowChoiceComp extends SimpleComp { - - Property selected; - DataFlow[] available; - - @Override - protected Region createSimple() { - var map = new LinkedHashMap>(); - map.put(DataFlow.INPUT, AppI18n.observable("app.input")); - map.put(DataFlow.OUTPUT, AppI18n.observable("app.output")); - map.put(DataFlow.INPUT_OUTPUT, AppI18n.observable("app.inout")); - return new ToggleGroupComp<>(selected, new SimpleObjectProperty<>(map)) - .apply(struc -> { - new TooltipAugment<>("app.inputDescription") - .augment(struc.get().getChildren().get(0)); - new TooltipAugment<>("app.outputDescription") - .augment(struc.get().getChildren().get(1)); - new TooltipAugment<>("app.inoutDescription") - .augment(struc.get().getChildren().get(2)); - }) - .createRegion(); - } -} diff --git a/app/src/main/java/io/xpipe/app/prefs/CloseBehaviourAlert.java b/app/src/main/java/io/xpipe/app/prefs/CloseBehaviourAlert.java index f6cd5f21..0a4e198d 100644 --- a/app/src/main/java/io/xpipe/app/prefs/CloseBehaviourAlert.java +++ b/app/src/main/java/io/xpipe/app/prefs/CloseBehaviourAlert.java @@ -47,7 +47,7 @@ public class CloseBehaviourAlert { rb.setSelected(true); } vb.getChildren().add(rb); - vb.setMinHeight(150); + vb.setMinHeight(130); } alert.getDialogPane().setContent(vb); }) diff --git a/app/src/main/java/io/xpipe/app/prefs/DeveloperCategory.java b/app/src/main/java/io/xpipe/app/prefs/DeveloperCategory.java index 1e130845..3876d4cf 100644 --- a/app/src/main/java/io/xpipe/app/prefs/DeveloperCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/DeveloperCategory.java @@ -31,7 +31,6 @@ public class DeveloperCategory extends AppPrefsCategory { var prefs = AppPrefs.get(); var localCommand = new SimpleStringProperty(); Runnable test = () -> { - prefs.save(); var cmd = localCommand.get(); if (cmd == null) { return; diff --git a/app/src/main/java/io/xpipe/app/prefs/EditorCategory.java b/app/src/main/java/io/xpipe/app/prefs/EditorCategory.java index 9aa7fa36..b49f0c81 100644 --- a/app/src/main/java/io/xpipe/app/prefs/EditorCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/EditorCategory.java @@ -30,7 +30,6 @@ public class EditorCategory extends AppPrefsCategory { var prefs = AppPrefs.get(); var terminalTest = new StackComp( List.of(new ButtonComp(AppI18n.observable("test"), new FontIcon("mdi2p-play"), () -> { - prefs.save(); ThreadHelper.runFailableAsync(() -> { var editor = AppPrefs.get().externalEditor().getValue(); if (editor != null) { diff --git a/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java b/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java index d7d33acb..9e2e9603 100644 --- a/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java +++ b/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java @@ -94,12 +94,12 @@ public abstract class ExternalApplicationType implements PrefsChoiceValue { public abstract static class PathApplication extends ExternalApplicationType { protected final String executable; - protected final boolean explicityAsync; + protected final boolean explicitlyAsync; - public PathApplication(String id, String executable, boolean explicityAsync) { + public PathApplication(String id, String executable, boolean explicitlyAsync) { super(id); this.executable = executable; - this.explicityAsync = explicityAsync; + this.explicitlyAsync = explicitlyAsync; } public boolean isAvailable() { @@ -121,7 +121,7 @@ public abstract class ExternalApplicationType implements PrefsChoiceValue { } args.add(0, executable); - if (explicityAsync) { + if (explicitlyAsync) { ExternalApplicationHelper.startAsync(args); } else { pc.executeSimpleCommand(args); diff --git a/app/src/main/java/io/xpipe/app/prefs/ExternalEditorType.java b/app/src/main/java/io/xpipe/app/prefs/ExternalEditorType.java index 777e797f..24c9079f 100644 --- a/app/src/main/java/io/xpipe/app/prefs/ExternalEditorType.java +++ b/app/src/main/java/io/xpipe/app/prefs/ExternalEditorType.java @@ -215,7 +215,7 @@ public interface ExternalEditorType extends PrefsChoiceValue { @Override public void launch(Path file) throws Exception { var builder = CommandBuilder.of().addFile(executable).addFile(file.toString()); - if (explicityAsync) { + if (explicitlyAsync) { ExternalApplicationHelper.startAsync(builder); } else { LocalShell.getShell().executeSimpleCommand(builder); diff --git a/app/src/main/java/io/xpipe/app/prefs/PasswordManagerCategory.java b/app/src/main/java/io/xpipe/app/prefs/PasswordManagerCategory.java index f99b5d50..662a80bb 100644 --- a/app/src/main/java/io/xpipe/app/prefs/PasswordManagerCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/PasswordManagerCategory.java @@ -52,7 +52,6 @@ public class PasswordManagerCategory extends AppPrefsCategory { var prefs = AppPrefs.get(); var testPasswordManagerValue = new SimpleStringProperty(); Runnable test = () -> { - prefs.save(); var cmd = prefs.passwordManagerString(testPasswordManagerValue.get()); if (cmd == null) { return; diff --git a/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java b/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java index ba561359..0231a02b 100644 --- a/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java @@ -37,7 +37,6 @@ public class TerminalCategory extends AppPrefsCategory { var prefs = AppPrefs.get(); var terminalTest = new StackComp( List.of(new ButtonComp(AppI18n.observable("test"), new FontIcon("mdi2p-play"), () -> { - prefs.save(); ThreadHelper.runFailableAsync(() -> { var term = AppPrefs.get().terminalType().getValue(); if (term != null) { @@ -58,12 +57,6 @@ public class TerminalCategory extends AppPrefsCategory { .apply(struc -> struc.get().setPromptText("myterminal -e $CMD")) .hide(prefs.terminalType.isNotEqualTo(ExternalTerminalType.CUSTOM))) .addComp(terminalTest) - .disable(Bindings.createBooleanBinding( - () -> { - return prefs.terminalType().getValue() != null - && !prefs.terminalType.get().supportsTabs(); - }, - prefs.terminalType())) .nameAndDescription("clearTerminalOnInit") .addToggle(prefs.clearTerminalOnInit)) .buildComp(); 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 3188f6af..6e826896 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStorage.java @@ -5,10 +5,7 @@ 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.DataStore; -import io.xpipe.core.store.DataStoreId; -import io.xpipe.core.store.FixedChildStore; -import io.xpipe.core.store.LocalStore; +import io.xpipe.core.store.*; import io.xpipe.core.util.UuidHelper; import javafx.util.Pair; import lombok.Getter; @@ -421,9 +418,6 @@ public abstract class DataStorage { deleteWithChildren(toRemove.toArray(DataStoreEntry[]::new)); addStoreEntriesIfNotPresent(toAdd.stream().map(DataStoreEntryRef::get).toArray(DataStoreEntry[]::new)); toUpdate.forEach(pair -> { - // TODO do we need this, it erases any custom information? - // pair.getKey().setStoreInternal(pair.getValue().getStore(), false); - // Update state by merging if (pair.getKey().getStorePersistentState() != null && pair.getValue().get().getStorePersistentState() != null) { @@ -434,6 +428,11 @@ public abstract class DataStorage { // Children classes might not be the same, the same goes for state classes // This can happen when there are multiple child classes and the ids got switched around if (classMatch) { + DataStore merged = ((FixedChildStore) pair.getKey().getStore()).merge(pair.getValue().getStore().asNeeded()); + if (merged != pair.getKey().getStore()) { + pair.getKey().setStoreInternal(merged, false); + } + var mergedState = pair.getKey().getStorePersistentState().deepCopy(); mergedState.merge(pair.getValue().get().getStorePersistentState()); pair.getKey().setStorePersistentState(mergedState); diff --git a/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java index 8ad5f611..556bc579 100644 --- a/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java @@ -161,6 +161,7 @@ public interface ExternalTerminalType extends PrefsChoiceValue { // In order to fix this bug which also affects us: // https://askubuntu.com/questions/1148475/launching-gnome-terminal-from-vscode .envrironment("GNOME_TERMINAL_SCREEN", sc -> ""); + pc.executeSimpleCommand(toExecute); } } @@ -819,7 +820,7 @@ public interface ExternalTerminalType extends PrefsChoiceValue { return launchConfiguration -> { var args = toCommand(launchConfiguration); args.add(0, executable); - if (explicityAsync) { + if (explicitlyAsync) { args = systemDialect.launchAsnyc(args); } return args.buildSimple(); diff --git a/app/src/main/java/io/xpipe/app/terminal/KittyTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/KittyTerminalType.java index 0bfef39b..4a751f47 100644 --- a/app/src/main/java/io/xpipe/app/terminal/KittyTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/KittyTerminalType.java @@ -1,15 +1,16 @@ package io.xpipe.app.terminal; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.util.CommandSupport; import io.xpipe.app.util.LocalShell; import io.xpipe.app.util.ShellTemp; import io.xpipe.app.util.ThreadHelper; import io.xpipe.core.process.CommandBuilder; +import io.xpipe.core.process.ShellControl; import io.xpipe.core.store.FilePath; import io.xpipe.core.util.XPipeInstallation; -import com.fasterxml.jackson.databind.node.JsonNodeFactory; - public interface KittyTerminalType extends ExternalTerminalType { ExternalTerminalType KITTY_LINUX = new Linux(); @@ -91,6 +92,15 @@ public interface KittyTerminalType extends ExternalTerminalType { class Linux implements KittyTerminalType { + public boolean isAvailable() { + try (ShellControl pc = LocalShell.getShell()) { + return pc.executeSimpleBooleanCommand(pc.getShellDialect().getWhichCommand("kitty")); + } catch (Exception e) { + ErrorEvent.fromThrowable(e).omit().handle(); + return false; + } + } + @Override public String getId() { return "app.kitty"; diff --git a/app/src/main/java/io/xpipe/app/util/DialogHelper.java b/app/src/main/java/io/xpipe/app/util/DialogHelper.java index b3c1060b..48a18f4b 100644 --- a/app/src/main/java/io/xpipe/app/util/DialogHelper.java +++ b/app/src/main/java/io/xpipe/app/util/DialogHelper.java @@ -40,10 +40,6 @@ public class DialogHelper { }); } - public static Dialog dataStoreFlowQuery(DataFlow flow, DataFlow[] available) { - return Dialog.choice("Flow", (DataFlow o) -> o.getDisplayName(), true, false, flow, available); - } - public static Dialog shellQuery(String displayName, DataStore store) { var storeName = DataStorage.get().getStoreDisplayName(store).orElse("localhost"); return Dialog.query(displayName, false, true, false, storeName, QueryConverter.STRING) diff --git a/app/src/main/resources/io/xpipe/app/resources/style/store-mini-section.css b/app/src/main/resources/io/xpipe/app/resources/style/store-mini-section.css index fd3ca0a4..f7d95b3c 100644 --- a/app/src/main/resources/io/xpipe/app/resources/style/store-mini-section.css +++ b/app/src/main/resources/io/xpipe/app/resources/style/store-mini-section.css @@ -23,6 +23,10 @@ -fx-background-radius: 0; } +.root.nord .store-section-mini-comp .item:hover, .root.nord:key-navigation .store-section-mini-comp .item:focused { + -fx-background-color: -color-accent-muted; +} + .store-section-mini-comp .item:hover, .root:key-navigation .store-section-mini-comp .item:focused { -fx-background-color: -color-accent-subtle; } diff --git a/core/src/main/java/io/xpipe/core/process/ShellDialects.java b/core/src/main/java/io/xpipe/core/process/ShellDialects.java index 7805ab7d..c17fb2b8 100644 --- a/core/src/main/java/io/xpipe/core/process/ShellDialects.java +++ b/core/src/main/java/io/xpipe/core/process/ShellDialects.java @@ -74,7 +74,7 @@ public class ShellDialects { CSH = byId("csh"); ASH = byId("ash"); SH = byId("sh"); - NO_INTERACTION = byId("unsupported"); + NO_INTERACTION = byId("noInteraction"); CISCO = byId("cisco"); MIKROTIK = byId("mikrotik"); RBASH = byId("rbash"); diff --git a/core/src/main/java/io/xpipe/core/process/TerminalInitScriptConfig.java b/core/src/main/java/io/xpipe/core/process/TerminalInitScriptConfig.java index 5e2fe983..5ba0ad97 100644 --- a/core/src/main/java/io/xpipe/core/process/TerminalInitScriptConfig.java +++ b/core/src/main/java/io/xpipe/core/process/TerminalInitScriptConfig.java @@ -10,6 +10,6 @@ public class TerminalInitScriptConfig { TerminalInitFunction terminalSpecificCommands; public static TerminalInitScriptConfig ofName(String name) { - return new TerminalInitScriptConfig(name, true, null); + return new TerminalInitScriptConfig(name, true, TerminalInitFunction.none()); } } diff --git a/core/src/main/java/io/xpipe/core/store/DataFlow.java b/core/src/main/java/io/xpipe/core/store/DataFlow.java deleted file mode 100644 index df7e8682..00000000 --- a/core/src/main/java/io/xpipe/core/store/DataFlow.java +++ /dev/null @@ -1,32 +0,0 @@ -package io.xpipe.core.store; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; - -@Getter -public enum DataFlow { - @JsonProperty("input") - INPUT("Input"), - @JsonProperty("output") - OUTPUT("Output"), - @JsonProperty("inputOrOutput") - INPUT_OR_OUTPUT("Input or Output"), - @JsonProperty("inputOutput") - INPUT_OUTPUT("Input/Output"), - @JsonProperty("transformer") - TRANSFORMER("Transformer"); - - private final String displayName; - - DataFlow(String displayName) { - this.displayName = displayName; - } - - public boolean hasInput() { - return this == INPUT || this == INPUT_OUTPUT; - } - - public boolean hasOutput() { - return this == OUTPUT || this == INPUT_OUTPUT; - } -} diff --git a/core/src/main/java/io/xpipe/core/store/FixedChildStore.java b/core/src/main/java/io/xpipe/core/store/FixedChildStore.java index 8063f23c..56dea81a 100644 --- a/core/src/main/java/io/xpipe/core/store/FixedChildStore.java +++ b/core/src/main/java/io/xpipe/core/store/FixedChildStore.java @@ -5,4 +5,8 @@ import java.util.OptionalInt; public interface FixedChildStore extends DataStore { OptionalInt getFixedId(); + + default FixedChildStore merge(FixedChildStore other) { + return this; + } } diff --git a/core/src/main/java/io/xpipe/core/store/SingletonSessionStore.java b/core/src/main/java/io/xpipe/core/store/SingletonSessionStore.java index 52d65a0e..ec1f3e55 100644 --- a/core/src/main/java/io/xpipe/core/store/SingletonSessionStore.java +++ b/core/src/main/java/io/xpipe/core/store/SingletonSessionStore.java @@ -56,10 +56,15 @@ public interface SingletonSessionStore return; } - s = newSession(); - s.start(); - setCache("session", s); - onSessionUpdate(true); + try { + s = newSession(); + s.start(); + setCache("session", s); + onSessionUpdate(true); + } catch (Exception ex) { + onSessionUpdate(false); + throw ex; + } } } diff --git a/lang/app/strings/fixed_en.properties b/lang/app/strings/fixed_en.properties index 6b37db36..3facf2f2 100644 --- a/lang/app/strings/fixed_en.properties +++ b/lang/app/strings/fixed_en.properties @@ -4,7 +4,6 @@ pwsh=Powershell Core windowsTerminal=Windows Terminal windowsTerminalPreview=Windows Terminal Preview gnomeTerminal=Gnome Terminal -createLock=Create lock tilix=Tilix wezterm=WezTerm konsole=Konsole @@ -48,8 +47,6 @@ mousepad=Mousepad pluma=Pluma textEdit=Text Edit sublime=Sublime Text -customTerminalPlaceholder=myterminal -e $CMD -customEditorPlaceholder=myeditor $FILE nullPointer=Null Pointer discord=Discord slack=Slack diff --git a/lang/app/strings/translations_da.properties b/lang/app/strings/translations_da.properties index fbbd8e53..308ad111 100644 --- a/lang/app/strings/translations_da.properties +++ b/lang/app/strings/translations_da.properties @@ -70,6 +70,7 @@ customCommand=Brugerdefineret kommando other=Andet setLock=Indstil lås selectConnection=Vælg forbindelse +createLock=Opret adgangssætning changeLock=Skift adgangssætning test=Test lockCreationAlertTitle=Indstil adgangssætning diff --git a/lang/app/strings/translations_de.properties b/lang/app/strings/translations_de.properties index b60e5ca0..7912aef8 100644 --- a/lang/app/strings/translations_de.properties +++ b/lang/app/strings/translations_de.properties @@ -73,6 +73,7 @@ customCommand=Benutzerdefinierter Befehl other=Andere setLock=Sperre setzen selectConnection=Verbindung auswählen +createLock=Passphrase erstellen changeLock=Passphrase ändern test=Test lockCreationAlertTitle=Passphrase festlegen diff --git a/lang/app/strings/translations_en.properties b/lang/app/strings/translations_en.properties index 242a0d9d..406c5bd7 100644 --- a/lang/app/strings/translations_en.properties +++ b/lang/app/strings/translations_en.properties @@ -71,6 +71,7 @@ customCommand=Custom command other=Other setLock=Set lock selectConnection=Select connection +createLock=Create passphrase changeLock=Change passphrase test=Test lockCreationAlertTitle=Set passphrase diff --git a/lang/app/strings/translations_es.properties b/lang/app/strings/translations_es.properties index 14bdc863..cfacc743 100644 --- a/lang/app/strings/translations_es.properties +++ b/lang/app/strings/translations_es.properties @@ -69,6 +69,7 @@ customCommand=Comando personalizado other=Otros setLock=Fijar bloqueo selectConnection=Seleccionar conexión +createLock=Crear frase de contraseña changeLock=Cambiar frase de contraseña test=Prueba lockCreationAlertTitle=Establecer frase de contraseña diff --git a/lang/app/strings/translations_fr.properties b/lang/app/strings/translations_fr.properties index 9d3f3b7f..4e532faf 100644 --- a/lang/app/strings/translations_fr.properties +++ b/lang/app/strings/translations_fr.properties @@ -69,6 +69,7 @@ customCommand=Commande personnalisée other=Autre setLock=Verrouiller selectConnection=Sélectionner une connexion +createLock=Créer une phrase de passe changeLock=Changer de phrase de passe test=Test lockCreationAlertTitle=Définir une phrase de passe diff --git a/lang/app/strings/translations_it.properties b/lang/app/strings/translations_it.properties index f42c2455..551ad552 100644 --- a/lang/app/strings/translations_it.properties +++ b/lang/app/strings/translations_it.properties @@ -69,6 +69,7 @@ customCommand=Comando personalizzato other=Altro setLock=Imposta blocco selectConnection=Seleziona la connessione +createLock=Creare una passphrase changeLock=Modifica della passphrase test=Test lockCreationAlertTitle=Imposta una passphrase diff --git a/lang/app/strings/translations_ja.properties b/lang/app/strings/translations_ja.properties index dd63ef1d..1d678d4b 100644 --- a/lang/app/strings/translations_ja.properties +++ b/lang/app/strings/translations_ja.properties @@ -69,6 +69,7 @@ customCommand=カスタムコマンド other=その他 setLock=ロックを設定する selectConnection=接続を選択する +createLock=パスフレーズを作成する changeLock=パスフレーズを変更する test=テスト lockCreationAlertTitle=パスフレーズを設定する diff --git a/lang/app/strings/translations_nl.properties b/lang/app/strings/translations_nl.properties index ecace140..4aba63ab 100644 --- a/lang/app/strings/translations_nl.properties +++ b/lang/app/strings/translations_nl.properties @@ -69,6 +69,7 @@ customCommand=Aangepaste opdracht other=Andere setLock=Slot instellen selectConnection=Verbinding selecteren +createLock=Passphrase aanmaken changeLock=Wachtwoordzin wijzigen test=Test lockCreationAlertTitle=Passphrase instellen diff --git a/lang/app/strings/translations_pt.properties b/lang/app/strings/translations_pt.properties index 0d09f11a..14f75a0f 100644 --- a/lang/app/strings/translations_pt.properties +++ b/lang/app/strings/translations_pt.properties @@ -69,6 +69,7 @@ customCommand=Comando personalizado other=Outro setLock=Definir bloqueio selectConnection=Selecionar ligação +createLock=Cria uma frase-chave changeLock=Altera a frase-chave test=Testa lockCreationAlertTitle=Define a frase-chave diff --git a/lang/app/strings/translations_ru.properties b/lang/app/strings/translations_ru.properties index 23c57fce..813af1a0 100644 --- a/lang/app/strings/translations_ru.properties +++ b/lang/app/strings/translations_ru.properties @@ -69,6 +69,7 @@ customCommand=Пользовательская команда other=Другие setLock=Установить замок selectConnection=Выберите соединение +createLock=Создание парольной фразы changeLock=Изменить парольную фразу test=Тест lockCreationAlertTitle=Установите парольную фразу diff --git a/lang/app/strings/translations_tr.properties b/lang/app/strings/translations_tr.properties index 8a15165c..fdb9cc7c 100644 --- a/lang/app/strings/translations_tr.properties +++ b/lang/app/strings/translations_tr.properties @@ -69,6 +69,7 @@ customCommand=Özel komut other=Diğer setLock=Kilidi ayarla selectConnection=Bağlantı seçin +createLock=Parola oluştur changeLock=Parolayı değiştir test=Test lockCreationAlertTitle=Parolayı ayarla diff --git a/lang/app/strings/translations_zh.properties b/lang/app/strings/translations_zh.properties index 9e7a2f96..cfc37b4f 100644 --- a/lang/app/strings/translations_zh.properties +++ b/lang/app/strings/translations_zh.properties @@ -69,6 +69,7 @@ customCommand=自定义命令 other=其他 setLock=设置锁定 selectConnection=选择连接 +createLock=创建口令 changeLock=更改密码 test=测试 lockCreationAlertTitle=设置口令 diff --git a/lang/proc/strings/translations_de.properties b/lang/proc/strings/translations_de.properties index 3f4703ed..03835c2a 100644 --- a/lang/proc/strings/translations_de.properties +++ b/lang/proc/strings/translations_de.properties @@ -16,7 +16,8 @@ runTempContainer=Temporärer Container ausführen vmwareUserDescription=Der Benutzername deines primären Gastbenutzers dockerTempRunAlertTitle=Temporärer Container ausführen dockerTempRunAlertHeader=Damit wird ein Shell-Prozess in einem temporären Container ausgeführt, der automatisch entfernt wird, sobald er gestoppt wird. -imageName=Bildname +#custom +imageName=Imagename imageNameDescription=Die zu verwendende Kennung des Containerbildes containerName=Container-Name containerNameDescription=Der optionale benutzerdefinierte Containername