diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index a0d7519cd..b351fb381 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,6 +1,6 @@
# These are supported funding model platforms
-github: [overheadhunter] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
+github: [overheadhunter, tobihagemann] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index da1897030..cfda7c67b 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -7,26 +7,34 @@
-
-
+
+
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
-
-
+
+
diff --git a/.travis.yml b/.travis.yml
index d0ae3c3c7..b4dd8c8cd 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,4 @@
-dist: xenial
+dist: bionic
language: java
sudo: false
jdk:
@@ -17,24 +17,25 @@ addons:
- haveged
install:
- curl -o $HOME/.m2/settings.xml https://gist.githubusercontent.com/cryptobot/cf5fbd909c4782aaeeeb7c7f4a1a43da/raw/e60ee486e34ee0c79f89f947abe2c83b4290c6bb/settings.xml
-- mvn -fmain/pom.xml clean install -DskipTests org.codehaus.mojo:versions-maven-plugin:help dependency:go-offline -Pcoverage,release # "clean install" needed until we can exclude artifacts currently in the reactor, see https://maven.apache.org/plugins/maven-dependency-plugin/go-offline-mojo.html#excludeReactor and https://issues.apache.org/jira/browse/MDEP-568
+- mvn -fmain/pom.xml clean install -DskipTests -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN org.codehaus.mojo:versions-maven-plugin:help dependency:go-offline -Pcoverage,release # "clean install" needed until we can exclude artifacts currently in the reactor, see https://maven.apache.org/plugins/maven-dependency-plugin/go-offline-mojo.html#excludeReactor and https://issues.apache.org/jira/browse/MDEP-568
+before_script:
+- |
+ if [[ -n "$TRAVIS_TAG" ]]; then
+ mvn -fmain/pom.xml org.codehaus.mojo:versions-maven-plugin:set -DnewVersion=$TRAVIS_TAG
+ else
+ mvn -fmain/pom.xml org.codehaus.mojo:versions-maven-plugin:set -DnewVersion=SNAPSHOT-$(echo $TRAVIS_COMMIT | head -c7)
+ fi
script:
- mvn --update-snapshots -fmain/pom.xml clean test verify -Pcoverage
after_success:
-- curl -o ~/codacy-coverage-reporter.jar https://oss.sonatype.org/service/local/repositories/releases/content/com/codacy/codacy-coverage-reporter/4.0.2/codacy-coverage-reporter-4.0.2-assembly.jar
+- curl -o ~/codacy-coverage-reporter.jar https://oss.sonatype.org/service/local/repositories/releases/content/com/codacy/codacy-coverage-reporter/6.0.7/codacy-coverage-reporter-6.0.7-assembly.jar
- $JAVA_HOME/bin/java -jar ~/codacy-coverage-reporter.jar report -l Java -r main/commons/target/site/jacoco/jacoco.xml --partial
- $JAVA_HOME/bin/java -jar ~/codacy-coverage-reporter.jar report -l Java -r main/keychain/target/site/jacoco/jacoco.xml --partial
- $JAVA_HOME/bin/java -jar ~/codacy-coverage-reporter.jar report -l Java -r main/ui/target/site/jacoco/jacoco.xml --partial
- $JAVA_HOME/bin/java -jar ~/codacy-coverage-reporter.jar report -l Java -r main/launcher/target/site/jacoco/jacoco.xml --partial
- $JAVA_HOME/bin/java -jar ~/codacy-coverage-reporter.jar final
before_deploy:
-- |
- if [[ -n "$TRAVIS_TAG" ]]; then
- mvn -fmain/pom.xml org.codehaus.mojo:versions-maven-plugin:set -DnewVersion=$TRAVIS_TAG
- elif [[ $TRAVIS_BRANCH == "develop" ]] && [[ $TRAVIS_PULL_REQUEST == "false" ]]; then
- mvn -fmain/pom.xml org.codehaus.mojo:versions-maven-plugin:set -DnewVersion=SNAPSHOT-$(echo $TRAVIS_COMMIT | head -c7)
- fi
-- mvn -fmain/pom.xml clean package -Prelease -DskipTests
+- mvn -fmain/pom.xml package -Prelease -DskipTests
- export TODAY=`date +'%Y-%m-%d'`; envsubst '$TRAVIS_TAG $TODAY' < .travis-deploy-release.tmpl.json > .travis-deploy-release.json
deploy:
- provider: bintray # SNAPSHOTS
diff --git a/main/buildkit/pom.xml b/main/buildkit/pom.xml
index 9e7251134..11ad987bd 100644
--- a/main/buildkit/pom.xml
+++ b/main/buildkit/pom.xml
@@ -4,7 +4,7 @@
org.cryptomatormain
- 1.5.0-alpha2
+ 1.5.0-beta1buildkitpom
diff --git a/main/commons/pom.xml b/main/commons/pom.xml
index 5d7526970..1f9b121ec 100644
--- a/main/commons/pom.xml
+++ b/main/commons/pom.xml
@@ -4,7 +4,7 @@
org.cryptomatormain
- 1.5.0-alpha2
+ 1.5.0-beta1commonsCryptomator Commons
diff --git a/main/commons/src/main/java/org/cryptomator/common/settings/Settings.java b/main/commons/src/main/java/org/cryptomator/common/settings/Settings.java
index 3960cf1f6..ff5613f1e 100644
--- a/main/commons/src/main/java/org/cryptomator/common/settings/Settings.java
+++ b/main/commons/src/main/java/org/cryptomator/common/settings/Settings.java
@@ -17,6 +17,7 @@ import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
+import javafx.geometry.NodeOrientation;
import java.util.function.Consumer;
@@ -30,9 +31,10 @@ public class Settings {
public static final int DEFAULT_PORT = 42427;
public static final int DEFAULT_NUM_TRAY_NOTIFICATIONS = 3;
public static final WebDavUrlScheme DEFAULT_GVFS_SCHEME = WebDavUrlScheme.DAV;
- public static final UiTheme DEFAULT_THEME = UiTheme.LIGHT;
public static final boolean DEFAULT_DEBUG_MODE = false;
public static final VolumeImpl DEFAULT_PREFERRED_VOLUME_IMPL = System.getProperty("os.name").toLowerCase().contains("windows") ? VolumeImpl.DOKANY : VolumeImpl.FUSE;
+ public static final UiTheme DEFAULT_THEME = UiTheme.LIGHT;
+ public static final NodeOrientation DEFAULT_USER_INTERFACE_ORIENTATION = NodeOrientation.LEFT_TO_RIGHT;
private final ObservableList directories = FXCollections.observableArrayList(VaultSettings::observables);
private final BooleanProperty askedForUpdateCheck = new SimpleBooleanProperty(DEFAULT_ASKED_FOR_UPDATE_CHECK);
@@ -44,6 +46,7 @@ public class Settings {
private final BooleanProperty debugMode = new SimpleBooleanProperty(DEFAULT_DEBUG_MODE);
private final ObjectProperty preferredVolumeImpl = new SimpleObjectProperty<>(DEFAULT_PREFERRED_VOLUME_IMPL);
private final ObjectProperty theme = new SimpleObjectProperty<>(DEFAULT_THEME);
+ private final ObjectProperty userInterfaceOrientation = new SimpleObjectProperty<>(DEFAULT_USER_INTERFACE_ORIENTATION);
private Consumer saveCmd;
@@ -61,6 +64,7 @@ public class Settings {
debugMode.addListener(this::somethingChanged);
preferredVolumeImpl.addListener(this::somethingChanged);
theme.addListener(this::somethingChanged);
+ userInterfaceOrientation.addListener(this::somethingChanged);
}
void setSaveCmd(Consumer saveCmd) {
@@ -118,4 +122,8 @@ public class Settings {
public ObjectProperty theme() {
return theme;
}
+
+ public ObjectProperty userInterfaceOrientation() {
+ return userInterfaceOrientation;
+ }
}
diff --git a/main/commons/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java b/main/commons/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java
index 0929ed050..874994cf8 100644
--- a/main/commons/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java
+++ b/main/commons/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java
@@ -9,6 +9,7 @@ import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
+import javafx.geometry.NodeOrientation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,6 +37,7 @@ public class SettingsJsonAdapter extends TypeAdapter {
out.name("debugMode").value(value.debugMode().get());
out.name("preferredVolumeImpl").value(value.preferredVolumeImpl().get().name());
out.name("theme").value(value.theme().get().name());
+ out.name("uiOrientation").value(value.userInterfaceOrientation().get().name());
out.endObject();
}
@@ -85,6 +87,9 @@ public class SettingsJsonAdapter extends TypeAdapter {
case "theme":
settings.theme().set(parseUiTheme(in.nextString()));
break;
+ case "uiOrientation":
+ settings.userInterfaceOrientation().set(parseUiOrientation(in.nextString()));
+ break;
default:
LOG.warn("Unsupported vault setting found in JSON: " + name);
in.skipValue();
@@ -109,7 +114,7 @@ public class SettingsJsonAdapter extends TypeAdapter {
try {
return WebDavUrlScheme.valueOf(webDavUrlSchemeName.toUpperCase());
} catch (IllegalArgumentException e) {
- LOG.warn("Invalid volume type {}. Defaulting to {}.", webDavUrlSchemeName, Settings.DEFAULT_GVFS_SCHEME);
+ LOG.warn("Invalid WebDAV url scheme {}. Defaulting to {}.", webDavUrlSchemeName, Settings.DEFAULT_GVFS_SCHEME);
return Settings.DEFAULT_GVFS_SCHEME;
}
}
@@ -118,11 +123,20 @@ public class SettingsJsonAdapter extends TypeAdapter {
try {
return UiTheme.valueOf(uiThemeName.toUpperCase());
} catch (IllegalArgumentException e) {
- LOG.warn("Invalid volume type {}. Defaulting to {}.", uiThemeName, Settings.DEFAULT_THEME);
+ LOG.warn("Invalid ui theme {}. Defaulting to {}.", uiThemeName, Settings.DEFAULT_THEME);
return Settings.DEFAULT_THEME;
}
}
+ private NodeOrientation parseUiOrientation(String uiOrientationName) {
+ try {
+ return NodeOrientation.valueOf(uiOrientationName.toUpperCase());
+ } catch (IllegalArgumentException e) {
+ LOG.warn("Invalid ui orientation {}. Defaulting to {}.", uiOrientationName, Settings.DEFAULT_USER_INTERFACE_ORIENTATION);
+ return Settings.DEFAULT_USER_INTERFACE_ORIENTATION;
+ }
+ }
+
private List readVaultSettingsArray(JsonReader in) throws IOException {
List result = new ArrayList<>();
in.beginArray();
diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java
index 9ffcdbc6c..4b54076bd 100644
--- a/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java
+++ b/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java
@@ -69,8 +69,9 @@ public class DokanyVolume implements Volume {
} else {
//auto assign drive letter
if (!windowsDriveLetters.getAvailableDriveLetters().isEmpty()) {
- return windowsDriveLetters.getAvailableDriveLetters().iterator().next();
+ return Path.of(windowsDriveLetters.getAvailableDriveLetters().iterator().next() + ":\\");
} else {
+ //TODO: Error Handling
throw new VolumeException("No free drive letter available.");
}
}
diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/WindowsDriveLetters.java b/main/commons/src/main/java/org/cryptomator/common/vaults/WindowsDriveLetters.java
index 5d644ee7b..6f1edfec2 100644
--- a/main/commons/src/main/java/org/cryptomator/common/vaults/WindowsDriveLetters.java
+++ b/main/commons/src/main/java/org/cryptomator/common/vaults/WindowsDriveLetters.java
@@ -5,6 +5,7 @@
*******************************************************************************/
package org.cryptomator.common.vaults;
+import com.google.common.collect.Sets;
import org.apache.commons.lang3.SystemUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -14,7 +15,6 @@ import javax.inject.Singleton;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.Set;
-import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.StreamSupport;
@@ -23,11 +23,11 @@ import java.util.stream.StreamSupport;
public final class WindowsDriveLetters {
private static final Logger LOG = LoggerFactory.getLogger(WindowsDriveLetters.class);
- private static final Set D_TO_Z;
+ private static final Set A_TO_Z;
static {
- try (IntStream stream = IntStream.rangeClosed('D', 'Z')) {
- D_TO_Z = stream.mapToObj(i -> Path.of(((char) i)+":\\")).collect(Collectors.toSet());
+ try (IntStream stream = IntStream.rangeClosed('A', 'Z')) {
+ A_TO_Z = stream.mapToObj(i -> String.valueOf((char) i)).collect(Collectors.toSet());
}
}
@@ -35,20 +35,22 @@ public final class WindowsDriveLetters {
public WindowsDriveLetters() {
}
- public Set getOccupiedDriveLetters() {
+ public Set getAllDriveLetters() {
+ return A_TO_Z;
+ }
+
+ public Set getOccupiedDriveLetters() {
if (!SystemUtils.IS_OS_WINDOWS) {
LOG.warn("Attempted to get occupied drive letters on non-Windows machine.");
return Set.of();
} else {
Iterable rootDirs = FileSystems.getDefault().getRootDirectories();
- return StreamSupport.stream(rootDirs.spliterator(), false).collect(Collectors.toSet());
+ return StreamSupport.stream(rootDirs.spliterator(), false).map(p -> p.toString().substring(0,1)).collect(Collectors.toSet());
}
}
- public Set getAvailableDriveLetters() {
- Set occupiedDriveLetters = getOccupiedDriveLetters();
- Predicate isOccupiedDriveLetter = occupiedDriveLetters::contains;
- return D_TO_Z.stream().filter(isOccupiedDriveLetter.negate()).collect(Collectors.toSet());
+ public Set getAvailableDriveLetters() {
+ return Sets.difference(A_TO_Z, getOccupiedDriveLetters());
}
}
diff --git a/main/keychain/pom.xml b/main/keychain/pom.xml
index 0bcdce324..441e75af8 100644
--- a/main/keychain/pom.xml
+++ b/main/keychain/pom.xml
@@ -4,7 +4,7 @@
org.cryptomatormain
- 1.5.0-alpha2
+ 1.5.0-beta1keychainSystem Keychain Access
diff --git a/main/launcher/pom.xml b/main/launcher/pom.xml
index 247e4eb47..a56cd33c6 100644
--- a/main/launcher/pom.xml
+++ b/main/launcher/pom.xml
@@ -4,7 +4,7 @@
org.cryptomatormain
- 1.5.0-alpha2
+ 1.5.0-beta1launcherCryptomator Launcher
diff --git a/main/pom.xml b/main/pom.xml
index 87522602c..026092229 100644
--- a/main/pom.xml
+++ b/main/pom.xml
@@ -3,7 +3,7 @@
4.0.0org.cryptomatormain
- 1.5.0-alpha2
+ 1.5.0-beta1pomCryptomator
@@ -24,29 +24,28 @@
UTF-8
- 1.9.0-beta4
+ 1.9.0-rc22.2.1
- 1.2.0
+ 1.2.11.1.111.0.10
- 13
+ 13.0.1
- 2.6
- 3.8.1
+ 3.91.0.3
- 27.1-jre
- 2.22.1
- 2.8.5
+ 28.1-jre
+ 2.25.2
+ 2.8.6
- 1.7.26
+ 1.7.291.2.3
- 5.4.2
- 2.27.0
- 2.1
+ 5.5.2
+ 3.1.0
+ 2.2
@@ -152,11 +151,6 @@
-
- commons-io
- commons-io
- ${commons-io.version}
- org.apache.commonscommons-lang3
@@ -267,7 +261,7 @@
maven-dependency-plugin
- 3.1.0
+ 3.1.1copy-libs
@@ -296,7 +290,7 @@
org.jacocojacoco-maven-plugin
- 0.8.2
+ 0.8.5prepare-agent
@@ -323,7 +317,7 @@
maven-compiler-plugin
- 3.8.0
+ 3.8.111
@@ -338,7 +332,7 @@
org.apache.maven.pluginsmaven-surefire-plugin
- 2.22.1
+ 2.22.2
diff --git a/main/ui/pom.xml b/main/ui/pom.xml
index c171a9794..e2c17e375 100644
--- a/main/ui/pom.xml
+++ b/main/ui/pom.xml
@@ -4,7 +4,7 @@
org.cryptomatormain
- 1.5.0-alpha2
+ 1.5.0-beta1uiCryptomator GUI
@@ -50,10 +50,6 @@
-
- commons-io
- commons-io
- org.apache.commonscommons-lang3
diff --git a/main/ui/src/main/java/org/cryptomator/ui/common/DefaultSceneFactory.java b/main/ui/src/main/java/org/cryptomator/ui/common/DefaultSceneFactory.java
index 14efe8f27..a2757d7b7 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/common/DefaultSceneFactory.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/common/DefaultSceneFactory.java
@@ -8,6 +8,7 @@ import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;
import javafx.stage.Window;
import org.apache.commons.lang3.SystemUtils;
+import org.cryptomator.common.settings.Settings;
import org.cryptomator.ui.fxapp.FxApplicationScoped;
import javax.inject.Inject;
@@ -19,16 +20,25 @@ public class DefaultSceneFactory implements Function {
protected static final KeyCodeCombination ALT_F4 = new KeyCodeCombination(KeyCode.F4, KeyCombination.ALT_DOWN);
protected static final KeyCodeCombination SHORTCUT_W = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
+ protected final Settings settings;
+
@Inject
- public DefaultSceneFactory() {}
+ public DefaultSceneFactory(Settings settings) {
+ this.settings = settings;
+ }
@Override
public Scene apply(Parent root) {
Scene scene = new Scene(root);
+ configureRoot(root);
configureScene(scene);
return scene;
}
+ protected void configureRoot(Parent root) {
+ root.nodeOrientationProperty().bind(settings.userInterfaceOrientation());
+ }
+
protected void configureScene(Scene scene) {
scene.windowProperty().addListener(observable -> {
Window window = scene.getWindow();
diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowSceneFactory.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowSceneFactory.java
index 8c6486dc6..b86a56e5f 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowSceneFactory.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowSceneFactory.java
@@ -7,6 +7,7 @@ import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;
import org.apache.commons.lang3.SystemUtils;
+import org.cryptomator.common.settings.Settings;
import org.cryptomator.ui.common.DefaultSceneFactory;
import javax.inject.Inject;
@@ -20,7 +21,8 @@ public class MainWindowSceneFactory extends DefaultSceneFactory {
private final Lazy vaultListController;
@Inject
- public MainWindowSceneFactory(Lazy mainWindowController, Lazy vaultListController) {
+ public MainWindowSceneFactory(Settings settings, Lazy mainWindowController, Lazy vaultListController) {
+ super(settings);
this.mainWindowController = mainWindowController;
this.vaultListController = vaultListController;
}
diff --git a/main/ui/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java b/main/ui/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java
index d03832358..bbccb0ad7 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java
@@ -1,21 +1,33 @@
package org.cryptomator.ui.preferences;
+import javafx.beans.value.ObservableValue;
+import javafx.geometry.NodeOrientation;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.RadioButton;
+import javafx.scene.control.Toggle;
+import javafx.scene.control.ToggleGroup;
import javafx.util.StringConverter;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.common.settings.UiTheme;
import org.cryptomator.ui.common.FxController;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.inject.Inject;
@PreferencesScoped
public class GeneralPreferencesController implements FxController {
+
+ private static final Logger LOG = LoggerFactory.getLogger(GeneralPreferencesController.class);
private final Settings settings;
public ChoiceBox themeChoiceBox;
public CheckBox startHiddenCheckbox;
public CheckBox debugModeCheckbox;
+ public ToggleGroup nodeOrientation;
+ public RadioButton nodeOrientationLtr;
+ public RadioButton nodeOrientationRtl;
@Inject
GeneralPreferencesController(Settings settings) {
@@ -30,6 +42,20 @@ public class GeneralPreferencesController implements FxController {
startHiddenCheckbox.selectedProperty().bindBidirectional(settings.startHidden());
debugModeCheckbox.selectedProperty().bindBidirectional(settings.debugMode());
+
+ nodeOrientation.selectedToggleProperty().addListener(this::toggleNodeOrientation);
+ nodeOrientationLtr.setSelected(settings.userInterfaceOrientation().get() == NodeOrientation.LEFT_TO_RIGHT);
+ nodeOrientationRtl.setSelected(settings.userInterfaceOrientation().get() == NodeOrientation.RIGHT_TO_LEFT);
+ }
+
+ private void toggleNodeOrientation(@SuppressWarnings("unused") ObservableValue extends Toggle> observable, @SuppressWarnings("unused") Toggle oldValue, Toggle newValue) {
+ if (nodeOrientationLtr.equals(newValue)) {
+ settings.userInterfaceOrientation().set(NodeOrientation.LEFT_TO_RIGHT);
+ } else if (nodeOrientationRtl.equals(newValue)) {
+ settings.userInterfaceOrientation().set(NodeOrientation.RIGHT_TO_LEFT);
+ } else {
+ LOG.warn("Unexpected toggle option {}", newValue);
+ }
}
/* Helper classes */
diff --git a/main/ui/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java b/main/ui/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java
index 691035bd3..9dd1bef82 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java
@@ -16,6 +16,9 @@ import org.cryptomator.ui.common.FxController;
import javax.inject.Inject;
+/**
+ * TODO: if WebDAV is selected under Windows, show warning that specific mount options (like selecting a directory as mount point) are _not_ supported
+ */
@PreferencesScoped
public class VolumePreferencesController implements FxController {
diff --git a/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java
index 4ebb35832..6efa3e407 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java
@@ -1,34 +1,76 @@
package org.cryptomator.ui.vaultoptions;
+import com.google.common.base.Strings;
+import javafx.beans.binding.Bindings;
+import javafx.beans.binding.BooleanBinding;
+import javafx.beans.property.BooleanProperty;
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.property.StringProperty;
+import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.scene.control.CheckBox;
+import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
+import javafx.scene.control.Toggle;
+import javafx.scene.control.ToggleGroup;
+import javafx.stage.DirectoryChooser;
+import javafx.stage.Stage;
+import javafx.util.StringConverter;
+import org.apache.commons.lang3.SystemUtils;
+import org.cryptomator.common.settings.Settings;
+import org.cryptomator.common.settings.VolumeImpl;
import org.cryptomator.common.vaults.Vault;
+import org.cryptomator.common.vaults.WindowsDriveLetters;
import org.cryptomator.ui.common.FxController;
import javax.inject.Inject;
+import java.io.File;
+import java.nio.file.Path;
+import java.util.ResourceBundle;
+import java.util.Set;
+/**
+ * TODO: if WebDav is selected on a windows system, custom mount directory is _not_ supported. This is currently not indicated/shown/etc in the ui
+ */
@VaultOptionsScoped
public class MountOptionsController implements FxController {
+ private final Stage window;
private final Vault vault;
+ private final BooleanProperty osIsWindows = new SimpleBooleanProperty(SystemUtils.IS_OS_WINDOWS);
+ private final BooleanBinding webDavAndWindows;
+ private final WindowsDriveLetters windowsDriveLetters;
+ private final ResourceBundle resourceBundle;
public TextField driveName;
public CheckBox readOnlyCheckbox;
public CheckBox customMountFlagsCheckbox;
public TextField mountFlags;
+ public ToggleGroup mountPoint;
+ public RadioButton mountPointAuto;
+ public RadioButton mountPointWinDriveLetter;
+ public RadioButton mountPointCustomDir;
+ public ChoiceBox driveLetterSelection;
@Inject
- MountOptionsController(@VaultOptionsWindow Vault vault) {
+ MountOptionsController(@VaultOptionsWindow Stage window, @VaultOptionsWindow Vault vault, Settings settings, WindowsDriveLetters windowsDriveLetters, ResourceBundle resourceBundle) {
+ this.window = window;
this.vault = vault;
+ this.webDavAndWindows = settings.preferredVolumeImpl().isEqualTo(VolumeImpl.WEBDAV).and(osIsWindows);
+ this.windowsDriveLetters = windowsDriveLetters;
+ this.resourceBundle = resourceBundle;
}
@FXML
public void initialize() {
driveName.textProperty().bindBidirectional(vault.getVaultSettings().mountName());
+
+ // readonly:
readOnlyCheckbox.selectedProperty().bindBidirectional(vault.getVaultSettings().usesReadOnlyMode());
- mountFlags.disableProperty().bind(customMountFlagsCheckbox.selectedProperty().not());
readOnlyCheckbox.disableProperty().bind(customMountFlagsCheckbox.selectedProperty());
+ // custom mount flags:
+ mountFlags.disableProperty().bind(customMountFlagsCheckbox.selectedProperty().not());
customMountFlagsCheckbox.setSelected(vault.isHavingCustomMountFlags());
if (vault.isHavingCustomMountFlags()) {
mountFlags.textProperty().bindBidirectional(vault.getVaultSettings().mountFlags());
@@ -36,6 +78,25 @@ public class MountOptionsController implements FxController {
} else {
mountFlags.textProperty().bind(vault.defaultMountFlagsProperty());
}
+
+ // mount point options:
+ mountPoint.selectedToggleProperty().addListener(this::toggleMountPoint);
+ driveLetterSelection.getItems().addAll(windowsDriveLetters.getAllDriveLetters());
+ driveLetterSelection.setConverter(new WinDriveLetterLabelConverter(windowsDriveLetters));
+ driveLetterSelection.setValue(vault.getVaultSettings().winDriveLetter().get());
+ vault.getVaultSettings().usesIndividualMountPath().bind(mountPoint.selectedToggleProperty().isEqualTo(mountPointCustomDir));
+ vault.getVaultSettings().winDriveLetter().bind( //
+ Bindings.when(mountPoint.selectedToggleProperty().isEqualTo(mountPointWinDriveLetter)) //
+ .then(driveLetterSelection.getSelectionModel().selectedItemProperty()) //
+ .otherwise((String) null) //
+ );
+ if (vault.getVaultSettings().usesIndividualMountPath().get()) {
+ mountPoint.selectToggle(mountPointCustomDir);
+ } else if (!Strings.isNullOrEmpty(vault.getVaultSettings().winDriveLetter().get())) {
+ mountPoint.selectToggle(mountPointWinDriveLetter);
+ } else {
+ mountPoint.selectToggle(mountPointAuto);
+ }
}
@FXML
@@ -51,4 +112,81 @@ public class MountOptionsController implements FxController {
mountFlags.textProperty().bind(vault.defaultMountFlagsProperty());
}
}
+
+ @FXML
+ private void chooseCustomMountPoint() {
+ DirectoryChooser directoryChooser = new DirectoryChooser();
+ directoryChooser.setTitle(resourceBundle.getString("vaultOptions.mount.winDirChooser"));
+ try {
+ directoryChooser.setInitialDirectory(Path.of(System.getProperty("user.home")).toFile());
+ } catch (Exception e) {
+ //NO-OP
+ }
+ File file = directoryChooser.showDialog(window);
+ if (file != null) {
+ vault.getVaultSettings().individualMountPath().set(file.getAbsolutePath());
+ } else {
+ vault.getVaultSettings().individualMountPath().set(null);
+ }
+ }
+
+ private void toggleMountPoint(@SuppressWarnings("unused") ObservableValue extends Toggle> observable, @SuppressWarnings("unused") Toggle oldValue, Toggle newValue) {
+ if (mountPointCustomDir.equals(newValue) && Strings.isNullOrEmpty(vault.getVaultSettings().individualMountPath().get())) {
+ chooseCustomMountPoint();
+ }
+ }
+
+ /**
+ * Converts 'C' to "C:" to translate between model and GUI.
+ */
+ private static class WinDriveLetterLabelConverter extends StringConverter {
+
+ private final Set occupiedDriveLetters;
+
+ WinDriveLetterLabelConverter(WindowsDriveLetters windowsDriveLetters) {
+ this.occupiedDriveLetters = windowsDriveLetters.getOccupiedDriveLetters();
+ }
+
+ @Override
+ public String toString(String driveLetter) {
+ if (occupiedDriveLetters.contains(driveLetter)) {
+ return driveLetter + ": (occupied)"; // TODO localize?
+ } else {
+ return driveLetter + ":";
+ }
+ }
+
+ @Override
+ public String fromString(String string) {
+ throw new UnsupportedOperationException();
+ }
+
+ }
+
+ // Getter & Setter
+
+ public BooleanProperty osIsWindowsProperty() {
+ return osIsWindows;
+ }
+
+ public boolean getOsIsWindows() {
+ return osIsWindows.get();
+ }
+
+ public BooleanBinding webDavAndWindowsProperty() {
+ return webDavAndWindows;
+ }
+
+ public boolean isWebDavAndWindows() {
+ return webDavAndWindows.get();
+ }
+
+ public StringProperty customMountPathProperty() {
+ return vault.getVaultSettings().individualMountPath();
+ }
+
+ public String getCustomMountPath() {
+ return vault.getVaultSettings().individualMountPath().get();
+ }
+
}
diff --git a/main/ui/src/main/resources/fxml/preferences_general.fxml b/main/ui/src/main/resources/fxml/preferences_general.fxml
index 3546ebe65..1f05151f8 100644
--- a/main/ui/src/main/resources/fxml/preferences_general.fxml
+++ b/main/ui/src/main/resources/fxml/preferences_general.fxml
@@ -6,10 +6,15 @@
+
+
+
+
+
@@ -18,6 +23,12 @@
+
+
+
+
+
+
diff --git a/main/ui/src/main/resources/fxml/vault_detail_needsmigration.fxml b/main/ui/src/main/resources/fxml/vault_detail_needsmigration.fxml
index 1c5e9721f..bc74bc03a 100644
--- a/main/ui/src/main/resources/fxml/vault_detail_needsmigration.fxml
+++ b/main/ui/src/main/resources/fxml/vault_detail_needsmigration.fxml
@@ -2,6 +2,7 @@
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/main/ui/src/main/resources/i18n/strings.properties b/main/ui/src/main/resources/i18n/strings.properties
index df3e849d1..2d7a4d21c 100644
--- a/main/ui/src/main/resources/i18n/strings.properties
+++ b/main/ui/src/main/resources/i18n/strings.properties
@@ -37,12 +37,13 @@ addvaultwizard.new.directoryPickerTitle=Select Directory
addvaultwizard.new.enterPassword=Enter a password for the vault
addvaultwizard.new.fileAlreadyExists=Vault can not be created at this path because some object already exists.
addvaultwizard.new.invalidName=Invalid vault name. Please consider a regular directory name.
-addvaultwizard.new.ioException=Selected directory failed a basic test. Make sure to have the appropiate access rights and nothing interferes with Cryptomator.
+addvaultwizard.new.ioException=Selected directory failed a basic test. Make sure to have the appropriate access rights and nothing interferes with Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Confirm the password
addvaultwizard.new.passwordsMatch=Passwords match!
addvaultwizard.new.passwordsDoNotMatch=Passwords do not match
addvaultwizard.new.createVaultBtn=Create Vault
+### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=This is your recovery key. Keep it safe, it is your only chance to recover your data if you lose your password.
addvaultwizard.new.recoveryKeySavedCheckbox=Yes, I've made a secure backup of this recovery key
### Information
@@ -131,10 +132,12 @@ main.vaultlist.emptyList.onboardingInstruction=Click here to add a vault
main.vaultlist.contextMenu.remove=Remove Vault
main.vaultlist.addVaultBtn=Add Vault
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=LOCKED
-main.vaultDetail.unlockedStatus=UNLOCKED
main.vaultDetail.unlockBtn=Unlock
main.vaultDetail.optionsBtn=Vault Options
+### Unlocked
+main.vaultDetail.unlockedStatus=UNLOCKED
main.vaultDetail.accessLocation=Your vault's contents are accessible here:
main.vaultDetail.revealBtn=Reveal Drive
main.vaultDetail.lockBtn=Lock
@@ -143,6 +146,9 @@ main.vaultDetail.bytesPerSecondWritten=written:
main.vaultDetail.throughput.idle=idle
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
+### Needs Migration
+main.vaultDetail.migrateButton=Upgrade Vault
+main.vaultDetail.migratePrompt=Your vault needs to be upgraded to a new format, before you can access it
# Wrong File Alert
wrongFileAlert.title=Unknown File
@@ -150,13 +156,17 @@ wrongFileAlert.btn=Okay
wrongFileAlert.information=You have tried to add a file or folder that does not seem to be a Cryptomator vault. To encrypt your data, create and unlock a vault.
# Vault Options
+## General
vaultOptions.general=General
vaultOptions.general.changePasswordBtn=Change Password
vaultOptions.general.showRecoveryKeyBtn=Display Recovery Key
+## Mount
vaultOptions.mount=Mounting
vaultOptions.mount.readonly=Read-Only
vaultOptions.mount.driveName=Drive Name
vaultOptions.mount.customMountFlags=Custom Mount Flags
+vaultOptions.mount.winDriveLetterOccupied=occupied
+vaultOptions.mount.winDirChooser=Pick an empty directory
# Recovery Key
recoveryKey.title=Recovery Key
diff --git a/main/ui/src/main/resources/i18n/strings_ar.properties b/main/ui/src/main/resources/i18n/strings_ar.properties
new file mode 100644
index 000000000..2299365d9
--- /dev/null
+++ b/main/ui/src/main/resources/i18n/strings_ar.properties
@@ -0,0 +1,116 @@
+# Locale Specific CSS files such as CJK, RTL,...
+
+# Generics
+## Button
+generic.button.apply=طبّق
+generic.button.back=الى الوراء
+generic.button.cancel=الغاء
+generic.button.change=تغيير
+generic.button.done=تم
+generic.button.next=التالي
+
+# Tray Menu
+traymenu.showMainWindow=اظهار
+traymenu.showPreferencesWindow=تفضيلات
+traymenu.quitApplication=انهاء
+traymenu.vault.unlock=افتح
+traymenu.vault.lock=قفل
+traymenu.vault.reveal=إظهار
+
+# Add Vault Wizard
+addvaultwizard.title=أضِف مخزنًا
+## Welcome
+addvaultwizard.welcome.newButton=إنشاء مخزن جديد
+addvaultwizard.welcome.existingButton=افتح مخزن موجود
+## New
+### Name
+addvaultwizard.new.nameInstruction=اختر اسم للمخزن
+addvaultwizard.new.namePrompt=اسم المخزن
+### Location
+addvaultwizard.new.locationInstruction=أين يجب على Cryptomator تخزين الملفات المشفرة من قبو الخاص بك؟
+addvaultwizard.new.locationLabel=موقع التخزين
+addvaultwizard.new.locationPrompt=…
+addvaultwizard.new.directoryPickerLabel=موقع مخصص
+addvaultwizard.new.directoryPickerButton=اختر…
+addvaultwizard.new.directoryPickerTitle=اختر القاموس
+addvaultwizard.new.enterPassword=أدخل كلمة المرور لهذا الحساب
+addvaultwizard.new.fileAlreadyExists=لا يمكن إنشاء مخزن على هذا المسار لأن بعض الملفات موجودة مسبقا.
+addvaultwizard.new.invalidName=اسم المخزن غير صالح. يرجى النظر في اسم الدليل المعتاد.
+### Password
+addvaultwizard.new.reenterPassword=تأكيد كلمة المرور
+addvaultwizard.new.passwordsMatch=كلمات المرور متطابقة!
+addvaultwizard.new.passwordsDoNotMatch=كلمات المرور غير متطابقة
+addvaultwizard.new.createVaultBtn=انشئ حافظة
+### Recovery Key
+### Information
+addvault.new.readme.storageLocation.4=لو انك تحتاج مساعدة, جرب "%s".
+## Existing
+addvaultwizard.existing.chooseBtn=اختر…
+## Success
+
+# Remove Vault
+removeVault.confirmBtn=احذف الحافظة
+
+# Change Password
+changepassword.enterNewPassword=ادخل كلمة المرور الجديدة لحافظتك
+changepassword.reenterNewPassword=تأكيد كلمة المرور الجديدة
+changepassword.passwordsMatch=كلمات المرور متطابقة!
+changepassword.passwordsDoNotMatch=كلمات المرور غير متطابقة
+
+# Forget Password
+forgetPassword.title=نسيت كلمة المرور
+forgetPassword.confirmBtn=نسيت كلمة المرور
+
+# Unlock
+unlock.title=افتح الحافظة
+unlock.savePassword=احفظ كلمة المرور
+unlock.unlockBtn=افتح
+## Success
+unlock.success.revealBtn=افتح الحافظة
+
+# Migration
+migration.title=ترقية الحافظة
+## Start
+migration.start.confirm=نعم, محفظتي متزامنة بالكامل
+## Run
+migration.run.startMigrationBtn=ترقية الحافظة
+## Sucess
+migration.success.unlockNow=افتح الان
+
+# Preferences
+preferences.title=تفضيلات
+## General
+preferences.general=عام
+## Volume
+preferences.volume.webdav.port=منفذ WebDav
+## Updates
+preferences.updates=تحديثات
+preferences.updates.autoUpdateCheck=تحقق من التحديثات اوتوماتيكيا
+preferences.updates.checkNowBtn=تحقق الان
+
+# Main Window
+main.preferencesBtn.tooltip=تفضيلات
+## Vault List
+main.vaultlist.addVaultBtn=أضِف مخزنًا
+## Vault Detail
+### Locked
+main.vaultDetail.lockedStatus=مغلق
+main.vaultDetail.unlockBtn=افتح
+### Unlocked
+main.vaultDetail.unlockedStatus=مفتوح
+main.vaultDetail.lockBtn=قفل
+### Needs Migration
+main.vaultDetail.migrateButton=ترقية الحافظة
+
+# Wrong File Alert
+
+# Vault Options
+## General
+vaultOptions.general=عام
+## Mount
+
+# Recovery Key
+
+# Misc
+
+# Quit
diff --git a/main/ui/src/main/resources/i18n/strings_cs.properties b/main/ui/src/main/resources/i18n/strings_cs.properties
index 277667acb..bf93e13e1 100644
--- a/main/ui/src/main/resources/i18n/strings_cs.properties
+++ b/main/ui/src/main/resources/i18n/strings_cs.properties
@@ -41,6 +41,8 @@ addvaultwizard.new.reenterPassword=Potvrďte heslo
addvaultwizard.new.passwordsMatch=Hesla se shodují!
addvaultwizard.new.passwordsDoNotMatch=Hesla se neshodují
addvaultwizard.new.createVaultBtn=Vytvořit trezor
+### Recovery Key
+addvaultwizard.new.recoveryKeyInstruction=Toto je tvůj obnovovací klíč. Uchovej jej v bezpečí, je to jediná šance, jak obnovit data, pokud ztratíš heslo.
### Information
addvault.new.readme.storageLocation.fileName=CO JE TOTO ZA ADRESÁŘ.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ OBSAH TREZORU ⚠️
@@ -126,10 +128,12 @@ main.vaultlist.emptyList.onboardingInstruction=Klikněte sem pro přidání nov
main.vaultlist.contextMenu.remove=Odstranit trezor
main.vaultlist.addVaultBtn=Přidat trezor
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=UZAMKNUTO
-main.vaultDetail.unlockedStatus=ODEMKNUTO
main.vaultDetail.unlockBtn=Odemknout
main.vaultDetail.optionsBtn=Možnosti trezoru
+### Unlocked
+main.vaultDetail.unlockedStatus=ODEMKNUTO
main.vaultDetail.accessLocation=Obsah vašeho trezoru je dostupný:
main.vaultDetail.revealBtn=Zobrazit jednotku
main.vaultDetail.lockBtn=Zamknout
@@ -138,6 +142,8 @@ main.vaultDetail.bytesPerSecondWritten=zapsáno:
main.vaultDetail.throughput.idle=nečinný
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
+### Needs Migration
+main.vaultDetail.migrateButton=Upgrade trezoru
# Wrong File Alert
wrongFileAlert.title=neznámý soubor
@@ -145,14 +151,22 @@ wrongFileAlert.btn=OK
wrongFileAlert.information=Zkoušíte přidat soubor či adresář, který zřejmě není trezorem Cryptomatoru. Pro zašifrování vašich dat vytvořte a odemkněte trezor.
# Vault Options
+## General
vaultOptions.general=Obecné
vaultOptions.general.changePasswordBtn=Změnit heslo
+vaultOptions.general.showRecoveryKeyBtn=Zobrazit klíč k obnově
+## Mount
vaultOptions.mount=Připojení
vaultOptions.mount.readonly=Pouze pro čtení
vaultOptions.mount.driveName=Jméno jednotky
vaultOptions.mount.customMountFlags=Vlastní parametry
+vaultOptions.mount.winDriveLetterOccupied=obsazené
+vaultOptions.mount.winDirChooser=Vyberte prázdný adresář
# Recovery Key
+recoveryKey.title=Klíč k obnově
+recoveryKey.enterPassword.prompt=Zadejte své heslo pro zobrazení obnovovacího klíče pro "%s":
+recoveryKey.display.message=Klíč k obnově "%s":
# Misc
passwordStrength.messageLabel.0=velmi slabé
diff --git a/main/ui/src/main/resources/i18n/strings_de.properties b/main/ui/src/main/resources/i18n/strings_de.properties
index 95cde7e8e..2b8607471 100644
--- a/main/ui/src/main/resources/i18n/strings_de.properties
+++ b/main/ui/src/main/resources/i18n/strings_de.properties
@@ -31,7 +31,7 @@ addvaultwizard.new.locationInstruction=Wo soll Cryptomator die verschlüsselten
addvaultwizard.new.locationLabel=Speicherort
addvaultwizard.new.locationPrompt=…
addvaultwizard.new.directoryPickerLabel=Eigener Ort
-addvaultwizard.new.directoryPickerButton=Durchsuchen…
+addvaultwizard.new.directoryPickerButton=Durchsuchen …
addvaultwizard.new.directoryPickerTitle=Wähle ein Verzeichnis
addvaultwizard.new.enterPassword=Vergib ein Passwort für den Tresor
addvaultwizard.new.fileAlreadyExists=Der Tresor konnte nicht erstellt werden, da der Speicherort bereits belegt ist.
@@ -40,38 +40,39 @@ addvaultwizard.new.ioException=Auf das ausgewählte Verzeichnis kann nicht zugeg
### Password
addvaultwizard.new.reenterPassword=Bestätige das Passwort
addvaultwizard.new.passwordsMatch=Passwörter stimmen überein!
-addvaultwizard.new.passwordsDoNotMatch=Passwörter unterscheiden sich
+addvaultwizard.new.passwordsDoNotMatch=Passwörter stimmen nicht überein
addvaultwizard.new.createVaultBtn=Tresor erstellen
+### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Dies ist dein Wiederherstellungsschlüssel. Bewahre ihn sicher auf. Ohne ihn gibt es keine Möglichkeit deine Daten wiederherzustellen, wenn du dein Kennwort verloren hast.
-addvaultwizard.new.recoveryKeySavedCheckbox=Ja, ich habe eine Datensicherung diese Wiederherstellungsschlüssels durchgeführt
+addvaultwizard.new.recoveryKeySavedCheckbox=Ja, ich habe eine Datensicherung dieses Wiederherstellungsschlüssels durchgeführt
### Information
addvault.new.readme.storageLocation.fileName=WAS BEDEUTET DIESER ORDNER.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ TRESORDATEIEN ⚠️
-addvault.new.readme.storageLocation.2=Dies ist der Speicherort deines Tresor. Ändere {\\b KEINE} Dateien in diesem Verzeichnis.
+addvault.new.readme.storageLocation.2=Dies ist der Speicherort deines Tresors. Ändere {\\b KEINE} Dateien in diesem Verzeichnis.
addvault.new.readme.storageLocation.3=Wenn du Dateien mit Cryptomator verschlüsseln möchtest, entsperre den Tresor und verwende das zur Verfügung gestellte Laufwerk.
-addvault.new.readme.storageLocation.4=Wenn du Hilfe brauchst, versuche %s.
+addvault.new.readme.storageLocation.4=Falls du Hilfe brauchst, versuche %s.
addvault.new.readme.accessLocation.fileName=WILLKOMMEN ZUM TRESOR.rtf
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ VERSCHLÜSSELTES LAUFWERK 🔐️
-addvault.new.readme.accessLocation.2=Dies ist dein Tresorlaufwerk. Alle Dateien, die zu diesem Laufwerk hinzugefügt werden, werden mit Cryptomator verschlüsselt. Um zu einem späteren Zeitpunkt auf dieses Laufwerk zuzugreifen, entsperre es einfach wieder aus der Cryptomator-Anwendung heraus.
+addvault.new.readme.accessLocation.2=Dies ist dein Tresorlaufwerk. Alle zu diesem Laufwerk hinzugefügten Dateien werden mit Cryptomator verschlüsselt. Um zu einem späteren Zeitpunkt auf dieses Laufwerk zuzugreifen, entsperre es einfach wieder aus der Cryptomator-Anwendung heraus.
addvault.new.readme.accessLocation.3=Diese Datei kannst du löschen.
## Existing
-addvaultwizard.existing.instruction=Bitte wähle die Datei "masterkey.cryptomator" des existierenden Tresors aus.
+addvaultwizard.existing.instruction=Wähle die Datei „masterkey.cryptomator“ deines vorhandenen Tresors aus.
addvaultwizard.existing.chooseBtn=Durchsuchen…
addvaultwizard.existing.filePickerTitle=Masterkey-Datei auswählen
-addvaultwizard.existing.error=Der Tresor „%s“ ist kein gültiger Tresor und kann nicht hinzugefügt werden. Weitere Informationen findest du im Log.
+addvaultwizard.existing.error=Der Tresor „%s“ ist kein gültiger Tresor und kann nicht hinzugefügt werden. Weitere Informationen findest du im Diagnoseprotokoll.
## Success
-addvaultwizard.success.nextStepsInstructions=Tresor "%s" hinzugefügt.\nEntsperre diesen Tresor jetzt, um auf die Inhalte zugreifen oder welche hinzufügen zu können. Andernfalls entsperre diesen Tresor zu einem späteren Zeitpunkt.
+addvaultwizard.success.nextStepsInstructions=Tresor „%s“ hinzugefügt.\nUm auf Inhalte zuzugreifen oder welche hinzuzufügen, musst du den Tresor entsperren. Du kannst ihn aber auch zu jedem späteren Zeitpunkt entsperren.
addvaultwizard.success.unlockNow=Jetzt entsperren
# Remove Vault
removeVault.title=Tresor entfernen
-removeVault.information=Dein Tresor wird nicht gelöscht, er wird lediglich aus der Liste entfernt. Falls du dich später umentscheidest, kannst du ihn später einfach wieder hinzufügen.
+removeVault.information=Dein Tresor wird nicht gelöscht, sondern lediglich aus Cryptomators Tresorliste entfernt. Du kannst ihn daher später jederzeit wieder hinzufügen.
removeVault.confirmBtn=Tresor entfernen
# Change Password
changepassword.title=Password ändern
changepassword.enterOldPassword=Gib dein derzeitiges Passwort für "%s" ein
-changepassword.enterNewPassword=Vergib ein neues Passwort
+changepassword.enterNewPassword=Gib ein neues Tresorpasswort ein
changepassword.reenterNewPassword=Bestätige das neue Passwort
changepassword.passwordsMatch=Passwörter stimmen überein!
changepassword.passwordsDoNotMatch=Passwörter stimmen nicht überein
@@ -83,7 +84,7 @@ forgetPassword.information=Dies löscht das gespeicherte Passwort dieses Tresors
forgetPassword.confirmBtn=Passwort vergessen
# Unlock
-unlock.title=Tresor öffnen
+unlock.title=Tresor entsperren
unlock.passwordPrompt=Gib das Passwort für "%s" ein:
unlock.savePassword=Passwort speichern
unlock.unlockBtn=Entsperren
@@ -94,13 +95,13 @@ unlock.success.revealBtn=Tresor anzeigen
# Migration
migration.title=Tresor aktualisieren
## Start
-migration.start.prompt=Dein Tresor "%s" muss auf ein neueres Format aktualisiert werden. Stell bitte sicher, dass dieser Tresor vollständig synchronisiert ist.
+migration.start.prompt=Dein Tresor „%s“ muss auf ein neueres Format aktualisiert werden. Stell bitte zuvor sicher, dass dieser Tresor vollständig synchronisiert ist.
migration.start.confirm=Ja, mein Tresor ist vollständig synchronisiert
## Run
-migration.run.enterPassword=Gib das Passwort für "%s" ein
+migration.run.enterPassword=Gib das Passwort für „%s“ ein
migration.run.startMigrationBtn=Tresor migrieren
## Sucess
-migration.success.nextStepsInstructions="%s" erfolgreich migriert.\nDu kannst den Tresor jetzt entsperren.
+migration.success.nextStepsInstructions=„%s“ erfolgreich migriert.\nDu kannst deinen Tresor jetzt entsperren.
migration.success.unlockNow=Jetzt entsperren
# Preferences
@@ -109,7 +110,7 @@ preferences.title=Einstellungen
preferences.general=Allgemein
preferences.general.theme=Erscheinungsbild
preferences.general.startHidden=Cryptomator im Hintergrund starten
-preferences.general.debugLogging=Debug-Protokollierung
+preferences.general.debugLogging=Diagnoseprotokoll aktivieren
## Volume
preferences.volume=Tresorlaufwerk
preferences.volume.type=Laufwerkstyp
@@ -119,7 +120,7 @@ preferences.volume.webdav.scheme=WebDAV-Schema
preferences.updates=Updates
preferences.updates.currentVersion=Aktuelle Version: %s
preferences.updates.autoUpdateCheck=Automatisch nach Updates suchen
-preferences.updates.checkNowBtn=Jetzt prüfen
+preferences.updates.checkNowBtn=Jetzt suchen
preferences.updates.updateAvailable=Update auf Version %s verfügbar.
# Main Window
@@ -130,10 +131,12 @@ main.vaultlist.emptyList.onboardingInstruction=Klicke hier, um einen Tresor hinz
main.vaultlist.contextMenu.remove=Tresor entfernen
main.vaultlist.addVaultBtn=Tresor hinzufügen
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=GESPERRT
-main.vaultDetail.unlockedStatus=ENTSPERRT
main.vaultDetail.unlockBtn=Entsperren
main.vaultDetail.optionsBtn=Tresoroptionen
+### Unlocked
+main.vaultDetail.unlockedStatus=ENTSPERRT
main.vaultDetail.accessLocation=Dein Tresorinhalt ist hier erreichbar:
main.vaultDetail.revealBtn=Laufwerk anzeigen
main.vaultDetail.lockBtn=Sperren
@@ -142,6 +145,9 @@ main.vaultDetail.bytesPerSecondWritten=geschrieben:
main.vaultDetail.throughput.idle=Leerlauf
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
+### Needs Migration
+main.vaultDetail.migrateButton=Tresor aktualisieren
+main.vaultDetail.migratePrompt=Dein Tresor muss auf ein neues Format aktualisiert werden, bevor Du auf ihn zugreifen kannst
# Wrong File Alert
wrongFileAlert.title=Unbekannte Datei
@@ -149,17 +155,21 @@ wrongFileAlert.btn=OK
wrongFileAlert.information=Du hast versucht, eine Datei oder einen Ordner hinzuzufügen, der scheinbar kein Cryptomator-Tresor ist. Um Dateien zu verschlüsseln, erstelle und entsperre einen Tresor.
# Vault Options
+## General
vaultOptions.general=Allgemein
vaultOptions.general.changePasswordBtn=Passwort ändern
vaultOptions.general.showRecoveryKeyBtn=Wiederherstellungsschlüssel anzeigen
+## Mount
vaultOptions.mount=Laufwerk
vaultOptions.mount.readonly=Schreibgeschützt
vaultOptions.mount.driveName=Laufwerksname
vaultOptions.mount.customMountFlags=Benutzerdefinierte Mount-Flags
+vaultOptions.mount.winDriveLetterOccupied=belegt
+vaultOptions.mount.winDirChooser=Wähle ein leeres Verzeichnis
# Recovery Key
recoveryKey.title=Wiederherstellungsschlüssel
-recoveryKey.enterPassword.prompt=Gib Dein Kennwort ein um den Wiederherstellungsschlüssel für „%s“ anzuzeigen:
+recoveryKey.enterPassword.prompt=Gib dein Kennwort ein, um den Wiederherstellungsschlüssel für „%s“ anzuzeigen:
recoveryKey.display.message=Wiederherstellungsschlüssel für „%s“:
# Misc
diff --git a/main/ui/src/main/resources/i18n/strings_el.properties b/main/ui/src/main/resources/i18n/strings_el.properties
index 5e44db0d6..6f0caec0b 100644
--- a/main/ui/src/main/resources/i18n/strings_el.properties
+++ b/main/ui/src/main/resources/i18n/strings_el.properties
@@ -11,6 +11,7 @@
### Name
### Location
### Password
+### Recovery Key
### Information
## Existing
## Success
@@ -37,10 +38,15 @@
# Main Window
## Vault List
## Vault Detail
+### Locked
+### Unlocked
+### Needs Migration
# Wrong File Alert
# Vault Options
+## General
+## Mount
# Recovery Key
diff --git a/main/ui/src/main/resources/i18n/strings_es.properties b/main/ui/src/main/resources/i18n/strings_es.properties
index ac881715e..ba2d10cd9 100644
--- a/main/ui/src/main/resources/i18n/strings_es.properties
+++ b/main/ui/src/main/resources/i18n/strings_es.properties
@@ -36,12 +36,13 @@ addvaultwizard.new.directoryPickerTitle=Seleccionar directorio
addvaultwizard.new.enterPassword=Ingresar una contraseña para la bóveda
addvaultwizard.new.fileAlreadyExists=La bóveda no puede crearse en esta ruta porque ya existe un objeto.
addvaultwizard.new.invalidName=Nombre de bóveda inválido. Considere un nombre de directorio regular.
-addvaultwizard.new.ioException=El directorio seleccionado falló una prueba básica. Asegurarse de tener los derechos de acceso apropiados y que nada interfiere con Cryptomator.
+addvaultwizard.new.ioException=El directorio seleccionado falló una prueba básica. Asegúrese de tener los derechos de acceso apropiados y que nada interfiere con Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Confirmar la contraseña
addvaultwizard.new.passwordsMatch=¡Las contraseñas coinciden!
addvaultwizard.new.passwordsDoNotMatch=Las contraseñas no coinciden
addvaultwizard.new.createVaultBtn=Crear bóveda
+### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Esta es la clave de recuperación. Se debe mantener segura, es la única oportunidad de recuperar los datos si se pierde la contraseña.
addvaultwizard.new.recoveryKeySavedCheckbox=Sí, he hecho una copia de seguridad de esta clave de recuperación
### Information
@@ -130,10 +131,12 @@ main.vaultlist.emptyList.onboardingInstruction=Hacer clic aquí para añadir una
main.vaultlist.contextMenu.remove=Eliminar bóveda
main.vaultlist.addVaultBtn=Añadir bóveda
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=BLOQUEADO
-main.vaultDetail.unlockedStatus=DESBLOQUEADO
main.vaultDetail.unlockBtn=Desbloquear
main.vaultDetail.optionsBtn=Opciones de la bóveda
+### Unlocked
+main.vaultDetail.unlockedStatus=DESBLOQUEADO
main.vaultDetail.accessLocation=El contenido de la bóveda es accesible aquí:
main.vaultDetail.revealBtn=Revelar unidad
main.vaultDetail.lockBtn=Bloquear
@@ -142,6 +145,9 @@ main.vaultDetail.bytesPerSecondWritten=escrito:
main.vaultDetail.throughput.idle=inactivo
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
+### Needs Migration
+main.vaultDetail.migrateButton=Mejorar bóveda
+main.vaultDetail.migratePrompt=Su bóveda necesita ser actualizada a un formato nuevo antes de poder acceder a ella
# Wrong File Alert
wrongFileAlert.title=Archivo desconocido
@@ -149,13 +155,17 @@ wrongFileAlert.btn=Ok
wrongFileAlert.information=Se ha intentado añadir un archivo o carpeta que no parece ser una bóveda de Cryptomator. Para cifrar los datos, crear y desbloquear una bóveda.
# Vault Options
+## General
vaultOptions.general=General
vaultOptions.general.changePasswordBtn=Cambiar contraseña
vaultOptions.general.showRecoveryKeyBtn=Mostrar la clave de recuperación
+## Mount
vaultOptions.mount=Montaje
vaultOptions.mount.readonly=Sólo lectura
vaultOptions.mount.driveName=Nombre de la unidad
vaultOptions.mount.customMountFlags=Opciones de montaje personalizadas
+vaultOptions.mount.winDriveLetterOccupied=ocupado
+vaultOptions.mount.winDirChooser=Elija un directorio vacío
# Recovery Key
recoveryKey.title=Clave de recuperación
diff --git a/main/ui/src/main/resources/i18n/strings_fr.properties b/main/ui/src/main/resources/i18n/strings_fr.properties
index 899c4f551..b0df2d887 100644
--- a/main/ui/src/main/resources/i18n/strings_fr.properties
+++ b/main/ui/src/main/resources/i18n/strings_fr.properties
@@ -24,7 +24,7 @@ addvaultwizard.welcome.newButton=Créer un nouveau coffre
addvaultwizard.welcome.existingButton=Ouvrir un coffre existant
## New
### Name
-addvaultwizard.new.nameInstruction=Choisissez un nom pour le coffre
+addvaultwizard.new.nameInstruction=Choisir un nom pour le coffre
addvaultwizard.new.namePrompt=Nom du coffre
### Location
addvaultwizard.new.locationInstruction=Où Cryptomator doit-il stocker les fichiers chiffrés de votre coffre ?
@@ -36,12 +36,13 @@ addvaultwizard.new.directoryPickerTitle=Choisissez le répertoire
addvaultwizard.new.enterPassword=Saisissez un mot de passe pour le coffre
addvaultwizard.new.fileAlreadyExists=Le coffre ne peut pas être créé sur ce chemin car un objet existe déjà.
addvaultwizard.new.invalidName=Nom de coffre invalide. Préférez un nom de répertoire habituel.
-addvaultwizard.new.ioException=Le répertoire sélectionné a échoué à un test basique. Assurez-vous d'avoir les droits d'accès appropriés et que rien n'interfère avec Cryptomator.
+addvaultwizard.new.ioException=Le répertoire sélectionné a échoué un test de base. Assurez-vous d'avoir les droits d'accès appropriés et que rien n'interfère avec Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Confirmez le mot de passe
addvaultwizard.new.passwordsMatch=Mots de passe identiques !
addvaultwizard.new.passwordsDoNotMatch=Les mots de passe ne correspondent pas
addvaultwizard.new.createVaultBtn=Créer un coffre
+### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=C'est votre clé de récupération. Gardez-la en sécurité, c'est votre seule chance de récupérer vos données si vous perdez votre mot de passe.
addvaultwizard.new.recoveryKeySavedCheckbox=Oui, j'ai fait une sauvegarde sécurisée de cette clé de récupération
### Information
@@ -130,10 +131,12 @@ main.vaultlist.emptyList.onboardingInstruction=Cliquez ici pour ajouter un coffr
main.vaultlist.contextMenu.remove=Supprimer le coffre
main.vaultlist.addVaultBtn=Ajouter un coffre
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=VERROUILLÉ
-main.vaultDetail.unlockedStatus=DÉVERROUILLÉ
main.vaultDetail.unlockBtn=Déverrouiller
main.vaultDetail.optionsBtn=Option du coffre
+### Unlocked
+main.vaultDetail.unlockedStatus=DÉVERROUILLÉ
main.vaultDetail.accessLocation=Le contenu de votre coffre est accessible ici :
main.vaultDetail.revealBtn=Révéler le lecteur
main.vaultDetail.lockBtn=Verrouiller
@@ -142,6 +145,9 @@ main.vaultDetail.bytesPerSecondWritten=écriture :
main.vaultDetail.throughput.idle=inactif
main.vaultDetail.throughput.kbps=%.1fkB/s
main.vaultDetail.throughput.mbps=%.1fMB/s
+### Needs Migration
+main.vaultDetail.migrateButton=Mettre à jour le coffre
+main.vaultDetail.migratePrompt=Votre coffre doit être converti dans un nouveau format avant d'y accéder
# Wrong File Alert
wrongFileAlert.title=Fichier inconnu
@@ -149,13 +155,17 @@ wrongFileAlert.btn=Ok
wrongFileAlert.information=Vous avez essayé d’ajouter un fichier ou un dossier qui ne semble pas être un coffre Cryptomator. Pour chiffrer vos données, créez un coffre et déverrouillez-le.
# Vault Options
+## General
vaultOptions.general=Général
vaultOptions.general.changePasswordBtn=Modifier le mot de passe
vaultOptions.general.showRecoveryKeyBtn=Afficher la clé de récupération
+## Mount
vaultOptions.mount=Montage
vaultOptions.mount.readonly=Lecture seule
vaultOptions.mount.driveName=Nom du lecteur
vaultOptions.mount.customMountFlags=Drapeau de montage personnalisé
+vaultOptions.mount.winDriveLetterOccupied=occupé
+vaultOptions.mount.winDirChooser=Choisir un répertoire vide
# Recovery Key
recoveryKey.title=Clé de récupération
diff --git a/main/ui/src/main/resources/i18n/strings_hr.properties b/main/ui/src/main/resources/i18n/strings_hr.properties
index 5e44db0d6..6f0caec0b 100644
--- a/main/ui/src/main/resources/i18n/strings_hr.properties
+++ b/main/ui/src/main/resources/i18n/strings_hr.properties
@@ -11,6 +11,7 @@
### Name
### Location
### Password
+### Recovery Key
### Information
## Existing
## Success
@@ -37,10 +38,15 @@
# Main Window
## Vault List
## Vault Detail
+### Locked
+### Unlocked
+### Needs Migration
# Wrong File Alert
# Vault Options
+## General
+## Mount
# Recovery Key
diff --git a/main/ui/src/main/resources/i18n/strings_it.properties b/main/ui/src/main/resources/i18n/strings_it.properties
index 306e9b0ec..dc461826a 100644
--- a/main/ui/src/main/resources/i18n/strings_it.properties
+++ b/main/ui/src/main/resources/i18n/strings_it.properties
@@ -36,12 +36,13 @@ addvaultwizard.new.directoryPickerTitle=Seleziona cartella
addvaultwizard.new.enterPassword=Inserisci una password per la cassaforte
addvaultwizard.new.fileAlreadyExists=La cassaforte non può essere creata in questo percorso perché un oggetto esiste già.
addvaultwizard.new.invalidName=Nome della cassaforte non valido. Si prega di considerare un nome di directory regolare.
-addvaultwizard.new.ioException=La cartella selezionata non ha avuto successo per un test di base. Assicurati di avere i diritti di accesso adeguati e che nulla interferisca con Cryptomator.
+addvaultwizard.new.ioException=La cartella selezionata non ha superato un test di base. Assicurati di avere i diritti di accesso adeguati e che nulla interferisca con Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Conferma Password
addvaultwizard.new.passwordsMatch=Le password corrispondono!
addvaultwizard.new.passwordsDoNotMatch=Le password non corrispondono
addvaultwizard.new.createVaultBtn=Crea Cassaforte
+### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Questa è la tua chiave di recupero. Tienilo al sicuro, è la tua unica possibilità di recuperare i tuoi dati se perdi la password.
addvaultwizard.new.recoveryKeySavedCheckbox=Sì, ho fatto un backup sicuro di questa chiave di recupero
### Information
@@ -130,10 +131,12 @@ main.vaultlist.emptyList.onboardingInstruction=Clicca qui per aggiungere una cas
main.vaultlist.contextMenu.remove=Rimuovi Cassaforte
main.vaultlist.addVaultBtn=Aggiungi Cassaforte
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=BLOCCATO
-main.vaultDetail.unlockedStatus=SBLOCCATO
main.vaultDetail.unlockBtn=Sblocca
main.vaultDetail.optionsBtn=Opzioni Cassaforte
+### Unlocked
+main.vaultDetail.unlockedStatus=SBLOCCATO
main.vaultDetail.accessLocation=I contenuti della tua cassaforte sono accessibili qui:
main.vaultDetail.revealBtn=Visualizza disco
main.vaultDetail.lockBtn=Blocca
@@ -142,6 +145,9 @@ main.vaultDetail.bytesPerSecondWritten=scrittura:
main.vaultDetail.throughput.idle=inattivo
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
+### Needs Migration
+main.vaultDetail.migrateButton=Aggiorna la cassaforte
+main.vaultDetail.migratePrompt=Prima di potervi accedere la tua cassaforte deve essere aggiornata al nuovo formato
# Wrong File Alert
wrongFileAlert.title=File sconosciuto
@@ -149,13 +155,17 @@ wrongFileAlert.btn=OK
wrongFileAlert.information=Hai provato ad aggiungere un file o una cartella che non sembra essere una cassaforte di Cryptomator. Per crittografare i tuoi dati, creare e sbloccare una cassaforte.
# Vault Options
+## General
vaultOptions.general=Generali
vaultOptions.general.changePasswordBtn=Modifica password
vaultOptions.general.showRecoveryKeyBtn=Visualizza la chiave di recupero
+## Mount
vaultOptions.mount=Montaggio
vaultOptions.mount.readonly=Sola lettura
vaultOptions.mount.driveName=Nome drive
vaultOptions.mount.customMountFlags=Opzioni personalizzate
+vaultOptions.mount.winDriveLetterOccupied=occupato
+vaultOptions.mount.winDirChooser=Scegli una directory vuota
# Recovery Key
recoveryKey.title=Chiave di recupero
diff --git a/main/ui/src/main/resources/i18n/strings_ja.properties b/main/ui/src/main/resources/i18n/strings_ja.properties
index 3220d2812..9cf714cfd 100644
--- a/main/ui/src/main/resources/i18n/strings_ja.properties
+++ b/main/ui/src/main/resources/i18n/strings_ja.properties
@@ -42,6 +42,7 @@ addvaultwizard.new.reenterPassword=パスワードの確認
addvaultwizard.new.passwordsMatch=パスワードが一致しました!
addvaultwizard.new.passwordsDoNotMatch=パスワードが一致しません
addvaultwizard.new.createVaultBtn=金庫を作成
+### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=これは、あなたの回復キーです。大切に保管してください、パスワードを忘れてしまった場合でもデータを復元できる唯一の方法です。
addvaultwizard.new.recoveryKeySavedCheckbox=はい、回復キーを大切に保管しました
### Information
@@ -130,10 +131,12 @@ main.vaultlist.emptyList.onboardingInstruction=ここをクリックして金庫
main.vaultlist.contextMenu.remove=金庫を削除
main.vaultlist.addVaultBtn=金庫を追加
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=施錠済み
-main.vaultDetail.unlockedStatus=解錠済み
main.vaultDetail.unlockBtn=解錠
main.vaultDetail.optionsBtn=金庫のオプション
+### Unlocked
+main.vaultDetail.unlockedStatus=解錠済み
main.vaultDetail.accessLocation=アクセス可能な金庫のコンテンツ:
main.vaultDetail.revealBtn=ドライブを表示
main.vaultDetail.lockBtn=施錠
@@ -142,6 +145,9 @@ main.vaultDetail.bytesPerSecondWritten=書き込み:
main.vaultDetail.throughput.idle=アイドル
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
+### Needs Migration
+main.vaultDetail.migrateButton=金庫をアップグレード
+main.vaultDetail.migratePrompt=金庫にアクセスする前に、 金庫を新しい形式にアップグレードする必要があります
# Wrong File Alert
wrongFileAlert.title=不明なファイル
@@ -149,13 +155,17 @@ wrongFileAlert.btn=Ok
wrongFileAlert.information=Cryptomator の金庫ではない、ファイルかフォルダーを追加しようとしました。データを暗号化するには、金庫を作成して施錠してください。
# Vault Options
+## General
vaultOptions.general=基本設定
vaultOptions.general.changePasswordBtn=パスワードの変更
vaultOptions.general.showRecoveryKeyBtn=回復キーを表示
+## Mount
vaultOptions.mount=マウント
vaultOptions.mount.readonly=読み取り専用
vaultOptions.mount.driveName=ドライブ名
vaultOptions.mount.customMountFlags=カスタム マウント フラグ
+vaultOptions.mount.winDriveLetterOccupied=使用中
+vaultOptions.mount.winDirChooser=空のディレクトリを選択してください
# Recovery Key
recoveryKey.title=回復キー
diff --git a/main/ui/src/main/resources/i18n/strings_ko.properties b/main/ui/src/main/resources/i18n/strings_ko.properties
index aeab2e239..619dae41e 100644
--- a/main/ui/src/main/resources/i18n/strings_ko.properties
+++ b/main/ui/src/main/resources/i18n/strings_ko.properties
@@ -36,12 +36,13 @@ addvaultwizard.new.directoryPickerTitle=디렉터리 선택
addvaultwizard.new.enterPassword=Vault의 비밀번호를 입력하십시요.
addvaultwizard.new.fileAlreadyExists=이미 다른 객체가 존재하고 있어 해당 경로에 Vault를 생성할 수 없습니다.
addvaultwizard.new.invalidName=유효하지 않은 Vault 이름입니다. 일반적인 디렉터리 이름으로 지정해주십시요.
-addvaultwizard.new.ioException=선택된 디렉터리가 기본테스트에 실패하였습니다. Cryptomator가 적절한 권한을 가지고 있는지, 간섭을 받는 것은 없는지 확인하여 주십시요.
+addvaultwizard.new.ioException=선택된 디렉터리가 기본테스트에 실패하였습니다. Cryptomator가 적절한 권한을 가지고 있고 간섭을 받는 것은 없는지 확인하여 주십시요.
### Password
addvaultwizard.new.reenterPassword=비밀번호 확인
addvaultwizard.new.passwordsMatch=비밀번호 일치!
addvaultwizard.new.passwordsDoNotMatch=비밀번호가 일치하지 않습니다.
addvaultwizard.new.createVaultBtn=Vault 생성
+### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=이것은 복구키입니다. 만일 비밀번호를 분실하셨을 때,데이터를 복구 할 수 있는 유일한 방법이므로, 안전하게 보관하시기 바랍니다.
addvaultwizard.new.recoveryKeySavedCheckbox=예, 이 복구키를 안전하게 백업해두었습니다.
### Information
@@ -130,10 +131,12 @@ main.vaultlist.emptyList.onboardingInstruction=Vault를 추가하기 위해 이
main.vaultlist.contextMenu.remove=Vault 제거
main.vaultlist.addVaultBtn=Vault 추가
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=잠김
-main.vaultDetail.unlockedStatus=잠금해제됨
main.vaultDetail.unlockBtn=잠금해제
main.vaultDetail.optionsBtn=Vault 옵션
+### Unlocked
+main.vaultDetail.unlockedStatus=잠금해제됨
main.vaultDetail.accessLocation=이 Vault의 내용은 다음의 경로에서 접근할 수 있습니다:
main.vaultDetail.revealBtn=드라이브 표시
main.vaultDetail.lockBtn=잠금
@@ -142,6 +145,9 @@ main.vaultDetail.bytesPerSecondWritten=쓰기:
main.vaultDetail.throughput.idle=대기
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
+### Needs Migration
+main.vaultDetail.migrateButton=Vault 업그레이드
+main.vaultDetail.migratePrompt=Vault에 접근하기 전, 새로운 포멧으로 업그레이드가 필요합니다.
# Wrong File Alert
wrongFileAlert.title=알 수 없는 파일
@@ -149,13 +155,17 @@ wrongFileAlert.btn=확인
wrongFileAlert.information=Cryptomator vault에 없는 파일이나 폴더를 추가하려고 하신 것 같습니다. 데이터를 암호화하기 위해 Vault를 생성하시고 잠금해제하시기 바랍니다.
# Vault Options
+## General
vaultOptions.general=일반
vaultOptions.general.changePasswordBtn=비밀번호 변경
vaultOptions.general.showRecoveryKeyBtn=복구 키 출력
+## Mount
vaultOptions.mount=드라이브 구성
vaultOptions.mount.readonly=읽기 전용
vaultOptions.mount.driveName=드라이브 이름
vaultOptions.mount.customMountFlags=사용자 정의 매개변수 사용
+vaultOptions.mount.winDriveLetterOccupied=사용됨
+vaultOptions.mount.winDirChooser=빈 디렉터리를 선택해 주십시요
# Recovery Key
recoveryKey.title=복구 키
diff --git a/main/ui/src/main/resources/i18n/strings_nl.properties b/main/ui/src/main/resources/i18n/strings_nl.properties
index d5fdb1765..4cba43945 100644
--- a/main/ui/src/main/resources/i18n/strings_nl.properties
+++ b/main/ui/src/main/resources/i18n/strings_nl.properties
@@ -36,12 +36,13 @@ addvaultwizard.new.directoryPickerTitle=Selecteer map
addvaultwizard.new.enterPassword=Voer een wachtwoord voor de kluis in
addvaultwizard.new.fileAlreadyExists=Er kan op deze locatie geen kluis aangemaakt worden, omdat er een bepaald object bestaat.
addvaultwizard.new.invalidName=Ongeldige kluisnaam. Overweeg een standaard mapnaam.
-addvaultwizard.new.ioException=De geselecteerde map heeft een basistest niet gehaald. Zorg dat de map de juiste rechten heeft, en dat er niets conflicteert met Cryptomator.
+addvaultwizard.new.ioException=De geselecteerde map heeft een basistest niet gehaald. Zorg dat de map de juiste rechten heeft, en dat er niet conflicteert met Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Bevestig het wachtwoord
addvaultwizard.new.passwordsMatch=Wachtwoorden komen overeen!
addvaultwizard.new.passwordsDoNotMatch=Wachtwoorden komen niet overeen
addvaultwizard.new.createVaultBtn=Kluis aanmaken
+### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Dit is uw herstelsleutel. Bewaar deze goed, het is de enige mogelijkheid om uw data te herstellen als u uw wachtwoord verliest.
addvaultwizard.new.recoveryKeySavedCheckbox=Ja, ik heb een beveiligde back-up gemaakt van deze herstelsleutel
### Information
@@ -130,10 +131,12 @@ main.vaultlist.emptyList.onboardingInstruction=Klik hier om een kluis toe te voe
main.vaultlist.contextMenu.remove=Verwijder Kluis
main.vaultlist.addVaultBtn=Kluis toevoegen
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=VERGRENDELD
-main.vaultDetail.unlockedStatus=ONTGRENDELD
main.vaultDetail.unlockBtn=Ontgrendel
main.vaultDetail.optionsBtn=Kluis-instellingen
+### Unlocked
+main.vaultDetail.unlockedStatus=ONTGRENDELD
main.vaultDetail.accessLocation=De inhoud van uw kluis is hier toegankelijk:
main.vaultDetail.revealBtn=Toon Schijf
main.vaultDetail.lockBtn=Vergrendel
@@ -142,6 +145,9 @@ main.vaultDetail.bytesPerSecondWritten=schrijven:
main.vaultDetail.throughput.idle=inactief
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
+### Needs Migration
+main.vaultDetail.migrateButton=Kluis upgraden
+main.vaultDetail.migratePrompt=Uw kluis moet worden bijgewerkt naar een nieuw formaat, voordat u deze kunt openen
# Wrong File Alert
wrongFileAlert.title=Onbekend bestand
@@ -149,13 +155,17 @@ wrongFileAlert.btn=Oké
wrongFileAlert.information=U hebt geprobeerd om een bestand of een map toe te voegen die geen Cryptomator kluis is. Maak en ontgrendel een kluis om uw gegevens te versleutelen.
# Vault Options
+## General
vaultOptions.general=Algemeen
vaultOptions.general.changePasswordBtn=Wijzig wachtwoord
vaultOptions.general.showRecoveryKeyBtn=Toon herstelsleutel
+## Mount
vaultOptions.mount=Aankoppelen
vaultOptions.mount.readonly=Alleen-Lezen
vaultOptions.mount.driveName=Schijfnaam
vaultOptions.mount.customMountFlags=Aangepaste Aankoppel Parameters
+vaultOptions.mount.winDriveLetterOccupied=in gebruik
+vaultOptions.mount.winDirChooser=Kies een lege map
# Recovery Key
recoveryKey.title=Herstelsleutel
diff --git a/main/ui/src/main/resources/i18n/strings_pt.properties b/main/ui/src/main/resources/i18n/strings_pt.properties
index 5e44db0d6..6f0caec0b 100644
--- a/main/ui/src/main/resources/i18n/strings_pt.properties
+++ b/main/ui/src/main/resources/i18n/strings_pt.properties
@@ -11,6 +11,7 @@
### Name
### Location
### Password
+### Recovery Key
### Information
## Existing
## Success
@@ -37,10 +38,15 @@
# Main Window
## Vault List
## Vault Detail
+### Locked
+### Unlocked
+### Needs Migration
# Wrong File Alert
# Vault Options
+## General
+## Mount
# Recovery Key
diff --git a/main/ui/src/main/resources/i18n/strings_pt_BR.properties b/main/ui/src/main/resources/i18n/strings_pt_BR.properties
index 0536aa1a0..44a7c93bc 100644
--- a/main/ui/src/main/resources/i18n/strings_pt_BR.properties
+++ b/main/ui/src/main/resources/i18n/strings_pt_BR.properties
@@ -36,12 +36,12 @@ addvaultwizard.new.directoryPickerTitle=Selecionar Diretório
addvaultwizard.new.enterPassword=Digite uma senha para o cofre
addvaultwizard.new.fileAlreadyExists=O cofre não pode ser criado neste local porque algum objeto já existe.
addvaultwizard.new.invalidName=Nome de cofre inválido. Por favor considere usar um nome de diretório comum.
-addvaultwizard.new.ioException=O diretório selecionado falhou em um teste básico. Certifique-se de ter os direitos de acesso apropriados e que nada interfira com o Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Confirme a senha
addvaultwizard.new.passwordsMatch=As senhas são idênticas!
addvaultwizard.new.passwordsDoNotMatch=As senhas são diferentes
addvaultwizard.new.createVaultBtn=Criar Cofre
+### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Esta é a sua chave de recuperação. Mantenha-a segura, é sua única chance de recuperar seus dados se você perder sua senha.
addvaultwizard.new.recoveryKeySavedCheckbox=Sim, fiz um backup seguro desta chave de recuperação
### Information
@@ -130,10 +130,12 @@ main.vaultlist.emptyList.onboardingInstruction=Clique aqui para adicionar um cof
main.vaultlist.contextMenu.remove=Remover Cofre
main.vaultlist.addVaultBtn=Adicionar Cofre
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=BLOQUEADO
-main.vaultDetail.unlockedStatus=DESBLOQUEADO
main.vaultDetail.unlockBtn=Desbloquear
main.vaultDetail.optionsBtn=Opções de Cofre
+### Unlocked
+main.vaultDetail.unlockedStatus=DESBLOQUEADO
main.vaultDetail.accessLocation=O conteúdo do seu cofre está disponível aqui:
main.vaultDetail.revealBtn=Revelar Volume
main.vaultDetail.lockBtn=Bloquear
@@ -142,6 +144,8 @@ main.vaultDetail.bytesPerSecondWritten=gravação:
main.vaultDetail.throughput.idle=ocioso
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
+### Needs Migration
+main.vaultDetail.migrateButton=Atualizar Cofre
# Wrong File Alert
wrongFileAlert.title=Arquivo Desconhecido
@@ -149,9 +153,11 @@ wrongFileAlert.btn=Ok
wrongFileAlert.information=Você tentou adicionar um arquivo ou diretório que não aparenta ser um cofre do Cryptomator. Para criptografar seus dados, crie e desbloqueie um cofre.
# Vault Options
+## General
vaultOptions.general=Geral
vaultOptions.general.changePasswordBtn=Alterar Senha
vaultOptions.general.showRecoveryKeyBtn=Exibir chave de recuperação
+## Mount
vaultOptions.mount=Montagem
vaultOptions.mount.readonly=Somente Leitura
vaultOptions.mount.driveName=Nome do Volume
@@ -171,4 +177,3 @@ passwordStrength.messageLabel.4=Muito forte
# Quit
quit.prompt=Sair da aplicação? Existem cofres desbloqueados.
-quit.lockAndQuit=Bloquear e Sair
diff --git a/main/ui/src/main/resources/i18n/strings_ru.properties b/main/ui/src/main/resources/i18n/strings_ru.properties
index c979504d1..7b393f8c1 100644
--- a/main/ui/src/main/resources/i18n/strings_ru.properties
+++ b/main/ui/src/main/resources/i18n/strings_ru.properties
@@ -4,10 +4,10 @@
## Button
generic.button.apply=Применить
generic.button.back=Назад
-generic.button.cancel=Отменить
+generic.button.cancel=Отмена
generic.button.change=Изменить
generic.button.done=Готово
-generic.button.next=Вперед
+generic.button.next=Далее
# Tray Menu
traymenu.showMainWindow=Показать
@@ -21,7 +21,7 @@ traymenu.vault.reveal=Показать
addvaultwizard.title=Добавить хранилище
## Welcome
addvaultwizard.welcome.newButton=Создать хранилище
-addvaultwizard.welcome.existingButton=Открыть существующее хранилище
+addvaultwizard.welcome.existingButton=Открыть имеющееся хранилище
## New
### Name
addvaultwizard.new.nameInstruction=Выберите имя для хранилища
@@ -30,42 +30,43 @@ addvaultwizard.new.namePrompt=Имя хранилища
addvaultwizard.new.locationInstruction=Где Cryptomator должен хранить зашифрованные файлы вашего хранилища?
addvaultwizard.new.locationLabel=Место хранения
addvaultwizard.new.locationPrompt=…
-addvaultwizard.new.directoryPickerLabel=Пользовательское расположение
+addvaultwizard.new.directoryPickerLabel=Своё место
addvaultwizard.new.directoryPickerButton=Выбрать…
addvaultwizard.new.directoryPickerTitle=Выберите каталог
addvaultwizard.new.enterPassword=Введите пароль для хранилища
addvaultwizard.new.fileAlreadyExists=Хранилище не может быть создано по этому пути, потому что некоторые объекты уже существуют.
-addvaultwizard.new.invalidName=Неверное имя хранилища. Пожалуйста, выберите стандартное название каталога.
+addvaultwizard.new.invalidName=Неверное имя хранилища. Укажите корректное имя каталога.
addvaultwizard.new.ioException=Выбранный каталог не прошел начальную проверку. Убедитесь, что у вас есть права доступа и ничего не мешает Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Подтвердите пароль
-addvaultwizard.new.passwordsMatch=Пароли совпадают!
+addvaultwizard.new.passwordsMatch=Пароли совпадают
addvaultwizard.new.passwordsDoNotMatch=Пароли не совпадают
addvaultwizard.new.createVaultBtn=Создать хранилище
-addvaultwizard.new.recoveryKeyInstruction=Это ваш ключ восстановления. Держите его в безопасности, это единственный шанс восстановить ваши данные, если вы потеряете пароль.
-addvaultwizard.new.recoveryKeySavedCheckbox=Да, я сделал резервную копию этого ключа восстановления
+### Recovery Key
+addvaultwizard.new.recoveryKeyInstruction=Это ключ восстановления. Держите его в надёжном месте - это единственный шанс восстановить данные, если вы потеряете пароль.
+addvaultwizard.new.recoveryKeySavedCheckbox=Да, у меня есть резервная копия этого ключа восстановления
### Information
addvault.new.readme.storageLocation.fileName=ЧТО ЗА КАТАЛОГ.rtf
-addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ ФАЙЛЫ ХРАНИЛИЩА ⚠️
-addvault.new.readme.storageLocation.2=Это место хранения вашего хранилища. {\\b НЕ} изменяйте никакие файлы в этом каталоге.
+addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ ФАЙЛЫ ХРАНИЛИЩ ⚠️
+addvault.new.readme.storageLocation.2=Это место, где находится ваше хранилище. {\\b НЕ} изменяйте никакие файлы в этом каталоге.
addvault.new.readme.storageLocation.3=Если вы хотите зашифровать файлы с помощью Cryptomator, разблокируйте хранилище и используйте предоставленный диск.
-addvault.new.readme.storageLocation.4=Если вам нужна помощь, попробуйте %s.
-addvault.new.readme.accessLocation.fileName=ДОБРО ПОЖАЛОВАТЬ В ВАШЕ ХРАНИЛИЩЕ.rtf
-addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ ЗАШИФРОВАННОЕ ХРАНИЛИЩЕ 🔐️
+addvault.new.readme.storageLocation.4=Нужна помощь? Попробуйте %s.
+addvault.new.readme.accessLocation.fileName=ДОБРО ПОЖАЛОВАТЬ В ХРАНИЛИЩЕ.rtf
+addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ ЗАШИФРОВАННЫЙ ТОМ 🔐️
addvault.new.readme.accessLocation.2=Это место доступа в хранилище. Любые файлы, добавленные в этот том, будут зашифрованы Cryptomator. Чтобы получить доступ к этому тому позже, просто разблокируйте его из приложения Cryptomator.
-addvault.new.readme.accessLocation.3=Можете удалить этот файл.
+addvault.new.readme.accessLocation.3=Этот файл можно удалить.
## Existing
-addvaultwizard.existing.instruction=Выберите файл "masterkey.cryptomator" от существующего хранилища.
+addvaultwizard.existing.instruction=Выберите файл "masterkey.cryptomator" из имеющегося хранилища.
addvaultwizard.existing.chooseBtn=Выбрать…
-addvaultwizard.existing.filePickerTitle=Выберите файл MasterKey
-addvaultwizard.existing.error=Не удается добавить хранилище "%s": Недопустимое хранилище. Пожалуйста, просмотрите журнал событий для получения дополнительной информации.
+addvaultwizard.existing.filePickerTitle=Выберите файл мастер-ключа
+addvaultwizard.existing.error=Невозможно добавить хранилище "%s": оно некорректное. См. информацию в журнале событий.
## Success
-addvaultwizard.success.nextStepsInstructions=Добавлено хранилище "%s".\nДля добавления или доступа к контенту вам необходимо разблокировать хранилище. Кроме того, вы можете разблокировать его в любое время позже.
-addvaultwizard.success.unlockNow=Разблокировать сейчас
+addvaultwizard.success.nextStepsInstructions=Добавлено хранилище "%s".\nДля добавления данных или доступа к содержимому нужно разблокировать хранилище. Его можно разблокировать и позже.
+addvaultwizard.success.unlockNow=Разблокировать
# Remove Vault
removeVault.title=Удалить хранилище
-removeVault.information=Cryptomator просто забудет это хранилище. Вы можете добавить его снова позже. Зашифрованные файлы не будут удалены с жесткого диска.
+removeVault.information=Cryptomator просто забудет это хранилище. Позже вы можете добавить его снова. Зашифрованные файлы не будут удалены с жёсткого диска.
removeVault.confirmBtn=Удалить хранилище
# Change Password
@@ -73,43 +74,43 @@ changepassword.title=Изменить пароль
changepassword.enterOldPassword=Введите текущий пароль для "%s"
changepassword.enterNewPassword=Введите новый пароль для хранилища
changepassword.reenterNewPassword=Подтвердите новый пароль
-changepassword.passwordsMatch=Пароли совпадают!
+changepassword.passwordsMatch=Пароли совпадают
changepassword.passwordsDoNotMatch=Пароли не совпадают
-changepassword.finalConfirmation=Я понимаю, что не смогу восстановить свои данные, если забуду свой пароль
+changepassword.finalConfirmation=Я понимаю, что не смогу восстановить свои данные, если забуду пароль
# Forget Password
-forgetPassword.title=Забыл пароль
-forgetPassword.information=Это удалит сохраненный пароль от этого хранилища из вашего хранилища ключей.
-forgetPassword.confirmBtn=Забыл пароль
+forgetPassword.title=Не помню пароль
+forgetPassword.information=Сохранённый пароль от этого хранилища будет удалён из вашей связки ключей.
+forgetPassword.confirmBtn=Не помню пароль
# Unlock
unlock.title=Разблокировать хранилище
-unlock.passwordPrompt=Введите пароль для %s
+unlock.passwordPrompt=Введите пароль для "%s"
unlock.savePassword=Сохранить пароль
unlock.unlockBtn=Разблокировать
## Success
-unlock.success.message="%s" успешно разблокировано! Ваше хранилище теперь доступно.
+unlock.success.message=Разблокировка "%s" успешно выполнена! Доступ в хранилище открыт.
unlock.success.revealBtn=Показать хранилище
# Migration
migration.title=Обновить хранилище
## Start
-migration.start.prompt=Ваше хранилище "%s" должно быть обновлено до более нового формата. Перед тем, как продолжить, убедитесь в отсутствии отложенной синхронизации, которая может повлиять на хранилище.
-migration.start.confirm=Да, мое хранилище полностью синхронизировано
+migration.start.prompt=Хранилище "%s" нужно обновить до более нового формата. Прежде чем продолжить, убедитесь, что нет отложенной синхронизации, которая может повлиять на хранилище.
+migration.start.confirm=Да, моё хранилище полностью синхронизировано
## Run
-migration.run.enterPassword=Введите пароль для %s
+migration.run.enterPassword=Введите пароль для "%s"
migration.run.startMigrationBtn=Перенести хранилище
## Sucess
-migration.success.nextStepsInstructions="%s" перенесено успешно.\nТеперь вы можете разблокировать хранилище.
-migration.success.unlockNow=Разблокировать сейчас
+migration.success.nextStepsInstructions=Перенос "%s" успешно выполнен.\nТеперь можно разблокировать хранилище.
+migration.success.unlockNow=Разблокировать
# Preferences
preferences.title=Настройки
## General
-preferences.general=Общее
-preferences.general.theme=Внешний вид
-preferences.general.startHidden=Скрыть окно при запуске Cryptomator
-preferences.general.debugLogging=Включить ведение журнала отладки
+preferences.general=Общие
+preferences.general.theme=Оформление
+preferences.general.startHidden=Скрывать окно при запуске Cryptomator
+preferences.general.debugLogging=Вести журнал отладки
## Volume
preferences.volume=Виртуальный диск
preferences.volume.type=Тип тома
@@ -119,47 +120,56 @@ preferences.volume.webdav.scheme=Схема WebDAV
preferences.updates=Обновления
preferences.updates.currentVersion=Текущая версия: %s
preferences.updates.autoUpdateCheck=Автоматически проверять наличие обновлений
-preferences.updates.checkNowBtn=Проверить сейчас
+preferences.updates.checkNowBtn=Проверить
preferences.updates.updateAvailable=Доступно обновление до версии %s.
# Main Window
main.closeBtn.tooltip=Закрыть
main.preferencesBtn.tooltip=Настройки
## Vault List
-main.vaultlist.emptyList.onboardingInstruction=Нажмите здесь для добавления хранилища
+main.vaultlist.emptyList.onboardingInstruction=Нажмите здесь, чтобы добавить хранилище
main.vaultlist.contextMenu.remove=Удалить хранилище
main.vaultlist.addVaultBtn=Добавить хранилище
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=ЗАБЛОКИРОВАНО
-main.vaultDetail.unlockedStatus=РАЗБЛОКИРОВАНО
main.vaultDetail.unlockBtn=Разблокировать
main.vaultDetail.optionsBtn=Параметры хранилища
-main.vaultDetail.accessLocation=Содержимое вашего хранилища доступно здесь:
+### Unlocked
+main.vaultDetail.unlockedStatus=РАЗБЛОКИРОВАНО
+main.vaultDetail.accessLocation=Содержимое хранилища доступно здесь:
main.vaultDetail.revealBtn=Показать диск
main.vaultDetail.lockBtn=Заблокировать
-main.vaultDetail.bytesPerSecondRead=прочитано:
-main.vaultDetail.bytesPerSecondWritten=записано:
+main.vaultDetail.bytesPerSecondRead=чтение:
+main.vaultDetail.bytesPerSecondWritten=запись:
main.vaultDetail.throughput.idle=бездействие
-main.vaultDetail.throughput.kbps=%.1f Кб/с
-main.vaultDetail.throughput.mbps=%.1f Мб/с
+main.vaultDetail.throughput.kbps=%.1f КиБ/с
+main.vaultDetail.throughput.mbps=%.1f МиБ/с
+### Needs Migration
+main.vaultDetail.migrateButton=Обновить хранилище
+main.vaultDetail.migratePrompt=Хранилище должно быть обновлено до нового формата, прежде чем вы сможете получить к нему доступ
# Wrong File Alert
wrongFileAlert.title=Неизвестный файл
-wrongFileAlert.btn=ОК
-wrongFileAlert.information=Вы пытались добавить файл или папку, которые, похоже, не являются хранилищем Cryptomator. Чтобы зашифровать ваши данные, создайте и разблокируйте хранилище.
+wrongFileAlert.btn=OK
+wrongFileAlert.information=Вы пытались добавить файл или папку, которые, похоже, не являются хранилищем Cryptomator. Чтобы зашифровать данные, создайте и разблокируйте хранилище.
# Vault Options
-vaultOptions.general=Общее
+## General
+vaultOptions.general=Общие
vaultOptions.general.changePasswordBtn=Изменить пароль
-vaultOptions.general.showRecoveryKeyBtn=Отобразить ключ восстановления
+vaultOptions.general.showRecoveryKeyBtn=Показать ключ восстановления
+## Mount
vaultOptions.mount=Монтирование
vaultOptions.mount.readonly=Только чтение
vaultOptions.mount.driveName=Имя диска
-vaultOptions.mount.customMountFlags=Пользовательские флаги монтирования
+vaultOptions.mount.customMountFlags=Свои флаги монтирования
+vaultOptions.mount.winDriveLetterOccupied=занято
+vaultOptions.mount.winDirChooser=Выберите пустой каталог
# Recovery Key
recoveryKey.title=Ключ восстановления
-recoveryKey.enterPassword.prompt=Введите пароль для отображения ключа восстановления для "%s":
+recoveryKey.enterPassword.prompt=Введите пароль, чтобы показать ключ для "%s":
recoveryKey.display.message=Ключ восстановления для "%s":
# Misc
diff --git a/main/ui/src/main/resources/i18n/strings_sv.properties b/main/ui/src/main/resources/i18n/strings_sv.properties
index 65f4509c7..9a0d841c1 100644
--- a/main/ui/src/main/resources/i18n/strings_sv.properties
+++ b/main/ui/src/main/resources/i18n/strings_sv.properties
@@ -36,12 +36,12 @@ addvaultwizard.new.directoryPickerTitle=Välj katalog
addvaultwizard.new.enterPassword=Ange ett lösenord för valvet
addvaultwizard.new.fileAlreadyExists=Valvet kan inte skapas på denna plats då vissa filer redan finns.
addvaultwizard.new.invalidName=Felaktigt namn på valvet. Vänligen ange ett vanligt katalognamn.
-addvaultwizard.new.ioException=En inledande kontroll av angiven katalog misslyckades. Kontrollera att du har tillräcklig åtkomst till den, och att inget stör Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Bekräfta lösenordet
addvaultwizard.new.passwordsMatch=Lösenorden stämmer överens!
addvaultwizard.new.passwordsDoNotMatch=Lösenorden stämmer inte överens
addvaultwizard.new.createVaultBtn=Skapa Valv
+### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Detta är din återställningsnyckel. Förvara den väl, den är din enda chans att återställa din data om du tappar bort ditt lösenord.
addvaultwizard.new.recoveryKeySavedCheckbox=Ja, jag har säkerhetskopierat återställningsnyckeln
### Information
@@ -58,6 +58,7 @@ addvault.new.readme.accessLocation.3=Du kan ta bort denna fil.
addvaultwizard.existing.instruction=Välj "masterkey.cryptomator" för ditt befintliga valv.
addvaultwizard.existing.chooseBtn=Välj…
addvaultwizard.existing.filePickerTitle=Välj Masterkey-fil
+addvaultwizard.existing.error=Kunde inte lägga till valv "%s": Inget giltigt valv. Vänligen kolla i loggen för mer information.
## Success
addvaultwizard.success.nextStepsInstructions=Lade till valv "%s".\nDu behöver låsa upp detta valv för att komma åt eller lägga till innehåll. Du kan även låsa upp det vid ett senare tillfälle.
addvaultwizard.success.unlockNow=Lås upp nu
@@ -129,10 +130,12 @@ main.vaultlist.emptyList.onboardingInstruction=Klicka här för att lägga till
main.vaultlist.contextMenu.remove=Ta bort valv
main.vaultlist.addVaultBtn=Lägg till valv
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=LÅST
-main.vaultDetail.unlockedStatus=UPPLÅST
main.vaultDetail.unlockBtn=Lås upp
main.vaultDetail.optionsBtn=Valv-inställningar
+### Unlocked
+main.vaultDetail.unlockedStatus=UPPLÅST
main.vaultDetail.accessLocation=Ditt valv's innehåll kan nås härifrån:
main.vaultDetail.revealBtn=Visa enhet
main.vaultDetail.lockBtn=Lås
@@ -141,6 +144,9 @@ main.vaultDetail.bytesPerSecondWritten=skrivet:
main.vaultDetail.throughput.idle=inaktiv
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
+### Needs Migration
+main.vaultDetail.migrateButton=Uppgradera valv
+main.vaultDetail.migratePrompt=Ditt valv behöver uppgraderas till ett nytt format innan du kan använda det
# Wrong File Alert
wrongFileAlert.title=Okänd fil
@@ -148,13 +154,17 @@ wrongFileAlert.btn=Ok
wrongFileAlert.information=Du försöker lägga till en fil eller katalog som inte verkar vara ett Cryptomator-valv. För att kryptera din data, skapa och lås upp ett valv.
# Vault Options
+## General
vaultOptions.general=Allmänt
vaultOptions.general.changePasswordBtn=Ändra lösenord
vaultOptions.general.showRecoveryKeyBtn=Visa Återsällningsnyckel
+## Mount
vaultOptions.mount=Montering
vaultOptions.mount.readonly=Skrivskyddad
vaultOptions.mount.driveName=Enhetsnamn
vaultOptions.mount.customMountFlags=Egna monterings-flaggor
+vaultOptions.mount.winDriveLetterOccupied=upptagen
+vaultOptions.mount.winDirChooser=Välj en tom katalog
# Recovery Key
recoveryKey.title=Återställningsnyckel
diff --git a/main/ui/src/main/resources/i18n/strings_tr.properties b/main/ui/src/main/resources/i18n/strings_tr.properties
index 86442c488..f3fce6a7e 100644
--- a/main/ui/src/main/resources/i18n/strings_tr.properties
+++ b/main/ui/src/main/resources/i18n/strings_tr.properties
@@ -36,11 +36,13 @@ addvaultwizard.new.directoryPickerTitle=Dizin Seç
addvaultwizard.new.enterPassword=Kasa için bir şifre girin
addvaultwizard.new.fileAlreadyExists=Bazı nesneler varolduğu için kasa bu yolda oluşturulamıyor.
addvaultwizard.new.invalidName=Geçersiz kasa adı. Lütfen normal bir dizin adı kullanın.
+addvaultwizard.new.ioException=Seçilen dizin temel bir testte başarısız oldu. Uygun erişim haklarına sahip olduğunuzdan ve hiçbir şeyin Cryptomator'u engellemediğinden emin olun.
### Password
addvaultwizard.new.reenterPassword=Şifreyi onayla
addvaultwizard.new.passwordsMatch=Şifreler eşleşti!
addvaultwizard.new.passwordsDoNotMatch=Şifreler eşleşmiyor
addvaultwizard.new.createVaultBtn=Kasa Oluştur
+### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=111/5000\nBu senin kurtarma anahtarın. Güvende tutun, şifrenizi kaybederseniz verilerinizi kurtarmak için tek şansınız bu.
addvaultwizard.new.recoveryKeySavedCheckbox=Evet, bu kurtarma anahtarının güvenli bir şekilde yedeğini aldım
### Information
@@ -57,6 +59,7 @@ addvault.new.readme.accessLocation.3=Bu dosyayı silmeye çekinmeyin.
addvaultwizard.existing.instruction=Varolan kasanızın "masterkey.cryptomator" dosyasını seçin.
addvaultwizard.existing.chooseBtn=Seç…
addvaultwizard.existing.filePickerTitle=Masterkey Dosyasını Seç
+addvaultwizard.existing.error="%s" kasası eklenemiyor: Geçerli bir kasa değil. Daha fazla bilgi için lütfen hata günlüğüne bakınız.
## Success
addvaultwizard.success.nextStepsInstructions="%s" kasası eklendi.\nİçeriğe erişmek veya içerik eklemek için bu kasanın kilidini açmanız gerekir. Alternatif olarak, daha sonra herhangi bir zamanda kilidini açabilirsiniz.
addvaultwizard.success.unlockNow=Kilidi Şimdi Aç
@@ -128,10 +131,12 @@ main.vaultlist.emptyList.onboardingInstruction=Kasa eklemek için buraya tıklay
main.vaultlist.contextMenu.remove=Kasayı Sil
main.vaultlist.addVaultBtn=Kasa Ekle
## Vault Detail
+### Locked
main.vaultDetail.lockedStatus=KİLİTLİ
-main.vaultDetail.unlockedStatus=KİLİDİ AÇIK
main.vaultDetail.unlockBtn=Kilidi Aç
main.vaultDetail.optionsBtn=Kasa Ayarları
+### Unlocked
+main.vaultDetail.unlockedStatus=KİLİDİ AÇIK
main.vaultDetail.accessLocation=Kasa içeriğinize buradan erişilebilir:
main.vaultDetail.revealBtn=Sürücüyü Göster
main.vaultDetail.lockBtn=Kilitle
@@ -140,6 +145,9 @@ main.vaultDetail.bytesPerSecondWritten=yazma:
main.vaultDetail.throughput.idle=boşta
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
+### Needs Migration
+main.vaultDetail.migrateButton=Kasayı Güncelle
+main.vaultDetail.migratePrompt=Kasaya erişmeden önce kasanızın yeni bir formata yükseltilmesi gerekiyor
# Wrong File Alert
wrongFileAlert.title=Bilinmeyen Dosya
@@ -147,14 +155,22 @@ wrongFileAlert.btn=Tamam
wrongFileAlert.information=Cryptomator kasası gibi görünmeyen bir dosya veya klasör eklemeye çalıştınız. Verilerinizi şifrelemek için bir kasa oluşturun ve kilidini açın.
# Vault Options
+## General
vaultOptions.general=Genel
vaultOptions.general.changePasswordBtn=Şifreyi Değiştir
+vaultOptions.general.showRecoveryKeyBtn=Kurtarma Anahtarını Göster
+## Mount
vaultOptions.mount=Bağlantı
vaultOptions.mount.readonly=Salt-Okunur
vaultOptions.mount.driveName=Sürücü Adı
vaultOptions.mount.customMountFlags=Özel Bağlantı Parametreleri
+vaultOptions.mount.winDriveLetterOccupied=meşgul
+vaultOptions.mount.winDirChooser=Boş bir dizin seçin
# Recovery Key
+recoveryKey.title=Kurtarma Anahtarı
+recoveryKey.enterPassword.prompt="%s" için kurtarma anahtarını göstermek üzere şifrenizi girin:
+recoveryKey.display.message="%s" için Kurtarma Anahtarı:
# Misc
passwordStrength.messageLabel.0=Çok zayıf