mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-25 09:00:26 +00:00
Replace simple change listener
This commit is contained in:
parent
6bd105b1de
commit
6860feaa80
109 changed files with 2136 additions and 709 deletions
|
@ -3,7 +3,6 @@ package io.xpipe.app.browser;
|
|||
import atlantafx.base.controls.Breadcrumbs;
|
||||
import io.xpipe.app.fxcomps.SimpleComp;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.core.store.FileNames;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.control.Button;
|
||||
|
@ -40,7 +39,7 @@ public class BrowserBreadcrumbBar extends SimpleComp {
|
|||
|
||||
var breadcrumbs = new Breadcrumbs<String>();
|
||||
breadcrumbs.setMinWidth(0);
|
||||
SimpleChangeListener.apply(PlatformThread.sync(model.getCurrentPath()), val -> {
|
||||
PlatformThread.sync(model.getCurrentPath()).subscribe( val -> {
|
||||
if (val == null) {
|
||||
breadcrumbs.setSelectedCrumb(null);
|
||||
return;
|
||||
|
|
|
@ -16,7 +16,6 @@ import io.xpipe.app.fxcomps.impl.PrettyImageHelper;
|
|||
import io.xpipe.app.fxcomps.impl.VerticalComp;
|
||||
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.storage.DataStorage;
|
||||
import io.xpipe.app.util.BooleanScope;
|
||||
import io.xpipe.app.util.ThreadHelper;
|
||||
|
@ -284,7 +283,7 @@ public class BrowserComp extends SimpleComp {
|
|||
var id = UUID.randomUUID().toString();
|
||||
tab.setId(id);
|
||||
|
||||
SimpleChangeListener.apply(tabs.skinProperty(), newValue -> {
|
||||
tabs.skinProperty().subscribe(newValue -> {
|
||||
if (newValue != null) {
|
||||
Platform.runLater(() -> {
|
||||
Label l = (Label) tabs.lookup("#" + id + " .tab-label");
|
||||
|
|
|
@ -5,7 +5,6 @@ import io.xpipe.app.fxcomps.Comp;
|
|||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.impl.FancyTooltipAugment;
|
||||
import io.xpipe.app.fxcomps.impl.TextFieldComp;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.beans.property.SimpleBooleanProperty;
|
||||
import javafx.geometry.Pos;
|
||||
|
@ -47,7 +46,7 @@ public class BrowserFilterComp extends Comp<BrowserFilterComp.Structure> {
|
|||
text.setMinWidth(0);
|
||||
Styles.toggleStyleClass(text, Styles.LEFT_PILL);
|
||||
|
||||
SimpleChangeListener.apply(filterString, val -> {
|
||||
filterString.subscribe(val -> {
|
||||
if (val == null) {
|
||||
text.getStyleClass().remove(Styles.SUCCESS);
|
||||
} else {
|
||||
|
|
|
@ -10,7 +10,6 @@ import io.xpipe.app.fxcomps.impl.HorizontalComp;
|
|||
import io.xpipe.app.fxcomps.impl.PrettyImageHelper;
|
||||
import io.xpipe.app.fxcomps.impl.StackComp;
|
||||
import io.xpipe.app.fxcomps.impl.TextFieldComp;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.util.BooleanScope;
|
||||
import io.xpipe.app.util.ThreadHelper;
|
||||
import javafx.application.Platform;
|
||||
|
@ -42,7 +41,7 @@ public class BrowserNavBar extends SimpleComp {
|
|||
@Override
|
||||
protected Region createSimple() {
|
||||
var path = new SimpleStringProperty(model.getCurrentPath().get());
|
||||
SimpleChangeListener.apply(model.getCurrentPath(), (newValue) -> {
|
||||
model.getCurrentPath().subscribe((newValue) -> {
|
||||
path.set(newValue);
|
||||
});
|
||||
path.addListener((observable, oldValue, newValue) -> {
|
||||
|
@ -58,7 +57,7 @@ public class BrowserNavBar extends SimpleComp {
|
|||
.styleClass(Styles.CENTER_PILL)
|
||||
.styleClass("path-text")
|
||||
.apply(struc -> {
|
||||
SimpleChangeListener.apply(struc.get().focusedProperty(), val -> {
|
||||
struc.get().focusedProperty().subscribe(val -> {
|
||||
struc.get()
|
||||
.pseudoClassStateChanged(
|
||||
INVISIBLE,
|
||||
|
@ -71,7 +70,7 @@ public class BrowserNavBar extends SimpleComp {
|
|||
}
|
||||
});
|
||||
|
||||
SimpleChangeListener.apply(model.getInOverview(), val -> {
|
||||
model.getInOverview().subscribe(val -> {
|
||||
// Pseudo classes do not apply if set instantly before shown
|
||||
// If we start a new tab with a directory set, we have to set the pseudo class one pulse later
|
||||
Platform.runLater(() -> {
|
||||
|
|
|
@ -5,6 +5,7 @@ import io.xpipe.app.comp.base.ButtonComp;
|
|||
import io.xpipe.app.comp.base.ListBoxViewComp;
|
||||
import io.xpipe.app.comp.base.TileButtonComp;
|
||||
import io.xpipe.app.core.AppFont;
|
||||
import io.xpipe.app.core.AppI18n;
|
||||
import io.xpipe.app.fxcomps.Comp;
|
||||
import io.xpipe.app.fxcomps.SimpleComp;
|
||||
import io.xpipe.app.fxcomps.impl.HorizontalComp;
|
||||
|
@ -54,7 +55,8 @@ public class BrowserWelcomeComp extends SimpleComp {
|
|||
hbox.setSpacing(15);
|
||||
|
||||
if (state == null) {
|
||||
var header = new Label("Here you will be able to see where you left off last time.");
|
||||
var header = new Label();
|
||||
header.textProperty().bind(AppI18n.observable("browserWelcomeEmpty"));
|
||||
vbox.getChildren().add(header);
|
||||
hbox.setPadding(new Insets(40, 40, 40, 50));
|
||||
return new VBox(hbox);
|
||||
|
@ -74,13 +76,14 @@ public class BrowserWelcomeComp extends SimpleComp {
|
|||
});
|
||||
var empty = Bindings.createBooleanBinding(() -> list.isEmpty(), list);
|
||||
|
||||
var header = new LabelComp(Bindings.createStringBinding(
|
||||
() -> {
|
||||
return !empty.get()
|
||||
? "You were recently connected to the following systems:"
|
||||
: "Here you will be able to see where you left off last time.";
|
||||
},
|
||||
empty))
|
||||
var headerBinding = BindingsHelper.mappedBinding(empty,b -> {
|
||||
if (b) {
|
||||
return AppI18n.observable("browserWelcomeEmpty");
|
||||
} else {
|
||||
return AppI18n.observable("browserWelcomeSystems");
|
||||
}
|
||||
});
|
||||
var header = new LabelComp(headerBinding)
|
||||
.createRegion();
|
||||
AppFont.setSize(header, 1);
|
||||
vbox.getChildren().add(header);
|
||||
|
|
|
@ -3,7 +3,6 @@ package io.xpipe.app.comp.base;
|
|||
import io.xpipe.app.fxcomps.Comp;
|
||||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.SimpleCompStructure;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
|
@ -50,7 +49,7 @@ public class ButtonComp extends Comp<CompStructure<Button>> {
|
|||
var graphic = getGraphic();
|
||||
if (graphic instanceof FontIcon f) {
|
||||
// f.iconColorProperty().bind(button.textFillProperty());
|
||||
SimpleChangeListener.apply(button.fontProperty(), c -> {
|
||||
button.fontProperty().subscribe(c -> {
|
||||
f.setIconSize((int) new Size(c.getSize(), SizeUnits.PT).pixels());
|
||||
});
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ import io.xpipe.app.fxcomps.CompStructure;
|
|||
import io.xpipe.app.fxcomps.SimpleCompStructure;
|
||||
import io.xpipe.app.fxcomps.augment.ContextMenuAugment;
|
||||
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.css.Size;
|
||||
import javafx.css.SizeUnits;
|
||||
import javafx.scene.control.Button;
|
||||
|
@ -43,7 +42,7 @@ public class DropdownComp extends Comp<CompStructure<Button>> {
|
|||
.toList()));
|
||||
|
||||
var graphic = new FontIcon("mdi2c-chevron-double-down");
|
||||
SimpleChangeListener.apply(button.fontProperty(), c -> {
|
||||
button.fontProperty().subscribe(c -> {
|
||||
graphic.setIconSize((int) new Size(c.getSize(), SizeUnits.PT).pixels());
|
||||
});
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ package io.xpipe.app.comp.base;
|
|||
import io.xpipe.app.fxcomps.Comp;
|
||||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.scene.control.TextField;
|
||||
|
@ -65,7 +64,7 @@ public class LazyTextFieldComp extends Comp<LazyTextFieldComp.Structure> {
|
|||
sp.prefHeightProperty().bind(r.prefHeightProperty());
|
||||
r.setDisable(true);
|
||||
|
||||
SimpleChangeListener.apply(currentValue, n -> {
|
||||
currentValue.subscribe(n -> {
|
||||
PlatformThread.runLaterIfNeeded(() -> {
|
||||
// Check if control value is the same. Then don't set it as that might cause bugs
|
||||
if (Objects.equals(r.getText(), n) || (n == null && r.getText().isEmpty())) {
|
||||
|
|
|
@ -6,7 +6,6 @@ import io.xpipe.app.fxcomps.Comp;
|
|||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.SimpleCompStructure;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.issue.ErrorEvent;
|
||||
import io.xpipe.app.prefs.AppPrefs;
|
||||
import io.xpipe.app.util.Hyperlinks;
|
||||
|
@ -59,7 +58,7 @@ public class MarkdownComp extends Comp<CompStructure<StackPane>> {
|
|||
var url = AppResources.getResourceURL(AppResources.XPIPE_MODULE, theme).orElseThrow();
|
||||
wv.getEngine().setUserStyleSheetLocation(url.toString());
|
||||
|
||||
SimpleChangeListener.apply(PlatformThread.sync(markdown), val -> {
|
||||
PlatformThread.sync(markdown).subscribe(val -> {
|
||||
// Workaround for https://bugs.openjdk.org/browse/JDK-8199014
|
||||
try {
|
||||
var file = Files.createTempFile(null, ".html");
|
||||
|
|
|
@ -3,7 +3,6 @@ package io.xpipe.app.comp.base;
|
|||
import io.xpipe.app.fxcomps.Comp;
|
||||
import io.xpipe.app.fxcomps.SimpleComp;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.scene.layout.Region;
|
||||
import javafx.scene.layout.StackPane;
|
||||
|
@ -25,7 +24,7 @@ public class MultiContentComp extends SimpleComp {
|
|||
for (Map.Entry<Comp<?>, ObservableValue<Boolean>> entry : content.entrySet()) {
|
||||
var region = entry.getKey().createRegion();
|
||||
stack.getChildren().add(region);
|
||||
SimpleChangeListener.apply(PlatformThread.sync(entry.getValue()), val -> {
|
||||
PlatformThread.sync(entry.getValue()).subscribe(val -> {
|
||||
region.setManaged(val);
|
||||
region.setVisible(val);
|
||||
});
|
||||
|
|
|
@ -5,7 +5,6 @@ import io.xpipe.app.comp.store.StoreEntryWrapper;
|
|||
import io.xpipe.app.fxcomps.SimpleComp;
|
||||
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.core.process.ShellStoreState;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
|
@ -35,7 +34,7 @@ public class SystemStateComp extends SimpleComp {
|
|||
state));
|
||||
var fi = new FontIcon();
|
||||
fi.getStyleClass().add("inner-icon");
|
||||
SimpleChangeListener.apply(icon, val -> fi.setIconLiteral(val));
|
||||
icon.subscribe(val -> fi.setIconLiteral(val));
|
||||
|
||||
var border = new FontIcon("mdi2c-circle-outline");
|
||||
border.getStyleClass().add("outer-icon");
|
||||
|
@ -63,7 +62,7 @@ public class SystemStateComp extends SimpleComp {
|
|||
""";
|
||||
pane.getStylesheets().add(Styles.toDataURI(dataClass1));
|
||||
|
||||
SimpleChangeListener.apply(PlatformThread.sync(state), val -> {
|
||||
PlatformThread.sync(state).subscribe(val -> {
|
||||
pane.getStylesheets().removeAll(success, failure, other);
|
||||
pane.getStylesheets().add(val == State.SUCCESS ? success : val == State.FAILURE ? failure : other);
|
||||
});
|
||||
|
|
|
@ -5,7 +5,6 @@ import io.xpipe.app.core.AppI18n;
|
|||
import io.xpipe.app.fxcomps.Comp;
|
||||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
|
@ -57,7 +56,7 @@ public class TileButtonComp extends Comp<TileButtonComp.Structure> {
|
|||
text.setSpacing(2);
|
||||
|
||||
var fi = new FontIcon();
|
||||
SimpleChangeListener.apply(PlatformThread.sync(icon), val -> {
|
||||
PlatformThread.sync(icon).subscribe(val -> {
|
||||
fi.setIconLiteral(val);
|
||||
});
|
||||
|
||||
|
|
|
@ -12,7 +12,6 @@ import io.xpipe.app.ext.DataStoreProviders;
|
|||
import io.xpipe.app.fxcomps.Comp;
|
||||
import io.xpipe.app.fxcomps.augment.GrowAugment;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.issue.ErrorEvent;
|
||||
import io.xpipe.app.issue.ExceptionConverter;
|
||||
import io.xpipe.app.issue.TrackEvent;
|
||||
|
@ -381,7 +380,7 @@ public class StoreCreationComp extends DialogComp {
|
|||
providerChoice.apply(GrowAugment.create(true, false));
|
||||
providerChoice.onSceneAssign(struc -> struc.get().requestFocus());
|
||||
|
||||
SimpleChangeListener.apply(provider, n -> {
|
||||
provider.subscribe(n -> {
|
||||
if (n != null) {
|
||||
var d = n.guiDialog(existingEntry, store);
|
||||
var propVal = new SimpleValidator();
|
||||
|
|
|
@ -15,7 +15,6 @@ import io.xpipe.app.fxcomps.augment.GrowAugment;
|
|||
import io.xpipe.app.fxcomps.impl.*;
|
||||
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.prefs.AppPrefs;
|
||||
import io.xpipe.app.storage.DataStorage;
|
||||
import io.xpipe.app.storage.DataStoreColor;
|
||||
|
@ -138,7 +137,7 @@ public abstract class StoreEntryComp extends SimpleComp {
|
|||
}
|
||||
|
||||
protected void applyState(Node node) {
|
||||
SimpleChangeListener.apply(PlatformThread.sync(wrapper.getValidity()), val -> {
|
||||
PlatformThread.sync(wrapper.getValidity()).subscribe(val -> {
|
||||
switch (val) {
|
||||
case LOAD_FAILED -> {
|
||||
node.pseudoClassStateChanged(FAILED, true);
|
||||
|
|
|
@ -9,7 +9,6 @@ import io.xpipe.app.fxcomps.impl.FancyTooltipAugment;
|
|||
import io.xpipe.app.fxcomps.impl.FilterComp;
|
||||
import io.xpipe.app.fxcomps.impl.IconButtonComp;
|
||||
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.util.ThreadHelper;
|
||||
import io.xpipe.core.process.OsType;
|
||||
import javafx.beans.binding.Bindings;
|
||||
|
@ -36,7 +35,7 @@ public class StoreEntryListStatusComp extends SimpleComp {
|
|||
|
||||
public StoreEntryListStatusComp() {
|
||||
this.sortMode = new SimpleObjectProperty<>();
|
||||
SimpleChangeListener.apply(StoreViewState.get().getActiveCategory(), val -> {
|
||||
StoreViewState.get().getActiveCategory().subscribe(val -> {
|
||||
sortMode.setValue(val.getSortMode().getValue());
|
||||
});
|
||||
sortMode.addListener((observable, oldValue, newValue) -> {
|
||||
|
@ -51,18 +50,9 @@ public class StoreEntryListStatusComp extends SimpleComp {
|
|||
|
||||
private Region createGroupListHeader() {
|
||||
var label = new Label();
|
||||
label.textProperty()
|
||||
.bind(Bindings.createStringBinding(
|
||||
() -> {
|
||||
return StoreViewState.get()
|
||||
.getActiveCategory()
|
||||
.getValue()
|
||||
.getRoot()
|
||||
.equals(StoreViewState.get().getAllConnectionsCategory())
|
||||
? "Connections"
|
||||
: "Scripts";
|
||||
},
|
||||
StoreViewState.get().getActiveCategory()));
|
||||
var name = BindingsHelper.flatMap(StoreViewState.get().getActiveCategory(),
|
||||
categoryWrapper -> AppI18n.observable(categoryWrapper.getRoot().equals(StoreViewState.get().getAllConnectionsCategory()) ? "connections" : "scripts"));
|
||||
label.textProperty().bind(name);
|
||||
label.getStyleClass().add("name");
|
||||
|
||||
var all = BindingsHelper.filteredContentBinding(
|
||||
|
|
|
@ -8,7 +8,6 @@ import io.xpipe.app.fxcomps.impl.HorizontalComp;
|
|||
import io.xpipe.app.fxcomps.impl.IconButtonComp;
|
||||
import io.xpipe.app.fxcomps.impl.VerticalComp;
|
||||
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.storage.DataStoreColor;
|
||||
import io.xpipe.app.util.ThreadHelper;
|
||||
import javafx.beans.binding.Bindings;
|
||||
|
@ -162,7 +161,7 @@ public class StoreSectionComp extends Comp<CompStructure<VBox>> {
|
|||
return full.styleClass("store-entry-section-comp")
|
||||
.apply(struc -> {
|
||||
struc.get().setFillWidth(true);
|
||||
SimpleChangeListener.apply(expanded, val -> {
|
||||
expanded.subscribe(val -> {
|
||||
struc.get().pseudoClassStateChanged(EXPANDED, val);
|
||||
});
|
||||
struc.get().pseudoClassStateChanged(EVEN, section.getDepth() % 2 == 0);
|
||||
|
@ -170,7 +169,7 @@ public class StoreSectionComp extends Comp<CompStructure<VBox>> {
|
|||
struc.get().pseudoClassStateChanged(ROOT, topLevel);
|
||||
struc.get().pseudoClassStateChanged(SUB, !topLevel);
|
||||
|
||||
SimpleChangeListener.apply(section.getWrapper().getColor(), val -> {
|
||||
section.getWrapper().getColor().subscribe(val -> {
|
||||
if (!topLevel) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -9,7 +9,6 @@ import io.xpipe.app.fxcomps.impl.IconButtonComp;
|
|||
import io.xpipe.app.fxcomps.impl.PrettyImageHelper;
|
||||
import io.xpipe.app.fxcomps.impl.VerticalComp;
|
||||
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.storage.DataStoreColor;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
|
@ -160,7 +159,7 @@ public class StoreSectionMiniComp extends Comp<CompStructure<VBox>> {
|
|||
return vert.styleClass("store-section-mini-comp")
|
||||
.apply(struc -> {
|
||||
struc.get().setFillWidth(true);
|
||||
SimpleChangeListener.apply(expanded, val -> {
|
||||
expanded.subscribe(val -> {
|
||||
struc.get().pseudoClassStateChanged(EXPANDED, val);
|
||||
});
|
||||
struc.get().pseudoClassStateChanged(EVEN, section.getDepth() % 2 == 0);
|
||||
|
@ -171,7 +170,7 @@ public class StoreSectionMiniComp extends Comp<CompStructure<VBox>> {
|
|||
})
|
||||
.apply(struc -> {
|
||||
if (section.getWrapper() != null) {
|
||||
SimpleChangeListener.apply(section.getWrapper().getColor(), val -> {
|
||||
section.getWrapper().getColor().subscribe(val -> {
|
||||
if (section.getDepth() != 1) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -10,101 +10,70 @@ import io.xpipe.app.prefs.SupportedLocale;
|
|||
import io.xpipe.app.util.OptionsBuilder;
|
||||
import io.xpipe.app.util.Translatable;
|
||||
import io.xpipe.core.util.ModuleHelper;
|
||||
import io.xpipe.core.util.XPipeInstallation;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.StringBinding;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.Value;
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.ocpsoft.prettytime.PrettyTime;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.FileVisitResult;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.SimpleFileVisitor;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Properties;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.function.UnaryOperator;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class AppI18n {
|
||||
|
||||
private static final Pattern VAR_PATTERN = Pattern.compile("\\$\\w+?\\$");
|
||||
private static final AppI18n INSTANCE = new AppI18n();
|
||||
private Map<String, String> translations;
|
||||
private Map<String, String> markdownDocumentations;
|
||||
private PrettyTime prettyTime;
|
||||
@Value
|
||||
static class LoadedTranslations {
|
||||
|
||||
public static void init() {
|
||||
var i = INSTANCE;
|
||||
if (i.translations != null) {
|
||||
return;
|
||||
Map<String, String> translations;
|
||||
Map<String, String> markdownDocumentations;
|
||||
PrettyTime prettyTime;
|
||||
}
|
||||
|
||||
i.load();
|
||||
private static final Pattern VAR_PATTERN = Pattern.compile("\\$\\w+?\\$");
|
||||
private static AppI18n INSTANCE;
|
||||
private LoadedTranslations english;
|
||||
private final Property<LoadedTranslations> currentLanguage = new SimpleObjectProperty<>();
|
||||
|
||||
public static void init() throws Exception {
|
||||
INSTANCE = new AppI18n();
|
||||
INSTANCE.load();
|
||||
}
|
||||
|
||||
private void load() throws Exception {
|
||||
if (english == null) {
|
||||
english = load(Locale.ENGLISH);
|
||||
}
|
||||
|
||||
if (AppPrefs.get() != null) {
|
||||
AppPrefs.get().language().addListener((c, o, n) -> {
|
||||
i.clear();
|
||||
i.load();
|
||||
AppPrefs.get().language().subscribe(n -> {
|
||||
try {
|
||||
currentLanguage.setValue(n != null ? load(n.getLocale()) : null);
|
||||
} catch (Exception e) {
|
||||
ErrorEvent.fromThrowable(e).handle();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static AppI18n getInstance() {
|
||||
public static AppI18n get() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public static StringBinding readableInstant(String s, ObservableValue<Instant> instant) {
|
||||
return readableInstant(instant, rs -> getValue(getInstance().getLocalised(s), rs));
|
||||
}
|
||||
|
||||
public static StringBinding readableInstant(ObservableValue<Instant> instant, UnaryOperator<String> op) {
|
||||
return Bindings.createStringBinding(
|
||||
() -> {
|
||||
if (instant.getValue() == null) {
|
||||
return "null";
|
||||
}
|
||||
|
||||
return op.apply(
|
||||
getInstance().prettyTime.format(instant.getValue().minus(Duration.ofSeconds(1))));
|
||||
},
|
||||
instant);
|
||||
}
|
||||
|
||||
public static StringBinding readableInstant(ObservableValue<Instant> instant) {
|
||||
return Bindings.createStringBinding(
|
||||
() -> {
|
||||
if (instant.getValue() == null) {
|
||||
return "null";
|
||||
}
|
||||
|
||||
return getInstance().prettyTime.format(instant.getValue().minus(Duration.ofSeconds(1)));
|
||||
},
|
||||
instant);
|
||||
}
|
||||
|
||||
public static StringBinding readableDuration(ObservableValue<Duration> duration) {
|
||||
return Bindings.createStringBinding(
|
||||
() -> {
|
||||
if (duration.getValue() == null) {
|
||||
return "null";
|
||||
}
|
||||
|
||||
return getInstance()
|
||||
.prettyTime
|
||||
.formatDuration(getInstance()
|
||||
.prettyTime
|
||||
.approximateDuration(Instant.now().plus(duration.getValue())));
|
||||
},
|
||||
duration);
|
||||
private LoadedTranslations getLoaded() {
|
||||
return currentLanguage.getValue() != null ? currentLanguage.getValue() : english;
|
||||
}
|
||||
|
||||
public static ObservableValue<String> observable(String s, Object... vars) {
|
||||
|
@ -115,7 +84,7 @@ public class AppI18n {
|
|||
var key = INSTANCE.getKey(s);
|
||||
return Bindings.createStringBinding(() -> {
|
||||
return get(key, vars);
|
||||
});
|
||||
}, INSTANCE.currentLanguage);
|
||||
}
|
||||
|
||||
public static String get(String s, Object... vars) {
|
||||
|
@ -160,11 +129,6 @@ public class AppI18n {
|
|||
return "";
|
||||
}
|
||||
|
||||
private void clear() {
|
||||
translations.clear();
|
||||
prettyTime = null;
|
||||
}
|
||||
|
||||
public String getKey(String s) {
|
||||
var key = s;
|
||||
if (!s.contains(".")) {
|
||||
|
@ -173,62 +137,62 @@ public class AppI18n {
|
|||
return key;
|
||||
}
|
||||
|
||||
public boolean containsKey(String s) {
|
||||
var key = getKey(s);
|
||||
if (translations == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return translations.containsKey(key);
|
||||
}
|
||||
|
||||
public String getLocalised(String s, Object... vars) {
|
||||
var key = getKey(s);
|
||||
|
||||
if (translations == null) {
|
||||
if (english == null) {
|
||||
TrackEvent.warn("Translations not initialized for " + key);
|
||||
return s;
|
||||
}
|
||||
|
||||
if (!translations.containsKey(key)) {
|
||||
if (currentLanguage.getValue() != null && currentLanguage.getValue().getTranslations().containsKey(key)) {
|
||||
var localisedString = currentLanguage.getValue().getTranslations().get(key);
|
||||
return getValue(localisedString, vars);
|
||||
}
|
||||
|
||||
if (english.getTranslations().containsKey(key)) {
|
||||
var localisedString = english.getTranslations().get(key);
|
||||
return getValue(localisedString, vars);
|
||||
}
|
||||
|
||||
TrackEvent.warn("Translation key not found for " + key);
|
||||
return key;
|
||||
}
|
||||
|
||||
var localisedString = translations.get(key);
|
||||
return getValue(localisedString, vars);
|
||||
}
|
||||
|
||||
public boolean isLoaded() {
|
||||
return translations != null;
|
||||
}
|
||||
|
||||
private boolean matchesLocale(Path f) {
|
||||
var l = AppPrefs.get() != null
|
||||
? AppPrefs.get().language().getValue().getLocale()
|
||||
: SupportedLocale.ENGLISH.getLocale();
|
||||
private boolean matchesLocale(Path f, Locale l) {
|
||||
var name = FilenameUtils.getBaseName(f.getFileName().toString());
|
||||
var ending = "_" + l.toLanguageTag();
|
||||
return name.endsWith(ending);
|
||||
}
|
||||
|
||||
public String getMarkdownDocumentation(String name) {
|
||||
if (!markdownDocumentations.containsKey(name)) {
|
||||
if (currentLanguage.getValue() != null && currentLanguage.getValue().getMarkdownDocumentations().containsKey(name)) {
|
||||
var localisedString = currentLanguage.getValue().getMarkdownDocumentations().get(name);
|
||||
return localisedString;
|
||||
}
|
||||
|
||||
if (english.getMarkdownDocumentations().containsKey(name)) {
|
||||
var localisedString = english.getMarkdownDocumentations().get(name);
|
||||
return localisedString;
|
||||
}
|
||||
|
||||
TrackEvent.withWarn("Markdown documentation for key " + name + " not found")
|
||||
.handle();
|
||||
return "";
|
||||
}
|
||||
|
||||
return markdownDocumentations.getOrDefault(name, "");
|
||||
private Path getModuleLangPath(String module) {
|
||||
return XPipeInstallation.getLangPath().resolve(module);
|
||||
}
|
||||
|
||||
private void load() {
|
||||
private LoadedTranslations load(Locale l) throws Exception {
|
||||
TrackEvent.info("Loading translations ...");
|
||||
|
||||
translations = new HashMap<>();
|
||||
var translations = new HashMap<String, String>();
|
||||
for (var module : AppExtensionManager.getInstance().getContentModules()) {
|
||||
AppResources.with(module.getName(), "lang", basePath -> {
|
||||
var basePath = getModuleLangPath(FilenameUtils.getExtension(module.getName())).resolve("strings");
|
||||
if (!Files.exists(basePath)) {
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
AtomicInteger fileCounter = new AtomicInteger();
|
||||
|
@ -238,7 +202,7 @@ public class AppI18n {
|
|||
Files.walkFileTree(basePath, new SimpleFileVisitor<>() {
|
||||
@Override
|
||||
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
|
||||
if (!matchesLocale(file)) {
|
||||
if (!matchesLocale(file, l)) {
|
||||
return FileVisitResult.CONTINUE;
|
||||
}
|
||||
|
||||
|
@ -249,7 +213,7 @@ public class AppI18n {
|
|||
fileCounter.incrementAndGet();
|
||||
try (var in = Files.newInputStream(file)) {
|
||||
var props = new Properties();
|
||||
props.load(in);
|
||||
props.load(new InputStreamReader(in, StandardCharsets.UTF_8));
|
||||
props.forEach((key, value) -> {
|
||||
var hasPrefix = key.toString().contains(".");
|
||||
var usedPrefix = hasPrefix ? "" : defaultPrefix;
|
||||
|
@ -267,21 +231,20 @@ public class AppI18n {
|
|||
.tag("fileCount", fileCounter.get())
|
||||
.tag("lineCount", lineCounter.get())
|
||||
.handle();
|
||||
});
|
||||
}
|
||||
|
||||
markdownDocumentations = new HashMap<>();
|
||||
var markdownDocumentations = new HashMap<String, String>();
|
||||
for (var module : AppExtensionManager.getInstance().getContentModules()) {
|
||||
AppResources.with(module.getName(), "lang", basePath -> {
|
||||
var basePath = getModuleLangPath(FilenameUtils.getExtension(module.getName())).resolve("texts");
|
||||
if (!Files.exists(basePath)) {
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
var moduleName = FilenameUtils.getExtension(module.getName());
|
||||
Files.walkFileTree(basePath, new SimpleFileVisitor<>() {
|
||||
@Override
|
||||
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
|
||||
if (!matchesLocale(file)) {
|
||||
if (!matchesLocale(file, l)) {
|
||||
return FileVisitResult.CONTINUE;
|
||||
}
|
||||
|
||||
|
@ -302,13 +265,14 @@ public class AppI18n {
|
|||
return FileVisitResult.CONTINUE;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
this.prettyTime = new PrettyTime(
|
||||
var prettyTime = new PrettyTime(
|
||||
AppPrefs.get() != null
|
||||
? AppPrefs.get().language().getValue().getLocale()
|
||||
: SupportedLocale.ENGLISH.getLocale());
|
||||
|
||||
return new LoadedTranslations(translations,markdownDocumentations, prettyTime);
|
||||
}
|
||||
|
||||
@SuppressWarnings("removal")
|
||||
|
|
|
@ -3,7 +3,6 @@ package io.xpipe.app.core;
|
|||
import atlantafx.base.theme.*;
|
||||
import io.xpipe.app.ext.PrefsChoiceValue;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.issue.ErrorEvent;
|
||||
import io.xpipe.app.issue.TrackEvent;
|
||||
import io.xpipe.app.prefs.AppPrefs;
|
||||
|
@ -44,7 +43,7 @@ public class AppTheme {
|
|||
return;
|
||||
}
|
||||
|
||||
SimpleChangeListener.apply(AppPrefs.get().theme, t -> {
|
||||
AppPrefs.get().theme.subscribe(t -> {
|
||||
Theme.ALL.forEach(
|
||||
theme -> stage.getScene().getRoot().getStyleClass().remove(theme.getCssId()));
|
||||
if (t == null) {
|
||||
|
@ -56,7 +55,7 @@ public class AppTheme {
|
|||
stage.getScene().getRoot().pseudoClassStateChanged(DARK, t.isDark());
|
||||
});
|
||||
|
||||
SimpleChangeListener.apply(AppPrefs.get().performanceMode(), val -> {
|
||||
AppPrefs.get().performanceMode().subscribe(val -> {
|
||||
stage.getScene().getRoot().pseudoClassStateChanged(PRETTY, !val);
|
||||
stage.getScene().getRoot().pseudoClassStateChanged(PERFORMANCE, val);
|
||||
});
|
||||
|
|
|
@ -47,6 +47,7 @@ public class BaseMode extends OperationMode {
|
|||
AppI18n.init();
|
||||
LicenseProvider.get().init();
|
||||
AppPrefs.initLocal();
|
||||
AppI18n.init();
|
||||
AppCertutilCheck.check();
|
||||
AppAvCheck.check();
|
||||
AppSid.init();
|
||||
|
|
|
@ -6,7 +6,6 @@ import io.xpipe.app.fxcomps.augment.Augment;
|
|||
import io.xpipe.app.fxcomps.augment.GrowAugment;
|
||||
import io.xpipe.app.fxcomps.impl.FancyTooltipAugment;
|
||||
import io.xpipe.app.fxcomps.util.Shortcuts;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.application.Platform;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.geometry.Insets;
|
||||
|
@ -144,7 +143,7 @@ public abstract class Comp<S extends CompStructure<?>> {
|
|||
public Comp<S> hide(ObservableValue<Boolean> o) {
|
||||
return apply(struc -> {
|
||||
var region = struc.get();
|
||||
SimpleChangeListener.apply(o, n -> {
|
||||
o.subscribe(n -> {
|
||||
if (!n) {
|
||||
region.setVisible(true);
|
||||
region.setManaged(true);
|
||||
|
|
|
@ -6,7 +6,6 @@ import io.xpipe.app.fxcomps.CompStructure;
|
|||
import io.xpipe.app.fxcomps.SimpleCompStructure;
|
||||
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.util.Translatable;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
|
@ -72,7 +71,7 @@ public class ChoiceComp<T> extends Comp<CompStructure<ComboBox<T>>> {
|
|||
throw new UnsupportedOperationException();
|
||||
}
|
||||
});
|
||||
SimpleChangeListener.apply(range, c -> {
|
||||
range.subscribe(c -> {
|
||||
var list = FXCollections.observableArrayList(c.keySet());
|
||||
if (!list.contains(null) && includeNone) {
|
||||
list.add(null);
|
||||
|
@ -84,7 +83,7 @@ public class ChoiceComp<T> extends Comp<CompStructure<ComboBox<T>>> {
|
|||
cb.valueProperty().addListener((observable, oldValue, newValue) -> {
|
||||
value.setValue(newValue);
|
||||
});
|
||||
SimpleChangeListener.apply(value, val -> {
|
||||
value.subscribe(val -> {
|
||||
PlatformThread.runLaterIfNeeded(() -> cb.valueProperty().set(val));
|
||||
});
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ import io.xpipe.app.fxcomps.Comp;
|
|||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.SimpleCompStructure;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.collections.FXCollections;
|
||||
|
@ -58,7 +57,7 @@ public class ChoicePaneComp extends Comp<CompStructure<VBox>> {
|
|||
var vbox = new VBox(transformer.apply(cb));
|
||||
vbox.setFillWidth(true);
|
||||
cb.prefWidthProperty().bind(vbox.widthProperty());
|
||||
SimpleChangeListener.apply(cb.valueProperty(), n -> {
|
||||
cb.valueProperty().subscribe(n -> {
|
||||
if (n == null) {
|
||||
if (vbox.getChildren().size() > 1) {
|
||||
vbox.getChildren().remove(1);
|
||||
|
@ -82,7 +81,7 @@ public class ChoicePaneComp extends Comp<CompStructure<VBox>> {
|
|||
cb.valueProperty().addListener((observable, oldValue, newValue) -> {
|
||||
selected.setValue(newValue);
|
||||
});
|
||||
SimpleChangeListener.apply(selected, val -> {
|
||||
selected.subscribe(val -> {
|
||||
PlatformThread.runLaterIfNeeded(() -> cb.valueProperty().set(val));
|
||||
});
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@ import io.xpipe.app.core.AppI18n;
|
|||
import io.xpipe.app.core.AppWindowHelper;
|
||||
import io.xpipe.app.fxcomps.SimpleComp;
|
||||
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.issue.ErrorEvent;
|
||||
import io.xpipe.app.prefs.AppPrefs;
|
||||
import io.xpipe.app.storage.ContextualFileReference;
|
||||
|
@ -39,7 +38,7 @@ public class ContextualFileReferenceChoiceComp extends SimpleComp {
|
|||
public <T extends FileSystemStore> ContextualFileReferenceChoiceComp(
|
||||
ObservableValue<DataStoreEntryRef<T>> fileSystem, Property<String> filePath) {
|
||||
this.fileSystem = new SimpleObjectProperty<>();
|
||||
SimpleChangeListener.apply(fileSystem, val -> {
|
||||
fileSystem.subscribe(val -> {
|
||||
this.fileSystem.setValue(val);
|
||||
});
|
||||
this.filePath = filePath;
|
||||
|
|
|
@ -3,8 +3,10 @@ package io.xpipe.app.fxcomps.impl;
|
|||
import io.xpipe.app.core.AppI18n;
|
||||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.augment.Augment;
|
||||
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.Shortcuts;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.scene.control.Tooltip;
|
||||
|
||||
|
@ -24,11 +26,15 @@ public class FancyTooltipAugment<S extends CompStructure<?>> implements Augment<
|
|||
public void augment(S struc) {
|
||||
var region = struc.get();
|
||||
var tt = new Tooltip();
|
||||
var toDisplay = text.getValue();
|
||||
if (Shortcuts.getDisplayShortcut(region) != null) {
|
||||
toDisplay = toDisplay + "\n\nShortcut: " + Shortcuts.getDisplayShortcut(region).getDisplayText();
|
||||
var s = AppI18n.observable("shortcut");
|
||||
var binding = Bindings.createStringBinding(() -> {
|
||||
return text.getValue() + "\n\n" + s.getValue() + ": " + Shortcuts.getDisplayShortcut(region).getDisplayText();
|
||||
}, text, s);
|
||||
BindingsHelper.bindStrong(tt.textProperty(), binding);
|
||||
} else {
|
||||
BindingsHelper.bindStrong(tt.textProperty(),text);
|
||||
}
|
||||
tt.textProperty().setValue(toDisplay);
|
||||
tt.setStyle("-fx-font-size: 11pt;");
|
||||
tt.setWrapText(true);
|
||||
tt.setMaxWidth(400);
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package io.xpipe.app.fxcomps.impl;
|
||||
|
||||
import io.xpipe.app.core.AppActionLinkDetector;
|
||||
import io.xpipe.app.core.AppI18n;
|
||||
import io.xpipe.app.fxcomps.Comp;
|
||||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.scene.Node;
|
||||
|
@ -28,12 +28,13 @@ public class FilterComp extends Comp<FilterComp.Structure> {
|
|||
@Override
|
||||
public Structure createBase() {
|
||||
var fi = new FontIcon("mdi2m-magnify");
|
||||
var bgLabel = new Label("Search", fi);
|
||||
var bgLabel = new Label(null, fi);
|
||||
bgLabel.textProperty().bind(AppI18n.observable("searchFilter"));
|
||||
bgLabel.getStyleClass().add("filter-background");
|
||||
var filter = new TextField();
|
||||
filter.setAccessibleText("Filter");
|
||||
|
||||
SimpleChangeListener.apply(filterText, val -> {
|
||||
filterText.subscribe(val -> {
|
||||
PlatformThread.runLaterIfNeeded(() -> {
|
||||
if (!Objects.equals(filter.getText(), val)) {
|
||||
filter.setText(val);
|
||||
|
|
|
@ -3,6 +3,7 @@ package io.xpipe.app.fxcomps.impl;
|
|||
import io.xpipe.app.fxcomps.Comp;
|
||||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.SimpleCompStructure;
|
||||
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
|
@ -24,6 +25,7 @@ public class LabelComp extends Comp<CompStructure<Label>> {
|
|||
@Override
|
||||
public CompStructure<Label> createBase() {
|
||||
var label = new Label();
|
||||
BindingsHelper.linkPersistently(label,text);
|
||||
text.subscribe(t -> {
|
||||
PlatformThread.runLaterIfNeeded(() -> label.setText(t));
|
||||
});
|
||||
|
|
|
@ -3,7 +3,6 @@ package io.xpipe.app.fxcomps.impl;
|
|||
import io.xpipe.app.core.AppImages;
|
||||
import io.xpipe.app.fxcomps.SimpleComp;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.issue.TrackEvent;
|
||||
import io.xpipe.app.prefs.AppPrefs;
|
||||
import io.xpipe.core.store.FileNames;
|
||||
|
@ -106,7 +105,7 @@ public class PrettyImageComp extends SimpleComp {
|
|||
}
|
||||
};
|
||||
|
||||
SimpleChangeListener.apply(PlatformThread.sync(value), val -> update.accept(val));
|
||||
PlatformThread.sync(value).subscribe(val -> update.accept(val));
|
||||
AppPrefs.get().theme.addListener((observable, oldValue, newValue) -> {
|
||||
update.accept(value.getValue());
|
||||
});
|
||||
|
|
|
@ -3,7 +3,6 @@ package io.xpipe.app.fxcomps.impl;
|
|||
import io.xpipe.app.core.AppImages;
|
||||
import io.xpipe.app.fxcomps.SimpleComp;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.prefs.AppPrefs;
|
||||
import io.xpipe.core.store.FileNames;
|
||||
import javafx.beans.binding.Bindings;
|
||||
|
@ -92,7 +91,7 @@ public class PrettySvgComp extends SimpleComp {
|
|||
image.set(fixed);
|
||||
};
|
||||
|
||||
SimpleChangeListener.apply(syncValue, val -> update.accept(val));
|
||||
syncValue.subscribe(val -> update.accept(val));
|
||||
AppPrefs.get().theme.addListener((observable, oldValue, newValue) -> {
|
||||
update.accept(syncValue.getValue());
|
||||
});
|
||||
|
|
|
@ -12,7 +12,6 @@ import io.xpipe.app.fxcomps.Comp;
|
|||
import io.xpipe.app.fxcomps.SimpleComp;
|
||||
import io.xpipe.app.fxcomps.augment.ContextMenuAugment;
|
||||
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.storage.DataStorage;
|
||||
import io.xpipe.app.storage.DataStoreCategory;
|
||||
import io.xpipe.app.util.ContextMenuHelper;
|
||||
|
@ -115,7 +114,7 @@ public class StoreCategoryComp extends SimpleComp {
|
|||
var v = new VerticalComp(List.of(categoryButton, children.hide(emptyBinding)));
|
||||
v.styleClass("category");
|
||||
v.apply(struc -> {
|
||||
SimpleChangeListener.apply(StoreViewState.get().getActiveCategory(), val -> {
|
||||
StoreViewState.get().getActiveCategory().subscribe(val -> {
|
||||
struc.get().pseudoClassStateChanged(SELECTED, val.equals(category));
|
||||
});
|
||||
});
|
||||
|
|
|
@ -3,7 +3,6 @@ package io.xpipe.app.fxcomps.impl;
|
|||
import io.xpipe.app.core.AppProperties;
|
||||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.property.SimpleIntegerProperty;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
|
@ -37,7 +36,7 @@ public class SvgView {
|
|||
public static SvgView create(ObservableValue<String> content) {
|
||||
var widthProperty = new SimpleIntegerProperty();
|
||||
var heightProperty = new SimpleIntegerProperty();
|
||||
SimpleChangeListener.apply(content, val -> {
|
||||
content.subscribe(val -> {
|
||||
if (val == null || val.isBlank()) {
|
||||
return;
|
||||
}
|
||||
|
@ -69,7 +68,7 @@ public class SvgView {
|
|||
wv.setDisable(true);
|
||||
|
||||
wv.getEngine().loadContent(svgContent.getValue() != null ? getHtml(svgContent.getValue()) : null);
|
||||
SimpleChangeListener.apply(svgContent, n -> {
|
||||
svgContent.subscribe( n -> {
|
||||
if (n == null) {
|
||||
wv.setOpacity(0.0);
|
||||
return;
|
||||
|
|
|
@ -3,7 +3,6 @@ package io.xpipe.app.fxcomps.impl;
|
|||
import io.xpipe.app.fxcomps.Comp;
|
||||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
|
@ -28,7 +27,7 @@ public class TextAreaComp extends Comp<TextAreaComp.Structure> {
|
|||
this.lastAppliedValue = value;
|
||||
this.currentValue = new SimpleStringProperty(value.getValue());
|
||||
this.lazy = lazy;
|
||||
SimpleChangeListener.apply(value, val -> {
|
||||
value.subscribe(val -> {
|
||||
this.currentValue.setValue(val);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ import io.xpipe.app.fxcomps.Comp;
|
|||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.SimpleCompStructure;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.scene.control.TextField;
|
||||
|
@ -27,7 +26,7 @@ public class TextFieldComp extends Comp<CompStructure<TextField>> {
|
|||
this.currentValue = new SimpleStringProperty(value.getValue());
|
||||
this.lazy = lazy;
|
||||
if (!lazy) {
|
||||
SimpleChangeListener.apply(currentValue, val -> {
|
||||
currentValue.subscribe(val -> {
|
||||
value.setValue(val);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ import io.xpipe.app.fxcomps.Comp;
|
|||
import io.xpipe.app.fxcomps.CompStructure;
|
||||
import io.xpipe.app.fxcomps.SimpleCompStructure;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.scene.control.ToggleButton;
|
||||
|
@ -29,7 +28,7 @@ public class ToggleGroupComp<T> extends Comp<CompStructure<HBox>> {
|
|||
var box = new HBox();
|
||||
box.getStyleClass().add("toggle-group-comp");
|
||||
ToggleGroup group = new ToggleGroup();
|
||||
SimpleChangeListener.apply(PlatformThread.sync(range), val -> {
|
||||
PlatformThread.sync(range).subscribe(val -> {
|
||||
if (!val.containsKey(value.getValue())) {
|
||||
this.value.setValue(null);
|
||||
}
|
||||
|
|
|
@ -45,6 +45,11 @@ public class BindingsHelper {
|
|||
.start();
|
||||
}
|
||||
|
||||
public static <T> void bindStrong(Property<T> property, ObservableValue<T> value) {
|
||||
property.bind(value);
|
||||
linkPersistently(property, value);
|
||||
}
|
||||
|
||||
public static <T, V> void bindExclusive(
|
||||
Property<V> selected, Map<V, ? extends Property<T>> map, Property<T> toBind) {
|
||||
selected.addListener((c, o, n) -> {
|
||||
|
@ -219,7 +224,7 @@ public class BindingsHelper {
|
|||
// public static <T,U> ObservableValue<U> mappedBinding(ObservableValue<T> observableValue, Function<? super T, ?
|
||||
// extends ObservableValue<? extends U>> mapper) {
|
||||
// var v = new SimpleObjectProperty<U>();
|
||||
// SimpleChangeListener.apply(observableValue, val -> {
|
||||
// observableValue, val -> {
|
||||
// v.unbind();
|
||||
// v.bind(mapper.apply(val));
|
||||
// });
|
||||
|
|
|
@ -41,7 +41,7 @@ public class Shortcuts {
|
|||
|
||||
DISPLAY_SHORTCUTS.put(region, comb);
|
||||
AtomicReference<Scene> scene = new AtomicReference<>();
|
||||
SimpleChangeListener.apply(region.sceneProperty(), s -> {
|
||||
region.sceneProperty().subscribe(s -> {
|
||||
if (Objects.equals(s, scene.get())) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
package io.xpipe.app.fxcomps.util;
|
||||
|
||||
import javafx.beans.value.ChangeListener;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface SimpleChangeListener<T> {
|
||||
|
||||
static <T> void apply(ObservableValue<T> obs, SimpleChangeListener<T> cl) {
|
||||
obs.addListener(cl.wrapped());
|
||||
cl.onChange(obs.getValue());
|
||||
}
|
||||
|
||||
void onChange(T val);
|
||||
|
||||
default ChangeListener<T> wrapped() {
|
||||
return (observable, oldValue, newValue) -> this.onChange(newValue);
|
||||
}
|
||||
}
|
|
@ -104,7 +104,7 @@ public class AppPrefs {
|
|||
map(new SimpleBooleanProperty(false), "developerDisableGuiRestrictions", Boolean.class);
|
||||
private final ObservableBooleanValue developerDisableGuiRestrictionsEffective =
|
||||
bindDeveloperTrue(developerDisableGuiRestrictions);
|
||||
private final ObjectProperty<SupportedLocale> language =
|
||||
final ObjectProperty<SupportedLocale> language =
|
||||
map(new SimpleObjectProperty<>(SupportedLocale.ENGLISH), "language", SupportedLocale.class);
|
||||
|
||||
@Getter
|
||||
|
|
|
@ -3,7 +3,6 @@ package io.xpipe.app.prefs;
|
|||
import io.xpipe.app.core.AppFont;
|
||||
import io.xpipe.app.fxcomps.SimpleComp;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.control.ScrollPane;
|
||||
|
@ -28,7 +27,7 @@ public class AppPrefsComp extends SimpleComp {
|
|||
.createRegion();
|
||||
}));
|
||||
var pfxSp = new ScrollPane();
|
||||
SimpleChangeListener.apply(AppPrefs.get().getSelectedCategory(), val -> {
|
||||
AppPrefs.get().getSelectedCategory().subscribe(val -> {
|
||||
PlatformThread.runLaterIfNeeded(() -> {
|
||||
pfxSp.setContent(map.get(val));
|
||||
});
|
||||
|
|
|
@ -6,7 +6,6 @@ import io.xpipe.app.fxcomps.Comp;
|
|||
import io.xpipe.app.fxcomps.SimpleComp;
|
||||
import io.xpipe.app.fxcomps.impl.VerticalComp;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.css.PseudoClass;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.control.Button;
|
||||
|
@ -27,7 +26,7 @@ public class AppPrefsSidebarComp extends SimpleComp {
|
|||
.apply(struc -> {
|
||||
struc.get().setTextAlignment(TextAlignment.LEFT);
|
||||
struc.get().setAlignment(Pos.CENTER_LEFT);
|
||||
SimpleChangeListener.apply(AppPrefs.get().getSelectedCategory(), val -> {
|
||||
AppPrefs.get().getSelectedCategory().subscribe(val -> {
|
||||
struc.get().pseudoClassStateChanged(SELECTED, appPrefsCategory.equals(val));
|
||||
});
|
||||
})
|
||||
|
@ -36,7 +35,8 @@ public class AppPrefsSidebarComp extends SimpleComp {
|
|||
.toList();
|
||||
var vbox = new VerticalComp(buttons).styleClass("sidebar");
|
||||
vbox.apply(struc -> {
|
||||
SimpleChangeListener.apply(PlatformThread.sync(AppPrefs.get().getSelectedCategory()), val -> {
|
||||
AppPrefs.get().getSelectedCategory().subscribe(val -> {
|
||||
PlatformThread.runLaterIfNeeded(() -> {
|
||||
var index = val != null ? AppPrefs.get().getCategories().indexOf(val) : 0;
|
||||
if (index >= struc.get().getChildren().size()) {
|
||||
return;
|
||||
|
@ -45,6 +45,7 @@ public class AppPrefsSidebarComp extends SimpleComp {
|
|||
((Button) struc.get().getChildren().get(index)).fire();
|
||||
});
|
||||
});
|
||||
});
|
||||
return vbox.createRegion();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,8 @@ import io.xpipe.app.fxcomps.impl.IntFieldComp;
|
|||
import io.xpipe.app.util.OptionsBuilder;
|
||||
import javafx.scene.control.Slider;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class AppearanceCategory extends AppPrefsCategory {
|
||||
|
||||
@Override
|
||||
|
@ -22,6 +24,10 @@ public class AppearanceCategory extends AppPrefsCategory {
|
|||
return new OptionsBuilder()
|
||||
.addTitle("uiOptions")
|
||||
.sub(new OptionsBuilder()
|
||||
.nameAndDescription("language")
|
||||
.addComp(
|
||||
ChoiceComp.ofTranslatable(prefs.language, Arrays.asList(SupportedLocale.values()), false),
|
||||
prefs.language)
|
||||
.nameAndDescription("theme")
|
||||
.addComp(
|
||||
ChoiceComp.ofTranslatable(prefs.theme, AppTheme.Theme.ALL, false)
|
||||
|
|
|
@ -11,8 +11,8 @@ import java.util.Locale;
|
|||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum SupportedLocale implements PrefsChoiceValue {
|
||||
ENGLISH(Locale.ENGLISH, "english");
|
||||
// GERMAN(Locale.GERMAN, "german");
|
||||
ENGLISH(Locale.ENGLISH, "english"),
|
||||
GERMAN(Locale.GERMAN, "german");
|
||||
|
||||
private final Locale locale;
|
||||
private final String id;
|
||||
|
|
|
@ -4,7 +4,6 @@ import io.xpipe.app.comp.store.StoreCategoryWrapper;
|
|||
import io.xpipe.app.comp.store.StoreViewState;
|
||||
import io.xpipe.app.fxcomps.SimpleComp;
|
||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.scene.control.ComboBox;
|
||||
|
@ -28,7 +27,7 @@ public class DataStoreCategoryChoiceComp extends SimpleComp {
|
|||
|
||||
@Override
|
||||
protected Region createSimple() {
|
||||
SimpleChangeListener.apply(external, newValue -> {
|
||||
external.subscribe(newValue -> {
|
||||
if (newValue == null) {
|
||||
value.setValue(root);
|
||||
} else if (root == null) {
|
||||
|
|
|
@ -297,7 +297,7 @@ public class OptionsBuilder {
|
|||
|
||||
public OptionsBuilder longDescription(String descriptionKey) {
|
||||
finishCurrent();
|
||||
longDescription = AppI18n.getInstance().getMarkdownDocumentation(descriptionKey);
|
||||
longDescription = AppI18n.get().getMarkdownDocumentation(descriptionKey);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@ import io.xpipe.app.core.AppI18n;
|
|||
import io.xpipe.app.ext.ScanProvider;
|
||||
import io.xpipe.app.fxcomps.Comp;
|
||||
import io.xpipe.app.fxcomps.impl.DataStoreChoiceComp;
|
||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||
import io.xpipe.app.issue.ErrorEvent;
|
||||
import io.xpipe.app.storage.DataStorage;
|
||||
import io.xpipe.app.storage.DataStoreEntry;
|
||||
|
@ -168,7 +167,7 @@ public class ScanAlert {
|
|||
})
|
||||
.padding(new Insets(20));
|
||||
|
||||
SimpleChangeListener.apply(entry, newValue -> {
|
||||
entry.subscribe(newValue -> {
|
||||
selected.clear();
|
||||
stackPane.getChildren().clear();
|
||||
|
||||
|
|
|
@ -1,392 +0,0 @@
|
|||
# Interface
|
||||
addCollection=Add collection
|
||||
newCollection=New collection
|
||||
delete=Delete
|
||||
rename=Rename
|
||||
properties=Properties
|
||||
usedDate=Used $DATE$
|
||||
cols=$COLS$ columns
|
||||
rowsCols=$ROWS$ rows / $COLS$ columns
|
||||
lines=$LINES$ lines
|
||||
objects=$OBJECTS$ objects
|
||||
bytes=$BYTES$ bytes
|
||||
entries=$ENTRIES$ entries
|
||||
unknownLength=Unknown length
|
||||
temporaryCollection=Temporary
|
||||
entrySettings=Settings
|
||||
pipe=Pipe
|
||||
openDir=Open Directory
|
||||
failedToLoad=Failed to Load
|
||||
stores=Stores
|
||||
# Dialogs
|
||||
confirmCollectionDeletionTitle=Confirm collection deletion
|
||||
confirmCollectionDeletionHeader=Do you really want to delete the collection $NAME$?
|
||||
confirmCollectionDeletionContent=This will delete all ($COUNT$) contained data sources as well.
|
||||
retrieveDataSource=Retrieve Data Source
|
||||
# Tooltips
|
||||
addCollectionFolder=Create new collection folder
|
||||
collectionOptions=Collection options
|
||||
addStreamDataSource=Add stream data source
|
||||
addDatabaseDataSource=Add database data source
|
||||
displayList=Display as list
|
||||
displayTiles=Display as tiles
|
||||
sortLastUsed=Sort by last used date
|
||||
sortAlphabetical=Sort alphabetical by name
|
||||
temporaryCollectionNote=All data sources inside the temporary collection are only stored while until the next system restart.
|
||||
storeForLaterUse=Store for later use
|
||||
localFile=Local File
|
||||
network=Network
|
||||
recentFiles=Recent files
|
||||
newDataSource=New data source
|
||||
newDataStore=New data store
|
||||
selectInput=Select Input
|
||||
configure=Configure
|
||||
retrieve=Retrieve
|
||||
internet=Internet
|
||||
table=Table
|
||||
update=Update
|
||||
selectStreamStore=Select Stream Store
|
||||
openStreamStoreWizard=Open Stream Store Wizard
|
||||
updateDataSource=Update Data Source
|
||||
structure=Structure
|
||||
text=Text
|
||||
raw=Raw
|
||||
collection=Collection
|
||||
anyFile=Any file
|
||||
anyStream=Any Stream Type
|
||||
noMatchingStoreFound=No suitable saved store was found
|
||||
addStore=Add Store
|
||||
anyStreamDescription=Or choose specific type
|
||||
restart=Restart XPipe
|
||||
restartDescription=A restart can often be a quick fix
|
||||
reportIssue=Report Issue
|
||||
reportIssueDescription=Open the integrated issue reporter
|
||||
usefulActions=Useful actions
|
||||
stored=Saved
|
||||
troubleshootingOptions=Troubleshooting tools
|
||||
troubleshoot=Troubleshoot
|
||||
remote=Remote File
|
||||
addShellStore=Add Shell ...
|
||||
addShellTitle=Add Shell Connection
|
||||
savedConnections=Saved Connections
|
||||
save=Save
|
||||
clean=Clean
|
||||
refresh=Refresh
|
||||
moveTo=Move to ...
|
||||
addDatabase=Database ...
|
||||
browseInternalStorage=Browse internal storage
|
||||
addTunnel=Tunnel ...
|
||||
addScript=Script ...
|
||||
addHost=Remote Host ...
|
||||
addShell=Shell Environment ...
|
||||
addCommand=Custom Command ...
|
||||
addAutomatically=Search Automatically ...
|
||||
addOther=Add Other ...
|
||||
addStreamTitle=Add Stream Store
|
||||
addConnection=Add Connection
|
||||
skip=Skip
|
||||
addConnections=New
|
||||
selectType=Select Type
|
||||
selectTypeDescription=Select connection type
|
||||
selectDatabaseType=Database Type
|
||||
selectDatabaseTypeDescription=Select Type of the Database
|
||||
selectShellType=Shell Type
|
||||
selectShellTypeDescription=Select the Type of the Shell Connection
|
||||
selectStreamType=Stream Type
|
||||
selectStreamTypeDescription=Select type of the stream
|
||||
name=Name
|
||||
storeIntroTitle=Connection Hub
|
||||
storeIntroDescription=Here you can manage all your local and remote shell connections in one place. To start off, you can quickly detect available connections automatically and choose which ones to add.
|
||||
detectConnections=Search for connections
|
||||
configuration=Configuration
|
||||
dragAndDropFilesHere=Or just drag and drop a file here
|
||||
confirmDsCreationAbortTitle=Confirm abort
|
||||
confirmDsCreationAbortHeader=Do you want to abort the data source creation?
|
||||
confirmDsCreationAbortContent=Any data source creation progress will be lost.
|
||||
confirmInvalidStoreTitle=Failed connection
|
||||
confirmInvalidStoreHeader=Do you want to skip connection validation?
|
||||
confirmInvalidStoreContent=You can add this connection even if it could not be validated and fix the connection problems later on.
|
||||
charset=Charset
|
||||
newLine=Newline
|
||||
crlf=CRLF (Windows)
|
||||
lf=LF (Linux)
|
||||
none=None
|
||||
expand=Expand
|
||||
accessSubConnections=Access sub connections
|
||||
common=Common
|
||||
key=Key
|
||||
color=Color
|
||||
roadmap=Roadmap and feature requests
|
||||
alwaysConfirmElevation=Always confirm elevation
|
||||
alwaysConfirmElevationDescription=Controls how to handle cases when elevated access is required to run a command on a system, e.g. with sudo.\n\nBy default, any sudo credentials are cached during a session and automatically provided when needed. If this option is enabled, it will ask you to confirm the elevation access every time.
|
||||
allow=Allow
|
||||
ask=Ask
|
||||
deny=Deny
|
||||
elevationRequestTitle=Elevation request
|
||||
elevationRequestHeader=A command on $SYSTEM$ requires elevation. Do you want to allow this?
|
||||
elevationRequestDescription=Continuing from here XPipe will try to elevate commands when needed. Aborting will cancel the operation.
|
||||
share=Add to git repository
|
||||
unshare=Remove from git repository
|
||||
remove=Remove
|
||||
newCategory=New subcategory
|
||||
passwordManager=Password manager
|
||||
prompt=Prompt
|
||||
customCommand=Custom command
|
||||
other=Other
|
||||
setLock=Set lock
|
||||
selectConnection=Select connection
|
||||
changeLock=Change passphrase
|
||||
test=Test
|
||||
lockCreationAlertTitle=Set passphrase
|
||||
lockCreationAlertHeader=Set your new master passphrase
|
||||
finish=Finish
|
||||
error=An error occurred
|
||||
downloadStageDescription=Downloads files to your local machine, so you can drag and drop them into your native desktop environment.
|
||||
ok=Ok
|
||||
search=Search
|
||||
newFile=New file
|
||||
newDirectory=New directory
|
||||
passphrase=Passphrase
|
||||
repeatPassphrase=Repeat passphrase
|
||||
password=Password
|
||||
unlockAlertTitle=Unlock workspace
|
||||
unlockAlertHeader=Enter your vault passphrase to continue
|
||||
enterLockPassword=Enter lock password
|
||||
repeatPassword=Repeat password
|
||||
askpassAlertTitle=Askpass
|
||||
nullPointer=Null Pointer
|
||||
unsupportedOperation=Unsupported operation: $MSG$
|
||||
fileConflictAlertTitle=Resolve conflict
|
||||
fileConflictAlertHeader=A conflict was encountered. How would you like to proceed?
|
||||
fileConflictAlertContent=The file $FILE$ does already exist on the target system.
|
||||
fileConflictAlertContentMultiple=The file $FILE$ already exists. There might be more conflicts that you can automatically resolve by choosing an option that applies to all.
|
||||
moveAlertTitle=Confirm move
|
||||
moveAlertHeader=Do you want to move the ($COUNT$) selected elements into $TARGET$?
|
||||
deleteAlertTitle=Confirm deletion
|
||||
deleteAlertHeader=Do you want to delete the ($COUNT$) selected elements?
|
||||
selectedElements=Selected elements:
|
||||
mustNotBeEmpty=$VALUE$ must not be empty
|
||||
valueMustNotBeEmpty=Value must not be empty
|
||||
transferDescription=Drop files to transfer
|
||||
dragFiles=Drag files within browser
|
||||
dragLocalFiles=Drag local files from here
|
||||
null=$VALUE$ must be not null
|
||||
roots=Roots
|
||||
terminator=Terminator
|
||||
kitty=Kitty
|
||||
terminology=Terminology
|
||||
coolRetroTerm=Cool Retro Term
|
||||
guake=Guake
|
||||
alacritty=Alacritty
|
||||
tilda=Tilda
|
||||
xterm=XTerm
|
||||
deepinTerminal=Deepin Terminal
|
||||
qTerminal=QTerminal
|
||||
recent=Recent
|
||||
hostFeatureUnsupported=$FEATURE$ is not installed on the host
|
||||
missingStore=$NAME$ does not exist
|
||||
connectionName=Connection name
|
||||
connectionNameDescription=Give this connection a custom name
|
||||
openFileTitle=Open file
|
||||
unknown=Unknown
|
||||
scanAlertTitle=Add connections
|
||||
scanAlertChoiceHeader=Target
|
||||
scanAlertChoiceHeaderDescription=Choose where to search for connections. This will look for all available connections first.
|
||||
scanAlertHeader=Connection types
|
||||
scanAlertHeaderDescription=Select types of connections you want to automatically add for the system.
|
||||
namedHostFeatureUnsupported=$HOST$ does not support this feature
|
||||
namedHostNotActive=$HOST$ is not active
|
||||
noInformationAvailable=No information available
|
||||
localMachine=Local Machine
|
||||
input=Input
|
||||
output=Output
|
||||
inout=Transformation
|
||||
inputDescription=This store only produces input for data sources to read
|
||||
outputDescription=This store only accepts output from data sources to write
|
||||
inoutDescription=This store uses both input and output to essentially create a data transformation
|
||||
replace=Replace
|
||||
append=Append
|
||||
prepend=Prepend
|
||||
replaceDescription=Replaces all content
|
||||
appendDescription=Appends the new content to the existing content
|
||||
prependDescription=Prepends the new content to the existing content
|
||||
yes=Yes
|
||||
no=No
|
||||
connectorInstallationTitle=XPipe Connector
|
||||
connectorInstallationHeader=Would you like to install the XPipe connector on that host?
|
||||
connectorInstallationContent=Some operations require the XPipe connector to be installed on the host. Note that this operation may take some time.
|
||||
errorOccured=An error occured
|
||||
terminalErrorOccured=A terminal error occured
|
||||
errorTypeOccured=An exception of type $TYPE$ was thrown
|
||||
permissionsAlertTitle=Permissions required
|
||||
permissionsAlertHeader=Additional permissions are required to perform this operation.
|
||||
permissionsAlertContent=Please follow the pop-up to give XPipe the required permissions in the settings menu.
|
||||
errorDetails=Show details
|
||||
target=Target
|
||||
data=Data
|
||||
more=More
|
||||
pipeDataSource=Pipe Data Source
|
||||
updateReadyAlertTitle=Update Ready
|
||||
updateReadyAlertHeader=An update to version $VERSION$ is ready to be installed
|
||||
updateReadyAlertContent=This will install the new version and restart XPipe once the installation finished.
|
||||
errorNoDetail=No error details are available
|
||||
updateAvailableTitle=Update Available
|
||||
updateAvailableHeader=An XPipe update to version $VERSION$ is available to install
|
||||
updateAvailableContent=Even though XPipe could not be started, you can attempt to install the update to potentially fix the issue.
|
||||
clipboardActionDetectedTitle=Clipboard Action detected
|
||||
clipboardActionDetectedHeader=Do you want to import your clipboard content?
|
||||
clipboardActionDetectedContent=XPipe detected content in your clipboard that can be opened. Do you want to open it now?
|
||||
install=Install ...
|
||||
ignore=Ignore
|
||||
possibleActions=Possible actions
|
||||
reportError=Report error
|
||||
reportOnGithub=Report on GitHub
|
||||
reportOnGithubDescription=Open a new issue in the GitHub repository
|
||||
reportErrorDescription=Send an error report with optional user feedback and diagnostics info
|
||||
ignoreError=Ignore error
|
||||
ignoreErrorDescription=Ignore this error and continue like nothing happened
|
||||
provideEmail=How to contact you (optional, only if you want to get notified about fixes)
|
||||
additionalErrorInfo=Provide additional information (optional)
|
||||
additionalErrorAttachments=Select attachments (optional)
|
||||
dataHandlingPolicies=Privacy policy
|
||||
sendReport=Send report
|
||||
errorHandler=Error handler
|
||||
events=Events
|
||||
method=Method
|
||||
validate=Validate
|
||||
confirmTableMappingTitle=Confirm Table Mapping
|
||||
confirmTableMapping=Please confirm the automatically determined table mapping:
|
||||
changeTableMapping=In case you are not satisfied with this mapping, take a look at how to customize data flows:
|
||||
discarded=Discarded
|
||||
stackTrace=Stack trace
|
||||
previousStep=< Previous
|
||||
nextStep=Next >
|
||||
finishStep=Finish
|
||||
machine=Machine
|
||||
noMatchingSourceFound=No matching source found
|
||||
addSource=Add Source
|
||||
edit=Edit
|
||||
addStream=Add File
|
||||
pipeStream=Pipe File
|
||||
pipeDatabase=Pipe Database
|
||||
transfer=Transfer
|
||||
browseInternal=Browse Internal
|
||||
checkOutUpdate=Check out update
|
||||
# Tray
|
||||
open=Open
|
||||
quit=Quit
|
||||
# DS preview
|
||||
normal=Normal
|
||||
normalDescription=The data source contents are queried from the original source each time it is accessed.
|
||||
cached=Cache
|
||||
cachedDescription=The data source contents are cached, i.e. stored temporarily such that the original data source does not have to accessed every time. The caching state can be refreshed at any time.
|
||||
managed=Manage copy
|
||||
editDataSource=Edit Data Source
|
||||
managedDescription=The data source contents are copied to an internally managed file, i.e. the original data source is never accessed again after creation.
|
||||
storageType=Access mode:
|
||||
setupGuide=Guide
|
||||
recentlyUsed=Recently used
|
||||
programmingLanguages=Programming languages
|
||||
applications=Applications
|
||||
addMore=Add more
|
||||
vscode=Visual Studio Code
|
||||
vscodium=VSCodium
|
||||
vscodeInsiders=Visual Studio Code Insiders
|
||||
kate=Kate
|
||||
gedit=GEdit
|
||||
gnomeTextEditor=Gnome Text Editor
|
||||
leafpad=Leafpad
|
||||
mousepad=Mousepad
|
||||
pluma=Pluma
|
||||
noTerminalSet=No terminal application has been set automatically. You can do so manually in the settings menu.
|
||||
textEdit=Text Edit
|
||||
sublime=Sublime Text
|
||||
newTable=new_table
|
||||
editRaw=Edit Raw
|
||||
file=File
|
||||
# Sidebar
|
||||
overview=Sources
|
||||
connections=Connections
|
||||
settings=Settings
|
||||
explorePlans=License
|
||||
help=Help
|
||||
account=Account
|
||||
about=About
|
||||
developer=Developer
|
||||
# Comps
|
||||
browseFileTitle=Browse file
|
||||
browse=Browse
|
||||
browser=Browser
|
||||
selectFileFromComputer=Select a file from this computer
|
||||
# About
|
||||
links=Useful links
|
||||
website=Website
|
||||
documentation=Documentation
|
||||
discord=Discord
|
||||
discordDescription=Join the Discord server
|
||||
security=Security
|
||||
securityPolicy=Security information
|
||||
securityPolicyDescription=Read the detailed security policy
|
||||
privacy=Privacy Policy
|
||||
privacyDescription=Read the privacy policy for the XPipe application
|
||||
slack=Slack
|
||||
slackDescription=Join the Slack workspace
|
||||
support=Support
|
||||
github=GitHub
|
||||
githubDescription=Check out the GitHub repository
|
||||
openSourceNotices=Open Source Notices
|
||||
xPipeClient=XPipe Desktop
|
||||
checkForUpdates=Check for updates
|
||||
checkForUpdatesDescription=Download an update if there is one
|
||||
lastChecked=Last checked
|
||||
version=Version
|
||||
build=Build
|
||||
runtimeVersion=Runtime version
|
||||
virtualMachine=Virtual machine
|
||||
updateReady=Install update
|
||||
updateReadyPortable=Check out update
|
||||
updateReadyDescription=An update was downloaded and is ready to be installed
|
||||
updateReadyDescriptionPortable=An update is available to download
|
||||
updateRestart=Restart to update
|
||||
never=Never
|
||||
updateAvailableTooltip=Update available
|
||||
visitGithubRepository=Visit GitHub repository
|
||||
updateAvailable=Update available: $VERSION$
|
||||
downloadUpdate=Download update
|
||||
legalAccept=I accept the End User License Agreement
|
||||
confirm=Confirm
|
||||
print=Print
|
||||
whatsNew=What's new in version $VERSION$ ($DATE$)
|
||||
antivirusNoticeTitle=A note on Antivirus programs
|
||||
malwarebytesNoticeTitle=A note on Malwarebytes
|
||||
updateChangelogAlertTitle=Changelog
|
||||
greetingsAlertTitle=Welcome to XPipe
|
||||
gotIt=Got It
|
||||
eula=End User License Agreement
|
||||
news=News
|
||||
introduction=Introduction
|
||||
privacyPolicy=Privacy Policy
|
||||
agree=Agree
|
||||
disagree=Disagree
|
||||
directories=Directories
|
||||
logFile=Log File
|
||||
logFiles=Log Files
|
||||
logFilesAttachment=Log Files
|
||||
issueReporter=Issue Reporter
|
||||
openCurrentLogFile=Log files
|
||||
openCurrentLogFileDescription=Open the log file of the current session
|
||||
openLogsDirectory=Open logs directory
|
||||
installationFiles=Installation Files
|
||||
openInstallationDirectory=Installation files
|
||||
openInstallationDirectoryDescription=Open XPipe installation directory
|
||||
launchDebugMode=Debug mode
|
||||
launchDebugModeDescription=Restart XPipe in debug mode
|
||||
extensionInstallTitle=Download
|
||||
extensionInstallDescription=This action requires additional third party libraries that are not distributed by XPipe. You can automatically install them here. The components are then downloaded from the vendor website:
|
||||
extensionInstallLicenseNote=By performing the download and automatic installation you agree to the terms of the third party licenses:
|
||||
license=License
|
||||
installRequired=Installation Required
|
||||
restore=Restore
|
||||
restoreAllSessions=Restore all sessions
|
||||
|
||||
|
|
@ -104,6 +104,7 @@ project.ext {
|
|||
if (signingPassword == null) {
|
||||
signingPassword = ''
|
||||
}
|
||||
deeplApiKey = findProperty('DEEPL_API_KEY')
|
||||
}
|
||||
|
||||
if (org.gradle.internal.os.OperatingSystem.current() == org.gradle.internal.os.OperatingSystem.LINUX) {
|
||||
|
|
|
@ -295,6 +295,22 @@ public class XPipeInstallation {
|
|||
return path;
|
||||
}
|
||||
|
||||
public static Path getLangPath() {
|
||||
if (!ModuleHelper.isImage()) {
|
||||
return getCurrentInstallationBasePath().resolve("lang");
|
||||
}
|
||||
|
||||
var install = getCurrentInstallationBasePath();
|
||||
var type = OsType.getLocal();
|
||||
if (type.equals(OsType.WINDOWS)) {
|
||||
return install.resolve("app").resolve("lang");
|
||||
} else if (type.equals(OsType.LINUX)) {
|
||||
return install.resolve("app").resolve("lang");
|
||||
} else {
|
||||
return install.resolve("Contents").resolve("Resources").resolve("lang");
|
||||
}
|
||||
}
|
||||
|
||||
public static Path getBundledFontsPath() {
|
||||
if (!ModuleHelper.isImage()) {
|
||||
return Path.of("dist", "fonts");
|
||||
|
|
1
dist/build.gradle
vendored
1
dist/build.gradle
vendored
|
@ -91,6 +91,7 @@ if (rootProject.fullVersion) {
|
|||
apply from: 'choco.gradle'
|
||||
apply from: 'winget.gradle'
|
||||
apply from: 'install.gradle'
|
||||
apply from: 'i18n.gradle'
|
||||
|
||||
signing {
|
||||
useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
displayName=Mein Dateiformat
|
||||
description=Meine Dateiformat-Beschreibung
|
||||
fileName=Mein Dateiformat Datei
|
56
lang/app/strings/fixed_en.properties
Normal file
56
lang/app/strings/fixed_en.properties
Normal file
|
@ -0,0 +1,56 @@
|
|||
cmd=cmd.exe
|
||||
powershell=Powershell
|
||||
pwsh=Powershell Core
|
||||
windowsTerminal=Windows Terminal
|
||||
windowsTerminalPreview=Windows Terminal Preview
|
||||
gnomeTerminal=Gnome Terminal
|
||||
createLock=Create lock
|
||||
tilix=Tilix
|
||||
wezterm=WezTerm
|
||||
konsole=Konsole
|
||||
xfce=Xfce 4
|
||||
elementaryTerminal=Elementary Terminal
|
||||
macosTerminal=Terminal.app
|
||||
iterm2=iTerm2
|
||||
warp=Warp
|
||||
tabby=Tabby
|
||||
alacritty=Alacritty
|
||||
alacrittyMacOs=Alacritty
|
||||
kittyMacOs=Kitty
|
||||
bbedit=BBEdit
|
||||
fleet=Fleet
|
||||
intellij=IntelliJ IDEA
|
||||
pycharm=PyCharm
|
||||
webstorm=WebStorm
|
||||
clion=CLion
|
||||
tabbyMacOs=Tabby
|
||||
notepad++=Notepad++
|
||||
notepad++Windows=Notepad++
|
||||
notepad++Linux=Notepad++
|
||||
notepad=Notepad
|
||||
terminator=Terminator
|
||||
kitty=Kitty
|
||||
terminology=Terminology
|
||||
coolRetroTerm=Cool Retro Term
|
||||
guake=Guake
|
||||
tilda=Tilda
|
||||
xterm=XTerm
|
||||
deepinTerminal=Deepin Terminal
|
||||
qTerminal=QTerminal
|
||||
vscode=Visual Studio Code
|
||||
vscodium=VSCodium
|
||||
vscodeInsiders=Visual Studio Code Insiders
|
||||
kate=Kate
|
||||
gedit=GEdit
|
||||
gnomeTextEditor=Gnome Text Editor
|
||||
leafpad=Leafpad
|
||||
mousepad=Mousepad
|
||||
pluma=Pluma
|
||||
textEdit=Text Edit
|
||||
sublime=Sublime Text
|
||||
customTerminalPlaceholder=myterminal -e $CMD
|
||||
customEditorPlaceholder=myeditor $FILE
|
||||
nullPointer=Null Pointer
|
||||
discord=Discord
|
||||
slack=Slack
|
||||
github=GitHub
|
407
lang/app/strings/translations_de.properties
Normal file
407
lang/app/strings/translations_de.properties
Normal file
|
@ -0,0 +1,407 @@
|
|||
delete=Löschen
|
||||
rename=Umbenennen
|
||||
properties=Eigenschaften
|
||||
usedDate=Verwendet $DATE$
|
||||
openDir=Verzeichnis öffnen
|
||||
sortLastUsed=Nach dem Datum der letzten Verwendung sortieren
|
||||
sortAlphabetical=Alphabetisch nach Namen sortieren
|
||||
restart=XPipe neu starten
|
||||
restartDescription=Ein Neustart kann oft eine schnelle Lösung sein
|
||||
reportIssue=Bericht Ausgabe
|
||||
reportIssueDescription=Öffne den integrierten Issue Reporter
|
||||
usefulActions=Nützliche Aktionen
|
||||
stored=Gespeicherte
|
||||
troubleshootingOptions=Werkzeuge zur Fehlersuche
|
||||
troubleshoot=Fehlerbehebung
|
||||
remote=Entfernte Datei
|
||||
addShellStore=Shell hinzufügen ...
|
||||
addShellTitle=Shell-Verbindung hinzufügen
|
||||
savedConnections=Gespeicherte Verbindungen
|
||||
save=Speichern
|
||||
clean=Reinigen
|
||||
refresh=Aktualisieren
|
||||
moveTo=Wechseln zu ...
|
||||
addDatabase=Datenbank ...
|
||||
browseInternalStorage=Internen Speicher durchsuchen
|
||||
addTunnel=Tunnel ...
|
||||
addScript=Skript ...
|
||||
#custom
|
||||
addHost=Remote Host ...
|
||||
addShell=Shell-Umgebung ...
|
||||
addCommand=Benutzerdefinierter Befehl ...
|
||||
addAutomatically=Automatisch suchen ...
|
||||
addOther=Andere hinzufügen ...
|
||||
addConnection=Verbindung hinzufügen
|
||||
skip=Überspringen
|
||||
addConnections=Neu
|
||||
selectType=Typ auswählen
|
||||
selectTypeDescription=Verbindungstyp auswählen
|
||||
selectShellType=Shell-Typ
|
||||
selectShellTypeDescription=Wählen Sie den Typ der Shell-Verbindung
|
||||
name=Name
|
||||
storeIntroTitle=Verbindungs-Hub
|
||||
storeIntroDescription=Hier kannst du alle deine lokalen und entfernten Shell-Verbindungen an einem Ort verwalten. Für den Anfang kannst du verfügbare Verbindungen schnell und automatisch erkennen und auswählen, welche du hinzufügen möchtest.
|
||||
detectConnections=Suche nach Verbindungen
|
||||
configuration=Konfiguration
|
||||
dragAndDropFilesHere=Oder ziehe eine Datei einfach per Drag & Drop hierher
|
||||
confirmDsCreationAbortTitle=Abbruch bestätigen
|
||||
confirmDsCreationAbortHeader=Willst du die Erstellung der Datenquelle abbrechen?
|
||||
confirmDsCreationAbortContent=Alle Fortschritte bei der Erstellung von Datenquellen gehen verloren.
|
||||
confirmInvalidStoreTitle=Fehlgeschlagene Verbindung
|
||||
confirmInvalidStoreHeader=Willst du die Verbindungsüberprüfung überspringen?
|
||||
confirmInvalidStoreContent=Du kannst diese Verbindung hinzufügen, auch wenn sie nicht validiert werden konnte, und die Verbindungsprobleme später beheben.
|
||||
none=Keine
|
||||
expand=Erweitern Sie
|
||||
accessSubConnections=Zugang zu Unterverbindungen
|
||||
common=Allgemein
|
||||
color=Farbe
|
||||
alwaysConfirmElevation=Höhe immer bestätigen
|
||||
alwaysConfirmElevationDescription=Legt fest, wie mit Fällen umgegangen werden soll, in denen erhöhter Zugriff erforderlich ist, um einen Befehl auf einem System auszuführen, z. B. mit sudo.\n\ Standardmäßig werden alle sudo-Anmeldedaten während einer Sitzung zwischengespeichert und bei Bedarf automatisch bereitgestellt. Wenn diese Option aktiviert ist, wirst du jedes Mal aufgefordert, den erweiterten Zugriff zu bestätigen.
|
||||
allow=Erlaube
|
||||
ask=Frag
|
||||
deny=Verweigern
|
||||
share=Zum Git-Repository hinzufügen
|
||||
unshare=Aus dem Git-Repository entfernen
|
||||
remove=Entfernen
|
||||
newCategory=Neue Unterkategorie
|
||||
passwordManager=Passwort-Manager
|
||||
prompt=Eingabeaufforderung
|
||||
customCommand=Benutzerdefinierter Befehl
|
||||
other=Andere
|
||||
setLock=Sperre setzen
|
||||
selectConnection=Verbindung auswählen
|
||||
changeLock=Passphrase ändern
|
||||
test=Test
|
||||
lockCreationAlertTitle=Passphrase festlegen
|
||||
lockCreationAlertHeader=Lege deine neue Master-Passphrase fest
|
||||
finish=Beende
|
||||
error=Ein Fehler ist aufgetreten
|
||||
downloadStageDescription=Lädt Dateien auf deinen lokalen Rechner herunter, damit du sie per Drag & Drop in deine native Desktopumgebung ziehen kannst.
|
||||
ok=Ok
|
||||
search=Suche
|
||||
newFile=Neue Datei
|
||||
newDirectory=Neues Verzeichnis
|
||||
passphrase=Passphrase
|
||||
repeatPassphrase=Passphrase wiederholen
|
||||
password=Passwort
|
||||
unlockAlertTitle=Arbeitsbereich freischalten
|
||||
unlockAlertHeader=Gib deine Tresor-Passphrase ein, um fortzufahren
|
||||
enterLockPassword=Passwort für die Sperre eingeben
|
||||
repeatPassword=Passwort wiederholen
|
||||
askpassAlertTitle=Askpass
|
||||
unsupportedOperation=Nicht unterstützte Operation: $MSG$
|
||||
fileConflictAlertTitle=Konflikt auflösen
|
||||
fileConflictAlertHeader=Es ist ein Konflikt aufgetreten. Wie möchtest du vorgehen?
|
||||
fileConflictAlertContent=Die Datei $FILE$ existiert bereits auf dem Zielsystem.
|
||||
fileConflictAlertContentMultiple=Die Datei $FILE$ existiert bereits. Es kann weitere Konflikte geben, die du automatisch lösen kannst, indem du eine Option wählst, die für alle gilt.
|
||||
moveAlertTitle=Umzug bestätigen
|
||||
moveAlertHeader=Willst du die ($COUNT$) ausgewählten Elemente in $TARGET$ verschieben?
|
||||
deleteAlertTitle=Bestätigung der Löschung
|
||||
deleteAlertHeader=Willst du die ($COUNT$) ausgewählten Elemente löschen?
|
||||
selectedElements=Ausgewählte Elemente:
|
||||
mustNotBeEmpty=$VALUE$ darf nicht leer sein
|
||||
valueMustNotBeEmpty=Der Wert darf nicht leer sein
|
||||
transferDescription=Dateien zum Übertragen ablegen
|
||||
dragFiles=Dateien im Browser ziehen
|
||||
dragLocalFiles=Lokale Dateien von hier ziehen
|
||||
null=$VALUE$ muss nicht null sein
|
||||
roots=Wurzeln
|
||||
scripts=Skripte
|
||||
searchFilter=Suche ...
|
||||
recent=Zuletzt
|
||||
shortcut=Shortcut
|
||||
browserWelcomeEmpty=Hier kannst du sehen, wo du beim letzten Mal aufgehört hast.
|
||||
browserWelcomeSystems=Du warst vor kurzem mit den folgenden Systemen verbunden:
|
||||
hostFeatureUnsupported=$FEATURE$ ist nicht auf dem Host installiert
|
||||
missingStore=$NAME$ gibt es nicht
|
||||
connectionName=Name der Verbindung
|
||||
connectionNameDescription=Gib dieser Verbindung einen eigenen Namen
|
||||
openFileTitle=Datei öffnen
|
||||
unknown=Unbekannt
|
||||
scanAlertTitle=Verbindungen hinzufügen
|
||||
scanAlertChoiceHeader=Ziel
|
||||
scanAlertChoiceHeaderDescription=Wähle aus, wo du nach Verbindungen suchen willst. Es wird zuerst nach allen verfügbaren Verbindungen gesucht.
|
||||
scanAlertHeader=Verbindungsarten
|
||||
scanAlertHeaderDescription=Wähle die Arten von Verbindungen aus, die du automatisch für das System hinzufügen möchtest.
|
||||
noInformationAvailable=Keine Informationen verfügbar
|
||||
localMachine=Lokale Maschine
|
||||
yes=Ja
|
||||
no=Nein
|
||||
errorOccured=Ein Fehler ist aufgetreten
|
||||
terminalErrorOccured=Ein Terminalfehler ist aufgetreten
|
||||
errorTypeOccured=Eine Ausnahme des Typs $TYPE$ wurde ausgelöst
|
||||
permissionsAlertTitle=Erforderliche Berechtigungen
|
||||
permissionsAlertHeader=Für die Durchführung dieses Vorgangs sind zusätzliche Berechtigungen erforderlich.
|
||||
permissionsAlertContent=Bitte folge dem Pop-up, um XPipe im Einstellungsmenü die erforderlichen Berechtigungen zu erteilen.
|
||||
errorDetails=Details anzeigen
|
||||
updateReadyAlertTitle=Update bereit
|
||||
updateReadyAlertHeader=Ein Update auf die Version $VERSION$ ist bereit zur Installation
|
||||
updateReadyAlertContent=Dadurch wird die neue Version installiert und XPipe neu gestartet, sobald die Installation abgeschlossen ist.
|
||||
errorNoDetail=Es sind keine Fehlerdetails verfügbar
|
||||
updateAvailableTitle=Update verfügbar
|
||||
updateAvailableHeader=Ein XPipe-Update auf die Version $VERSION$ steht zur Installation bereit
|
||||
updateAvailableContent=Auch wenn XPipe nicht gestartet werden konnte, kannst du versuchen, das Update zu installieren, um das Problem möglicherweise zu beheben.
|
||||
clipboardActionDetectedTitle=Zwischenablage Aktion erkannt
|
||||
clipboardActionDetectedHeader=Willst du den Inhalt deiner Zwischenablage importieren?
|
||||
clipboardActionDetectedContent=XPipe hat einen Inhalt in deiner Zwischenablage gefunden, der geöffnet werden kann. Willst du ihn jetzt öffnen?
|
||||
install=Installieren ...
|
||||
ignore=Ignorieren
|
||||
possibleActions=Mögliche Aktionen
|
||||
reportError=Fehler melden
|
||||
reportOnGithub=Bericht auf GitHub
|
||||
reportOnGithubDescription=Eröffne ein neues Thema im GitHub-Repository
|
||||
reportErrorDescription=Senden eines Fehlerberichts mit optionalem Benutzerfeedback und Diagnoseinformationen
|
||||
ignoreError=Fehler ignorieren
|
||||
ignoreErrorDescription=Ignoriere diesen Fehler und mach weiter, als wäre nichts passiert
|
||||
provideEmail=Wie kann ich dich kontaktieren (optional, nur wenn du über Korrekturen benachrichtigt werden möchtest)
|
||||
additionalErrorInfo=Zusätzliche Informationen bereitstellen (optional)
|
||||
additionalErrorAttachments=Anhänge auswählen (optional)
|
||||
dataHandlingPolicies=Datenschutzrichtlinie
|
||||
sendReport=Bericht senden
|
||||
errorHandler=Fehlerhandler
|
||||
events=Ereignisse
|
||||
method=Methode
|
||||
validate=Validieren
|
||||
stackTrace=Stack-Trace
|
||||
previousStep=< Vorherige
|
||||
nextStep=Weiter >
|
||||
finishStep=Beende
|
||||
edit=Bearbeiten
|
||||
browseInternal=Intern durchsuchen
|
||||
checkOutUpdate=Update auschecken
|
||||
open=Öffnen
|
||||
quit=Beenden
|
||||
noTerminalSet=Es wurde keine Terminalanwendung automatisch eingestellt. Du kannst dies manuell im Einstellungsmenü tun.
|
||||
connections=Verbindungen
|
||||
settings=Einstellungen
|
||||
explorePlans=Lizenz
|
||||
help=Hilfe
|
||||
about=Über
|
||||
developer=Entwickler
|
||||
browseFileTitle=Datei durchsuchen
|
||||
browse=Durchsuchen
|
||||
browser=Browser
|
||||
selectFileFromComputer=Eine Datei von diesem Computer auswählen
|
||||
links=Nützliche Links
|
||||
website=Website
|
||||
documentation=Dokumentation
|
||||
discordDescription=Dem Discord-Server beitreten
|
||||
security=Sicherheit
|
||||
securityPolicy=Sicherheitsinformationen
|
||||
securityPolicyDescription=Lies die detaillierte Sicherheitsrichtlinie
|
||||
privacy=Datenschutzrichtlinie
|
||||
privacyDescription=Lies die Datenschutzbestimmungen für die XPipe-Anwendung
|
||||
slackDescription=Dem Slack-Arbeitsbereich beitreten
|
||||
support=Unterstützung
|
||||
githubDescription=Schau dir das GitHub-Repository an
|
||||
openSourceNotices=Open-Source-Hinweise
|
||||
xPipeClient=XPipe Desktop
|
||||
checkForUpdates=Nach Updates suchen
|
||||
checkForUpdatesDescription=Ein Update herunterladen, wenn es eins gibt
|
||||
lastChecked=Zuletzt geprüft
|
||||
version=Version
|
||||
build=Version erstellen
|
||||
runtimeVersion=Laufzeitversion
|
||||
virtualMachine=Virtuelle Maschine
|
||||
updateReady=Update installieren
|
||||
updateReadyPortable=Update auschecken
|
||||
updateReadyDescription=Ein Update wurde heruntergeladen und ist bereit zur Installation
|
||||
updateReadyDescriptionPortable=Ein Update ist zum Download verfügbar
|
||||
updateRestart=Neustart zur Aktualisierung
|
||||
never=Niemals
|
||||
updateAvailableTooltip=Update verfügbar
|
||||
visitGithubRepository=GitHub Repository besuchen
|
||||
updateAvailable=Update verfügbar: $VERSION$
|
||||
downloadUpdate=Update herunterladen
|
||||
legalAccept=Ich akzeptiere die Endbenutzer-Lizenzvereinbarung
|
||||
confirm=Bestätige
|
||||
print=Drucken
|
||||
whatsNew=Was ist neu in der Version $VERSION$ ($DATE$)
|
||||
antivirusNoticeTitle=Ein Hinweis auf Antivirenprogramme
|
||||
updateChangelogAlertTitle=Changelog
|
||||
greetingsAlertTitle=Willkommen bei XPipe
|
||||
gotIt=Verstanden
|
||||
eula=Endbenutzer-Lizenzvertrag
|
||||
news=Nachrichten
|
||||
introduction=Einführung
|
||||
privacyPolicy=Datenschutzrichtlinie
|
||||
agree=Zustimmen
|
||||
disagree=Widerspreche
|
||||
directories=Verzeichnisse
|
||||
logFile=Log-Datei
|
||||
logFiles=Log-Dateien
|
||||
logFilesAttachment=Log-Dateien
|
||||
issueReporter=Ausgabe Reporter
|
||||
openCurrentLogFile=Log-Dateien
|
||||
openCurrentLogFileDescription=Die Protokolldatei der aktuellen Sitzung öffnen
|
||||
openLogsDirectory=Logs-Verzeichnis öffnen
|
||||
installationFiles=Installationsdateien
|
||||
openInstallationDirectory=Installationsdateien
|
||||
openInstallationDirectoryDescription=XPipe-Installationsverzeichnis öffnen
|
||||
launchDebugMode=Debug-Modus
|
||||
launchDebugModeDescription=XPipe im Debug-Modus neu starten
|
||||
extensionInstallTitle=Herunterladen
|
||||
extensionInstallDescription=Diese Aktion erfordert zusätzliche Bibliotheken von Drittanbietern, die nicht von XPipe vertrieben werden. Du kannst sie hier automatisch installieren. Die Komponenten werden dann von der Website des Anbieters heruntergeladen:
|
||||
extensionInstallLicenseNote=Durch das Herunterladen und die automatische Installation erklärst du dich mit den Bedingungen der Lizenzen von Drittanbietern einverstanden:
|
||||
license=Lizenz
|
||||
installRequired=Installation erforderlich
|
||||
restore=Wiederherstellen
|
||||
restoreAllSessions=Alle Sitzungen wiederherstellen
|
||||
connectionTimeout=Zeitüberschreitung beim Verbindungsstart
|
||||
connectionTimeoutDescription=Die Zeit in Sekunden, die auf eine Antwort gewartet wird, bevor eine Verbindung als beendet gilt. Wenn einige deiner Fernsysteme lange brauchen, um sich zu verbinden, kannst du versuchen, diesen Wert zu erhöhen.
|
||||
useBundledTools=Gebündelte OpenSSH-Tools verwenden
|
||||
useBundledToolsDescription=Ziehe die gebündelte Version des openssh-Clients deiner lokal installierten Version vor.\n\nDiese Version ist in der Regel aktueller als die auf deinem System mitgelieferte und unterstützt möglicherweise zusätzliche Funktionen. Damit entfällt auch die Notwendigkeit, diese Tools überhaupt zu installieren.\n\nZur Anwendung ist ein Neustart erforderlich.
|
||||
appearance=Erscheinungsbild
|
||||
integrations=Integrationen
|
||||
uiOptions=UI Optionen
|
||||
theme=Thema
|
||||
localShell=Lokale Shell
|
||||
themeDescription=Dein bevorzugtes Anzeigethema
|
||||
dontAutomaticallyStartVmSshServer=SSH-Server für VMs bei Bedarf nicht automatisch starten
|
||||
dontAutomaticallyStartVmSshServerDescription=Jede Shell-Verbindung zu einer VM, die in einem Hypervisor läuft, wird über SSH hergestellt. XPipe kann bei Bedarf automatisch den installierten SSH-Server starten. Wenn du das aus Sicherheitsgründen nicht möchtest, kannst du dieses Verhalten mit dieser Option einfach deaktivieren.
|
||||
confirmGitShareTitle=Bestätige die Git-Freigabe
|
||||
confirmGitShareHeader=Dadurch wird die Datei in deinen Git-Datenspeicher kopiert und deine Änderungen werden übertragen. Willst du fortfahren?
|
||||
gitShareFileTooltip=Datei zum Git Vault-Datenverzeichnis hinzufügen, damit sie automatisch synchronisiert wird.\n\n Diese Aktion kann nur verwendet werden, wenn der Git Vault in den Einstellungen aktiviert ist.
|
||||
performanceMode=Leistungsmodus
|
||||
performanceModeDescription=Deaktiviert alle visuellen Effekte, die nicht zur Verbesserung der Anwendungsleistung erforderlich sind.
|
||||
dontAcceptNewHostKeys=Neue SSH-Hostschlüssel nicht automatisch akzeptieren
|
||||
dontAcceptNewHostKeysDescription=XPipe akzeptiert standardmäßig automatisch Hostschlüssel von Systemen, auf denen dein SSH-Client keinen bekannten Hostschlüssel gespeichert hat. Wenn sich jedoch ein bekannter Host-Schlüssel geändert hat, wird die Verbindung verweigert, bis du den neuen Schlüssel akzeptierst.\n\nWenn du dieses Verhalten deaktivierst, kannst du alle Host-Schlüssel überprüfen, auch wenn es zunächst keinen Konflikt gibt.
|
||||
uiScale=UI-Skala
|
||||
uiScaleDescription=Ein benutzerdefinierter Skalierungswert, der unabhängig von der systemweiten Anzeigeskala eingestellt werden kann. Die Werte sind in Prozent angegeben, d.h. ein Wert von 150 führt zu einer Skalierung der Benutzeroberfläche von 150%.\n\nDie Anwendung erfordert einen Neustart.
|
||||
editorProgram=Editor Programm
|
||||
editorProgramDescription=Der Standard-Texteditor, der beim Bearbeiten von Textdaten aller Art verwendet wird.
|
||||
windowOpacity=Fenster-Opazität
|
||||
windowOpacityDescription=Ändert die Deckkraft des Fensters, um zu verfolgen, was im Hintergrund passiert.
|
||||
useSystemFont=Systemschriftart verwenden
|
||||
openDataDir=Verzeichnis der Tresordaten
|
||||
openDataDirButton=Datenverzeichnis öffnen
|
||||
openDataDirDescription=Wenn du zusätzliche Dateien, wie z.B. SSH-Schlüssel, systemübergreifend mit deinem Git-Repository synchronisieren möchtest, kannst du sie in das Verzeichnis Speicherdaten legen. Bei allen Dateien, die dort referenziert werden, werden die Dateipfade auf allen synchronisierten Systemen automatisch angepasst.
|
||||
updates=Aktualisiert
|
||||
passwordKey=Passwortschlüssel
|
||||
selectAll=Alles auswählen
|
||||
command=Befehl
|
||||
advanced=Fortgeschrittene
|
||||
thirdParty=Open-Source-Hinweise
|
||||
eulaDescription=Lies die Endbenutzer-Lizenzvereinbarung für die XPipe-Anwendung
|
||||
thirdPartyDescription=Die Open-Source-Lizenzen von Bibliotheken Dritter anzeigen
|
||||
workspaceLock=Master-Passphrase
|
||||
enableGitStorage=Git-Synchronisation einschalten
|
||||
sharing=Teilen
|
||||
sync=Synchronisation
|
||||
enableGitStorageDescription=Wenn diese Funktion aktiviert ist, initialisiert XPipe ein Git-Repository für die Speicherung der Verbindungsdaten und überträgt alle Änderungen in dieses Repository. Beachte, dass dafür git installiert sein muss und dass dies die Lade- und Speichervorgänge verlangsamen kann.\n\nAlle Kategorien, die synchronisiert werden sollen, müssen explizit als gemeinsam genutzt gekennzeichnet werden.\n\nErfordert einen Neustart, um angewendet zu werden.
|
||||
storageGitRemote=Git Remote URL
|
||||
storageGitRemoteDescription=Wenn diese Option gesetzt ist, zieht XPipe beim Laden automatisch alle Änderungen und überträgt sie beim Speichern an das entfernte Repository. So kannst du deine Konfigurationsdaten zwischen mehreren XPipe-Installationen austauschen. Es werden sowohl HTTP- als auch SSH-URLs unterstützt. Beachte, dass dies die Lade- und Speichervorgänge verlangsamen kann.\n\nErfordert einen Neustart zur Anwendung.
|
||||
vault=Tresor
|
||||
workspaceLockDescription=Legt ein benutzerdefiniertes Passwort fest, um alle in XPipe gespeicherten sensiblen Daten zu verschlüsseln. Dies erhöht die Sicherheit, da es eine zusätzliche Verschlüsselungsebene für deine gespeicherten sensiblen Daten bietet. Du wirst dann beim Start von XPipe aufgefordert, das Passwort einzugeben.
|
||||
useSystemFontDescription=Legt fest, ob deine Systemschriftart oder die von XPipe verwendete Standardschriftart (Roboto) verwendet werden soll.
|
||||
tooltipDelay=Tooltip-Verzögerung
|
||||
tooltipDelayDescription=Die Anzahl der Millisekunden, die gewartet wird, bis ein Tooltip angezeigt wird.
|
||||
fontSize=Schriftgröße
|
||||
windowOptions=Fensteroptionen
|
||||
saveWindowLocation=Speicherort des Fensters
|
||||
saveWindowLocationDescription=Legt fest, ob die Fensterkoordinaten gespeichert und bei Neustarts wiederhergestellt werden sollen.
|
||||
startupShutdown=Starten / Herunterfahren
|
||||
showChildCategoriesInParentCategory=Unterkategorien in der übergeordneten Kategorie anzeigen
|
||||
showChildCategoriesInParentCategoryDescription=Ob alle Verbindungen, die sich in Unterkategorien befinden, einbezogen werden sollen, wenn eine bestimmte übergeordnete Kategorie ausgewählt wird.\n\nWenn dies deaktiviert ist, verhalten sich die Kategorien eher wie klassische Ordner, die nur ihren direkten Inhalt zeigen, ohne Unterordner einzubeziehen.
|
||||
condenseConnectionDisplay=Verbindungsanzeige verdichten
|
||||
condenseConnectionDisplayDescription=Nimm für jede Verbindung der obersten Ebene weniger Platz in der Vertikalen ein, um die Verbindungsliste zu komprimieren.
|
||||
enforceWindowModality=Fenstermodalität erzwingen
|
||||
enforceWindowModalityDescription=Bewirkt, dass sekundäre Fenster, wie z. B. das Dialogfeld zum Herstellen einer Verbindung, alle Eingaben für das Hauptfenster blockieren, solange sie geöffnet sind. Das ist nützlich, wenn du manchmal falsch klickst.
|
||||
openConnectionSearchWindowOnConnectionCreation=Fenster für die Verbindungssuche bei der Verbindungserstellung öffnen
|
||||
openConnectionSearchWindowOnConnectionCreationDescription=Ob beim Hinzufügen einer neuen Shell-Verbindung automatisch das Fenster zur Suche nach verfügbaren Unterverbindungen geöffnet werden soll oder nicht.
|
||||
workflow=Workflow
|
||||
system=System
|
||||
application=Anwendung
|
||||
storage=Speicherung
|
||||
runOnStartup=Beim Starten ausführen
|
||||
closeBehaviour=Verhalten schließen
|
||||
closeBehaviourDescription=Legt fest, wie XPipe beim Schließen des Hauptfensters vorgehen soll.
|
||||
language=Sprache
|
||||
languageDescription=Die zu verwendende Anzeigesprache.\n\nBeachte, dass diese automatische Übersetzungen als Basis verwenden und über Beiträge angepasst werden.
|
||||
lightTheme=Licht-Thema
|
||||
darkTheme=Dunkles Thema
|
||||
exit=XPipe beenden
|
||||
continueInBackground=Weiter im Hintergrund
|
||||
minimizeToTray=In die Taskleiste minimieren
|
||||
closeBehaviourAlertTitle=Schließverhalten einstellen
|
||||
closeBehaviourAlertTitleHeader=Wähle aus, was beim Schließen des Fensters passieren soll. Alle aktiven Verbindungen werden geschlossen, wenn die Anwendung heruntergefahren wird.
|
||||
startupBehaviour=Startverhalten
|
||||
startupBehaviourDescription=Steuert das Standardverhalten der Desktop-Anwendung, wenn XPipe gestartet wird.
|
||||
clearCachesAlertTitle=Cache säubern
|
||||
clearCachesAlertTitleHeader=Willst du alle XPipe-Caches löschen?
|
||||
clearCachesAlertTitleContent=Beachte, dass dadurch alle Daten gelöscht werden, die zur Verbesserung des Nutzererlebnisses gespeichert wurden.
|
||||
startGui=GUI starten
|
||||
startInTray=Start im Tray
|
||||
startInBackground=Start im Hintergrund
|
||||
clearCaches=Caches löschen ...
|
||||
clearCachesDescription=Alle Cache-Daten löschen
|
||||
apply=Anwenden
|
||||
cancel=Abbrechen
|
||||
notAnAbsolutePath=Kein absoluter Pfad
|
||||
notADirectory=Nicht ein Verzeichnis
|
||||
notAnEmptyDirectory=Kein leeres Verzeichnis
|
||||
automaticallyUpdate=Nach Updates suchen
|
||||
automaticallyUpdateDescription=Wenn diese Funktion aktiviert ist, werden Informationen über neue Versionen automatisch abgerufen, während XPipe läuft. Es wird kein Updater im Hintergrund ausgeführt, und du musst die Installation von Updates immer noch explizit bestätigen.
|
||||
sendAnonymousErrorReports=Anonyme Fehlerberichte senden
|
||||
sendUsageStatistics=Anonyme Nutzungsstatistiken senden
|
||||
storageDirectory=Speicherverzeichnis
|
||||
storageDirectoryDescription=Der Ort, an dem XPipe alle Verbindungsinformationen speichern soll. Diese Einstellung wird erst beim nächsten Neustart übernommen. Wenn du diese Einstellung änderst, werden die Daten aus dem alten Verzeichnis nicht in das neue kopiert.
|
||||
logLevel=Log-Level
|
||||
appBehaviour=Verhalten der Anwendung
|
||||
logLevelDescription=Die Protokollstufe, die beim Schreiben von Protokolldateien verwendet werden sollte.
|
||||
developerMode=Entwickler-Modus
|
||||
developerModeDescription=Wenn diese Option aktiviert ist, hast du Zugriff auf eine Reihe von zusätzlichen Optionen, die für die Entwicklung nützlich sind. Nur aktiv nach einem Neustart.
|
||||
editor=Editor
|
||||
custom=Benutzerdefiniert
|
||||
passwordManagerCommand=Passwortmanager-Befehl
|
||||
passwordManagerCommandDescription=Der Befehl, der ausgeführt werden soll, um Passwörter abzurufen. Der Platzhalterstring $KEY wird beim Aufruf durch den zitierten Passwortschlüssel ersetzt. Dies sollte deinen Passwortmanager CLI aufrufen, um das Passwort auf stdout auszugeben, z.B. mypassmgr get $KEY.\n\nDann kannst du den Schlüssel so einstellen, dass er immer dann abgerufen wird, wenn du eine Verbindung aufbaust, die ein Passwort erfordert.
|
||||
passwordManagerCommandTest=Passwort-Manager testen
|
||||
passwordManagerCommandTestDescription=Du kannst hier testen, ob die Ausgabe korrekt aussieht, wenn du einen Passwortmanager-Befehl eingerichtet hast. Der Befehl sollte nur das Passwort selbst auf stdout ausgeben, keine andere Formatierung sollte in der Ausgabe enthalten sein.
|
||||
preferEditorTabs=Lieber neue Tabs öffnen
|
||||
preferEditorTabsDescription=Legt fest, ob XPipe versuchen soll, neue Tabs in dem von dir gewählten Editor zu öffnen, anstatt neue Fenster zu öffnen.\n\nBeachte, dass nicht jeder Editor dies unterstützt.
|
||||
customEditorCommand=Benutzerdefinierter Editor-Befehl
|
||||
customEditorCommandDescription=Der Befehl, der ausgeführt werden soll, um den benutzerdefinierten Editor zu starten.\n\nDie Platzhalterzeichenfolge $FILE wird beim Aufruf durch den absoluten Dateinamen in Anführungszeichen ersetzt. Denke daran, den ausführbaren Pfad deines Editors in Anführungszeichen zu setzen, wenn er Leerzeichen enthält.
|
||||
editorReloadTimeout=Zeitüberschreitung beim Neuladen des Editors
|
||||
editorReloadTimeoutDescription=Die Anzahl der Millisekunden, die gewartet wird, bevor eine Datei nach einer Aktualisierung gelesen wird. Dadurch werden Probleme vermieden, wenn dein Editor beim Schreiben oder Freigeben von Dateisperren langsam ist.
|
||||
encryptAllVaultData=Alle Tresordaten verschlüsseln
|
||||
encryptAllVaultDataDescription=Wenn diese Option aktiviert ist, wird jeder Teil der Verbindungsdaten im Tresor verschlüsselt und nicht nur die Geheimnisse innerhalb der Daten. Dadurch wird eine weitere Sicherheitsebene für andere Parameter wie Benutzernamen, Hostnamen usw. geschaffen, die im Tresor standardmäßig nicht verschlüsselt sind.\n\nDiese Option macht den Verlauf und die Diffs deines Git-Tresors unbrauchbar, da du die ursprünglichen Änderungen nicht mehr sehen kannst, sondern nur noch die binären Änderungen.
|
||||
vaultSecurity=Tresor-Sicherheit
|
||||
developerDisableUpdateVersionCheck=Update-Versionsprüfung deaktivieren
|
||||
developerDisableUpdateVersionCheckDescription=Legt fest, ob der Update-Checker die Versionsnummer bei der Suche nach einem Update ignorieren soll.
|
||||
developerDisableGuiRestrictions=GUI-Einschränkungen deaktivieren
|
||||
developerDisableGuiRestrictionsDescription=Steuert, ob bestimmte deaktivierte Aktionen noch über die Benutzeroberfläche ausgeführt werden können.
|
||||
developerShowHiddenEntries=Versteckte Einträge anzeigen
|
||||
developerShowHiddenEntriesDescription=Wenn aktiviert, werden versteckte und interne Datenquellen angezeigt.
|
||||
developerShowHiddenProviders=Versteckte Anbieter anzeigen
|
||||
developerShowHiddenProvidersDescription=Legt fest, ob versteckte und interne Verbindungs- und Datenquellenanbieter im Erstellungsdialog angezeigt werden sollen.
|
||||
developerDisableConnectorInstallationVersionCheck=Connector-Versionsprüfung deaktivieren
|
||||
developerDisableConnectorInstallationVersionCheckDescription=Legt fest, ob der Update-Checker die Versionsnummer ignoriert, wenn er die Version eines XPipe-Anschlusses prüft, der auf einem entfernten Computer installiert ist.
|
||||
shellCommandTest=Shell-Befehlstest
|
||||
shellCommandTestDescription=Führe einen Befehl in der Shell-Sitzung aus, die intern von XPipe verwendet wird.
|
||||
terminal=Terminal
|
||||
terminalEmulator=Terminal-Emulator
|
||||
terminalConfiguration=Terminal-Konfiguration
|
||||
editorConfiguration=Editor-Konfiguration
|
||||
defaultApplication=Standardanwendung
|
||||
terminalEmulatorDescription=Das Standardterminal, das beim Öffnen einer beliebigen Shell-Verbindung verwendet wird. Diese Anwendung wird nur zu Anzeigezwecken verwendet, das gestartete Shell-Programm hängt von der Shell-Verbindung selbst ab.
|
||||
program=Programm
|
||||
customTerminalCommand=Benutzerdefinierter Terminalbefehl
|
||||
customTerminalCommandDescription=Der auszuführende Befehl, um das benutzerdefinierte Terminal mit einem bestimmten Befehl zu öffnen.\n\nXPipe erstellt ein temporäres Launcher-Shell-Skript für dein Terminal, das ausgeführt wird. Die Platzhalterzeichenfolge $CMD in dem von dir angegebenen Befehl wird beim Aufruf durch das eigentliche Launcher-Skript ersetzt. Denke daran, den ausführbaren Pfad deines Terminals in Anführungszeichen zu setzen, wenn er Leerzeichen enthält.
|
||||
preferTerminalTabs=Lieber neue Tabs öffnen
|
||||
preferTerminalTabsDisabled=Ziehe es vor, neue Tabs zu öffnen.\n\n Das aktuell ausgewählte Terminal $TERM$ unterstützt das Öffnen von Tabs über das CLI nicht.
|
||||
preferTerminalTabsDescription=Legt fest, ob XPipe versucht, neue Tabs in dem von dir gewählten Terminal zu öffnen, anstatt neue Fenster zu öffnen.\n\nBeachte, dass nicht jedes Terminal dies unterstützt.
|
||||
clearTerminalOnInit=Terminal bei Init löschen
|
||||
clearTerminalOnInitDescription=Wenn diese Funktion aktiviert ist, führt XPipe einen Löschbefehl aus, wenn eine neue Terminalsitzung gestartet wird, um unnötige Ausgaben zu entfernen.
|
||||
enableFastTerminalStartup=Schnelles Starten des Terminals aktivieren
|
||||
enableFastTerminalStartupDescription=Wenn diese Option aktiviert ist, werden Terminalsitzungen nach Möglichkeit schneller gestartet.\n\n Dadurch werden einige Startprüfungen übersprungen und die angezeigten Systeminformationen nicht aktualisiert. Eventuelle Verbindungsfehler werden nur im Terminal angezeigt.
|
||||
dontCachePasswords=Aufgeforderte Passwörter nicht zwischenspeichern
|
||||
dontCachePasswordsDescription=Legt fest, ob abgefragte Passwörter von XPipe intern zwischengespeichert werden sollen, damit du sie in der aktuellen Sitzung nicht erneut eingeben musst.\n\nIst dieses Verhalten deaktiviert, musst du die abgefragten Anmeldedaten jedes Mal neu eingeben, wenn sie vom System verlangt werden.
|
||||
denyTempScriptCreation=Temporäre Skripterstellung verweigern
|
||||
denyTempScriptCreationDescription=Um einige seiner Funktionen zu realisieren, erstellt XPipe manchmal temporäre Shell-Skripte auf einem Zielsystem, um die einfache Ausführung einfacher Befehle zu ermöglichen. Diese enthalten keine sensiblen Informationen und werden nur zu Implementierungszwecken erstellt.\n\nWenn dieses Verhalten deaktiviert ist, erstellt XPipe keine temporären Dateien auf einem entfernten System. Diese Option ist in hochsicheren Kontexten nützlich, in denen jede Dateisystemänderung überwacht wird. Wenn diese Option deaktiviert ist, funktionieren einige Funktionen, z. B. Shell-Umgebungen und Skripte, nicht wie vorgesehen.
|
||||
disableCertutilUse=Die Verwendung von certutil unter Windows deaktivieren
|
||||
useLocalFallbackShell=Lokale Fallback-Shell verwenden
|
||||
useLocalFallbackShellDescription=Wechsle zu einer anderen lokalen Shell, um lokale Vorgänge zu bearbeiten. Unter Windows ist dies die PowerShell, auf anderen Systemen die Bourne Shell.\n\nDiese Option kann verwendet werden, wenn die normale lokale Standard-Shell deaktiviert oder bis zu einem gewissen Grad beschädigt ist. Einige Funktionen funktionieren möglicherweise nicht wie erwartet, wenn diese Option aktiviert ist.\n\nDie Anwendung erfordert einen Neustart.
|
||||
disableCertutilUseDescription=Aufgrund verschiedener Unzulänglichkeiten und Bugs in cmd.exe werden temporäre Shell-Skripte mit certutil erstellt, indem es zur Dekodierung von base64-Eingaben verwendet wird, da cmd.exe bei Nicht-ASCII-Eingaben versagt. XPipe kann dafür auch die PowerShell verwenden, aber das ist langsamer.\n\nDamit wird die Verwendung von certutil auf Windows-Systemen deaktiviert, um einige Funktionen zu realisieren und stattdessen auf die PowerShell zurückzugreifen. Das könnte einige AVs freuen, da einige von ihnen die Verwendung von certutil blockieren.
|
||||
disableTerminalRemotePasswordPreparation=Terminal-Fernpasswortvorbereitung deaktivieren
|
||||
disableTerminalRemotePasswordPreparationDescription=In Situationen, in denen eine Remote-Shell-Verbindung, die über mehrere Zwischensysteme geht, im Terminal aufgebaut werden soll, kann es erforderlich sein, alle erforderlichen Kennwörter auf einem der Zwischensysteme vorzubereiten, damit alle Abfragen automatisch ausgefüllt werden können.\n\nWenn du nicht möchtest, dass die Kennwörter jemals an ein Zwischensystem übertragen werden, kannst du dieses Verhalten deaktivieren. Jedes erforderliche Zwischenpasswort wird dann beim Öffnen im Terminal selbst abgefragt.
|
||||
more=Mehr
|
|
@ -1,14 +1,270 @@
|
|||
delete=Delete
|
||||
rename=Rename
|
||||
properties=Properties
|
||||
usedDate=Used $DATE$
|
||||
openDir=Open Directory
|
||||
sortLastUsed=Sort by last used date
|
||||
sortAlphabetical=Sort alphabetical by name
|
||||
restart=Restart XPipe
|
||||
restartDescription=A restart can often be a quick fix
|
||||
reportIssue=Report Issue
|
||||
reportIssueDescription=Open the integrated issue reporter
|
||||
usefulActions=Useful actions
|
||||
stored=Saved
|
||||
troubleshootingOptions=Troubleshooting tools
|
||||
troubleshoot=Troubleshoot
|
||||
remote=Remote File
|
||||
addShellStore=Add Shell ...
|
||||
addShellTitle=Add Shell Connection
|
||||
savedConnections=Saved Connections
|
||||
save=Save
|
||||
#context: verb
|
||||
clean=Clean
|
||||
refresh=Refresh
|
||||
moveTo=Move to ...
|
||||
addDatabase=Database ...
|
||||
browseInternalStorage=Browse internal storage
|
||||
addTunnel=Tunnel ...
|
||||
addScript=Script ...
|
||||
addHost=Remote Host ...
|
||||
addShell=Shell Environment ...
|
||||
addCommand=Custom Command ...
|
||||
addAutomatically=Search Automatically ...
|
||||
addOther=Add Other ...
|
||||
addConnection=Add Connection
|
||||
skip=Skip
|
||||
addConnections=New
|
||||
selectType=Select Type
|
||||
selectTypeDescription=Select connection type
|
||||
selectShellType=Shell Type
|
||||
selectShellTypeDescription=Select the Type of the Shell Connection
|
||||
name=Name
|
||||
storeIntroTitle=Connection Hub
|
||||
storeIntroDescription=Here you can manage all your local and remote shell connections in one place. To start off, you can quickly detect available connections automatically and choose which ones to add.
|
||||
detectConnections=Search for connections
|
||||
configuration=Configuration
|
||||
dragAndDropFilesHere=Or just drag and drop a file here
|
||||
confirmDsCreationAbortTitle=Confirm abort
|
||||
confirmDsCreationAbortHeader=Do you want to abort the data source creation?
|
||||
confirmDsCreationAbortContent=Any data source creation progress will be lost.
|
||||
confirmInvalidStoreTitle=Failed connection
|
||||
confirmInvalidStoreHeader=Do you want to skip connection validation?
|
||||
confirmInvalidStoreContent=You can add this connection even if it could not be validated and fix the connection problems later on.
|
||||
none=None
|
||||
expand=Expand
|
||||
accessSubConnections=Access sub connections
|
||||
#context: noun, not rare
|
||||
common=Common
|
||||
color=Color
|
||||
alwaysConfirmElevation=Always confirm elevation
|
||||
alwaysConfirmElevationDescription=Controls how to handle cases when elevated access is required to run a command on a system, e.g. with sudo.\n\nBy default, any sudo credentials are cached during a session and automatically provided when needed. If this option is enabled, it will ask you to confirm the elevation access every time.
|
||||
allow=Allow
|
||||
ask=Ask
|
||||
deny=Deny
|
||||
share=Add to git repository
|
||||
unshare=Remove from git repository
|
||||
remove=Remove
|
||||
newCategory=New subcategory
|
||||
passwordManager=Password manager
|
||||
prompt=Prompt
|
||||
customCommand=Custom command
|
||||
other=Other
|
||||
setLock=Set lock
|
||||
selectConnection=Select connection
|
||||
changeLock=Change passphrase
|
||||
test=Test
|
||||
lockCreationAlertTitle=Set passphrase
|
||||
lockCreationAlertHeader=Set your new master passphrase
|
||||
#context: verb, exit
|
||||
finish=Finish
|
||||
error=An error occurred
|
||||
downloadStageDescription=Downloads files to your local machine, so you can drag and drop them into your native desktop environment.
|
||||
ok=Ok
|
||||
search=Search
|
||||
newFile=New file
|
||||
newDirectory=New directory
|
||||
passphrase=Passphrase
|
||||
repeatPassphrase=Repeat passphrase
|
||||
password=Password
|
||||
unlockAlertTitle=Unlock workspace
|
||||
unlockAlertHeader=Enter your vault passphrase to continue
|
||||
enterLockPassword=Enter lock password
|
||||
repeatPassword=Repeat password
|
||||
askpassAlertTitle=Askpass
|
||||
unsupportedOperation=Unsupported operation: $MSG$
|
||||
fileConflictAlertTitle=Resolve conflict
|
||||
fileConflictAlertHeader=A conflict was encountered. How would you like to proceed?
|
||||
fileConflictAlertContent=The file $FILE$ does already exist on the target system.
|
||||
fileConflictAlertContentMultiple=The file $FILE$ already exists. There might be more conflicts that you can automatically resolve by choosing an option that applies to all.
|
||||
moveAlertTitle=Confirm move
|
||||
moveAlertHeader=Do you want to move the ($COUNT$) selected elements into $TARGET$?
|
||||
deleteAlertTitle=Confirm deletion
|
||||
deleteAlertHeader=Do you want to delete the ($COUNT$) selected elements?
|
||||
selectedElements=Selected elements:
|
||||
mustNotBeEmpty=$VALUE$ must not be empty
|
||||
valueMustNotBeEmpty=Value must not be empty
|
||||
transferDescription=Drop files to transfer
|
||||
dragFiles=Drag files within browser
|
||||
dragLocalFiles=Drag local files from here
|
||||
null=$VALUE$ must be not null
|
||||
roots=Roots
|
||||
scripts=Scripts
|
||||
searchFilter=Search ...
|
||||
#context: last used
|
||||
recent=Recent
|
||||
shortcut=Shortcut
|
||||
browserWelcomeEmpty=Here you will be able to see where you left off last time.
|
||||
browserWelcomeSystems=You were recently connected to the following systems:
|
||||
hostFeatureUnsupported=$FEATURE$ is not installed on the host
|
||||
missingStore=$NAME$ does not exist
|
||||
connectionName=Connection name
|
||||
connectionNameDescription=Give this connection a custom name
|
||||
openFileTitle=Open file
|
||||
unknown=Unknown
|
||||
scanAlertTitle=Add connections
|
||||
scanAlertChoiceHeader=Target
|
||||
scanAlertChoiceHeaderDescription=Choose where to search for connections. This will look for all available connections first.
|
||||
scanAlertHeader=Connection types
|
||||
scanAlertHeaderDescription=Select types of connections you want to automatically add for the system.
|
||||
noInformationAvailable=No information available
|
||||
localMachine=Local Machine
|
||||
yes=Yes
|
||||
no=No
|
||||
errorOccured=An error occured
|
||||
terminalErrorOccured=A terminal error occured
|
||||
errorTypeOccured=An exception of type $TYPE$ was thrown
|
||||
permissionsAlertTitle=Permissions required
|
||||
permissionsAlertHeader=Additional permissions are required to perform this operation.
|
||||
permissionsAlertContent=Please follow the pop-up to give XPipe the required permissions in the settings menu.
|
||||
errorDetails=Show details
|
||||
updateReadyAlertTitle=Update Ready
|
||||
updateReadyAlertHeader=An update to version $VERSION$ is ready to be installed
|
||||
updateReadyAlertContent=This will install the new version and restart XPipe once the installation finished.
|
||||
errorNoDetail=No error details are available
|
||||
updateAvailableTitle=Update Available
|
||||
updateAvailableHeader=An XPipe update to version $VERSION$ is available to install
|
||||
updateAvailableContent=Even though XPipe could not be started, you can attempt to install the update to potentially fix the issue.
|
||||
clipboardActionDetectedTitle=Clipboard Action detected
|
||||
clipboardActionDetectedHeader=Do you want to import your clipboard content?
|
||||
clipboardActionDetectedContent=XPipe detected content in your clipboard that can be opened. Do you want to open it now?
|
||||
install=Install ...
|
||||
ignore=Ignore
|
||||
possibleActions=Possible actions
|
||||
reportError=Report error
|
||||
reportOnGithub=Report on GitHub
|
||||
reportOnGithubDescription=Open a new issue in the GitHub repository
|
||||
reportErrorDescription=Send an error report with optional user feedback and diagnostics info
|
||||
ignoreError=Ignore error
|
||||
ignoreErrorDescription=Ignore this error and continue like nothing happened
|
||||
provideEmail=How to contact you (optional, only if you want to get notified about fixes)
|
||||
additionalErrorInfo=Provide additional information (optional)
|
||||
additionalErrorAttachments=Select attachments (optional)
|
||||
dataHandlingPolicies=Privacy policy
|
||||
sendReport=Send report
|
||||
errorHandler=Error handler
|
||||
events=Events
|
||||
method=Method
|
||||
validate=Validate
|
||||
stackTrace=Stack trace
|
||||
previousStep=< Previous
|
||||
nextStep=Next >
|
||||
finishStep=Finish
|
||||
edit=Edit
|
||||
browseInternal=Browse Internal
|
||||
checkOutUpdate=Check out update
|
||||
open=Open
|
||||
quit=Quit
|
||||
noTerminalSet=No terminal application has been set automatically. You can do so manually in the settings menu.
|
||||
connections=Connections
|
||||
settings=Settings
|
||||
explorePlans=License
|
||||
help=Help
|
||||
about=About
|
||||
developer=Developer
|
||||
browseFileTitle=Browse file
|
||||
browse=Browse
|
||||
browser=Browser
|
||||
selectFileFromComputer=Select a file from this computer
|
||||
links=Useful links
|
||||
website=Website
|
||||
documentation=Documentation
|
||||
discordDescription=Join the Discord server
|
||||
security=Security
|
||||
securityPolicy=Security information
|
||||
securityPolicyDescription=Read the detailed security policy
|
||||
privacy=Privacy Policy
|
||||
privacyDescription=Read the privacy policy for the XPipe application
|
||||
slackDescription=Join the Slack workspace
|
||||
support=Support
|
||||
githubDescription=Check out the GitHub repository
|
||||
openSourceNotices=Open Source Notices
|
||||
xPipeClient=XPipe Desktop
|
||||
checkForUpdates=Check for updates
|
||||
checkForUpdatesDescription=Download an update if there is one
|
||||
lastChecked=Last checked
|
||||
version=Version
|
||||
build=Build version
|
||||
runtimeVersion=Runtime version
|
||||
virtualMachine=Virtual machine
|
||||
updateReady=Install update
|
||||
updateReadyPortable=Check out update
|
||||
updateReadyDescription=An update was downloaded and is ready to be installed
|
||||
updateReadyDescriptionPortable=An update is available to download
|
||||
updateRestart=Restart to update
|
||||
never=Never
|
||||
updateAvailableTooltip=Update available
|
||||
visitGithubRepository=Visit GitHub repository
|
||||
updateAvailable=Update available: $VERSION$
|
||||
downloadUpdate=Download update
|
||||
legalAccept=I accept the End User License Agreement
|
||||
#context: verb
|
||||
confirm=Confirm
|
||||
#context: verb
|
||||
print=Print
|
||||
whatsNew=What's new in version $VERSION$ ($DATE$)
|
||||
antivirusNoticeTitle=A note on Antivirus programs
|
||||
updateChangelogAlertTitle=Changelog
|
||||
greetingsAlertTitle=Welcome to XPipe
|
||||
#context: understood
|
||||
gotIt=Got It
|
||||
eula=End User License Agreement
|
||||
news=News
|
||||
introduction=Introduction
|
||||
privacyPolicy=Privacy Policy
|
||||
agree=Agree
|
||||
disagree=Disagree
|
||||
directories=Directories
|
||||
logFile=Log File
|
||||
logFiles=Log Files
|
||||
logFilesAttachment=Log Files
|
||||
issueReporter=Issue Reporter
|
||||
openCurrentLogFile=Log files
|
||||
openCurrentLogFileDescription=Open the log file of the current session
|
||||
openLogsDirectory=Open logs directory
|
||||
installationFiles=Installation Files
|
||||
openInstallationDirectory=Installation files
|
||||
openInstallationDirectoryDescription=Open XPipe installation directory
|
||||
launchDebugMode=Debug mode
|
||||
launchDebugModeDescription=Restart XPipe in debug mode
|
||||
extensionInstallTitle=Download
|
||||
extensionInstallDescription=This action requires additional third party libraries that are not distributed by XPipe. You can automatically install them here. The components are then downloaded from the vendor website:
|
||||
extensionInstallLicenseNote=By performing the download and automatic installation you agree to the terms of the third party licenses:
|
||||
license=License
|
||||
installRequired=Installation Required
|
||||
restore=Restore
|
||||
restoreAllSessions=Restore all sessions
|
||||
connectionTimeout=Connection start timeout
|
||||
connectionTimeoutDescription=The time in seconds to wait for a response before considering a connection to be timed out. If some of your remote systems take long to connect, you can try to increase this value.
|
||||
useBundledTools=Use bundled OpenSSH tools
|
||||
useBundledToolsDescription=Prefer to use bundled version of the openssh client instead of your locally installed one.\n\nThis version is usually more up-to-date than the ones shipped on your system and might support additional features. This also removes the requirement to have these tools installed in the first place.\n\nRequires restart to apply.
|
||||
connections=Connections
|
||||
appearance=Appearance
|
||||
integrations=Integrations
|
||||
uiOptions=UI Options
|
||||
#context: display theme
|
||||
theme=Theme
|
||||
localShell=Local shell
|
||||
themeDescription=You preferred theme
|
||||
#context: display theme
|
||||
themeDescription=Your preferred display theme
|
||||
dontAutomaticallyStartVmSshServer=Don't automatically start SSH server for VMs when needed
|
||||
dontAutomaticallyStartVmSshServerDescription=Any shell connection to a VM running in a hypervisor is made through SSH. XPipe can automatically start the installed SSH server when needed. If you don't want this for security reasons, then you can just disable this behavior with this option.
|
||||
confirmGitShareTitle=Confirm git sharing
|
||||
|
@ -23,8 +279,6 @@ uiScaleDescription=A custom scaling value that can be set independently of your
|
|||
editorProgram=Editor Program
|
||||
editorProgramDescription=The default text editor to use when editing any kind of text data.
|
||||
windowOpacity=Window opacity
|
||||
customTerminalPlaceholder=myterminal -e $CMD
|
||||
customEditorPlaceholder=myeditor $FILE
|
||||
windowOpacityDescription=Changes the window opacity to keep track of what is happening in the background.
|
||||
useSystemFont=Use system font
|
||||
openDataDir=Vault data directory
|
||||
|
@ -66,14 +320,16 @@ openConnectionSearchWindowOnConnectionCreationDescription=Whether or not to auto
|
|||
workflow=Workflow
|
||||
system=System
|
||||
application=Application
|
||||
updateToPrereleases=Include prereleases
|
||||
updateToPrereleasesDescription=When enabled, the update check will also look for available prereleases in addition to full releases.
|
||||
storage=Storage
|
||||
runOnStartup=Run on startup
|
||||
#context: setting
|
||||
closeBehaviour=Close behaviour
|
||||
closeBehaviourDescription=Controls how XPipe should proceed upon closing its main window.
|
||||
language=Language
|
||||
languageDescription=The display language to use.\n\nNote that these use automatic translations as a base and are adapted via contributions.
|
||||
#context: display theme
|
||||
lightTheme=Light Theme
|
||||
#context: display theme
|
||||
darkTheme=Dark Theme
|
||||
exit=Quit XPipe
|
||||
continueInBackground=Continue in background
|
||||
|
@ -90,7 +346,6 @@ startInTray=Start in tray
|
|||
startInBackground=Start in background
|
||||
clearCaches=Clear caches ...
|
||||
clearCachesDescription=Delete all cache data
|
||||
ok=OK
|
||||
apply=Apply
|
||||
cancel=Cancel
|
||||
notAnAbsolutePath=Not an absolute path
|
||||
|
@ -122,13 +377,6 @@ editorReloadTimeoutDescription=The amount of milliseconds to wait before reading
|
|||
encryptAllVaultData=Encrypt all vault data
|
||||
encryptAllVaultDataDescription=When enabled, every part of the vault connection data will be encrypted as opposed to only secrets within in that data. This adds another layer of security for other parameters like usernames, hostnames, etc., that are not encrypted by default in the vault.\n\nThis option will render your git vault history and diffs useless as you can't see the original changes anymore, only binary changes.
|
||||
vaultSecurity=Vault security
|
||||
securityPolicy=Security policy
|
||||
notepad++=Notepad++
|
||||
notepad++Windows=Notepad++
|
||||
notepad++Linux=Notepad++
|
||||
notepad=Notepad
|
||||
security=Security
|
||||
developer=Developer
|
||||
developerDisableUpdateVersionCheck=Disable Update Version Check
|
||||
developerDisableUpdateVersionCheckDescription=Controls whether the update checker will ignore the version number when looking for an update.
|
||||
developerDisableGuiRestrictions=Disable GUI restrictions
|
||||
|
@ -141,23 +389,6 @@ developerDisableConnectorInstallationVersionCheck=Disable Connector Version Chec
|
|||
developerDisableConnectorInstallationVersionCheckDescription=Controls whether the update checker will ignore the version number when inspecting the version of an XPipe connector installed on a remote machine.
|
||||
shellCommandTest=Shell Command Test
|
||||
shellCommandTestDescription=Run a command in the shell session used internally by XPipe.
|
||||
konsole=Konsole
|
||||
xfce=Xfce 4
|
||||
elementaryTerminal=Elementary Terminal
|
||||
macosTerminal=Terminal.app
|
||||
iterm2=iTerm2
|
||||
warp=Warp
|
||||
tabby=Tabby
|
||||
alacritty=Alacritty
|
||||
alacrittyMacOs=Alacritty
|
||||
kittyMacOs=Kitty
|
||||
bbedit=BBEdit
|
||||
fleet=Fleet
|
||||
intellij=IntelliJ IDEA
|
||||
pycharm=PyCharm
|
||||
webstorm=WebStorm
|
||||
clion=CLion
|
||||
tabbyMacOs=Tabby
|
||||
terminal=Terminal
|
||||
terminalEmulator=Terminal emulator
|
||||
terminalConfiguration=Terminal configuration
|
||||
|
@ -184,12 +415,4 @@ useLocalFallbackShellDescription=Switch to using another local shell to handle l
|
|||
disableCertutilUseDescription=Due to several shortcomings and bugs in cmd.exe, temporary shell scripts are created with certutil by using it to decode base64 input as cmd.exe breaks on non-ASCII input. XPipe can also use PowerShell for that but this will be slower.\n\nThis disables any use of certutil on Windows systems to realize some functionality and fall back to PowerShell instead. This might please some AVs as some of them block certutil usage.
|
||||
disableTerminalRemotePasswordPreparation=Disable terminal remote password preparation
|
||||
disableTerminalRemotePasswordPreparationDescription=In situations where a remote shell connection that goes through multiple intermediate systems should be established in the terminal, there might be a requirement to prepare any required passwords on one of the intermediate systems to allow for an automatic filling of any prompts.\n\nIf you don't want the passwords to ever be transferred to any intermediate system, you can disable this behavior. Any required intermediate password will then be queried in the terminal itself when opened.
|
||||
cmd=cmd.exe
|
||||
powershell=Powershell
|
||||
pwsh=Powershell Core
|
||||
windowsTerminal=Windows Terminal
|
||||
windowsTerminalPreview=Windows Terminal Preview
|
||||
gnomeTerminal=Gnome Terminal
|
||||
createLock=Create lock
|
||||
tilix=Tilix
|
||||
wezterm=WezTerm
|
||||
more=More
|
76
lang/base/strings/translations_de.properties
Normal file
76
lang/base/strings/translations_de.properties
Normal file
|
@ -0,0 +1,76 @@
|
|||
localMachine=Lokale Maschine
|
||||
destination=Ziel
|
||||
configuration=Konfiguration
|
||||
launch=Starten
|
||||
start=Start
|
||||
stop=Stopp
|
||||
pause=Pause
|
||||
refresh=Aktualisieren
|
||||
options=Optionen
|
||||
newFile=Neue Datei
|
||||
newLink=Neuer Link
|
||||
linkName=Link-Name
|
||||
scanConnections=Verfügbare Verbindungen finden ...
|
||||
observe=Beobachten beginnen
|
||||
stopObserve=Beobachten stoppen
|
||||
createShortcut=Desktop-Verknüpfung erstellen
|
||||
browseFiles=Dateien durchsuchen
|
||||
clone=Klonen
|
||||
targetPath=Zielpfad
|
||||
newDirectory=Neues Verzeichnis
|
||||
copyShareLink=Link kopieren
|
||||
selectStore=Laden auswählen
|
||||
saveSource=Für später speichern
|
||||
execute=Führen Sie aus
|
||||
deleteChildren=Alle Kinder entfernen
|
||||
descriptionDescription=Gib dieser Gruppe eine optionale Beschreibung
|
||||
selectSource=Quelle auswählen
|
||||
commandLineRead=Aktualisieren
|
||||
commandLineWrite=Schreibe
|
||||
wslHost=WSL-Host
|
||||
timeout=Timeout
|
||||
additionalOptions=Zusätzliche Optionen
|
||||
type=Typ
|
||||
input=Eingabe
|
||||
machine=Maschine
|
||||
container=Container
|
||||
host=Host
|
||||
port=Port
|
||||
user=Benutzer
|
||||
password=Passwort
|
||||
method=Methode
|
||||
uri=URL
|
||||
distribution=Vertrieb
|
||||
username=Benutzername
|
||||
shellType=Shell-Typ
|
||||
command=Befehl
|
||||
browseFile=Datei durchsuchen
|
||||
openShell=Shell öffnen
|
||||
editFile=Datei bearbeiten
|
||||
usage=Verwendung
|
||||
description=Beschreibung
|
||||
open=Öffnen
|
||||
edit=Bearbeiten
|
||||
scriptContents=Skript-Inhalte
|
||||
scriptContentsDescription=Die auszuführenden Skriptbefehle
|
||||
snippets=Skript-Abhängigkeiten
|
||||
snippetsDescription=Andere Skripte, die zuerst ausgeführt werden sollen
|
||||
snippetsDependenciesDescription=Alle möglichen Skripte, die ggf. ausgeführt werden sollten
|
||||
isDefault=Wird in allen kompatiblen Shells auf init ausgeführt
|
||||
bringToShells=An alle kompatiblen Shells bringen
|
||||
isDefaultGroup=Alle Gruppenskripte auf der Shell init ausführen
|
||||
executionType=Ausführungsart
|
||||
executionTypeDescription=Wann dieses Snippet ausgeführt werden soll
|
||||
minimumShellDialect=Shell-Typ
|
||||
minimumShellDialectDescription=Der erforderliche Shell-Typ für dieses Skript
|
||||
dumbOnly=Nur stumm
|
||||
terminalOnly=Nur Terminal
|
||||
both=Beide
|
||||
shouldElevate=Sollte erheben
|
||||
shouldElevateDescription=Ob dieses Skript mit erhöhten Rechten ausgeführt werden soll
|
||||
script.displayName=Skript
|
||||
script.displayDescription=Ein wiederverwendbares Skript erstellen
|
||||
scriptGroup.displayName=Skript-Gruppe
|
||||
scriptGroup.displayDescription=Eine Gruppe für Skripte erstellen
|
||||
scriptGroup=Gruppe
|
||||
scriptGroupDescription=Die Gruppe, der dieses Skript zugewiesen werden soll
|
|
@ -1,13 +1,6 @@
|
|||
anyBinaryFile=Any binary file
|
||||
dataFile=Data file
|
||||
binaryFile=Binary file
|
||||
commandLine=Command Line
|
||||
java=Java
|
||||
fileOutput=File Output
|
||||
localMachine=Local Machine
|
||||
destination=Destination
|
||||
configuration=Configuration
|
||||
selectOutput=Select Output
|
||||
launch=Launch
|
||||
start=Start
|
||||
stop=Stop
|
||||
|
@ -37,12 +30,9 @@ commandLineWrite=Write
|
|||
wslHost=WSL Host
|
||||
timeout=Timeout
|
||||
additionalOptions=Additional Options
|
||||
rawFileOutput=Raw File Output
|
||||
dataSourceOutput=Data Source Output
|
||||
type=Type
|
||||
input=Input
|
||||
machine=Machine
|
||||
bytes=$N$ bytes
|
||||
container=Container
|
||||
host=Host
|
||||
port=Port
|
||||
|
@ -52,24 +42,14 @@ method=Method
|
|||
uri=URL
|
||||
distribution=Distribution
|
||||
username=Username
|
||||
shellType=Shell Type
|
||||
shellType=Shell type
|
||||
command=Command
|
||||
target=Target
|
||||
writeMode=Write Mode
|
||||
exportStream=Export Stream
|
||||
browseFile=Browse File
|
||||
openShell=Open Shell
|
||||
editFile=Edit File
|
||||
browseFile=Browse file
|
||||
openShell=Open shell
|
||||
editFile=Edit file
|
||||
usage=Usage
|
||||
description=Description
|
||||
unconnected=Unconnected
|
||||
waitingForConsumer=Waiting for Consumer
|
||||
waitingForProducer=Waiting for Producer
|
||||
open=Open
|
||||
closed=Closed
|
||||
internalStream.displayName=Internal Stream
|
||||
local.displayName=Local machine
|
||||
local.displayDescription=
|
||||
edit=Edit
|
||||
scriptContents=Script contents
|
||||
scriptContentsDescription=The script commands to execute
|
14
lang/base/texts/elevation_de.md
Normal file
14
lang/base/texts/elevation_de.md
Normal file
|
@ -0,0 +1,14 @@
|
|||
## Elevation
|
||||
|
||||
Der Prozess der Elevation ist betriebssystemspezifisch.
|
||||
|
||||
### Linux & macOS
|
||||
|
||||
Jeder erhobene Befehl wird mit `sudo` ausgeführt. Das optionale `sudo` Passwort wird bei Bedarf über XPipe abgefragt.
|
||||
Du kannst in den Einstellungen festlegen, ob du dein Passwort jedes Mal eingeben willst, wenn es gebraucht wird, oder ob du es für die aktuelle Sitzung zwischenspeichern willst.
|
||||
|
||||
### Windows
|
||||
|
||||
Unter Windows ist es nicht möglich, einen untergeordneten Prozess zu aktivieren, wenn der übergeordnete Prozess nicht auch aktiviert ist.
|
||||
Wenn XPipe also nicht als Administrator ausgeführt wird, kannst du lokal keine Berechtigungserweiterung nutzen.
|
||||
Bei Fernverbindungen muss das verbundene Benutzerkonto über Administratorrechte verfügen.
|
15
lang/base/texts/executionType_de.md
Normal file
15
lang/base/texts/executionType_de.md
Normal file
|
@ -0,0 +1,15 @@
|
|||
## Ausführungsarten
|
||||
|
||||
Es gibt zwei verschiedene Ausführungsarten, wenn XPipe eine Verbindung zu einem System herstellt.
|
||||
|
||||
### Im Hintergrund
|
||||
|
||||
Die erste Verbindung zu einem System wird im Hintergrund in einer stummen Terminalsitzung hergestellt.
|
||||
|
||||
Blockierende Befehle, die Benutzereingaben erfordern, können den Shell-Prozess einfrieren, wenn XPipe ihn intern zuerst im Hintergrund startet. Um dies zu vermeiden, solltest du diese blockierenden Befehle nur im Terminalmodus aufrufen.
|
||||
|
||||
Der Dateibrowser z. B. verwendet für seine Operationen ausschließlich den dummen Hintergrundmodus. Wenn du also möchtest, dass deine Skriptumgebung für die Dateibrowser-Sitzung gilt, sollte sie im dummen Modus ausgeführt werden.
|
||||
|
||||
### In den Terminals
|
||||
|
||||
Nachdem die anfängliche Dumb-Terminal-Verbindung erfolgreich war, öffnet XPipe eine separate Verbindung im eigentlichen Terminal. Wenn du möchtest, dass das Skript ausgeführt wird, wenn du die Verbindung in einem Terminal öffnest, dann wähle den Terminalmodus.
|
|
@ -2,16 +2,14 @@
|
|||
|
||||
There are two distinct execution types when XPipe connects to a system.
|
||||
|
||||
### Dumb terminals
|
||||
### In the background
|
||||
|
||||
The first connection to a system is made in the background in a dumb terminal.
|
||||
The first connection to a system is made in the background in a dumb terminal session.
|
||||
|
||||
Blocking commands that require user input can freeze the shell process when XPipe starts it up internally first in the background.
|
||||
To avoid this, you should only call these blocking commands in the terminal mode.
|
||||
Blocking commands that require user input can freeze the shell process when XPipe starts it up internally first in the background. To avoid this, you should only call these blocking commands in the terminal mode.
|
||||
|
||||
The file browser for example entirely uses the dumb background mode to handle its operations, so if you want your script environment to apply to the file browser session, it should run in the dumb mode.
|
||||
|
||||
### Proper terminals
|
||||
### In the terminals
|
||||
|
||||
After a dumb terminal connection has succeeded, XPipe will open a separate connection in the actual terminal.
|
||||
If you want the script to be run when you open the connection in a terminal, then choose the terminal mode.
|
||||
After the initial dumb terminal connection has succeeded, XPipe will open a separate connection in the actual terminal. If you want the script to be run when you open the connection in a terminal, then choose the terminal mode.
|
13
lang/base/texts/scriptCompatibility_de.md
Normal file
13
lang/base/texts/scriptCompatibility_de.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
## Skript-Kompatibilität
|
||||
|
||||
Der Shell-Typ bestimmt, wo das Skript ausgeführt werden kann.
|
||||
Abgesehen von einer exakten Übereinstimmung, d.h. der Ausführung eines `zsh`-Skripts in `zsh`, führt XPipe auch eine breitere Kompatibilitätsprüfung durch.
|
||||
|
||||
### Posix-Shells
|
||||
|
||||
Jedes Skript, das als `sh`-Skript deklariert ist, kann in jeder Posix-Shell-Umgebung wie `bash` oder `zsh` ausgeführt werden.
|
||||
Wenn du ein grundlegendes Skript auf vielen verschiedenen Systemen ausführen willst, ist die Verwendung von Skripten mit `sh`-Syntax die beste Lösung dafür.
|
||||
|
||||
### PowerShell
|
||||
|
||||
Skripte, die als normale `powershell`-Skripte deklariert sind, können auch in `pwsh`-Umgebungen ausgeführt werden.
|
|
@ -10,4 +10,4 @@ If you intend to run a basic script on many different systems, then using only `
|
|||
|
||||
### PowerShell
|
||||
|
||||
Scripts declared as normal PowerShell scripts are also able to run in PowerShell Core environments.
|
||||
Scripts declared as normal `powershell` scripts are also able to run in `pwsh` environments.
|
5
lang/base/texts/scriptDependencies_de.md
Normal file
5
lang/base/texts/scriptDependencies_de.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Skriptabhängigkeiten
|
||||
|
||||
Die Skripte und Skriptgruppen, die zuerst ausgeführt werden sollen. Wenn eine ganze Gruppe zu einer Abhängigkeit gemacht wird, werden alle Skripte in dieser Gruppe als Abhängigkeiten betrachtet.
|
||||
|
||||
Der aufgelöste Abhängigkeitsgraph von Skripten wird abgeflacht, gefiltert und eindeutig gemacht. D.h. es werden nur kompatible Skripte ausgeführt und wenn ein Skript mehrmals ausgeführt werden würde, wird es nur beim ersten Mal ausgeführt.
|
5
lang/base/texts/script_de.md
Normal file
5
lang/base/texts/script_de.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Skriptinhalt
|
||||
|
||||
Der Inhalt des Skripts, das ausgeführt werden soll. Du kannst ihn entweder direkt bearbeiten oder die Schaltfläche "Externe Bearbeitung" in der oberen rechten Ecke verwenden, um einen externen Texteditor zu starten.
|
||||
|
||||
Bei Shells, die dies unterstützen, musst du keine Shebang-Zeile angeben, sie wird automatisch mit dem entsprechenden Shell-Typ hinzugefügt.
|
20
lang/jdbc/strings/translations_de.properties
Normal file
20
lang/jdbc/strings/translations_de.properties
Normal file
|
@ -0,0 +1,20 @@
|
|||
postgres.displayName=PostgreSQL
|
||||
postgres.displayDescription=Eine psql-Shell für einen PostgreSQL-Server öffnen
|
||||
query=Abfrage
|
||||
proxy=Proxy
|
||||
peerAuth=Peer-Authentifizierung
|
||||
port=Port
|
||||
url=URL
|
||||
instance=Instanz
|
||||
username=Benutzername
|
||||
usernameDescription=Der Benutzer, als der man sich anmeldet
|
||||
password=Passwort
|
||||
passwordDescription=Das Passwort zur Authentifizierung
|
||||
authentication=Authentifizierung
|
||||
authenticationType=Methode
|
||||
connection=Verbindung
|
||||
connectionUrl=Verbindungs-URL
|
||||
connectionString=Verbindungsstring
|
||||
passwordAuth=Passwort-Authentifizierung
|
||||
windowsAuth=Windows-Authentifizierung
|
||||
psqlShell=PSQL-Shell im Terminal öffnen
|
20
lang/jdbc/strings/translations_en.properties
Normal file
20
lang/jdbc/strings/translations_en.properties
Normal file
|
@ -0,0 +1,20 @@
|
|||
postgres.displayName=PostgreSQL
|
||||
postgres.displayDescription=Open a psql shell to a PostgreSQL Server
|
||||
query=Query
|
||||
proxy=Proxy
|
||||
peerAuth=Peer Authentication
|
||||
port=Port
|
||||
url=URL
|
||||
instance=Instance
|
||||
username=Username
|
||||
usernameDescription=The user to log in as
|
||||
password=Password
|
||||
passwordDescription=The password to authenticate
|
||||
authentication=Authentication
|
||||
authenticationType=Method
|
||||
connection=Connection
|
||||
connectionUrl=Connection URL
|
||||
connectionString=Connection String
|
||||
passwordAuth=Password Authentication
|
||||
windowsAuth=Windows Authentication
|
||||
psqlShell=Open PSQL Shell in Terminal
|
273
lang/proc/strings/translations_de.properties
Normal file
273
lang/proc/strings/translations_de.properties
Normal file
|
@ -0,0 +1,273 @@
|
|||
showInternalPods=Interne Pods anzeigen
|
||||
showAllNamespaces=Alle Namespaces anzeigen
|
||||
showInternalContainers=Interne Container anzeigen
|
||||
refresh=Aktualisieren
|
||||
vmwareGui=GUI starten
|
||||
monitorVm=VM überwachen
|
||||
addCluster=Cluster hinzufügen ...
|
||||
showNonRunningInstances=Nicht laufende Instanzen anzeigen
|
||||
vmwareGuiDescription=Ob eine virtuelle Maschine im Hintergrund oder in einem Fenster gestartet werden soll.
|
||||
vmwareEncryptionPassword=Verschlüsselungspasswort
|
||||
vmwareEncryptionPasswordDescription=Das optionale Passwort, das zur Verschlüsselung der VM verwendet wird.
|
||||
vmwarePasswordDescription=Das erforderliche Passwort für den Gastbenutzer.
|
||||
vmwarePassword=Benutzer-Passwort
|
||||
vmwareUser=Gast-Benutzer
|
||||
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
|
||||
imageNameDescription=Die zu verwendende Kennung des Containerbildes
|
||||
containerName=Container-Name
|
||||
containerNameDescription=Der optionale benutzerdefinierte Containername
|
||||
vm=Virtuelle Maschine
|
||||
yubikeyPiv=Yubikey PIV (Pro)
|
||||
vmDescription=Die zugehörige Konfigurationsdatei.
|
||||
vmwareScan=VMware Desktop-Hypervisoren
|
||||
library=Bibliothek
|
||||
customPkcs11Library=Benutzerdefinierte PKCS#11-Bibliothek (Pro)
|
||||
vmwareMachine.displayName=VMware Virtuelle Maschine
|
||||
vmwareMachine.displayDescription=Verbindung zu einer virtuellen Maschine über SSH
|
||||
vmwareInstallation.displayName=VMware Desktop Hypervisor Installation
|
||||
vmwareInstallation.displayDescription=Interaktion mit den installierten VMs über deren CLI
|
||||
start=Start
|
||||
stop=Stopp
|
||||
pause=Pause
|
||||
requiredSshServerAlertTitle=SSH-Server einrichten
|
||||
requiredSshServerAlertHeader=Es kann kein installierter SSH-Server in der VM gefunden werden.
|
||||
requiredSshServerAlertContent=Um sich mit der VM zu verbinden, sucht XPipe nach einem laufenden SSH-Server, aber es wurde kein verfügbarer SSH-Server für die VM gefunden.
|
||||
computerName=Computer Name
|
||||
pssComputerNameDescription=Der Computername, zu dem eine Verbindung hergestellt werden soll. Es wird angenommen, dass er bereits in deinen vertrauenswürdigen Hosts enthalten ist.
|
||||
credentialUser=Berechtigungsnachweis Benutzer
|
||||
pssCredentialUserDescription=Der Benutzer, als der du dich anmeldest.
|
||||
credentialPassword=Berechtigungsnachweis Passwort
|
||||
pssCredentialPasswordDescription=Das Passwort des Benutzers.
|
||||
sshConfig=SSH-Konfigurationsdateien
|
||||
autostart=Automatisches Verbinden beim Start von XPipe
|
||||
acceptHostKey=Host-Schlüssel akzeptieren
|
||||
modifyHostKeyPermissions=Host Key Berechtigungen ändern
|
||||
attachContainer=Am Container anhängen
|
||||
openInVsCode=In VSCode öffnen
|
||||
containerLogs=Containerprotokolle anzeigen
|
||||
openSftpClient=In einem externen SFTP-Client öffnen
|
||||
openTermius=In Termius öffnen
|
||||
showInternalInstances=Interne Instanzen anzeigen
|
||||
editPod=Pod bearbeiten
|
||||
acceptHostKeyDescription=Vertraue dem neuen Host-Schlüssel und fahre fort
|
||||
modifyHostKeyPermissionsDescription=Versuchen Sie, die Berechtigungen der Originaldatei zu entfernen, damit OpenSSH zufrieden ist
|
||||
psSession.displayName=PowerShell Remote-Sitzung
|
||||
psSession.displayDescription=Verbinden über New-PSSession und Enter-PSSession
|
||||
sshLocalTunnel.displayName=Lokaler SSH-Tunnel
|
||||
sshLocalTunnel.displayDescription=Einen SSH-Tunnel zu einem entfernten Host einrichten
|
||||
sshRemoteTunnel.displayName=Entfernter SSH-Tunnel
|
||||
sshRemoteTunnel.displayDescription=Einen umgekehrten SSH-Tunnel von einem entfernten Host aus aufbauen
|
||||
sshDynamicTunnel.displayName=Dynamischer SSH-Tunnel
|
||||
sshDynamicTunnel.displayDescription=Einen SOCKS-Proxy über eine SSH-Verbindung einrichten
|
||||
shellEnvironmentGroup.displayName=Shell-Umgebungen
|
||||
shellEnvironmentGroup.displayDescription=Shell-Umgebungen
|
||||
shellEnvironment.displayName=Benutzerdefinierte Shell-Umgebung
|
||||
shellEnvironment.displayDescription=Eine angepasste Shell-Init-Umgebung erstellen
|
||||
shellEnvironment.informationFormat=$TYPE$ umgebung
|
||||
shellEnvironment.elevatedInformationFormat=$ELEVATION$ $TYPE$ umgebung
|
||||
environmentConnectionDescription=Die Basisverbindung zum Erstellen einer Umgebung aus
|
||||
environmentScriptDescription=Das optionale benutzerdefinierte Init-Skript, das in der Shell ausgeführt wird
|
||||
environmentSnippets=Skript-Schnipsel
|
||||
commandSnippetsDescription=Die optionalen vordefinierten Skriptschnipsel, die zuerst ausgeführt werden
|
||||
environmentSnippetsDescription=Die optionalen vordefinierten Skript-Snippets, die bei der Initialisierung ausgeführt werden
|
||||
shellTypeDescription=Der explizite Shell-Typ zum Starten
|
||||
originPort=Ursprungsport
|
||||
originAddress=Herkunftsadresse
|
||||
remoteAddress=Entfernte Adresse
|
||||
remotePort=Entfernter Anschluss
|
||||
remoteSourceAddress=Entfernte Quelladresse
|
||||
remoteSourcePort=Entfernter Quellport
|
||||
originDestinationPort=Ursprung Zielhafen
|
||||
originDestinationAddress=Herkunft Zieladresse
|
||||
origin=Herkunft
|
||||
remoteHost=Entfernter Host
|
||||
address=Adresse
|
||||
proxmox=Proxmox
|
||||
proxmox.displayName=Proxmox
|
||||
proxmox.displayDescription=Verbindung zu Systemen in einer virtuellen Umgebung von Proxmox
|
||||
proxmoxVm.displayName=Proxmox VM
|
||||
proxmoxVm.displayDescription=Verbindung zu einer virtuellen Maschine in einer Proxmox VE über SSH
|
||||
proxmoxContainer.displayName=Proxmox Container
|
||||
proxmoxContainer.displayDescription=Verbindung zu einem Container in einer Proxmox VE
|
||||
sshDynamicTunnel.originDescription=Das System, von dem aus die ssh-Verbindung geöffnet werden soll
|
||||
sshDynamicTunnel.hostDescription=Das System, das als SOCKS-Proxy verwendet werden soll
|
||||
sshDynamicTunnel.bindingDescription=An welche Adressen der Tunnel gebunden werden soll
|
||||
sshRemoteTunnel.originDescription=Das System, von dem aus die ssh-Verbindung geöffnet werden soll und zu dem der Tunnel geöffnet werden soll
|
||||
sshRemoteTunnel.hostDescription=Das System, von dem aus der Ferntunnel zum Ursprung gestartet werden soll
|
||||
sshRemoteTunnel.bindingDescription=An welche Adressen der Tunnel gebunden werden soll
|
||||
sshLocalTunnel.originDescription=Das System, von dem aus der Tunnel gestartet werden soll
|
||||
sshLocalTunnel.hostDescription=Das System, zu dem der Tunnel geöffnet werden soll
|
||||
sshLocalTunnel.bindingDescription=An welche Adressen der Tunnel gebunden werden soll
|
||||
sshLocalTunnel.localAddressDescription=Die lokale Adresse zum Binden
|
||||
sshLocalTunnel.remoteAddressDescription=Die zu bindende Remote-Adresse
|
||||
active=Aktiv
|
||||
inactive=Inaktiv
|
||||
cmd.displayName=Benutzerdefinierter Terminal-Befehl
|
||||
cmd.displayDescription=Einen benutzerdefinierten Befehl auf einem System in deinem Terminal ausführen
|
||||
k8sPod.displayName=Kubernetes Pod
|
||||
k8sPod.displayDescription=Verbinden mit einem Pod und seinen Containern über kubectl
|
||||
k8sContainer.displayName=Kubernetes Container
|
||||
k8sContainer.displayDescription=Eine Shell für einen Container öffnen
|
||||
k8sCluster.displayName=Kubernetes Cluster
|
||||
k8sCluster.displayDescription=Verbinden mit einem Cluster und seinen Pods über kubectl
|
||||
sshTunnelGroup.displayName=SSH-Tunnel
|
||||
sshTunnelGroup.displayCategory=Alle Arten von SSH-Tunneln
|
||||
podmanCmd.displayName=Podman CLI
|
||||
podmanCmd.displayCategory=Zugriff auf Podman-Container über den CLI-Client
|
||||
podmanContainers=Podman Container
|
||||
local.displayName=Lokale Maschine
|
||||
local.displayDescription=Die Shell des lokalen Rechners
|
||||
cygwin=Cygwin
|
||||
msys2=MSYS2
|
||||
gitWindows=Git für Windows
|
||||
gitForWindows.displayName=Git für Windows
|
||||
gitForWindows.displayDescription=Zugriff auf deine lokale Git For Windows-Umgebung
|
||||
msys2.displayName=MSYS2
|
||||
msys2.displayDescription=Zugriff auf die Shells deiner MSYS2 Umgebung
|
||||
cygwin.displayName=Cygwin
|
||||
cygwin.displayDescription=Zugriff auf die Shells deiner Cygwin-Umgebung
|
||||
namespace=Namespace
|
||||
gitVaultIdentityStrategy=Git SSH Identität
|
||||
gitVaultIdentityStrategyDescription=Wenn du dich entschieden hast, eine SSH-Git-URL als Remote zu verwenden und dein Remote-Repository eine SSH-Identität erfordert, dann setze diese Option.\n\n Falls du eine HTTP-URL angegeben hast, kannst du diese Option ignorieren.
|
||||
dockerContainers=Docker-Container
|
||||
lxdContainers=LXD-Container
|
||||
dockerCmd.displayName=docker CLI-Client
|
||||
dockerCmd.displayDescription=Zugriff auf Docker-Container über den Docker CLI-Client
|
||||
lxdCmd.displayName=LXD CLI-Client
|
||||
lxdCmd.displayDescription=Zugriff auf LXD-Container über das lxc CLI cient
|
||||
wslCmd.displayName=wsl-Client
|
||||
wslCmd.displayDescription=Zugriff auf WSL-Instanzen über das wsl CLI cient
|
||||
k8sCmd.displayName=kubectl-Client
|
||||
k8sCmd.displayDescription=Zugriff auf Kubernetes-Cluster über kubectl
|
||||
k8sClusters=Kubernetes-Cluster
|
||||
shells=Verfügbare Muscheln
|
||||
startContainer=Container starten
|
||||
stopContainer=Container anhalten
|
||||
inspectContainer=Container inspizieren
|
||||
k8sClusterNameDescription=Der Name des Kontexts, in dem sich der Cluster befindet.
|
||||
pod=Pod
|
||||
podName=Pod-Name
|
||||
k8sClusterContext=Kontext
|
||||
k8sClusterContextDescription=Der Name des Kontexts, in dem sich der Cluster befindet
|
||||
k8sClusterNamespace=Namespace
|
||||
k8sClusterNamespaceDescription=Der benutzerdefinierte Namespace oder der Standard-Namespace, falls leer
|
||||
k8sConfigLocation=Config-Datei
|
||||
k8sConfigLocationDescription=Die benutzerdefinierte kubeconfig-Datei oder die Standarddatei, wenn sie leer ist
|
||||
inspectPod=Pod inspizieren
|
||||
showAllContainers=Nicht laufende Container anzeigen
|
||||
showAllPods=Nicht laufende Pods anzeigen
|
||||
wsl=WSL
|
||||
docker=Docker
|
||||
k8sPodHostDescription=Der Host, auf dem sich der Pod befindet
|
||||
k8sContainerDescription=Der Name des Kubernetes-Containers
|
||||
k8sPodDescription=Der Name des Kubernetes-Pods
|
||||
podDescription=Der Pod, auf dem sich der Container befindet
|
||||
k8sClusterHostDescription=Der Host, über den auf den Cluster zugegriffen werden soll. Muss kubectl installiert und konfiguriert haben, um auf den Cluster zugreifen zu können.
|
||||
script=Init-Skript
|
||||
connection=Verbindung
|
||||
shellCommand.displayName=Benutzerdefinierter Shell-Öffner-Befehl
|
||||
shellCommand.displayDescription=Öffnen einer Standard-Shell durch einen benutzerdefinierten Befehl
|
||||
ssh.displayName=Einfache SSH-Verbindung
|
||||
ssh.displayDescription=Verbindung über einen SSH-Befehlszeilen-Client
|
||||
sshConfig.displayName=SSH-Konfigurationsdatei
|
||||
sshConfig.displayDescription=Verbindung zu Hosts, die in einer SSH-Konfigurationsdatei definiert sind
|
||||
sshConfigHost.displayName=SSH-Konfigurationsdatei Host
|
||||
sshConfigHost.displayDescription=Sich mit einem in einer SSH-Konfigurationsdatei definierten Host verbinden
|
||||
sshConfigHost.password=Passwort
|
||||
sshConfigHost.passwordDescription=Gib das optionale Passwort für die Benutzeranmeldung an.
|
||||
sshConfigHost.identityPassphrase=Identitäts-Passphrase
|
||||
sshConfigHost.identityPassphraseDescription=Gib die optionale Passphrase für deinen Identitätsschlüssel an.
|
||||
binary.displayName=Binär
|
||||
binary.displayDescription=Binäre Daten
|
||||
text.displayName=Text
|
||||
shellCommand.hostDescription=Der Host, auf dem der Befehl ausgeführt werden soll
|
||||
shellCommand.commandDescription=Der Befehl, mit dem eine Shell geöffnet wird
|
||||
sshAgent=SSH-Agent
|
||||
none=Keine
|
||||
commandDescription=Die Befehle, die in einem Shell-Skript auf dem Host ausgeführt werden sollen.
|
||||
commandHostDescription=Der Host, auf dem der Befehl ausgeführt werden soll
|
||||
commandDataFlowDescription=Wie dieser Befehl Ein- und Ausgaben behandelt
|
||||
commandElevationDescription=Ob dieser Befehl mit erweiterten Rechten ausgeführt werden soll
|
||||
commandShellTypeDescription=Die Shell, die für diesen Befehl verwendet werden soll
|
||||
ssh.passwordDescription=Das optionale Passwort, das bei der Authentifizierung verwendet wird
|
||||
keyAuthentication=Schlüsselbasierte Authentifizierung
|
||||
keyAuthenticationDescription=Die zu verwendende Authentifizierungsmethode, wenn eine schlüsselbasierte Authentifizierung erforderlich ist.
|
||||
customAgent=Benutzerdefinierter Agent
|
||||
identityAgent=Identitätsagent
|
||||
ssh.proxyDescription=Der optionale Proxy-Host, der beim Aufbau der SSH-Verbindung verwendet wird. Es muss ein SSH-Client installiert sein.
|
||||
usage=Verwendung
|
||||
wslHostDescription=Der Host, auf dem sich die WSL-Instanz befindet. Muss wsl installiert haben.
|
||||
wslDistributionDescription=Der Name der WSL-Instanz
|
||||
wslUsernameDescription=Der explizite Benutzername, mit dem du dich anmeldest. Wenn er nicht angegeben wird, wird der Standardbenutzername verwendet.
|
||||
wslPasswordDescription=Das Passwort des Benutzers, das für sudo-Befehle verwendet werden kann.
|
||||
dockerHostDescription=Der Host, auf dem sich der Docker-Container befindet. Muss Docker installiert haben.
|
||||
dockerContainerDescription=Der Name des Docker-Containers
|
||||
lxdHostDescription=Der Host, auf dem sich der LXD-Container befindet. Muss lxc installiert haben.
|
||||
lxdContainerDescription=Der Name des LXD-Containers
|
||||
localMachine=Lokale Maschine
|
||||
rootScan=Root-Shell-Umgebung
|
||||
loginEnvironmentScan=Benutzerdefinierte Anmeldeumgebung
|
||||
k8sScan=Kubernetes-Cluster
|
||||
options=Optionen
|
||||
dockerRunningScan=Docker-Container ausführen
|
||||
dockerAllScan=Alle Docker-Container
|
||||
wslScan=WSL-Instanzen
|
||||
sshScan=SSH-Konfigurationsverbindungen
|
||||
requiresElevation=Erhöht ausführen
|
||||
default=Standard
|
||||
wslHost=WSL-Host
|
||||
timeout=Timeout
|
||||
installLocation=Installationsort
|
||||
installLocationDescription=Der Ort, an dem deine $NAME$ Umgebung installiert ist
|
||||
wsl.displayName=Windows Subsystem für Linux
|
||||
wsl.displayDescription=Verbindung zu einer WSL-Instanz unter Windows
|
||||
docker.displayName=Docker Container
|
||||
docker.displayDescription=Mit einem Docker-Container verbinden
|
||||
podman.displayName=Podman Container
|
||||
podman.displayDescription=Mit einem Podman-Container verbinden
|
||||
lxd.displayName=LXD-Container
|
||||
lxd.displayDescription=Verbindung zu einem LXD-Container über lxc
|
||||
container=Container
|
||||
host=Host
|
||||
port=Port
|
||||
user=Benutzer
|
||||
password=Passwort
|
||||
method=Methode
|
||||
uri=URL
|
||||
proxy=Proxy
|
||||
distribution=Vertrieb
|
||||
username=Benutzername
|
||||
shellType=Shell-Typ
|
||||
browseFile=Datei durchsuchen
|
||||
openShell=Shell im Terminal öffnen
|
||||
openCommand=Befehl im Terminal ausführen
|
||||
editFile=Datei bearbeiten
|
||||
description=Beschreibung
|
||||
keyFile=Identitätsdatei
|
||||
keyPassword=Passphrase
|
||||
key=Schlüssel
|
||||
furtherCustomization=Weitere Anpassungen
|
||||
furtherCustomizationDescription=Weitere Konfigurationsoptionen findest du in den ssh-Konfigurationsdateien
|
||||
location=Standort
|
||||
browse=Durchsuchen
|
||||
locationDescription=Der Dateipfad deines entsprechenden privaten Schlüssels
|
||||
configHost=Host
|
||||
configHostDescription=Der Host, auf dem sich die Konfiguration befindet
|
||||
configLocation=Config-Speicherort
|
||||
configLocationDescription=Der Dateipfad der Konfigurationsdatei
|
||||
pageant=Pageant
|
||||
gpgAgent=GPG Agent (Pro)
|
||||
gateway=Gateway
|
||||
gatewayDescription=Das optionale Gateway, das bei der Verbindung verwendet wird.
|
||||
connectionInformation=Verbindungsinformationen
|
||||
connectionInformationDescription=Wo die Verbindung zu
|
||||
passwordAuthentication=Passwort-Authentifizierung
|
||||
passwordDescription=Das optionale Passwort, das zur Authentifizierung verwendet wird.
|
||||
sshConfigString.displayName=Angepasste SSH-Verbindung
|
||||
sshConfigString.displayDescription=Eine vollständig angepasste SSH-Verbindung erstellen
|
||||
sshConfigStringContent=Konfiguration
|
||||
sshConfigStringContentDescription=SSH-Optionen für die Verbindung im OpenSSH-Config-Format
|
273
lang/proc/strings/translations_en.properties
Normal file
273
lang/proc/strings/translations_en.properties
Normal file
|
@ -0,0 +1,273 @@
|
|||
showInternalPods=Show internal pods
|
||||
showAllNamespaces=Show all namespaces
|
||||
showInternalContainers=Show internal containers
|
||||
refresh=Refresh
|
||||
vmwareGui=Start GUI
|
||||
monitorVm=Monitor VM
|
||||
addCluster=Add cluster ...
|
||||
showNonRunningInstances=Show non-running instances
|
||||
vmwareGuiDescription=Whether to start a virtual machine in the background or in a window.
|
||||
vmwareEncryptionPassword=Encryption password
|
||||
vmwareEncryptionPasswordDescription=The optional password used to encrypt the VM.
|
||||
vmwarePasswordDescription=The required password for the guest user.
|
||||
vmwarePassword=User password
|
||||
vmwareUser=Guest user
|
||||
runTempContainer=Run temporary container
|
||||
vmwareUserDescription=The username of your primary guest user
|
||||
dockerTempRunAlertTitle=Run temporary container
|
||||
dockerTempRunAlertHeader=This will run a shell process in a temporary container that will get automatically removed once it is stopped.
|
||||
imageName=Image name
|
||||
imageNameDescription=The container image identifier to use
|
||||
containerName=Container name
|
||||
containerNameDescription=The optional custom container name
|
||||
vm=Virtual machine
|
||||
yubikeyPiv=Yubikey PIV (Pro)
|
||||
vmDescription=The associated configuration file.
|
||||
vmwareScan=VMware desktop hypervisors
|
||||
library=Library
|
||||
customPkcs11Library=Custom PKCS#11 library (Pro)
|
||||
vmwareMachine.displayName=VMware Virtual Machine
|
||||
vmwareMachine.displayDescription=Connect to a virtual machine via SSH
|
||||
vmwareInstallation.displayName=VMware desktop hypervisor installation
|
||||
vmwareInstallation.displayDescription=Interact with the installed VMs via its CLI
|
||||
start=Start
|
||||
stop=Stop
|
||||
pause=Pause
|
||||
requiredSshServerAlertTitle=Setup SSH server
|
||||
requiredSshServerAlertHeader=Unable to find an installed SSH server in the VM.
|
||||
requiredSshServerAlertContent=To connect to the VM, XPipe is looking for a running SSH server but no available SSH server was detected for the VM..
|
||||
computerName=Computer Name
|
||||
pssComputerNameDescription=The computer name to connect to. It is assumed that it is already included in your trusted hosts.
|
||||
credentialUser=Credential User
|
||||
pssCredentialUserDescription=The user to login as.
|
||||
credentialPassword=Credential Password
|
||||
pssCredentialPasswordDescription=The password of the user.
|
||||
sshConfig=SSH config files
|
||||
autostart=Automatically connect on XPipe startup
|
||||
acceptHostKey=Accept host key
|
||||
modifyHostKeyPermissions=Modify host key permissions
|
||||
attachContainer=Attach to container
|
||||
openInVsCode=Open in VSCode
|
||||
containerLogs=Show container logs
|
||||
openSftpClient=Open in external SFTP client
|
||||
openTermius=Open in Termius
|
||||
showInternalInstances=Show internal instances
|
||||
editPod=Edit pod
|
||||
acceptHostKeyDescription=Trust the new host key and continue
|
||||
modifyHostKeyPermissionsDescription=Attempt to remove permissions of the original file so that OpenSSH is happy
|
||||
psSession.displayName=PowerShell Remote Session
|
||||
psSession.displayDescription=Connect via New-PSSession and Enter-PSSession
|
||||
sshLocalTunnel.displayName=Local SSH tunnel
|
||||
sshLocalTunnel.displayDescription=Establish an SSH tunnel to a remote host
|
||||
sshRemoteTunnel.displayName=Remote SSH tunnel
|
||||
sshRemoteTunnel.displayDescription=Establish a reverse SSH tunnel from a remote host
|
||||
sshDynamicTunnel.displayName=Dynamic SSH tunnel
|
||||
sshDynamicTunnel.displayDescription=Establish a SOCKS proxy through an SSH connection
|
||||
shellEnvironmentGroup.displayName=Shell Environments
|
||||
shellEnvironmentGroup.displayDescription=Shell Environments
|
||||
shellEnvironment.displayName=Custom Shell Environment
|
||||
shellEnvironment.displayDescription=Create a customized shell init environment
|
||||
shellEnvironment.informationFormat=$TYPE$ environment
|
||||
shellEnvironment.elevatedInformationFormat=$ELEVATION$ $TYPE$ environment
|
||||
environmentConnectionDescription=The base connection to create an environment from
|
||||
environmentScriptDescription=The optional custom init script to run in the shell
|
||||
environmentSnippets=Script snippets
|
||||
commandSnippetsDescription=The optional predefined script snippets to run first
|
||||
environmentSnippetsDescription=The optional predefined script snippets to run on initialization
|
||||
shellTypeDescription=The explicit shell type to launch
|
||||
originPort=Origin port
|
||||
originAddress=Origin address
|
||||
remoteAddress=Remote address
|
||||
remotePort=Remote port
|
||||
remoteSourceAddress=Remote source address
|
||||
remoteSourcePort=Remote source port
|
||||
originDestinationPort=Origin destination port
|
||||
originDestinationAddress=Origin destination address
|
||||
origin=Origin
|
||||
remoteHost=Remote host
|
||||
address=Address
|
||||
proxmox=Proxmox
|
||||
proxmox.displayName=Proxmox
|
||||
proxmox.displayDescription=Connect to systems in a Proxmox Virtual Environment
|
||||
proxmoxVm.displayName=Proxmox VM
|
||||
proxmoxVm.displayDescription=Connect to a virtual machine in a Proxmox VE via SSH
|
||||
proxmoxContainer.displayName=Proxmox Container
|
||||
proxmoxContainer.displayDescription=Connect to a container in a Proxmox VE
|
||||
sshDynamicTunnel.originDescription=The system from where to open the ssh connection
|
||||
sshDynamicTunnel.hostDescription=The system to use as SOCKS proxy
|
||||
sshDynamicTunnel.bindingDescription=What addresses to bind the tunnel to
|
||||
sshRemoteTunnel.originDescription=The system from where to open the ssh connection and to open the tunnel to
|
||||
sshRemoteTunnel.hostDescription=The system from which to start the remote tunnel to the origin
|
||||
sshRemoteTunnel.bindingDescription=What addresses to bind the tunnel to
|
||||
sshLocalTunnel.originDescription=The system from where to start the tunnel
|
||||
sshLocalTunnel.hostDescription=The system to open the tunnel to
|
||||
sshLocalTunnel.bindingDescription=What addresses to bind the tunnel to
|
||||
sshLocalTunnel.localAddressDescription=The local address to bind
|
||||
sshLocalTunnel.remoteAddressDescription=The remote address to bind
|
||||
active=Active
|
||||
inactive=Inactive
|
||||
cmd.displayName=Custom Terminal Command
|
||||
cmd.displayDescription=Run a custom command on a system in your terminal
|
||||
k8sPod.displayName=Kubernetes Pod
|
||||
k8sPod.displayDescription=Connect to a pod and its containers via kubectl
|
||||
k8sContainer.displayName=Kubernetes Container
|
||||
k8sContainer.displayDescription=Open a shell to a container
|
||||
k8sCluster.displayName=Kubernetes Cluster
|
||||
k8sCluster.displayDescription=Connect to a cluster and its pods via kubectl
|
||||
sshTunnelGroup.displayName=SSH Tunnels
|
||||
sshTunnelGroup.displayCategory=All types of SSH tunnels
|
||||
podmanCmd.displayName=Podman CLI
|
||||
podmanCmd.displayCategory=Access Podman containers via the CLI client
|
||||
podmanContainers=Podman containers
|
||||
local.displayName=Local machine
|
||||
local.displayDescription=The shell of the local machine
|
||||
cygwin=Cygwin
|
||||
msys2=MSYS2
|
||||
gitWindows=Git For Windows
|
||||
gitForWindows.displayName=Git For Windows
|
||||
gitForWindows.displayDescription=Access your local Git For Windows environment
|
||||
msys2.displayName=MSYS2
|
||||
msys2.displayDescription=Access shells of your MSYS2 environment
|
||||
cygwin.displayName=Cygwin
|
||||
cygwin.displayDescription=Access shells of your Cygwin environment
|
||||
namespace=Namespace
|
||||
gitVaultIdentityStrategy=Git SSH identity
|
||||
gitVaultIdentityStrategyDescription=If you chose to use an SSH git URL as the remote and your remote repository requires an SSH identity, then set this option.\n\nIn case you provided an HTTP url, you can ignore this option.
|
||||
dockerContainers=Docker containers
|
||||
lxdContainers=LXD containers
|
||||
dockerCmd.displayName=docker CLI client
|
||||
dockerCmd.displayDescription=Access Docker containers via the docker CLI client
|
||||
lxdCmd.displayName=LXD CLI client
|
||||
lxdCmd.displayDescription=Access LXD containers via the lxc CLI cient
|
||||
wslCmd.displayName=wsl client
|
||||
wslCmd.displayDescription=Access WSL instances via the wsl CLI cient
|
||||
k8sCmd.displayName=kubectl client
|
||||
k8sCmd.displayDescription=Access Kubernetes clusters via kubectl
|
||||
k8sClusters=Kubernetes clusters
|
||||
shells=Available shells
|
||||
startContainer=Start container
|
||||
stopContainer=Stop container
|
||||
inspectContainer=Inspect container
|
||||
k8sClusterNameDescription=The name of the context the cluster is in.
|
||||
pod=Pod
|
||||
podName=Pod name
|
||||
k8sClusterContext=Context
|
||||
k8sClusterContextDescription=The name of the context the cluster is in
|
||||
k8sClusterNamespace=Namespace
|
||||
k8sClusterNamespaceDescription=The custom namespace or the default one if empty
|
||||
k8sConfigLocation=Config file
|
||||
k8sConfigLocationDescription=The custom kubeconfig file or the default one if left empty
|
||||
inspectPod=Inspect pod
|
||||
showAllContainers=Show non-running containers
|
||||
showAllPods=Show non-running pods
|
||||
wsl=WSL
|
||||
docker=Docker
|
||||
k8sPodHostDescription=The host on which the pod is located
|
||||
k8sContainerDescription=The name of the Kubernetes container
|
||||
k8sPodDescription=The name of the Kubernetes pod
|
||||
podDescription=The pod on which the container is located
|
||||
k8sClusterHostDescription=The host through which the cluster should be accessed. Must have kubectl installed and configured to be able to access the cluster.
|
||||
script=Init Script
|
||||
connection=Connection
|
||||
shellCommand.displayName=Custom Shell Opener Command
|
||||
shellCommand.displayDescription=Open a standard shell through a custom command
|
||||
ssh.displayName=Simple SSH Connection
|
||||
ssh.displayDescription=Connect via an SSH command-line client
|
||||
sshConfig.displayName=SSH Config File
|
||||
sshConfig.displayDescription=Connect to hosts defined in an SSH config file
|
||||
sshConfigHost.displayName=SSH Config File Host
|
||||
sshConfigHost.displayDescription=Connect to a host defined in an SSH config file
|
||||
sshConfigHost.password=Password
|
||||
sshConfigHost.passwordDescription=Provide the optional password for the user login.
|
||||
sshConfigHost.identityPassphrase=Identity passphrase
|
||||
sshConfigHost.identityPassphraseDescription=Provide the optional passphrase for your identity key.
|
||||
binary.displayName=Binary
|
||||
binary.displayDescription=Binary data
|
||||
text.displayName=Text
|
||||
shellCommand.hostDescription=The host to execute the command on
|
||||
shellCommand.commandDescription=The command that will open a shell
|
||||
sshAgent=SSH-Agent
|
||||
none=None
|
||||
commandDescription=The commands to execute in a shell script on the host.
|
||||
commandHostDescription=The host to run the command on
|
||||
commandDataFlowDescription=How this command handles input and output
|
||||
commandElevationDescription=Whether to run this command with elevated permissions
|
||||
commandShellTypeDescription=The shell to use for this command
|
||||
ssh.passwordDescription=The optional password to use when authenticating
|
||||
keyAuthentication=Key-based authentication
|
||||
keyAuthenticationDescription=The authentication method to use if key-based authentication is required.
|
||||
customAgent=Custom agent
|
||||
identityAgent=Identity agent
|
||||
ssh.proxyDescription=The optional proxy host to use when establishing the SSH connection. Must have an ssh client installed.
|
||||
usage=Usage
|
||||
wslHostDescription=The host on which the WSL instance is located on. Must have wsl installed.
|
||||
wslDistributionDescription=The name of the WSL instance
|
||||
wslUsernameDescription=The explicit username to login as. If not specified, the default username will be used.
|
||||
wslPasswordDescription=The user's password which can be used for sudo commands.
|
||||
dockerHostDescription=The host on which the docker container is located on. Must have docker installed.
|
||||
dockerContainerDescription=The name of the docker container
|
||||
lxdHostDescription=The host on which the LXD container is located on. Must have lxc installed.
|
||||
lxdContainerDescription=The name of the LXD container
|
||||
localMachine=Local Machine
|
||||
rootScan=Root shell environment
|
||||
loginEnvironmentScan=Custom login environment
|
||||
k8sScan=Kubernetes cluster
|
||||
options=Options
|
||||
dockerRunningScan=Running docker containers
|
||||
dockerAllScan=All docker containers
|
||||
wslScan=WSL instances
|
||||
sshScan=SSH config connections
|
||||
requiresElevation=Run Elevated
|
||||
default=Default
|
||||
wslHost=WSL Host
|
||||
timeout=Timeout
|
||||
installLocation=Install location
|
||||
installLocationDescription=The location where your $NAME$ environment is installed
|
||||
wsl.displayName=Windows Subsystem for Linux
|
||||
wsl.displayDescription=Connect to a WSL instance running on Windows
|
||||
docker.displayName=Docker Container
|
||||
docker.displayDescription=Connect to a docker container
|
||||
podman.displayName=Podman Container
|
||||
podman.displayDescription=Connect to a Podman container
|
||||
lxd.displayName=LXD Container
|
||||
lxd.displayDescription=Connect to a LXD container via lxc
|
||||
container=Container
|
||||
host=Host
|
||||
port=Port
|
||||
user=User
|
||||
password=Password
|
||||
method=Method
|
||||
uri=URL
|
||||
proxy=Proxy
|
||||
distribution=Distribution
|
||||
username=Username
|
||||
shellType=Shell Type
|
||||
browseFile=Browse File
|
||||
openShell=Open Shell in Terminal
|
||||
openCommand=Execute Command in Terminal
|
||||
editFile=Edit File
|
||||
description=Description
|
||||
keyFile=Identity File
|
||||
keyPassword=Passphrase
|
||||
key=Key
|
||||
furtherCustomization=Further customization
|
||||
furtherCustomizationDescription=For more configuration options, use the ssh config files
|
||||
location=Location
|
||||
browse=Browse
|
||||
locationDescription=The file path of your corresponding private key
|
||||
configHost=Host
|
||||
configHostDescription=The host on which the config is located on
|
||||
configLocation=Config location
|
||||
configLocationDescription=The file path of the config file
|
||||
pageant=Pageant
|
||||
gpgAgent=GPG Agent (Pro)
|
||||
gateway=Gateway
|
||||
gatewayDescription=The optional gateway to use when connecting.
|
||||
connectionInformation=Connection information
|
||||
connectionInformationDescription=Where to connect to
|
||||
passwordAuthentication=Password authentication
|
||||
passwordDescription=The optional password to use to authenticate.
|
||||
sshConfigString.displayName=Customized SSH Connection
|
||||
sshConfigString.displayDescription=Create a fully customized SSH connection
|
||||
sshConfigStringContent=Configuration
|
||||
sshConfigStringContentDescription=SSH options for the connection in OpenSSH config format
|
11
lang/proc/texts/elevation_de.md
Normal file
11
lang/proc/texts/elevation_de.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
## Elevation
|
||||
|
||||
Der Prozess der Berechtigungserweiterung ist betriebssystemspezifisch.
|
||||
|
||||
### Linux & macOS
|
||||
|
||||
Jeder erweiterte Befehl wird mit `sudo` ausgeführt. Das optionale `sudo` Passwort wird bei Bedarf über XPipe abgefragt. Du kannst in den Einstellungen festlegen, ob du dein Passwort jedes Mal eingeben willst, wenn es gebraucht wird, oder ob du es für die aktuelle Sitzung zwischenspeichern willst.
|
||||
|
||||
### Windows
|
||||
|
||||
Unter Windows ist es nicht möglich, die Berechtigungen eines untergeordneten Prozesses zu erhöhen, wenn der übergeordnete Prozess nicht ebenfalls mit erhöhten Berechtigungen ausgeführt wird. Wenn XPipe also nicht als Administrator ausgeführt wird, kannst du lokal keine Berechtigungserweiterung nutzen. Bei Fernverbindungen muss das verbundene Benutzerkonto mit Administratorrechten ausgestattet sein.
|
11
lang/proc/texts/elevation_en.md
Normal file
11
lang/proc/texts/elevation_en.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
## Elevation
|
||||
|
||||
The process of permissions elevation is operating system specific.
|
||||
|
||||
### Linux & macOS
|
||||
|
||||
Any elevated command is executed with `sudo`. The optional `sudo` password is queried via XPipe when needed. You have the ability to adjust the elevation behavior in the settings to control whether you want to enter your password every time it is needed or if you want to cache it for the current session.
|
||||
|
||||
### Windows
|
||||
|
||||
On Windows, it is not possible to elevate the permissions of a child process if the parent process is not running with elevated permissions as well. Therefore, if XPipe is not run as an administrator, you will be unable to use any elevation locally. For remote connections, the connected user account has to be given administrator privileges.
|
9
lang/proc/texts/environmentScript_de.md
Normal file
9
lang/proc/texts/environmentScript_de.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
## Init-Skript
|
||||
|
||||
Die optionalen Befehle, die ausgeführt werden, nachdem die Init-Dateien und -Profile der Shell ausgeführt worden sind.
|
||||
|
||||
Du kannst dies wie ein normales Shell-Skript behandeln, d.h. du kannst die gesamte Syntax verwenden, die die Shell in Skripten unterstützt. Alle Befehle, die du ausführst, werden von der Shell übernommen und verändern die Umgebung. Wenn du also zum Beispiel eine Variable setzt, hast du in dieser Shell-Sitzung Zugriff auf diese Variable.
|
||||
|
||||
### Blockierende Befehle
|
||||
|
||||
Beachte, dass blockierende Befehle, die Benutzereingaben erfordern, den Shell-Prozess einfrieren können, wenn XPipe ihn zuerst intern im Hintergrund startet. Um dies zu vermeiden, rufe diese blockierenden Befehle nur auf, wenn die Variable `TERM` nicht auf `dumb` gesetzt ist. XPipe setzt die Variable `TERM=dumb` automatisch, wenn es die Shell-Sitzung im Hintergrund vorbereitet und setzt dann `TERM=xterm-256color`, wenn es das Terminal tatsächlich öffnet.
|
9
lang/proc/texts/environmentScript_en.md
Normal file
9
lang/proc/texts/environmentScript_en.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
## Init script
|
||||
|
||||
The optional commands to run after the shell's init files and profiles have been executed.
|
||||
|
||||
You can treat this as a normal shell script, i.e. make use of all the syntax that the shell supports in scripts. All commands you execute are sourced by the shell and modify the environment. So if you for example set a variable, you will have access to this variable in this shell session.
|
||||
|
||||
### Blocking commands
|
||||
|
||||
Note that blocking commands that require user input can freeze the shell process when XPipe starts it up internally first in the background. To avoid this, only call these blocking commands if the variable `TERM` is not set to `dumb`. XPipe automatically sets the variable `TERM=dumb` when it is preparing the shell session in the background and then sets `TERM=xterm-256color` when actually opening the terminal.
|
3
lang/proc/texts/proxmoxPassword_de.md
Normal file
3
lang/proc/texts/proxmoxPassword_de.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
## Passwort
|
||||
|
||||
Wenn du auf deiner VM eine komplexere SSH-Authentifizierung als ein einfaches Passwort verwendest, kannst du das System einfach als normale SSH-Verbindung in XPipe hinzufügen. Wenn es von außen nicht zugänglich ist, kannst du das übergeordnete PVE-System als SSH-Gateway einrichten.
|
3
lang/proc/texts/proxmoxPassword_en.md
Normal file
3
lang/proc/texts/proxmoxPassword_en.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
## Password
|
||||
|
||||
If you are using a more complex SSH authentication on your VM rather than a simple password, you can just add the system as a normal SSH connection in XPipe. If it is not accessible from the outside, you can set the parent PVE system as an SSH gateway.
|
5
lang/proc/texts/proxmoxUsername_de.md
Normal file
5
lang/proc/texts/proxmoxUsername_de.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Benutzername
|
||||
|
||||
Der Benutzername, mit dem du dich anmeldest. XPipe versucht, sich über SSH mit den angegebenen Anmeldedaten zu verbinden.
|
||||
|
||||
Wenn kein SSH-Server läuft, wird versucht, den installierten SSH-Server zu starten. Beachte, dass du dieses Verhalten im Menü Sicherheitseinstellungen deaktivieren kannst.
|
5
lang/proc/texts/proxmoxUsername_en.md
Normal file
5
lang/proc/texts/proxmoxUsername_en.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Username
|
||||
|
||||
The username to log in as. XPipe will attempt to connect via SSH using the provided credentials.
|
||||
|
||||
If no SSH server is running it will attempt to start the installed SSH server. Note that you can disable this behavior in the security settings menu.
|
5
lang/proc/texts/runTempContainer_de.md
Normal file
5
lang/proc/texts/runTempContainer_de.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Temporäre Container
|
||||
|
||||
Hiermit wird ein temporärer Container mit dem angegebenen Image gestartet, der automatisch entfernt wird, sobald er gestoppt wird. Der Container läuft auch dann weiter, wenn im Container-Image kein Befehl angegeben ist, der ausgeführt werden soll.
|
||||
|
||||
Das kann nützlich sein, wenn du schnell eine bestimmte Umgebung mit einem bestimmten Container-Image einrichten willst. Du kannst den Container dann wie gewohnt in XPipe betreten, deine Operationen durchführen und den Container stoppen, sobald er nicht mehr benötigt wird. Er wird dann automatisch entfernt.
|
5
lang/proc/texts/runTempContainer_en.md
Normal file
5
lang/proc/texts/runTempContainer_en.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Temporary containers
|
||||
|
||||
This will run a temporary container using the specified image that will get automatically removed once it is stopped. The container will keep running even if the container image does not have any command specified that will run.
|
||||
|
||||
This can be useful if you quickly want to set up a certain environment by using a certain container image. You can then enter the container as normal in XPipe, perform your operations, and stop the container once it's no longer needed. It is then removed automatically.
|
30
lang/proc/texts/shellCommand_de.md
Normal file
30
lang/proc/texts/shellCommand_de.md
Normal file
|
@ -0,0 +1,30 @@
|
|||
## Benutzerdefinierte Shell-Verbindungen
|
||||
|
||||
Öffnet eine Shell mit dem benutzerdefinierten Befehl, indem es den angegebenen Befehl auf dem ausgewählten Hostsystem ausführt. Diese Shell kann entweder lokal oder remote sein.
|
||||
|
||||
Beachte, dass diese Funktion erwartet, dass die Shell von einem Standardtyp wie `cmd`, `bash`, etc. ist. Wenn du andere Arten von Shells und Befehlen in einem Terminal öffnen willst, kannst du stattdessen den benutzerdefinierten Terminalbefehlstyp verwenden. Wenn du Standardshells verwendest, kannst du diese Verbindung auch im Dateibrowser öffnen.
|
||||
|
||||
### Interaktive Eingabeaufforderungen
|
||||
|
||||
Der Shell-Prozess kann eine Zeitüberschreitung verursachen oder sich aufhängen, wenn eine unerwartete
|
||||
eingabeaufforderung, wie z. B. eine Passwortabfrage. Deshalb solltest du immer darauf achten, dass es keine interaktiven Eingabeaufforderungen gibt.
|
||||
|
||||
Ein Befehl wie `ssh user@host` funktioniert hier zum Beispiel problemlos, solange kein Passwort verlangt wird.
|
||||
|
||||
### Benutzerdefinierte lokale Shells
|
||||
|
||||
In vielen Fällen ist es sinnvoll, eine Shell mit bestimmten Optionen zu starten, die normalerweise standardmäßig deaktiviert sind, damit einige Skripte und Befehle richtig funktionieren. Zum Beispiel:
|
||||
|
||||
- [Verzögerte Erweiterung in
|
||||
cmd](https://ss64.com/nt/delayedexpansion.html)
|
||||
- [Powershell-Ausführung
|
||||
richtlinien](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.3)
|
||||
- [Bash POSIX
|
||||
Modus](https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html)
|
||||
- Und jede andere mögliche Startoption für eine Shell deiner Wahl
|
||||
|
||||
Dies kannst du erreichen, indem du benutzerdefinierte Shell-Befehle erstellst, zum Beispiel mit den folgenden Befehlen:
|
||||
|
||||
- `cmd /v`
|
||||
- `powershell -ExecutionMode Bypass`
|
||||
- `bash --posix`
|
30
lang/proc/texts/shellCommand_en.md
Normal file
30
lang/proc/texts/shellCommand_en.md
Normal file
|
@ -0,0 +1,30 @@
|
|||
## Custom shell connections
|
||||
|
||||
Opens a shell using the custom command by executing the given command on the selected host system. This shell can either be local or remote.
|
||||
|
||||
Note that this functionality expects the shell to be of a standard type such as `cmd`, `bash`, etc. If you want to open any other types of shells and commands in a terminal, you can use the custom terminal command type instead. Using standard shells allows you to also open this connection in the file browser.
|
||||
|
||||
### Interactive prompts
|
||||
|
||||
The shell process might time out or hang in case there is an unexpected required
|
||||
input prompt, like a password prompt. Therefore, you should always make sure that there are no interactive input prompts.
|
||||
|
||||
For example, a command like `ssh user@host` will work fine here as long there is no password required.
|
||||
|
||||
### Custom local shells
|
||||
|
||||
In many cases, it is useful to launch a shell with certain options that are usually disabled by default in order to make some scripts and commands work properly. For example:
|
||||
|
||||
- [Delayed Expansion in
|
||||
cmd](https://ss64.com/nt/delayedexpansion.html)
|
||||
- [Powershell execution
|
||||
policies](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.3)
|
||||
- [Bash POSIX
|
||||
Mode](https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html)
|
||||
- And any other possible launch option for a shell of your choice
|
||||
|
||||
This can be achieved by creating custom shell commands with for example the following commands:
|
||||
|
||||
- `cmd /v`
|
||||
- `powershell -ExecutionMode Bypass`
|
||||
- `bash --posix`
|
9
lang/proc/texts/sshConfigs_de.md
Normal file
9
lang/proc/texts/sshConfigs_de.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
### SSH-Konfigurationen
|
||||
|
||||
XPipe lädt alle Hosts und wendet alle Einstellungen an, die du in der ausgewählten Datei konfiguriert hast. Wenn du also eine Konfigurationsoption entweder auf globaler oder hostspezifischer Basis angibst, wird sie automatisch auf die von XPipe aufgebaute Verbindung angewendet.
|
||||
|
||||
Wenn du mehr über die Verwendung von SSH-Konfigurationen erfahren möchtest, kannst du `man ssh_config` verwenden oder diese [Anleitung](https://www.ssh.com/academy/ssh/config) lesen.
|
||||
|
||||
### Identitäten
|
||||
|
||||
Beachte, dass du hier auch eine `IdentityFile` Option angeben kannst. Wenn du hier eine Identität angibst, werden alle anderen Identitäten, die weiter unten angegeben werden, ignoriert.
|
9
lang/proc/texts/sshConfigs_en.md
Normal file
9
lang/proc/texts/sshConfigs_en.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
### SSH configs
|
||||
|
||||
XPipe loads all hosts and applies all settings that you have configured in the selected file. So by specifying a configuration option on either a global or host-specific basis, it will automatically be applied to the connection established by XPipe.
|
||||
|
||||
If you want to learn more about how to use SSH configs, you can use `man ssh_config` or read this [guide](https://www.ssh.com/academy/ssh/config).
|
||||
|
||||
### Identities
|
||||
|
||||
Note that you can also specify an `IdentityFile` option in here. If any identity is specified in here, any otherwise specified identity later down below will be ignored.
|
5
lang/proc/texts/sshDynamicTunnelBinding_de.md
Normal file
5
lang/proc/texts/sshDynamicTunnelBinding_de.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Tunnelbindung
|
||||
|
||||
Die Bindungsinformationen, die du angibst, werden direkt an den `ssh`-Client wie folgt weitergegeben: `-D [Adresse:]Port`.
|
||||
|
||||
Standardmäßig wird die Adresse an die Loopback-Schnittstelle gebunden. Du kannst auch beliebige Platzhalter für die Adresse verwenden, z.B. die Adresse `0.0.0.0`, um an alle Netzwerkschnittstellen zu binden, die über IPv4 erreichbar sind. Wenn du die Adresse komplett weglässt, wird der Platzhalter `*` verwendet, der Verbindungen zu allen Netzwerkschnittstellen erlaubt. Beachte, dass manche Netzwerkschnittstellen-Notation nicht von allen Betriebssystemen unterstützt wird. Windows-Server zum Beispiel unterstützen den Platzhalter `*` nicht.
|
5
lang/proc/texts/sshDynamicTunnelBinding_en.md
Normal file
5
lang/proc/texts/sshDynamicTunnelBinding_en.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Tunnel binding
|
||||
|
||||
The binding information you provide is passed straight to the `ssh` client as follows: `-D [address:]port`.
|
||||
|
||||
By default, the address will bind to the loopback interface. You can also make use of any address wildcards, e.g. setting the address to `0.0.0.0` in order to bind to all network interfaces accessible via IPv4. When you completely omit the address, the wildcard `*`, which allows connections on all network interfaces, will be used. Note that some network interfaces notation might not be supported on all operating systems. Windows servers for example don't support the wildcard `*`.
|
5
lang/proc/texts/sshDynamicTunnelOrigin_de.md
Normal file
5
lang/proc/texts/sshDynamicTunnelOrigin_de.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Tunnelherkunft
|
||||
|
||||
XPipe ist völlig flexibel, wenn es darum geht, wo ein Befehl ausgeführt werden soll. Deshalb kannst du einen Tunnel nicht nur auf deinem lokalen Rechner, sondern auf jedem beliebigen System einrichten.
|
||||
|
||||
Der Tunnel-Opener-Befehl wird auf dem System ausgeführt, das du hier angibst. Du musst also einen `ssh`-Client auf diesem System installiert haben. Wenn der Ursprung nicht der lokale Rechner ist, hält XPipe im Hintergrund eine Verbindung zu diesem entfernten System offen, um den Tunnel zu verwalten.
|
5
lang/proc/texts/sshDynamicTunnelOrigin_en.md
Normal file
5
lang/proc/texts/sshDynamicTunnelOrigin_en.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Tunnel Origin
|
||||
|
||||
XPipe is fully flexible with regards on where to execute a command. Therefore, you can establish a tunnel on any system in addition to your local machine.
|
||||
|
||||
The tunnel opener command will be executed on the system you specify here, so you need to have an `ssh` client installed on that system. If the origin is not the local machine, XPipe will keep a connection open to that remote system in the background to manage the tunnel.
|
9
lang/proc/texts/sshGateway_de.md
Normal file
9
lang/proc/texts/sshGateway_de.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
## Shell-Verbindungsgateways
|
||||
|
||||
Wenn diese Option aktiviert ist, öffnet XPipe zuerst eine Shell-Verbindung zum Gateway und von dort aus eine SSH-Verbindung zum angegebenen Host. Der `ssh`-Befehl muss verfügbar sein und sich im `PATH` des gewählten Gateways befinden.
|
||||
|
||||
### Server springen
|
||||
|
||||
Dieser Mechanismus ist den Jump Servern ähnlich, aber nicht gleichwertig. Er ist völlig unabhängig vom SSH-Protokoll, so dass du jede Shell-Verbindung als Gateway verwenden kannst.
|
||||
|
||||
Wenn du auf der Suche nach richtigen SSH-Sprungservern bist, vielleicht auch in Kombination mit einer Agentenweiterleitung, verwende die benutzerdefinierte SSH-Verbindungsfunktion mit der Konfigurationsoption `ProxyJump`.
|
9
lang/proc/texts/sshGateway_en.md
Normal file
9
lang/proc/texts/sshGateway_en.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
## Shell connection gateways
|
||||
|
||||
If enabled, XPipe first opens a shell connection to the gateway and from there opens a SSH connection to the specified host. The `ssh` command must be available and located in the `PATH` on your chosen gateway.
|
||||
|
||||
### Jump servers
|
||||
|
||||
This mechanism is similar to jump servers, but not equivalent. It is completely independent of the SSH protocol, so you can use any shell connection as a gateway.
|
||||
|
||||
If you are looking for proper SSH jump servers, maybe also in combination with agent forwarding, use the custom SSH connection functionality with the `ProxyJump` configuration option.
|
55
lang/proc/texts/sshKey_de.md
Normal file
55
lang/proc/texts/sshKey_de.md
Normal file
|
@ -0,0 +1,55 @@
|
|||
### Keine
|
||||
|
||||
Deaktiviert die `publickey`-Authentifizierung.
|
||||
|
||||
### SSH-Agent
|
||||
|
||||
Wenn deine Identitäten im SSH-Agenten gespeichert sind, kann das ssh-Programm sie verwenden, wenn der Agent gestartet ist.
|
||||
XPipe startet den Agentenprozess automatisch, wenn er noch nicht läuft.
|
||||
|
||||
### Pageant (Windows)
|
||||
|
||||
Wenn du Pageant unter Windows verwendest, prüft XPipe zuerst, ob Pageant läuft.
|
||||
Aufgrund der Natur von Pageant liegt es in deiner Verantwortung, dass es
|
||||
da du jedes Mal alle Schlüssel, die du hinzufügen möchtest, manuell eingeben musst.
|
||||
Wenn es läuft, übergibt XPipe die richtig benannte Pipe über
|
||||
`-oIdentityAgent=...` an ssh weiter, du musst keine eigenen Konfigurationsdateien einbinden.
|
||||
|
||||
Beachte, dass es einige Implementierungsfehler im OpenSSH-Client gibt, die Probleme verursachen können
|
||||
wenn dein Benutzername Leerzeichen enthält oder zu lang ist.
|
||||
|
||||
### Pageant (Linux & macOS)
|
||||
|
||||
Wenn deine Identitäten im Pageant-Agent gespeichert sind, kann das ssh-Programm sie verwenden, wenn der Agent gestartet wird.
|
||||
XPipe startet den Agentenprozess automatisch, wenn er noch nicht läuft.
|
||||
|
||||
### Identitätsdatei
|
||||
|
||||
Du kannst auch eine Identitätsdatei mit einer optionalen Passphrase angeben.
|
||||
Diese Option ist das Äquivalent zu `ssh -i <file>`.
|
||||
|
||||
Beachte, dass dies der *private* Schlüssel sein sollte, nicht der öffentliche.
|
||||
Wenn du das verwechselst, wird dir ssh nur kryptische Fehlermeldungen geben.
|
||||
|
||||
### GPG Agent
|
||||
|
||||
Wenn deine Identitäten zum Beispiel auf einer Smartcard gespeichert sind, kannst du sie dem SSH-Client über den `gpg-agent` zur Verfügung stellen.
|
||||
Diese Option aktiviert automatisch die SSH-Unterstützung des Agenten, falls sie noch nicht aktiviert ist, und startet den GPG-Agent-Daemon mit den richtigen Einstellungen neu.
|
||||
|
||||
### Yubikey PIV
|
||||
|
||||
Wenn deine Identitäten mit der PIV-Chipkartenfunktion des Yubikey gespeichert sind, kannst du sie mit
|
||||
kannst du sie mit der YKCS11-Bibliothek von Yubico abrufen, die im Lieferumfang des Yubico PIV Tools enthalten ist.
|
||||
|
||||
Beachte, dass du eine aktuelle Version von OpenSSH benötigst, um diese Funktion nutzen zu können.
|
||||
|
||||
### Benutzerdefinierter Agent
|
||||
|
||||
Du kannst auch einen benutzerdefinierten Agenten verwenden, indem du hier entweder den Socket-Speicherort oder den benannten Pipe-Speicherort angibst.
|
||||
Er wird dann über die Option `IdentityAgent` übergeben.
|
||||
|
||||
### Benutzerdefinierte PKCS#11-Bibliothek
|
||||
|
||||
Hiermit wird der OpenSSH-Client angewiesen, die angegebene Shared-Library-Datei zu laden, die die Authentifizierung übernimmt.
|
||||
|
||||
Beachte, dass du einen aktuellen Build von OpenSSH brauchst, um diese Funktion zu nutzen.
|
55
lang/proc/texts/sshKey_en.md
Normal file
55
lang/proc/texts/sshKey_en.md
Normal file
|
@ -0,0 +1,55 @@
|
|||
### None
|
||||
|
||||
Disables `publickey` authentication.
|
||||
|
||||
### SSH-Agent
|
||||
|
||||
In case your identities are stored in the SSH-Agent, the ssh executable can use them if the agent is started.
|
||||
XPipe will automatically start the agent process if it is not running yet.
|
||||
|
||||
### Pageant (Windows)
|
||||
|
||||
In case you are using pageant on Windows, XPipe will check whether pageant is running first.
|
||||
Due to the nature of pageant, it is your responsibility to have it
|
||||
running as you manually have to specify all keys you would like to add every time.
|
||||
If it is running, XPipe will pass the proper named pipe via
|
||||
`-oIdentityAgent=...` to ssh, you don't have to include any custom config files.
|
||||
|
||||
Note that there are some implementation bugs in the OpenSSH client that can cause issues
|
||||
if your username contains spaces or is too long, so try to use the latest version.
|
||||
|
||||
### Pageant (Linux & macOS)
|
||||
|
||||
In case your identities are stored in the pageant agent, the ssh executable can use them if the agent is started.
|
||||
XPipe will automatically start the agent process if it is not running yet.
|
||||
|
||||
### Identity file
|
||||
|
||||
You can also specify an identity file with an optional passphrase.
|
||||
This option is the equivalent of `ssh -i <file>`.
|
||||
|
||||
Note that this should be the *private* key, not the public one.
|
||||
If you mix that up, ssh will only give you cryptic error messages.
|
||||
|
||||
### GPG Agent
|
||||
|
||||
If your identities are stored for example on a smartcard, you can choose to provide them to the SSH client via the `gpg-agent`.
|
||||
This option will automatically enable SSH support of the agent if not enabled yet and restart the GPG agent daemon with the correct settings.
|
||||
|
||||
### Yubikey PIV
|
||||
|
||||
If your identities are stored with the PIV smart card function of the Yubikey, you can retreive
|
||||
them with Yubico's YKCS11 library, which comes bundled with Yubico PIV Tool.
|
||||
|
||||
Note that you need an up-to-date build of OpenSSH in order to use this feature.
|
||||
|
||||
### Custom agent
|
||||
|
||||
You can also use a custom agent by providing either the socket location or named pipe location here.
|
||||
This will pass it via the `IdentityAgent` option.
|
||||
|
||||
### Custom PKCS#11 library
|
||||
|
||||
This will instruct the OpenSSH client to load the specified shared library file, which will handle the authentication.
|
||||
|
||||
Note that you need an up-to-date build of OpenSSH in order to use this feature.
|
5
lang/proc/texts/sshLocalTunnelBinding_de.md
Normal file
5
lang/proc/texts/sshLocalTunnelBinding_de.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Bindung
|
||||
|
||||
Die Bindungsinformationen, die du angibst, werden direkt an den `ssh`-Client wie folgt übergeben: `-L [origin_address:]origin_port:remote_address:remote_port`.
|
||||
|
||||
Standardmäßig wird der Ursprung an die Loopback-Schnittstelle gebunden, wenn nicht anders angegeben. Du kannst auch beliebige Adressplatzhalter verwenden, z.B. indem du die Adresse auf `0.0.0.0` setzt, um an alle Netzwerkschnittstellen zu binden, die über IPv4 erreichbar sind. Wenn du die Adresse komplett weglässt, wird der Platzhalter `*` verwendet, der Verbindungen zu allen Netzwerkschnittstellen erlaubt. Beachte, dass manche Netzwerkschnittstellen-Notation nicht von allen Betriebssystemen unterstützt wird. Windows-Server zum Beispiel unterstützen den Platzhalter `*` nicht.
|
5
lang/proc/texts/sshLocalTunnelBinding_en.md
Normal file
5
lang/proc/texts/sshLocalTunnelBinding_en.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Binding
|
||||
|
||||
The binding information you provide is passed straight to the `ssh` client as follows: `-L [origin_address:]origin_port:remote_address:remote_port`.
|
||||
|
||||
By default, the origin will bind to the loopback interface if not specified otherwise. You can also make use of any address wildcards, e.g. setting the address to `0.0.0.0` in order to bind to all network interfaces accessible via IPv4. When you completely omit the address, the wildcard `*`, which allows connections on all network interfaces, will be used. Note that some network interfaces notation might not be supported on all operating systems. Windows servers for example don't support the wildcard `*`.
|
7
lang/proc/texts/sshLocalTunnelOrigin_de.md
Normal file
7
lang/proc/texts/sshLocalTunnelOrigin_de.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
## Tunnelherkunft
|
||||
|
||||
XPipe ist völlig flexibel, wenn es darum geht, wo ein Befehl ausgeführt werden soll.
|
||||
Deshalb kannst du einen Tunnel nicht nur auf deinem lokalen Rechner, sondern auch auf jedem anderen System starten.
|
||||
|
||||
Der Befehl zum Öffnen des Tunnels wird auf dem System ausgeführt, das du hier angibst. Du musst also einen `ssh`-Client auf diesem System installiert haben.
|
||||
Wenn der Ursprung nicht der lokale Rechner ist, hält XPipe im Hintergrund eine Verbindung zu diesem entfernten System offen, um den Tunnel zu verwalten.
|
7
lang/proc/texts/sshLocalTunnelOrigin_en.md
Normal file
7
lang/proc/texts/sshLocalTunnelOrigin_en.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
## Tunnel Origin
|
||||
|
||||
XPipe is fully flexible with regards on where to execute a command.
|
||||
Therefore, you can establish a tunnel starting on any remote system in addition to your local machine.
|
||||
|
||||
The tunnel opener command will be executed on the system you specify here, so you need to have an `ssh` client installed on that system.
|
||||
If the origin is not the local machine, XPipe will keep a connection open to that remote system in the background to manage the tunnel.
|
22
lang/proc/texts/sshOptions_de.md
Normal file
22
lang/proc/texts/sshOptions_de.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
## SSH-Konfigurationen
|
||||
|
||||
Hier kannst du alle SSH-Optionen angeben, die an die Verbindung übergeben werden sollen.
|
||||
Während einige Optionen für einen erfolgreichen Verbindungsaufbau unbedingt erforderlich sind, wie z.B. `HostName`,
|
||||
sind viele andere Optionen rein optional.
|
||||
|
||||
Um einen Überblick über alle möglichen Optionen zu bekommen, kannst du [`man ssh_config`](https://linux.die.net/man/5/ssh_config) verwenden oder diesen [guide](https://www.ssh.com/academy/ssh/config) lesen.
|
||||
Die genaue Anzahl der unterstützten Optionen hängt ausschließlich von deinem installierten SSH-Client ab.
|
||||
|
||||
### Formatierung
|
||||
|
||||
Der Inhalt hier entspricht einem Host-Abschnitt in einer SSH-Konfigurationsdatei.
|
||||
Beachte, dass du den `Host`-Eintrag nicht explizit definieren musst, denn das wird automatisch erledigt.
|
||||
|
||||
Wenn du mehr als einen Host-Abschnitt definieren willst, z. B. bei abhängigen Verbindungen wie einem Proxy-Jump-Host, der von einem anderen Config-Host abhängt, solltest du stattdessen eine richtige SSH-Konfigurationsdatei verwenden, da hier nur genau eine Host-Definition unterstützt wird.
|
||||
|
||||
Du musst keine Formatierung mit Leerzeichen oder Einrückung vornehmen, das ist für die Funktion nicht erforderlich.
|
||||
|
||||
### Identitäten
|
||||
|
||||
Beachte, dass du hier auch eine `IdentityFile` Option angeben kannst.
|
||||
Wenn diese Option hier angegeben wird, werden alle anderen Optionen für die schlüsselbasierte Authentifizierung weiter unten ignoriert.
|
22
lang/proc/texts/sshOptions_en.md
Normal file
22
lang/proc/texts/sshOptions_en.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
## SSH configurations
|
||||
|
||||
Here you can specify any SSH options that should be passed to the connection.
|
||||
While some options are essentially required to successfully establish a connection, such as `HostName`,
|
||||
many other options are purely optional.
|
||||
|
||||
To get an overview over all possible options, you can use [`man ssh_config`](https://linux.die.net/man/5/ssh_config) or read this [guide](https://www.ssh.com/academy/ssh/config).
|
||||
The exact amount of supported options purely depends on your installed SSH client.
|
||||
|
||||
### Formatting
|
||||
|
||||
The content here is equivalent to one host section in an SSH config file.
|
||||
Note that you don't have to explicitly define the `Host` entry, as that will be done automatically.
|
||||
|
||||
If you intend to define more than one host section, e.g. with dependent connections such as a proxy jump host that depends on another config host, you should use a proper SSH config file instead as only exactly one host definition is supported here.
|
||||
|
||||
You don't have to perform any formatting with whitespace or indentation, this is not needed for it to function.
|
||||
|
||||
### Identities
|
||||
|
||||
Note that you can also specify an `IdentityFile` option in here.
|
||||
If this option is specified in here, any otherwise specified key-based authentication option later down below will be ignored.
|
5
lang/proc/texts/sshRemoteTunnelBinding_de.md
Normal file
5
lang/proc/texts/sshRemoteTunnelBinding_de.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Bindung
|
||||
|
||||
Die Bindungsinformationen, die du angibst, werden direkt an den `ssh`-Client wie folgt weitergegeben: `-R [remote_source_address:]remote_source_port:origin_destination_address:origin_destination_port`.
|
||||
|
||||
Standardmäßig wird die entfernte Quelladresse an die Loopback-Schnittstelle gebunden. Du kannst auch beliebige Adressplatzhalter verwenden, z.B. die Adresse `0.0.0.0`, um an alle über IPv4 erreichbaren Netzwerkschnittstellen zu binden. Wenn du die Adresse komplett weglässt, wird der Platzhalter `*` verwendet, der Verbindungen zu allen Netzwerkschnittstellen erlaubt. Beachte, dass manche Netzwerkschnittstellen-Notation nicht von allen Betriebssystemen unterstützt wird. Windows-Server zum Beispiel unterstützen den Platzhalter `*` nicht.
|
5
lang/proc/texts/sshRemoteTunnelBinding_en.md
Normal file
5
lang/proc/texts/sshRemoteTunnelBinding_en.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Binding
|
||||
|
||||
The binding information you provide is passed straight to the `ssh` client as follows: `-R [remote_source_address:]remote_source_port:origin_destination_address:origin_destination_port`.
|
||||
|
||||
By default, the remote source address will bind to the loopback interface. You can also make use of any address wildcards, e.g. setting the address to `0.0.0.0` in order to bind to all network interfaces accessible via IPv4. When you completely omit the address, the wildcard `*`, which allows connections on all network interfaces, will be used. Note that some network interfaces notation might not be supported on all operating systems. Windows servers for example don't support the wildcard `*`.
|
7
lang/proc/texts/sshRemoteTunnelOrigin_de.md
Normal file
7
lang/proc/texts/sshRemoteTunnelOrigin_de.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
## Tunnelherkunft
|
||||
|
||||
XPipe ist völlig flexibel, wenn es darum geht, wo ein Befehl ausgeführt werden soll.
|
||||
Deshalb kannst du einen Tunnel nicht nur auf deinem lokalen Rechner, sondern auf jedem beliebigen System einrichten.
|
||||
|
||||
Der Tunnel-Opener-Befehl wird auf dem System ausgeführt, das du hier angibst. Du musst also einen `ssh`-Client auf diesem System installiert haben.
|
||||
Wenn der Ursprung nicht der lokale Rechner ist, hält XPipe im Hintergrund eine Verbindung zu diesem entfernten System offen, um den Tunnel zu verwalten.
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue