mirror of
https://github.com/xpipe-io/xpipe.git
synced 2026-04-22 07:29:05 -04:00
Bump to JDK25
This commit is contained in:
@@ -7,6 +7,7 @@ import io.xpipe.app.comp.base.ButtonComp;
|
||||
import io.xpipe.app.comp.base.InputGroupComp;
|
||||
import io.xpipe.app.comp.base.TextFieldComp;
|
||||
import io.xpipe.app.core.AppI18n;
|
||||
import io.xpipe.app.core.AppInstallation;
|
||||
import io.xpipe.app.update.AppDistributionType;
|
||||
import io.xpipe.app.util.*;
|
||||
|
||||
@@ -60,6 +61,7 @@ public class ActionShortcutComp extends SimpleComp {
|
||||
field.grow(true, false);
|
||||
field.apply(struc -> struc.get().setEditable(false));
|
||||
var group = new InputGroupComp(List.of(field, copyButton));
|
||||
group.setHeightReference(copyButton);
|
||||
return group;
|
||||
}
|
||||
|
||||
@@ -74,7 +76,8 @@ public class ActionShortcutComp extends SimpleComp {
|
||||
});
|
||||
var copyButton = new ButtonComp(null, new FontIcon("mdi2f-file-move-outline"), () -> {
|
||||
ThreadHelper.runFailableAsync(() -> {
|
||||
var file = DesktopShortcuts.createCliOpen(url.getValue(), name.getValue());
|
||||
var exec = AppInstallation.ofCurrent().getCliExecutablePath().toString();
|
||||
var file = DesktopShortcuts.create(exec, "open \"" + url.getValue() + "\"", name.getValue());
|
||||
DesktopHelper.browseFileInDirectory(file);
|
||||
});
|
||||
})
|
||||
@@ -83,6 +86,7 @@ public class ActionShortcutComp extends SimpleComp {
|
||||
var field = new TextFieldComp(name);
|
||||
field.grow(true, false);
|
||||
var group = new InputGroupComp(List.of(field, copyButton));
|
||||
group.setHeightReference(copyButton);
|
||||
return group;
|
||||
}
|
||||
|
||||
@@ -103,6 +107,7 @@ public class ActionShortcutComp extends SimpleComp {
|
||||
field.grow(true, false);
|
||||
field.apply(struc -> struc.get().setEditable(false));
|
||||
var group = new InputGroupComp(List.of(field, copyButton));
|
||||
group.setHeightReference(copyButton);
|
||||
return group;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package io.xpipe.app.browser.menu.impl;
|
||||
|
||||
import io.xpipe.app.action.AbstractAction;
|
||||
import io.xpipe.app.browser.action.BrowserActionProvider;
|
||||
import io.xpipe.app.browser.action.impl.DeleteActionProvider;
|
||||
import io.xpipe.app.browser.file.BrowserEntry;
|
||||
import io.xpipe.app.browser.file.BrowserFileSystemTabModel;
|
||||
@@ -20,17 +21,8 @@ import java.util.List;
|
||||
public class DeleteMenuProvider implements BrowserMenuLeafProvider {
|
||||
|
||||
@Override
|
||||
public AbstractAction createAction(BrowserFileSystemTabModel model, List<BrowserEntry> entries) {
|
||||
var link = entries.stream()
|
||||
.anyMatch(browserEntry -> browserEntry.getRawFileEntry().getKind() == FileKind.LINK);
|
||||
var files = entries.stream()
|
||||
.map(browserEntry -> !link
|
||||
? browserEntry.getRawFileEntry().resolved().getPath()
|
||||
: browserEntry.getRawFileEntry().getPath())
|
||||
.toList();
|
||||
var builder = DeleteActionProvider.Action.builder();
|
||||
builder.initFiles(model, files);
|
||||
return builder.build();
|
||||
public Class<? extends BrowserActionProvider> getDelegateActionProvider() {
|
||||
return DeleteActionProvider.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -58,8 +50,8 @@ public class DeleteMenuProvider implements BrowserMenuLeafProvider {
|
||||
return AppI18n.observable(
|
||||
"deleteFile",
|
||||
entries.stream()
|
||||
.anyMatch(browserEntry ->
|
||||
browserEntry.getRawFileEntry().getKind() == FileKind.LINK)
|
||||
.anyMatch(browserEntry ->
|
||||
browserEntry.getRawFileEntry().getKind() == FileKind.LINK)
|
||||
? "link"
|
||||
: "");
|
||||
}
|
||||
|
||||
@@ -4,9 +4,12 @@ import io.xpipe.app.comp.Comp;
|
||||
import io.xpipe.app.comp.CompStructure;
|
||||
import io.xpipe.app.comp.SimpleCompStructure;
|
||||
|
||||
import io.xpipe.app.core.AppFontSizes;
|
||||
import javafx.geometry.Pos;
|
||||
|
||||
import atlantafx.base.layout.InputGroup;
|
||||
import javafx.scene.layout.Region;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -14,6 +17,9 @@ public class InputGroupComp extends Comp<CompStructure<InputGroup>> {
|
||||
|
||||
private final List<Comp<?>> entries;
|
||||
|
||||
@Setter
|
||||
private Comp<?> heightReference;
|
||||
|
||||
public InputGroupComp(List<Comp<?>> comps) {
|
||||
entries = List.copyOf(comps);
|
||||
}
|
||||
@@ -30,6 +36,28 @@ public class InputGroupComp extends Comp<CompStructure<InputGroup>> {
|
||||
b.getChildren().add(entry.createRegion());
|
||||
}
|
||||
b.setAlignment(Pos.CENTER);
|
||||
|
||||
if (heightReference != null && entries.contains(heightReference)) {
|
||||
var refIndex = entries.indexOf(heightReference);
|
||||
var ref = b.getChildren().get(refIndex);
|
||||
if (ref instanceof Region refR) {
|
||||
for (int i = 0; i < entries.size(); i++) {
|
||||
if (i == refIndex) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var entry = b.getChildren().get(i);
|
||||
if (!(entry instanceof Region entryR)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
entryR.minHeightProperty().bind(refR.heightProperty());
|
||||
entryR.maxHeightProperty().bind(refR.heightProperty());
|
||||
entryR.prefHeightProperty().bind(refR.heightProperty());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new SimpleCompStructure<>(b);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package io.xpipe.app.core;
|
||||
|
||||
import io.xpipe.app.core.check.AppUserDirectoryCheck;
|
||||
import io.xpipe.app.core.check.AppDirectoryPermissionsCheck;
|
||||
import io.xpipe.app.issue.ErrorEventFactory;
|
||||
import io.xpipe.app.issue.TrackEvent;
|
||||
import io.xpipe.core.XPipeDaemonMode;
|
||||
@@ -153,7 +153,7 @@ public class AppProperties {
|
||||
.orElse("info");
|
||||
|
||||
// We require the user dir from here
|
||||
AppUserDirectoryCheck.check(dataDir);
|
||||
AppDirectoryPermissionsCheck.checkDirectory(dataDir);
|
||||
AppCache.setBasePath(dataDir.resolve("cache"));
|
||||
dataBinDir = dataDir.resolve("cache", "bin");
|
||||
UUID id = AppCache.getNonNull("uuid", UUID.class, () -> null);
|
||||
|
||||
@@ -64,6 +64,8 @@ public abstract class AppSystemInfo {
|
||||
|
||||
public abstract Path getDesktop();
|
||||
|
||||
public abstract Path getTemp();
|
||||
|
||||
public static final class Windows extends AppSystemInfo {
|
||||
|
||||
private Path userHome;
|
||||
@@ -281,6 +283,11 @@ public abstract class AppSystemInfo {
|
||||
var fallback = getUserHome().resolve("Desktop");
|
||||
return (desktop = fallback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path getTemp() {
|
||||
return Path.of(System.getProperty("java.io.tmpdir"));
|
||||
}
|
||||
}
|
||||
|
||||
public static class MacOs extends AppSystemInfo {
|
||||
@@ -299,5 +306,10 @@ public abstract class AppSystemInfo {
|
||||
public Path getDesktop() {
|
||||
return getUserHome().resolve("Desktop");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path getTemp() {
|
||||
return Path.of(System.getProperty("java.io.tmpdir"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,29 +2,33 @@ package io.xpipe.app.core.check;
|
||||
|
||||
import io.xpipe.app.issue.ErrorEventFactory;
|
||||
|
||||
import io.xpipe.core.OsType;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class AppUserDirectoryCheck {
|
||||
public class AppDirectoryPermissionsCheck {
|
||||
|
||||
public static void check(Path dataDirectory) {
|
||||
public static void checkDirectory(Path dataDirectory) {
|
||||
try {
|
||||
FileUtils.forceMkdir(dataDirectory.toFile());
|
||||
var testDirectory = dataDirectory.resolve("permissions_check");
|
||||
FileUtils.forceMkdir(testDirectory.toFile());
|
||||
if (!Files.exists(testDirectory)) {
|
||||
throw new IOException("Directory creation in user home directory failed silently");
|
||||
throw new IOException("Directory creation in " + dataDirectory + " failed silently");
|
||||
}
|
||||
Files.delete(testDirectory);
|
||||
// if (true) throw new IOException();
|
||||
} catch (IOException e) {
|
||||
var message = "Unable to access directory " + dataDirectory + ".";
|
||||
if (OsType.getLocal() == OsType.WINDOWS) {
|
||||
message += " Please make sure that you have the appropriate permissions and no Antivirus program is blocking the access. "
|
||||
+ "In case you use cloud storage, verify that your cloud storage is working and you are logged in.";
|
||||
}
|
||||
ErrorEventFactory.fromThrowable(
|
||||
"Unable to access directory " + dataDirectory
|
||||
+ ". Please make sure that you have the appropriate permissions and no Antivirus program is blocking the access. "
|
||||
+ "In case you use cloud storage, verify that your cloud storage is working and you are logged in.",
|
||||
message,
|
||||
e)
|
||||
.term()
|
||||
.expected()
|
||||
@@ -9,7 +9,7 @@ import java.nio.file.Files;
|
||||
import java.nio.file.InvalidPathException;
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class AppTempCheck {
|
||||
public class AppWindowsTempCheck {
|
||||
|
||||
private static void checkTemp(String tmpdir) {
|
||||
Path dir = null;
|
||||
@@ -61,12 +61,12 @@ public class BaseMode extends OperationMode {
|
||||
AppWindowTitle.init();
|
||||
AppPathCorruptCheck.check();
|
||||
AppHomebrewCoreutilsCheck.check();
|
||||
WindowsRegistry.init();
|
||||
AppAvCheck.check();
|
||||
AppJavaOptionsCheck.check();
|
||||
AppSid.init();
|
||||
AppBeaconServer.init();
|
||||
AppLayoutModel.init();
|
||||
WindowsRegistry.init();
|
||||
|
||||
if (OperationMode.getStartupMode() == XPipeDaemonMode.GUI) {
|
||||
AppPtbDialog.showIfNeeded();
|
||||
|
||||
@@ -4,7 +4,8 @@ import io.xpipe.app.beacon.AppBeaconServer;
|
||||
import io.xpipe.app.browser.BrowserFullSessionModel;
|
||||
import io.xpipe.app.core.*;
|
||||
import io.xpipe.app.core.check.AppDebugModeCheck;
|
||||
import io.xpipe.app.core.check.AppTempCheck;
|
||||
import io.xpipe.app.core.check.AppDirectoryPermissionsCheck;
|
||||
import io.xpipe.app.core.check.AppWindowsTempCheck;
|
||||
import io.xpipe.app.core.window.AppMainWindow;
|
||||
import io.xpipe.app.issue.*;
|
||||
import io.xpipe.app.prefs.AppPrefs;
|
||||
@@ -113,7 +114,8 @@ public abstract class OperationMode {
|
||||
AppProperties.init(args);
|
||||
NodeCallback.init();
|
||||
AppLogs.init();
|
||||
AppTempCheck.check();
|
||||
AppWindowsTempCheck.check();
|
||||
AppDirectoryPermissionsCheck.checkDirectory(AppSystemInfo.ofCurrent().getTemp());
|
||||
AppDebugModeCheck.printIfNeeded();
|
||||
AppProperties.get().logArguments();
|
||||
AppDistributionType.init();
|
||||
|
||||
@@ -8,10 +8,12 @@ import io.xpipe.app.core.window.AppDialog;
|
||||
import io.xpipe.app.icon.SystemIconManager;
|
||||
import io.xpipe.app.icon.SystemIconSource;
|
||||
import io.xpipe.app.issue.ErrorEventFactory;
|
||||
import io.xpipe.app.process.OsFileSystem;
|
||||
import io.xpipe.app.storage.DataStorage;
|
||||
import io.xpipe.app.util.*;
|
||||
import io.xpipe.core.FilePath;
|
||||
|
||||
import io.xpipe.core.OsType;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.property.SimpleBooleanProperty;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
@@ -101,7 +103,8 @@ public class IconsCategory extends AppPrefsCategory {
|
||||
if (path != null) {
|
||||
var name = FilenameUtils.getBaseName(path);
|
||||
if (!name.isBlank()) {
|
||||
id = name;
|
||||
// Windows has the most strict file name rules
|
||||
id = OsFileSystem.of(OsType.WINDOWS).makeFileSystemCompatible(name);
|
||||
}
|
||||
}
|
||||
} catch (Exception ignored) {}
|
||||
|
||||
@@ -58,7 +58,6 @@ public class BitwardenPasswordManager implements PasswordManager {
|
||||
var sc = getOrStartShell();
|
||||
var command = sc.command(CommandBuilder.of().add("bw", "get", "item", "xpipe-test", "--nointeraction"));
|
||||
var r = command.readStdoutAndStderr();
|
||||
// Check for data file as bw seemingly breaks if it doesn't exist yet
|
||||
if (r[1].contains("You are not logged in")) {
|
||||
var script = ShellScript.lines(
|
||||
moveAppDir()
|
||||
|
||||
@@ -123,11 +123,6 @@ public class DesktopShortcuts {
|
||||
return base;
|
||||
}
|
||||
|
||||
public static Path createCliOpen(String action, String name) throws Exception {
|
||||
var exec = AppInstallation.ofCurrent().getCliExecutablePath().toString();
|
||||
return create(exec, "open " + action, name);
|
||||
}
|
||||
|
||||
public static Path create(String executable, String args, String name) throws Exception {
|
||||
var compat = OsFileSystem.ofLocal().makeFileSystemCompatible(name);
|
||||
if (OsType.getLocal() == OsType.WINDOWS) {
|
||||
|
||||
16
dist/changelog/18.4_incremental.md
vendored
16
dist/changelog/18.4_incremental.md
vendored
@@ -1,12 +1,12 @@
|
||||
- Show warning when invalid SSH gateway chain is configured
|
||||
- Fix tunnel session restart not applying any changes made to connection config
|
||||
- Reshow any existing configuration dialog if possible for connection when editing it
|
||||
- Improve error handling on Windows when registry library handling load fails
|
||||
- Automatically open connection configuration dialog when cloning a connection
|
||||
- Fix desktop shortcuts for workspaces and actions not working on Linux and macOS
|
||||
- Fix computed directory file size being off by a factor of 1024 on Linux
|
||||
- Fix license check for entries limited in amount, e.g. Proxmox, potentially disabling all entries and not only one
|
||||
- Fix custom git icon sources not persisting after restart
|
||||
- Derive custom git icon source directory name from repository URL
|
||||
- Fix window possibly entering invalid state on Windows and not showing anymore
|
||||
- Fix docker integration not elevating with sudo if context config required root permissions
|
||||
- Fix desktop shortcuts for workspaces and more not working on Linux and macOS
|
||||
- Fix window possibly entering invalid state on Windows and not showing anymore
|
||||
- Fix tunnel session restart not applying any changes made to connection config
|
||||
- Show warning when invalid SSH gateway chain is configured
|
||||
- Reshow any existing configuration dialog if possible for connection when editing it
|
||||
- Improve error handling on Windows when registry library load fails
|
||||
- Automatically open connection configuration dialog when cloning a connection
|
||||
- Derive custom git icon source directory name from repository URL
|
||||
|
||||
@@ -6,8 +6,10 @@ import io.xpipe.app.comp.SimpleCompStructure;
|
||||
import io.xpipe.app.comp.base.*;
|
||||
import io.xpipe.app.core.AppFontSizes;
|
||||
import io.xpipe.app.core.AppI18n;
|
||||
import io.xpipe.app.core.AppProperties;
|
||||
import io.xpipe.app.ext.DataStoreCreationCategory;
|
||||
import io.xpipe.app.hub.comp.*;
|
||||
import io.xpipe.app.prefs.AppPrefs;
|
||||
import io.xpipe.app.storage.DataStorage;
|
||||
import io.xpipe.app.storage.DataStoreEntry;
|
||||
import io.xpipe.app.storage.DataStoreEntryRef;
|
||||
@@ -62,12 +64,15 @@ public class IdentitySelectComp extends Comp<CompStructure<HBox>> {
|
||||
}
|
||||
|
||||
private void addNamedIdentity() {
|
||||
var pwMan = DataStorage.get().getStoreEntries().stream()
|
||||
var hasPwMan = AppPrefs.get().passwordManager().getValue() != null;
|
||||
var pwManIdentity = DataStorage.get().getStoreEntries().stream()
|
||||
.map(entry -> entry.getStore() instanceof PasswordManagerIdentityStore p ? p : null)
|
||||
.filter(s -> s != null)
|
||||
.findFirst();
|
||||
if (pwMan.isPresent()) {
|
||||
var perUser = pwMan.get().isPerUser();
|
||||
var hasPassword = password.getValue() != null && !(password.getValue() instanceof SecretRetrievalStrategy.None);
|
||||
var hasSshIdentity = identityStrategy.getValue() != null && !(identityStrategy.getValue() instanceof NoneStrategy);
|
||||
if (hasPwMan && pwManIdentity.isPresent() && !hasPassword && !hasSshIdentity) {
|
||||
var perUser = pwManIdentity.get().isPerUser();
|
||||
var id = PasswordManagerIdentityStore.builder()
|
||||
.key(inPlaceUser.getValue())
|
||||
.perUser(perUser)
|
||||
|
||||
1
lang/strings/translations_da.properties
generated
1
lang/strings/translations_da.properties
generated
@@ -661,7 +661,6 @@ fileNames=Filnavne
|
||||
linkFileNames=Link til filnavne
|
||||
fileNamesQuoted=Filnavne (citeret)
|
||||
deleteFile=Slet $FILE$
|
||||
deleteLink=Slet link
|
||||
editWithEditor=Rediger med $EDITOR$
|
||||
followLink=Følg link
|
||||
goForward=Gå fremad
|
||||
|
||||
1
lang/strings/translations_de.properties
generated
1
lang/strings/translations_de.properties
generated
@@ -667,7 +667,6 @@ fileNames=Dateinamen
|
||||
linkFileNames=Link Dateinamen
|
||||
fileNamesQuoted=Dateinamen (in Anführungszeichen)
|
||||
deleteFile=Löschen $FILE$
|
||||
deleteLink=Link löschen
|
||||
editWithEditor=Bearbeiten mit $EDITOR$
|
||||
followLink=Link folgen
|
||||
goForward=Vorwärts gehen
|
||||
|
||||
1
lang/strings/translations_en.properties
generated
1
lang/strings/translations_en.properties
generated
@@ -679,7 +679,6 @@ fileNames=File names
|
||||
linkFileNames=Link file names
|
||||
fileNamesQuoted=File names (Quoted)
|
||||
deleteFile=Delete $FILE$
|
||||
deleteLink=Delete link
|
||||
editWithEditor=Edit with $EDITOR$
|
||||
followLink=Follow link
|
||||
goForward=Go forward
|
||||
|
||||
1
lang/strings/translations_es.properties
generated
1
lang/strings/translations_es.properties
generated
@@ -645,7 +645,6 @@ fileNames=Nombres de archivo
|
||||
linkFileNames=Enlazar nombres de archivos
|
||||
fileNamesQuoted=Nombres de archivo (entre comillas)
|
||||
deleteFile=Borrar $FILE$
|
||||
deleteLink=Borrar enlace
|
||||
editWithEditor=Edita con $EDITOR$
|
||||
followLink=Seguir enlace
|
||||
goForward=Avanzar
|
||||
|
||||
1
lang/strings/translations_fr.properties
generated
1
lang/strings/translations_fr.properties
generated
@@ -666,7 +666,6 @@ fileNames=Noms de fichiers
|
||||
linkFileNames=Noms de fichiers de liens
|
||||
fileNamesQuoted=Noms de fichiers (cités)
|
||||
deleteFile=Supprimer $FILE$
|
||||
deleteLink=Supprimer le lien
|
||||
editWithEditor=Éditer avec $EDITOR$
|
||||
followLink=Suivre le lien
|
||||
goForward=Va de l'avant
|
||||
|
||||
1
lang/strings/translations_id.properties
generated
1
lang/strings/translations_id.properties
generated
@@ -645,7 +645,6 @@ fileNames=Nama file
|
||||
linkFileNames=Menautkan nama file
|
||||
fileNamesQuoted=Nama file (Kutipan)
|
||||
deleteFile=Menghapus $FILE$
|
||||
deleteLink=Menghapus tautan
|
||||
editWithEditor=Mengedit dengan $EDITOR$
|
||||
followLink=Ikuti tautan
|
||||
goForward=Maju
|
||||
|
||||
1
lang/strings/translations_it.properties
generated
1
lang/strings/translations_it.properties
generated
@@ -645,7 +645,6 @@ fileNames=Nomi di file
|
||||
linkFileNames=Nomi di file di collegamento
|
||||
fileNamesQuoted=Nomi di file (citati)
|
||||
deleteFile=Eliminare $FILE$
|
||||
deleteLink=Elimina il link
|
||||
editWithEditor=Modifica con $EDITOR$
|
||||
followLink=Segui il link
|
||||
goForward=Vai avanti
|
||||
|
||||
1
lang/strings/translations_ja.properties
generated
1
lang/strings/translations_ja.properties
generated
@@ -645,7 +645,6 @@ fileNames=ファイル名
|
||||
linkFileNames=リンクファイル名
|
||||
fileNamesQuoted=ファイル名(引用)
|
||||
deleteFile=削除する$FILE$
|
||||
deleteLink=リンクを削除する
|
||||
editWithEditor=で編集する。$EDITOR$
|
||||
followLink=リンクをたどる
|
||||
goForward=進む
|
||||
|
||||
1
lang/strings/translations_ko.properties
generated
1
lang/strings/translations_ko.properties
generated
@@ -645,7 +645,6 @@ fileNames=파일 이름
|
||||
linkFileNames=링크 파일 이름
|
||||
fileNamesQuoted=파일 이름(따옴표로 묶음)
|
||||
deleteFile=삭제 $FILE$
|
||||
deleteLink=링크 삭제
|
||||
editWithEditor=다음으로 편집 $EDITOR$
|
||||
followLink=팔로우 링크
|
||||
goForward=앞으로
|
||||
|
||||
1
lang/strings/translations_nl.properties
generated
1
lang/strings/translations_nl.properties
generated
@@ -645,7 +645,6 @@ fileNames=Bestandsnamen
|
||||
linkFileNames=Bestandsnamen koppelen
|
||||
fileNamesQuoted=Bestandsnamen (Geciteerd)
|
||||
deleteFile=Verwijderen $FILE$
|
||||
deleteLink=Link verwijderen
|
||||
editWithEditor=Bewerken met $EDITOR$
|
||||
followLink=Link volgen
|
||||
goForward=Doorgaan
|
||||
|
||||
1
lang/strings/translations_pl.properties
generated
1
lang/strings/translations_pl.properties
generated
@@ -645,7 +645,6 @@ fileNames=Nazwy plików
|
||||
linkFileNames=Połącz nazwy plików
|
||||
fileNamesQuoted=Nazwy plików (cytowane)
|
||||
deleteFile=Usuń $FILE$
|
||||
deleteLink=Usuń łącze
|
||||
editWithEditor=Edytuj za pomocą $EDITOR$
|
||||
followLink=Podążaj za linkiem
|
||||
goForward=Idź do przodu
|
||||
|
||||
1
lang/strings/translations_pt.properties
generated
1
lang/strings/translations_pt.properties
generated
@@ -645,7 +645,6 @@ fileNames=Nomes de ficheiros
|
||||
linkFileNames=Liga nomes de ficheiros
|
||||
fileNamesQuoted=Nomes de ficheiros (Citado)
|
||||
deleteFile=Elimina $FILE$
|
||||
deleteLink=Eliminar ligação
|
||||
editWithEditor=Edita com $EDITOR$
|
||||
followLink=Segue a ligação
|
||||
goForward=Avança
|
||||
|
||||
1
lang/strings/translations_ru.properties
generated
1
lang/strings/translations_ru.properties
generated
@@ -707,7 +707,6 @@ fileNames=Имена файлов
|
||||
linkFileNames=Имена файлов ссылок
|
||||
fileNamesQuoted=Имена файлов (в кавычках)
|
||||
deleteFile=Удалить $FILE$
|
||||
deleteLink=Удалить ссылку
|
||||
editWithEditor=Редактируй с $EDITOR$
|
||||
followLink=Перейдите по ссылке
|
||||
#custom
|
||||
|
||||
1
lang/strings/translations_sv.properties
generated
1
lang/strings/translations_sv.properties
generated
@@ -645,7 +645,6 @@ fileNames=Filnamn
|
||||
linkFileNames=Namn på länkfiler
|
||||
fileNamesQuoted=Filnamn (citerad)
|
||||
deleteFile=Ta bort $FILE$
|
||||
deleteLink=Ta bort länk
|
||||
editWithEditor=Redigera med $EDITOR$
|
||||
followLink=Följ länk
|
||||
goForward=Gå framåt
|
||||
|
||||
1
lang/strings/translations_tr.properties
generated
1
lang/strings/translations_tr.properties
generated
@@ -645,7 +645,6 @@ fileNames=Dosya adları
|
||||
linkFileNames=Dosya adlarını bağlama
|
||||
fileNamesQuoted=Dosya adları (Alıntı)
|
||||
deleteFile=Silme $FILE$
|
||||
deleteLink=Bağlantıyı sil
|
||||
editWithEditor=İle düzenleyin $EDITOR$
|
||||
followLink=Bağlantıyı takip edin
|
||||
goForward=İleri git
|
||||
|
||||
1
lang/strings/translations_vi.properties
generated
1
lang/strings/translations_vi.properties
generated
@@ -645,7 +645,6 @@ fileNames=Tên tệp
|
||||
linkFileNames=Tên tệp liên kết
|
||||
fileNamesQuoted=Tên tệp (Được trích dẫn)
|
||||
deleteFile=Xóa $FILE$
|
||||
deleteLink=Xóa liên kết
|
||||
editWithEditor=Chỉnh sửa với $EDITOR$
|
||||
followLink=Theo liên kết
|
||||
goForward=Tiếp tục
|
||||
|
||||
1
lang/strings/translations_zh.properties
generated
1
lang/strings/translations_zh.properties
generated
@@ -943,7 +943,6 @@ linkFileNames=链接文件名
|
||||
fileNamesQuoted=文件名(引用)
|
||||
#custom
|
||||
deleteFile=删除 $FILE$
|
||||
deleteLink=删除链接
|
||||
#custom
|
||||
editWithEditor=使用 $EDITOR$ 编辑
|
||||
#custom
|
||||
|
||||
Reference in New Issue
Block a user