mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-09-21 15:34:27 +00:00
Compare commits
234
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88f83c5cdb | ||
|
|
c8059bef78 | ||
|
|
638b731cf8 | ||
|
|
b2b6e304ed | ||
|
|
0748709f40 | ||
|
|
d8ee446d37 | ||
|
|
9932185ccc | ||
|
|
77afd4688a | ||
|
|
9a5ef3f6ff | ||
|
|
c99f23a4c7 | ||
|
|
274c3886f5 | ||
|
|
95db29158c | ||
|
|
872680a737 | ||
|
|
0ba12f6301 | ||
|
|
248df9da51 | ||
|
|
702408d488 | ||
|
|
dd1506f17a | ||
|
|
7fb5c741ad | ||
|
|
aa61ab2b6e | ||
|
|
7a1e20d732 | ||
|
|
c1a5e187b6 | ||
|
|
57d3f788e6 | ||
|
|
ca73c3ad90 | ||
|
|
aec367dcc7 | ||
|
|
56e7c13cb1 | ||
|
|
3b4f384bfd | ||
|
|
d1a20da7e0 | ||
|
|
4b3533f717 | ||
|
|
6535adef44 | ||
|
|
f69cde1469 | ||
|
|
59643b762f | ||
|
|
ec69c1411b | ||
|
|
ad28d4510d | ||
|
|
111e500928 | ||
|
|
b5cb129ff0 | ||
|
|
8a1586e5e8 | ||
|
|
e1959211de | ||
|
|
53494fa141 | ||
|
|
7fdab3a2ab | ||
|
|
cb749c2fba | ||
|
|
453efe9998 | ||
|
|
2948b78cbe | ||
|
|
5a9f993df8 | ||
|
|
4936cc76d0 | ||
|
|
4a15467ff5 | ||
|
|
bb09b32885 | ||
|
|
4c9372747c | ||
|
|
1c04c22617 | ||
|
|
675146d20c | ||
|
|
56ee6af9de | ||
|
|
926a0b3717 | ||
|
|
eae28ce76d | ||
|
|
99c34539e6 | ||
|
|
0dfafdd874 | ||
|
|
a8cb40831e | ||
|
|
3b1bed9345 | ||
|
|
f18b81bdb7 | ||
|
|
4a61fe372e | ||
|
|
0bd0543d10 | ||
|
|
06a3a04840 | ||
|
|
3eb379b1e9 | ||
|
|
52e7707f81 | ||
|
|
28d2424cd5 | ||
|
|
187e9f17fc | ||
|
|
b9776a1017 | ||
|
|
3fbf28eea9 | ||
|
|
99e7ec7dc2 | ||
|
|
a9b4512ce6 | ||
|
|
feb9ee238d | ||
|
|
748f7ca889 | ||
|
|
87a469f264 | ||
|
|
59e0175d65 | ||
|
|
7595f5317d | ||
|
|
3ba4e87f1d | ||
|
|
0a7aec26cc | ||
|
|
d70b7e12ef | ||
|
|
54d2591391 | ||
|
|
4f70695ceb | ||
|
|
8f0a151018 | ||
|
|
cd64460e62 | ||
|
|
db3c0622c6 | ||
|
|
ac0092b178 | ||
|
|
fab32e9e93 | ||
|
|
3d1129b0f3 | ||
|
|
89b2ff74f3 | ||
|
|
a43e8fc461 | ||
|
|
98d3fddfcc | ||
|
|
ff36fff091 | ||
|
|
7d02108c8b | ||
|
|
593f37d5fe | ||
|
|
7abe9c627b | ||
|
|
a0923c3c9b | ||
|
|
439042ab95 | ||
|
|
113e505c52 | ||
|
|
f01e0ae194 | ||
|
|
5540cef257 | ||
|
|
ab16ee493f | ||
|
|
b1a1d1029c | ||
|
|
a46b4aa768 | ||
|
|
245fe4b525 | ||
|
|
c5a9926652 | ||
|
|
7032862a65 | ||
|
|
2012229c46 | ||
|
|
a6672ddbfc | ||
|
|
8dd2147638 | ||
|
|
7a29a1b680 | ||
|
|
f4983f7862 | ||
|
|
488bd1087a | ||
|
|
d557136295 | ||
|
|
87f4b639a0 | ||
|
|
dbb9379a2e | ||
|
|
fa86ae68ea | ||
|
|
f82fddc8fe | ||
|
|
e6f0b321cb | ||
|
|
41fef58450 | ||
|
|
268026629d | ||
|
|
b95fa1868a | ||
|
|
d2b7376e37 | ||
|
|
8d6eac63e2 | ||
|
|
b8fc2dcb64 | ||
|
|
671f934934 | ||
|
|
58ff6554fc | ||
|
|
cad6b221d9 | ||
|
|
c02d5a9794 | ||
|
|
aac71277e3 | ||
|
|
aa61be7bf5 | ||
|
|
3a4f796c79 | ||
|
|
f070cdc12d | ||
|
|
e14911d4d5 | ||
|
|
aa666ad025 | ||
|
|
cd55c2666f | ||
|
|
0dc6032209 | ||
|
|
f7630c28d6 | ||
|
|
08d9beb6b8 | ||
|
|
5808239416 | ||
|
|
e2f400340b | ||
|
|
5854b24c44 | ||
|
|
7adaf44fb3 | ||
|
|
0bd74056a0 | ||
|
|
bbeea7a2ee | ||
|
|
e3548737f1 | ||
|
|
75d7656824 | ||
|
|
c292f18915 | ||
|
|
9636e7c700 | ||
|
|
eb8f7840cc | ||
|
|
180d79f49e | ||
|
|
29cb1c96b1 | ||
|
|
f61432fc52 | ||
|
|
8e7dbf4640 | ||
|
|
d2528faf3a | ||
|
|
c1a3fe66ef | ||
|
|
ecb4c114a2 | ||
|
|
1ecaf5ae6e | ||
|
|
e88b7f00b3 | ||
|
|
91aaabc7fb | ||
|
|
7414c29593 | ||
|
|
79ae5b7bff | ||
|
|
486a3a07f5 | ||
|
|
02d44eb0e7 | ||
|
|
3aff7bd956 | ||
|
|
cd6a6cc55a | ||
|
|
d0a30a1779 | ||
|
|
a5fb30d7c7 | ||
|
|
ba4e813a35 | ||
|
|
f6d4caee07 | ||
|
|
d3a00e726f | ||
|
|
d71c0695f4 | ||
|
|
394c91c50c | ||
|
|
71c35eaf4c | ||
|
|
70790d0e6a | ||
|
|
8fbc00a417 | ||
|
|
080bf7f540 | ||
|
|
9d988294f3 | ||
|
|
a712013507 | ||
|
|
0aab22975a | ||
|
|
fde6555e4d | ||
|
|
748e76e187 | ||
|
|
55a627f718 | ||
|
|
a19cbff12f | ||
|
|
d5e098a6cd | ||
|
|
3f9fc28e3c | ||
|
|
0bf4081d71 | ||
|
|
de3e392aa3 | ||
|
|
44a5f51c93 | ||
|
|
9c8ea3c2e5 | ||
|
|
4208d1e036 | ||
|
|
154198fd5c | ||
|
|
0ad0d79a54 | ||
|
|
966538e47b | ||
|
|
181a1e7248 | ||
|
|
1a13e03a08 | ||
|
|
0fa0568f24 | ||
|
|
d7e76bee6d | ||
|
|
77dcf4da62 | ||
|
|
6eb0384fa6 | ||
|
|
5af5a6c5b0 | ||
|
|
0e4c833be0 | ||
|
|
a2e4a2c78a | ||
|
|
f4ab2b590f | ||
|
|
80b3d7ab6b | ||
|
|
b23fbd4507 | ||
|
|
5b56ff6d55 | ||
|
|
143b691c61 | ||
|
|
88e4c88a87 | ||
|
|
c9e06ad2d2 | ||
|
|
bd814f729d | ||
|
|
8c8b50b83a | ||
|
|
e9f4790b40 | ||
|
|
ac1149b873 | ||
|
|
51b6f828ed | ||
|
|
b97a99d4e2 | ||
|
|
6ed661aa13 | ||
|
|
f3d46ed767 | ||
|
|
3bde55c4df | ||
|
|
dd591ec258 | ||
|
|
4ce035b554 | ||
|
|
cdc451fdca | ||
|
|
0680d16708 | ||
|
|
1f1792522e | ||
|
|
db53a7a3dc | ||
|
|
9362196d4c | ||
|
|
527d387640 | ||
|
|
5f9dda4bbb | ||
|
|
6a991f3ab5 | ||
|
|
4c023f792c | ||
|
|
6b5f7d37ca | ||
|
|
87158b1e7a | ||
|
|
0b132b7d10 | ||
|
|
cd4cb70896 | ||
|
|
633470b0d6 | ||
|
|
1930090044 | ||
|
|
ccefb3613e | ||
|
|
9e79350b9e | ||
|
|
9092c2325a |
@@ -0,0 +1,5 @@
|
||||
commit_message: "[ci skip]"
|
||||
escape_special_characters: 0
|
||||
files:
|
||||
- source: /main/ui/src/main/resources/i18n/strings.properties
|
||||
translation: /main/ui/src/main/resources/i18n/strings_%two_letters_code%.properties
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: # 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
|
||||
|
||||
Generated
+19
-11
@@ -7,26 +7,34 @@
|
||||
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
||||
<outputRelativeToContentRoot value="true" />
|
||||
<processorPath useClasspath="false">
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.22.1/dagger-compiler-2.22.1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.22.1/dagger-2.22.1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.25.2/dagger-compiler-2.25.2.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.25.2/dagger-2.25.2.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-producers/2.22.1/dagger-producers-2.22.1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/guava/guava/25.0-jre/guava-25.0-jre.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.3/checker-compat-qual-2.5.3.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.1.3/error_prone_annotations-2.1.3.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-producers/2.25.2/dagger-producers-2.25.2.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-spi/2.22.1/dagger-spi-2.22.1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.3/checker-compat-qual-2.5.3.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-spi/2.25.2/dagger-spi-2.25.2.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/squareup/javapoet/1.11.1/javapoet-1.11.1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/googlejavaformat/google-java-format/1.5/google-java-format-1.5.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/javac-shaded/9-dev-r4023-3/javac-shaded-9-dev-r4023-3.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/net/ltgt/gradle/incap/incap/0.2/incap-0.2.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.3.50/kotlin-stdlib-1.3.50.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.50/kotlin-stdlib-common-1.3.50.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlinx/kotlinx-metadata-jvm/0.1.0/kotlinx-metadata-jvm-0.1.0.jar" />
|
||||
</processorPath>
|
||||
<module name="keychain" />
|
||||
<module name="launcher" />
|
||||
<module name="commons" />
|
||||
<module name="keychain" />
|
||||
<module name="ui" />
|
||||
<module name="launcher" />
|
||||
</profile>
|
||||
</annotationProcessing>
|
||||
</component>
|
||||
|
||||
+11
-10
@@ -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
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
[](https://snyk.io/test/github/cryptomator/cryptomator?targetFile=main%2Fpom.xml)
|
||||
[](https://www.codacy.com/app/cryptomator/cryptomator?utm_source=github.com&utm_medium=referral&utm_content=cryptomator/cryptomator&utm_campaign=Badge_Grade)
|
||||
[](http://twitter.com/Cryptomator)
|
||||
[](https://poeditor.com/join/project/bHwbvJmx0E)
|
||||
[](https://translate.cryptomator.org/)
|
||||
[](https://github.com/cryptomator/cryptomator/releases/latest)
|
||||
[](https://community.cryptomator.org)
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.5.0-alpha1</version>
|
||||
<version>1.5.0-beta1</version>
|
||||
</parent>
|
||||
<artifactId>buildkit</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.5.0-alpha1</version>
|
||||
<version>1.5.0-beta1</version>
|
||||
</parent>
|
||||
<artifactId>commons</artifactId>
|
||||
<name>Cryptomator Commons</name>
|
||||
|
||||
@@ -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<VaultSettings> 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<VolumeImpl> preferredVolumeImpl = new SimpleObjectProperty<>(DEFAULT_PREFERRED_VOLUME_IMPL);
|
||||
private final ObjectProperty<UiTheme> theme = new SimpleObjectProperty<>(DEFAULT_THEME);
|
||||
private final ObjectProperty<NodeOrientation> userInterfaceOrientation = new SimpleObjectProperty<>(DEFAULT_USER_INTERFACE_ORIENTATION);
|
||||
|
||||
private Consumer<Settings> 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<Settings> saveCmd) {
|
||||
@@ -118,4 +122,8 @@ public class Settings {
|
||||
public ObjectProperty<UiTheme> theme() {
|
||||
return theme;
|
||||
}
|
||||
|
||||
public ObjectProperty<NodeOrientation> userInterfaceOrientation() {
|
||||
return userInterfaceOrientation;
|
||||
}
|
||||
}
|
||||
|
||||
+16
-2
@@ -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<Settings> {
|
||||
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<Settings> {
|
||||
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<Settings> {
|
||||
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<Settings> {
|
||||
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<VaultSettings> readVaultSettingsArray(JsonReader in) throws IOException {
|
||||
List<VaultSettings> result = new ArrayList<>();
|
||||
in.beginArray();
|
||||
|
||||
@@ -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.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Path> D_TO_Z;
|
||||
private static final Set<String> 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<Path> getOccupiedDriveLetters() {
|
||||
public Set<String> getAllDriveLetters() {
|
||||
return A_TO_Z;
|
||||
}
|
||||
|
||||
public Set<String> getOccupiedDriveLetters() {
|
||||
if (!SystemUtils.IS_OS_WINDOWS) {
|
||||
LOG.warn("Attempted to get occupied drive letters on non-Windows machine.");
|
||||
return Set.of();
|
||||
} else {
|
||||
Iterable<Path> 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<Path> getAvailableDriveLetters() {
|
||||
Set<Path> occupiedDriveLetters = getOccupiedDriveLetters();
|
||||
Predicate<Path> isOccupiedDriveLetter = occupiedDriveLetters::contains;
|
||||
return D_TO_Z.stream().filter(isOccupiedDriveLetter.negate()).collect(Collectors.toSet());
|
||||
public Set<String> getAvailableDriveLetters() {
|
||||
return Sets.difference(A_TO_Z, getOccupiedDriveLetters());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.5.0-alpha1</version>
|
||||
<version>1.5.0-beta1</version>
|
||||
</parent>
|
||||
<artifactId>keychain</artifactId>
|
||||
<name>System Keychain Access</name>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.5.0-alpha1</version>
|
||||
<version>1.5.0-beta1</version>
|
||||
</parent>
|
||||
<artifactId>launcher</artifactId>
|
||||
<name>Cryptomator Launcher</name>
|
||||
|
||||
+16
-28
@@ -3,7 +3,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.5.0-alpha1</version>
|
||||
<version>1.5.0-beta1</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>Cryptomator</name>
|
||||
|
||||
@@ -24,30 +24,28 @@
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
||||
<!-- dependency versions -->
|
||||
<cryptomator.cryptolib.version>1.2.2</cryptomator.cryptolib.version>
|
||||
<cryptomator.cryptofs.version>1.9.0-beta1</cryptomator.cryptofs.version>
|
||||
<cryptomator.cryptofs.version>1.9.0-rc2</cryptomator.cryptofs.version>
|
||||
<cryptomator.jni.version>2.2.1</cryptomator.jni.version>
|
||||
<cryptomator.fuse.version>1.2.0</cryptomator.fuse.version>
|
||||
<cryptomator.fuse.version>1.2.1</cryptomator.fuse.version>
|
||||
<cryptomator.dokany.version>1.1.11</cryptomator.dokany.version>
|
||||
<cryptomator.webdav.version>1.0.10</cryptomator.webdav.version>
|
||||
|
||||
<javafx.version>12</javafx.version>
|
||||
<javafx.version>13.0.1</javafx.version>
|
||||
|
||||
<commons-io.version>2.6</commons-io.version>
|
||||
<commons-lang3.version>3.8.1</commons-lang3.version>
|
||||
<commons-lang3.version>3.9</commons-lang3.version>
|
||||
|
||||
<easybind.version>1.0.3</easybind.version>
|
||||
|
||||
<guava.version>27.1-jre</guava.version>
|
||||
<dagger.version>2.22.1</dagger.version>
|
||||
<gson.version>2.8.5</gson.version>
|
||||
<guava.version>28.1-jre</guava.version>
|
||||
<dagger.version>2.25.2</dagger.version>
|
||||
<gson.version>2.8.6</gson.version>
|
||||
|
||||
<slf4j.version>1.7.26</slf4j.version>
|
||||
<slf4j.version>1.7.29</slf4j.version>
|
||||
<logback.version>1.2.3</logback.version>
|
||||
|
||||
<junit.jupiter.version>5.4.2</junit.jupiter.version>
|
||||
<mockito.version>2.27.0</mockito.version>
|
||||
<hamcrest.version>2.1</hamcrest.version>
|
||||
<junit.jupiter.version>5.5.2</junit.jupiter.version>
|
||||
<mockito.version>3.1.0</mockito.version>
|
||||
<hamcrest.version>2.2</hamcrest.version>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
@@ -82,11 +80,6 @@
|
||||
</dependency>
|
||||
|
||||
<!-- Cryptomator Libs -->
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>cryptolib</artifactId>
|
||||
<version>${cryptomator.cryptolib.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>cryptofs</artifactId>
|
||||
@@ -158,11 +151,6 @@
|
||||
</dependency>
|
||||
|
||||
<!-- Apache Commons -->
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>${commons-io.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
@@ -273,7 +261,7 @@
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<version>3.1.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-libs</id>
|
||||
@@ -302,7 +290,7 @@
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<version>0.8.2</version>
|
||||
<version>0.8.5</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>prepare-agent</id>
|
||||
@@ -329,7 +317,7 @@
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.0</version>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<release>11</release>
|
||||
<annotationProcessorPaths>
|
||||
@@ -344,7 +332,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.22.1</version>
|
||||
<version>2.22.2</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
+1
-9
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.5.0-alpha1</version>
|
||||
<version>1.5.0-beta1</version>
|
||||
</parent>
|
||||
<artifactId>ui</artifactId>
|
||||
<name>Cryptomator GUI</name>
|
||||
@@ -22,10 +22,6 @@
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>jni</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>cryptolib</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- JavaFx -->
|
||||
<dependency>
|
||||
@@ -54,10 +50,6 @@
|
||||
</dependency>
|
||||
|
||||
<!-- Apache Commons -->
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package org.cryptomator.ui.addvaultwizard;
|
||||
|
||||
import dagger.Lazy;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.StringBinding;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.nio.file.Path;
|
||||
|
||||
@AddVaultWizardScoped
|
||||
public class AddVaultFailureExisitingController implements FxController {
|
||||
|
||||
private final Stage window;
|
||||
private final Lazy<Scene> previousScene;
|
||||
private final StringBinding vaultName;
|
||||
|
||||
@Inject
|
||||
AddVaultFailureExisitingController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_EXISTING) Lazy<Scene> previousScene, ObjectProperty<Path> pathOfFailedVault){
|
||||
this.window = window;
|
||||
this.previousScene = previousScene;
|
||||
this.vaultName = Bindings.createStringBinding(() -> pathOfFailedVault.get().getFileName().toString(),pathOfFailedVault);
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void close(){
|
||||
window.close();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void back(){
|
||||
window.setScene(previousScene.get());
|
||||
}
|
||||
|
||||
// Getter & Setter
|
||||
|
||||
public StringBinding vaultNameProperty(){
|
||||
return vaultName;
|
||||
}
|
||||
|
||||
public String getVaultName(){
|
||||
return vaultName.get();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,24 +1,19 @@
|
||||
package org.cryptomator.ui.addvaultwizard;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.Lazy;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.IntoMap;
|
||||
import dagger.multibindings.IntoSet;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.KeyCodeCombination;
|
||||
import javafx.scene.input.KeyCombination;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
@@ -32,7 +27,6 @@ import java.nio.file.Path;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.Set;
|
||||
|
||||
@Module
|
||||
public abstract class AddVaultModule {
|
||||
@@ -40,22 +34,19 @@ public abstract class AddVaultModule {
|
||||
@Provides
|
||||
@AddVaultWizardWindow
|
||||
@AddVaultWizardScoped
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, resourceBundle);
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@AddVaultWizardWindow
|
||||
@AddVaultWizardScoped
|
||||
static Stage provideStage(@MainWindow Stage owner, ResourceBundle resourceBundle, @Named("windowIcon") Optional<Image> windowIcon, @AddVaultWizardWindow Lazy<Map<KeyCodeCombination, Runnable>> accelerators) {
|
||||
static Stage provideStage(@MainWindow Stage owner, ResourceBundle resourceBundle, @Named("windowIcon") Optional<Image> windowIcon) {
|
||||
Stage stage = new Stage();
|
||||
stage.setTitle(resourceBundle.getString("addvaultwizard.title"));
|
||||
stage.setResizable(false);
|
||||
stage.initModality(Modality.WINDOW_MODAL);
|
||||
stage.initOwner(owner);
|
||||
stage.sceneProperty().addListener(observable -> {
|
||||
stage.getScene().getAccelerators().putAll(accelerators.get());
|
||||
});
|
||||
windowIcon.ifPresent(stage.getIcons()::add);
|
||||
return stage;
|
||||
}
|
||||
@@ -67,6 +58,7 @@ public abstract class AddVaultModule {
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Named("vaultName")
|
||||
@AddVaultWizardScoped
|
||||
static StringProperty provideVaultName() {
|
||||
return new SimpleStringProperty("");
|
||||
@@ -79,24 +71,11 @@ public abstract class AddVaultModule {
|
||||
return new SimpleObjectProperty<>();
|
||||
}
|
||||
|
||||
// ------------------
|
||||
|
||||
@Provides
|
||||
@AddVaultWizardWindow
|
||||
@Named("recoveryKey")
|
||||
@AddVaultWizardScoped
|
||||
static Map<KeyCodeCombination, Runnable> provideDefaultAccellerators(@AddVaultWizardWindow Set<Map.Entry<KeyCombination, Runnable>> accelerators) {
|
||||
return Map.ofEntries(accelerators.toArray(Map.Entry[]::new));
|
||||
}
|
||||
|
||||
@Provides
|
||||
@IntoSet
|
||||
@AddVaultWizardWindow
|
||||
static Map.Entry<KeyCombination, Runnable> provideCloseWindowShortcut(@AddVaultWizardWindow Stage window) {
|
||||
if (SystemUtils.IS_OS_WINDOWS) {
|
||||
return Map.entry(new KeyCodeCombination(KeyCode.F4, KeyCombination.ALT_DOWN), window::close);
|
||||
} else {
|
||||
return Map.entry(new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN), window::close);
|
||||
}
|
||||
static StringProperty provideRecoveryKey() {
|
||||
return new SimpleStringProperty();
|
||||
}
|
||||
|
||||
// ------------------
|
||||
@@ -104,48 +83,57 @@ public abstract class AddVaultModule {
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.ADDVAULT_WELCOME)
|
||||
@AddVaultWizardScoped
|
||||
static Scene provideWelcomeScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders, @AddVaultWizardWindow Stage window) {
|
||||
Scene scene = fxmlLoaders.createScene("/fxml/addvault_welcome.fxml");
|
||||
|
||||
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
|
||||
scene.getAccelerators().put(cmdW, window::close);
|
||||
|
||||
return scene;
|
||||
static Scene provideWelcomeScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_WELCOME.getRessourcePathString());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.ADDVAULT_EXISTING)
|
||||
@AddVaultWizardScoped
|
||||
static Scene provideChooseExistingVaultScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders, @AddVaultWizardWindow Stage window) {
|
||||
return fxmlLoaders.createScene("/fxml/addvault_existing.fxml");
|
||||
static Scene provideChooseExistingVaultScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_EXISTING.getRessourcePathString());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.ADDVAULT_EXISTING_ERROR)
|
||||
@AddVaultWizardScoped
|
||||
static Scene provideChooseExistingVaultErrorScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_EXISTING_ERROR.getRessourcePathString());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_NAME)
|
||||
@AddVaultWizardScoped
|
||||
static Scene provideCreateNewVaultNameScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders, @AddVaultWizardWindow Stage window) {
|
||||
return fxmlLoaders.createScene("/fxml/addvault_new_name.fxml");
|
||||
static Scene provideCreateNewVaultNameScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_NEW_NAME.getRessourcePathString());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION)
|
||||
@AddVaultWizardScoped
|
||||
static Scene provideCreateNewVaultLocationScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders, @AddVaultWizardWindow Stage window) {
|
||||
return fxmlLoaders.createScene("/fxml/addvault_new_location.fxml");
|
||||
static Scene provideCreateNewVaultLocationScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_NEW_LOCATION.getRessourcePathString());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_PASSWORD)
|
||||
@AddVaultWizardScoped
|
||||
static Scene provideCreateNewVaultPasswordScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders, @AddVaultWizardWindow Stage window) {
|
||||
return fxmlLoaders.createScene("/fxml/addvault_new_password.fxml");
|
||||
static Scene provideCreateNewVaultPasswordScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_NEW_PASSWORD.getRessourcePathString());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_RECOVERYKEY)
|
||||
@AddVaultWizardScoped
|
||||
static Scene provideCreateNewVaultRecoveryKeyScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_NEW_RECOVERYKEY.getRessourcePathString());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.ADDVAULT_SUCCESS)
|
||||
@AddVaultWizardScoped
|
||||
static Scene provideCreateNewVaultSuccessScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders, @AddVaultWizardWindow Stage window) {
|
||||
return fxmlLoaders.createScene("/fxml/addvault_success.fxml");
|
||||
static Scene provideCreateNewVaultSuccessScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_SUCCESS.getRessourcePathString());
|
||||
}
|
||||
|
||||
// ------------------
|
||||
@@ -160,6 +148,11 @@ public abstract class AddVaultModule {
|
||||
@FxControllerKey(ChooseExistingVaultController.class)
|
||||
abstract FxController bindChooseExistingVaultController(ChooseExistingVaultController controller);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(AddVaultFailureExisitingController.class)
|
||||
abstract FxController bindAddVaultFailureExistingController(AddVaultFailureExisitingController controller);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(CreateNewVaultNameController.class)
|
||||
@@ -179,4 +172,9 @@ public abstract class AddVaultModule {
|
||||
@IntoMap
|
||||
@FxControllerKey(AddVaultSuccessController.class)
|
||||
abstract FxController bindAddVaultSuccessController(AddVaultSuccessController controller);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(CreateNewVaultRecoveryKeyController.class)
|
||||
abstract FxController bindCreateNewVaultRecoveryKeyController(CreateNewVaultRecoveryKeyController controller);
|
||||
}
|
||||
|
||||
+8
-7
@@ -28,16 +28,18 @@ public class ChooseExistingVaultController implements FxController {
|
||||
private final Stage window;
|
||||
private final Lazy<Scene> welcomeScene;
|
||||
private final Lazy<Scene> successScene;
|
||||
private final Lazy<Scene> errorScene;
|
||||
private final ObjectProperty<Path> vaultPath;
|
||||
private final ObjectProperty<Vault> vault;
|
||||
private final VaultListManager vaultListManager;
|
||||
private final ResourceBundle resourceBundle;
|
||||
|
||||
@Inject
|
||||
ChooseExistingVaultController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, VaultListManager vaultListManager, ResourceBundle resourceBundle) {
|
||||
ChooseExistingVaultController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, @FxmlScene(FxmlFile.ADDVAULT_EXISTING_ERROR) Lazy<Scene> errorScene, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, VaultListManager vaultListManager, ResourceBundle resourceBundle) {
|
||||
this.window = window;
|
||||
this.welcomeScene = welcomeScene;
|
||||
this.successScene = successScene;
|
||||
this.errorScene = errorScene;
|
||||
this.vaultPath = vaultPath;
|
||||
this.vault = vault;
|
||||
this.vaultListManager = vaultListManager;
|
||||
@@ -51,20 +53,19 @@ public class ChooseExistingVaultController implements FxController {
|
||||
|
||||
@FXML
|
||||
public void chooseFileAndNext() {
|
||||
//TODO: error handling & cannot unlock added vault
|
||||
FileChooser fileChooser = new FileChooser();
|
||||
fileChooser.setTitle(resourceBundle.getString("addvaultwizard.existing.filePickerTitle"));
|
||||
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Cryptomator Masterkey", "*.cryptomator"));
|
||||
File file = fileChooser.showOpenDialog(window);
|
||||
if (file != null) {
|
||||
vaultPath.setValue(file.toPath().toAbsolutePath().getParent());
|
||||
File masterkeyFile = fileChooser.showOpenDialog(window);
|
||||
if (masterkeyFile != null) {
|
||||
vaultPath.setValue(masterkeyFile.toPath().toAbsolutePath().getParent());
|
||||
try {
|
||||
Vault newVault = vaultListManager.add(vaultPath.get());
|
||||
vault.set(newVault);
|
||||
window.setScene(successScene.get());
|
||||
} catch (NoSuchFileException e) {
|
||||
LOG.error("Nope", e);
|
||||
// TODO
|
||||
LOG.error("Failed to open existing vault.", e);
|
||||
window.setScene(errorScene.get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-8
@@ -23,12 +23,11 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.DirectoryNotEmptyException;
|
||||
import java.nio.file.FileAlreadyExistsException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.NoSuchFileException;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ResourceBundle;
|
||||
@@ -58,7 +57,7 @@ public class CreateNewVaultLocationController implements FxController {
|
||||
public RadioButton customRadioButton;
|
||||
|
||||
@Inject
|
||||
CreateNewVaultLocationController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_NAME) Lazy<Scene> chooseNameScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_PASSWORD) Lazy<Scene> choosePasswordScene, LocationPresets locationPresets, ObjectProperty<Path> vaultPath, StringProperty vaultName, ResourceBundle resourceBundle) {
|
||||
CreateNewVaultLocationController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_NAME) Lazy<Scene> chooseNameScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_PASSWORD) Lazy<Scene> choosePasswordScene, LocationPresets locationPresets, ObjectProperty<Path> vaultPath, @Named("vaultName") StringProperty vaultName, ResourceBundle resourceBundle) {
|
||||
this.window = window;
|
||||
this.chooseNameScene = chooseNameScene;
|
||||
this.choosePasswordScene = choosePasswordScene;
|
||||
@@ -115,14 +114,12 @@ public class CreateNewVaultLocationController implements FxController {
|
||||
Files.delete(createdDir); // assert: dir exists and is empty
|
||||
window.setScene(choosePasswordScene.get());
|
||||
} catch (FileAlreadyExistsException e) {
|
||||
LOG.warn("Can not use already existing vault path: {}", vaultPath.get());
|
||||
LOG.warn("Can not use already existing vault path {}", vaultPath.get());
|
||||
warningText.set(resourceBundle.getString("addvaultwizard.new.fileAlreadyExists"));
|
||||
} catch (NoSuchFileException | DirectoryNotEmptyException e) {
|
||||
LOG.error("Failed to delete recently created directory.", e);
|
||||
// TODO show generic error text for unexpected exception
|
||||
} catch (IOException e) {
|
||||
LOG.warn("Can not create vault at path: {}", vaultPath.get());
|
||||
// TODO show generic error text for unexpected exception
|
||||
LOG.warn("Thrown Exception:", e);
|
||||
warningText.set(resourceBundle.getString("addvaultwizard.new.ioException"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -16,6 +16,7 @@ import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.regex.Pattern;
|
||||
@@ -36,7 +37,7 @@ public class CreateNewVaultNameController implements FxController {
|
||||
private final StringBinding warningText;
|
||||
|
||||
@Inject
|
||||
CreateNewVaultNameController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, ObjectProperty<Path> vaultPath, StringProperty vaultName, ResourceBundle resourceBundle) {
|
||||
CreateNewVaultNameController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, ObjectProperty<Path> vaultPath, @Named("vaultName") StringProperty vaultName, ResourceBundle resourceBundle) {
|
||||
this.window = window;
|
||||
this.welcomeScene = welcomeScene;
|
||||
this.chooseLocationScene = chooseLocationScene;
|
||||
|
||||
+26
-20
@@ -12,7 +12,6 @@ import javafx.beans.property.SimpleIntegerProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.CheckBox;
|
||||
import javafx.scene.control.ContentDisplay;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.layout.HBox;
|
||||
@@ -28,11 +27,13 @@ import org.cryptomator.ui.common.Tasks;
|
||||
import org.cryptomator.ui.controls.FontAwesome5IconView;
|
||||
import org.cryptomator.ui.controls.NiceSecurePasswordField;
|
||||
import org.cryptomator.ui.common.PasswordStrengthUtil;
|
||||
import org.cryptomator.ui.recoverykey.RecoveryKeyFactory;
|
||||
import org.fxmisc.easybind.EasyBind;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import java.io.IOException;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.nio.channels.WritableByteChannel;
|
||||
@@ -56,11 +57,13 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
|
||||
private final Stage window;
|
||||
private final Lazy<Scene> chooseLocationScene;
|
||||
private final Lazy<Scene> successScene;
|
||||
private final Lazy<Scene> recoveryKeyScene;
|
||||
private final ExecutorService executor;
|
||||
private final StringProperty vaultName;
|
||||
private final ObjectProperty<Path> vaultPath;
|
||||
private final ObjectProperty<Vault> vault;
|
||||
private final RecoveryKeyFactory recoveryKeyFactory;
|
||||
private final StringProperty vaultNameProperty;
|
||||
private final ObjectProperty<Path> vaultPathProperty;
|
||||
private final ObjectProperty<Vault> vaultProperty;
|
||||
private final StringProperty recoveryKeyProperty;
|
||||
private final VaultListManager vaultListManager;
|
||||
private final ResourceBundle resourceBundle;
|
||||
private final PasswordStrengthUtil strengthRater;
|
||||
@@ -77,17 +80,18 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
public FontAwesome5IconView checkmark;
|
||||
public FontAwesome5IconView cross;
|
||||
public Label passwordMatchLabel;
|
||||
public CheckBox finalConfirmationCheckbox;
|
||||
|
||||
@Inject
|
||||
CreateNewVaultPasswordController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, ExecutorService executor, StringProperty vaultName, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, VaultListManager vaultListManager, ResourceBundle resourceBundle, PasswordStrengthUtil strengthRater, ReadmeGenerator readmeGenerator) {
|
||||
CreateNewVaultPasswordController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_RECOVERYKEY) Lazy<Scene> recoveryKeyScene, ExecutorService executor, RecoveryKeyFactory recoveryKeyFactory, @Named("vaultName") StringProperty vaultName, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, @Named("recoveryKey") StringProperty recoveryKey, VaultListManager vaultListManager, ResourceBundle resourceBundle, PasswordStrengthUtil strengthRater, ReadmeGenerator readmeGenerator) {
|
||||
this.window = window;
|
||||
this.chooseLocationScene = chooseLocationScene;
|
||||
this.successScene = successScene;
|
||||
this.recoveryKeyScene = recoveryKeyScene;
|
||||
this.executor = executor;
|
||||
this.vaultName = vaultName;
|
||||
this.vaultPath = vaultPath;
|
||||
this.vault = vault;
|
||||
this.recoveryKeyFactory = recoveryKeyFactory;
|
||||
this.vaultNameProperty = vaultName;
|
||||
this.vaultPathProperty = vaultPath;
|
||||
this.vaultProperty = vault;
|
||||
this.recoveryKeyProperty = recoveryKey;
|
||||
this.vaultListManager = vaultListManager;
|
||||
this.resourceBundle = resourceBundle;
|
||||
this.strengthRater = strengthRater;
|
||||
@@ -105,7 +109,7 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
//binding indicating if the passwords not match
|
||||
BooleanBinding passwordsMatch = Bindings.createBooleanBinding(() -> CharSequence.compare(passwordField.getCharacters(), reenterField.getCharacters()) == 0, passwordField.textProperty(), reenterField.textProperty());
|
||||
BooleanBinding reenterFieldNotEmpty = reenterField.textProperty().isNotEmpty();
|
||||
readyToCreateVault.bind(reenterFieldNotEmpty.and(passwordsMatch).and(finalConfirmationCheckbox.selectedProperty()).and(processing.not()));
|
||||
readyToCreateVault.bind(reenterFieldNotEmpty.and(passwordsMatch).and(processing.not()));
|
||||
//make match indicator invisible when passwords do not match or one is empty
|
||||
passwordMatchBox.visibleProperty().bind(reenterFieldNotEmpty);
|
||||
checkmark.visibleProperty().bind(passwordsMatch.and(reenterFieldNotEmpty));
|
||||
@@ -125,7 +129,7 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
|
||||
@FXML
|
||||
public void next() {
|
||||
Path pathToVault = vaultPath.get();
|
||||
Path pathToVault = vaultPathProperty.get();
|
||||
|
||||
try {
|
||||
Files.createDirectory(pathToVault);
|
||||
@@ -140,8 +144,9 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
processing.set(true);
|
||||
Tasks.create(() -> {
|
||||
initializeVault(pathToVault, passwordField.getCharacters());
|
||||
}).onSuccess(() -> {
|
||||
initializationSucceeded(pathToVault);
|
||||
return recoveryKeyFactory.createRecoveryKey(pathToVault, passwordField.getCharacters());
|
||||
}).onSuccess(recoveryKey -> {
|
||||
initializationSucceeded(pathToVault, recoveryKey);
|
||||
}).onError(IOException.class, e -> {
|
||||
// TODO show generic error screen
|
||||
LOG.error("", e);
|
||||
@@ -171,11 +176,12 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
LOG.info("Created vault at {}", path);
|
||||
}
|
||||
|
||||
private void initializationSucceeded(Path pathToVault) {
|
||||
private void initializationSucceeded(Path pathToVault, String recoveryKey) {
|
||||
try {
|
||||
Vault newVault = vaultListManager.add(pathToVault);
|
||||
vault.set(newVault);
|
||||
window.setScene(successScene.get());
|
||||
vaultProperty.set(newVault);
|
||||
recoveryKeyProperty.set(recoveryKey);
|
||||
window.setScene(recoveryKeyScene.get());
|
||||
} catch (NoSuchFileException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
}
|
||||
@@ -184,11 +190,11 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
/* Getter/Setter */
|
||||
|
||||
public String getVaultName() {
|
||||
return vaultName.get();
|
||||
return vaultNameProperty.get();
|
||||
}
|
||||
|
||||
public StringProperty vaultNameProperty() {
|
||||
return vaultName;
|
||||
return vaultNameProperty;
|
||||
}
|
||||
|
||||
public IntegerProperty passwordStrengthProperty() {
|
||||
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
package org.cryptomator.ui.addvaultwizard;
|
||||
|
||||
import dagger.Lazy;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
public class CreateNewVaultRecoveryKeyController implements FxController {
|
||||
|
||||
private final Stage window;
|
||||
private final Lazy<Scene> successScene;
|
||||
private final StringProperty recoveryKeyProperty;
|
||||
|
||||
@Inject
|
||||
CreateNewVaultRecoveryKeyController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, @Named("recoveryKey")StringProperty recoveryKey) {
|
||||
this.window = window;
|
||||
this.successScene = successScene;
|
||||
this.recoveryKeyProperty = recoveryKey;
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void next() {
|
||||
window.setScene(successScene.get());
|
||||
}
|
||||
|
||||
/* Getter/Setter */
|
||||
|
||||
public String getRecoveryKey() {
|
||||
return recoveryKeyProperty.get();
|
||||
}
|
||||
|
||||
public StringProperty recoveryKeyProperty() {
|
||||
return recoveryKeyProperty;
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import javafx.scene.Scene;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
@@ -26,8 +27,8 @@ abstract class ChangePasswordModule {
|
||||
@Provides
|
||||
@ChangePasswordWindow
|
||||
@ChangePasswordScoped
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, resourceBundle);
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
package org.cryptomator.ui.common;
|
||||
|
||||
import javafx.scene.Parent;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.KeyCodeCombination;
|
||||
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;
|
||||
import java.util.function.Function;
|
||||
|
||||
@FxApplicationScoped
|
||||
public class DefaultSceneFactory implements Function<Parent, Scene> {
|
||||
|
||||
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(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();
|
||||
if (window instanceof Stage) {
|
||||
setupDefaultAccelerators(scene, (Stage) window);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected void setupDefaultAccelerators(Scene scene, Stage stage) {
|
||||
if (SystemUtils.IS_OS_WINDOWS) {
|
||||
scene.getAccelerators().put(ALT_F4, stage::close);
|
||||
} else {
|
||||
scene.getAccelerators().put(SHORTCUT_W, stage::close);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,24 +1,28 @@
|
||||
package org.cryptomator.ui.common;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.scene.Parent;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import javax.inject.Provider;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class FXMLLoaderFactory {
|
||||
|
||||
private final Map<Class<? extends FxController>, Provider<FxController>> factories;
|
||||
private final Map<Class<? extends FxController>, Provider<FxController>> controllerFactories;
|
||||
private final Function<Parent, Scene> sceneFactory;
|
||||
private final ResourceBundle resourceBundle;
|
||||
|
||||
public FXMLLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
|
||||
this.factories = factories;
|
||||
public FXMLLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> controllerFactories, Function<Parent, Scene> sceneFactory, ResourceBundle resourceBundle) {
|
||||
this.controllerFactories = controllerFactories;
|
||||
this.sceneFactory = sceneFactory;
|
||||
this.resourceBundle = resourceBundle;
|
||||
}
|
||||
|
||||
@@ -34,6 +38,7 @@ public class FXMLLoaderFactory {
|
||||
|
||||
/**
|
||||
* Loads the FXML given fxml resource in a new FXMLLoader instance.
|
||||
*
|
||||
* @param fxmlResourceName Name of the resource (as in {@link Class#getResource(String)}).
|
||||
* @return The FXMLLoader used to load the file
|
||||
* @throws IOException if an error occurs while loading the FXML file
|
||||
@@ -48,6 +53,7 @@ public class FXMLLoaderFactory {
|
||||
|
||||
/**
|
||||
* {@link #load(String) Loads} the FXML file and creates a new Scene containing the loaded ui.
|
||||
*
|
||||
* @param fxmlResourceName Name of the resource (as in {@link Class#getResource(String)}).
|
||||
* @throws UncheckedIOException wrapping any IOException thrown by {@link #load(String)).
|
||||
*/
|
||||
@@ -59,14 +65,16 @@ public class FXMLLoaderFactory {
|
||||
throw new UncheckedIOException("Failed to load " + fxmlResourceName, e);
|
||||
}
|
||||
Parent root = loader.getRoot();
|
||||
return new Scene(root);
|
||||
List<String> addtionalStyleSheets = Splitter.on(',').omitEmptyStrings().splitToList(resourceBundle.getString("additionalStyleSheets"));
|
||||
addtionalStyleSheets.forEach(styleSheet -> root.getStylesheets().add("/css/" + styleSheet));
|
||||
return sceneFactory.apply(root);
|
||||
}
|
||||
|
||||
private FxController constructController(Class<?> aClass) {
|
||||
if (!factories.containsKey(aClass)) {
|
||||
if (!controllerFactories.containsKey(aClass)) {
|
||||
throw new IllegalArgumentException("ViewController not registered: " + aClass);
|
||||
} else {
|
||||
return factories.get(aClass).get();
|
||||
return controllerFactories.get(aClass).get();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,9 +3,11 @@ package org.cryptomator.ui.common;
|
||||
public enum FxmlFile {
|
||||
ADDVAULT_WELCOME("/fxml/addvault_welcome.fxml"), //
|
||||
ADDVAULT_EXISTING("/fxml/addvault_existing.fxml"), //
|
||||
ADDVAULT_EXISTING_ERROR("/fxml/addvault_existing_error.fxml"),
|
||||
ADDVAULT_NEW_NAME("/fxml/addvault_new_name.fxml"), //
|
||||
ADDVAULT_NEW_LOCATION("/fxml/addvault_new_location.fxml"), //
|
||||
ADDVAULT_NEW_PASSWORD("/fxml/addvault_new_password.fxml"), //
|
||||
ADDVAULT_NEW_RECOVERYKEY("/fxml/addvault_new_recoverykey.fxml"), //
|
||||
ADDVAULT_SUCCESS("/fxml/addvault_success.fxml"), //
|
||||
CHANGEPASSWORD("/fxml/changepassword.fxml"), //
|
||||
FORGET_PASSWORD("/fxml/forget_password.fxml"), //
|
||||
@@ -15,15 +17,21 @@ public enum FxmlFile {
|
||||
MIGRATION_SUCCESS("/fxml/migration_success.fxml"), //
|
||||
PREFERENCES("/fxml/preferences.fxml"), //
|
||||
QUIT("/fxml/quit.fxml"), //
|
||||
RECOVERYKEY_CREATE("/fxml/recoverykey_create.fxml"), //
|
||||
RECOVERYKEY_DISPLAY("/fxml/recoverykey_display.fxml"), //
|
||||
REMOVE_VAULT("/fxml/remove_vault.fxml"), //
|
||||
UNLOCK("/fxml/unlock2.fxml"), // TODO rename
|
||||
UNLOCK("/fxml/unlock.fxml"),
|
||||
UNLOCK_SUCCESS("/fxml/unlock_success.fxml"), //
|
||||
VAULT_OPTIONS("/fxml/vault_options.fxml"), //
|
||||
WRONGFILEALERT("/fxml/wrongfilealert.fxml");
|
||||
|
||||
private final String filename;
|
||||
private final String ressourcePathString;
|
||||
|
||||
FxmlFile(String filename) {
|
||||
this.filename = filename;
|
||||
FxmlFile(String ressourcePathString) {
|
||||
this.ressourcePathString = ressourcePathString;
|
||||
}
|
||||
|
||||
public String getRessourcePathString(){
|
||||
return ressourcePathString;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,8 +31,7 @@ public class PasswordStrengthUtil {
|
||||
public PasswordStrengthUtil(ResourceBundle resourceBundle) {
|
||||
this.resourceBundle = resourceBundle;
|
||||
this.zxcvbn = new Zxcvbn();
|
||||
this.sanitizedInputs = new ArrayList<>();
|
||||
this.sanitizedInputs.add("cryptomator");
|
||||
this.sanitizedInputs = List.of("cryptomator");
|
||||
}
|
||||
|
||||
public int computeRate(String password) {
|
||||
|
||||
@@ -9,6 +9,7 @@ public enum FontAwesome5Icon {
|
||||
CHECK("\uF00C"), //
|
||||
COG("\uF013"), //
|
||||
COGS("\uF085"), //
|
||||
EXCLAMATION("\uF12A"),
|
||||
EXCLAMATION_TRIANGLE("\uF071"), //
|
||||
EYE("\uF06E"), //
|
||||
EYE_SLASH("\uF070"), //
|
||||
|
||||
@@ -67,6 +67,10 @@ public class NiceSecurePasswordField extends StackPane {
|
||||
public void requestFocus() {
|
||||
passwordField.requestFocus();
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return passwordField.getText();
|
||||
}
|
||||
|
||||
public StringProperty textProperty() {
|
||||
return passwordField.textProperty();
|
||||
@@ -76,6 +80,10 @@ public class NiceSecurePasswordField extends StackPane {
|
||||
return passwordField.getCharacters();
|
||||
}
|
||||
|
||||
public void setPassword(CharSequence password) {
|
||||
passwordField.setPassword(password);
|
||||
}
|
||||
|
||||
public void setPassword(char[] password) {
|
||||
passwordField.setPassword(password);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import javafx.scene.Scene;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
@@ -29,8 +30,8 @@ abstract class ForgetPasswordModule {
|
||||
@Provides
|
||||
@ForgetPasswordWindow
|
||||
@ForgetPasswordScoped
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, resourceBundle);
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@@ -46,13 +47,6 @@ abstract class ForgetPasswordModule {
|
||||
return stage;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.FORGET_PASSWORD)
|
||||
@ForgetPasswordScoped
|
||||
static Scene provideForgetPasswordScene(@ForgetPasswordWindow FXMLLoaderFactory fxmlLoaders, @ForgetPasswordWindow Stage window) {
|
||||
return fxmlLoaders.createScene("/fxml/forget_password.fxml");
|
||||
}
|
||||
|
||||
@Provides
|
||||
@ForgetPasswordWindow
|
||||
@ForgetPasswordScoped
|
||||
@@ -64,6 +58,15 @@ abstract class ForgetPasswordModule {
|
||||
@ForgetPasswordWindow
|
||||
@ForgetPasswordScoped
|
||||
abstract ReadOnlyBooleanProperty bindReadOnlyConfirmedProperty(@ForgetPasswordWindow BooleanProperty confirmedProperty);
|
||||
|
||||
// ------------------
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.FORGET_PASSWORD)
|
||||
@ForgetPasswordScoped
|
||||
static Scene provideForgetPasswordScene(@ForgetPasswordWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene("/fxml/forget_password.fxml");
|
||||
}
|
||||
|
||||
// ------------------
|
||||
|
||||
|
||||
@@ -8,6 +8,6 @@ import java.lang.annotation.RetentionPolicy;
|
||||
@Scope
|
||||
@Documented
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface ForgetPasswordScoped {
|
||||
@interface ForgetPasswordScoped {
|
||||
|
||||
}
|
||||
|
||||
@@ -26,8 +26,6 @@ import org.slf4j.LoggerFactory;
|
||||
import javax.inject.Inject;
|
||||
import java.awt.desktop.QuitResponse;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.CompletionStage;
|
||||
|
||||
@FxApplicationScoped
|
||||
public class FxApplication extends Application {
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2017 Skymatic UG (haftungsbeschränkt).
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the accompanying LICENSE file.
|
||||
*******************************************************************************/
|
||||
package org.cryptomator.ui.l10n;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.cryptomator.ui.fxapp.FxApplicationScoped;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
import java.util.PropertyResourceBundle;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
@FxApplicationScoped
|
||||
public class Localization extends ResourceBundle {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(Localization.class);
|
||||
|
||||
private static final String LOCALIZATION_DEFAULT_FILE = "/localization/en.txt";
|
||||
private static final String LOCALIZATION_FILENAME_FMT = "/localization/%s.txt";
|
||||
|
||||
private final ResourceBundle fallback;
|
||||
private final ResourceBundle localized;
|
||||
|
||||
@Inject
|
||||
public Localization() {
|
||||
try {
|
||||
this.fallback = Objects.requireNonNull(loadLocalizationFile(LOCALIZATION_DEFAULT_FILE));
|
||||
LOG.debug("Loaded localization default file: {}", LOCALIZATION_DEFAULT_FILE);
|
||||
|
||||
String language = Locale.getDefault().getLanguage();
|
||||
String region = Locale.getDefault().getCountry();
|
||||
LOG.debug("Detected language \"{}\" and region \"{}\"", language, region);
|
||||
|
||||
ResourceBundle localizationBundle = null;
|
||||
if (StringUtils.isNotEmpty(language) && StringUtils.isNotEmpty(region)) {
|
||||
String file = String.format(LOCALIZATION_FILENAME_FMT, language + "_" + region);
|
||||
LOG.trace("Attempting to load localization from: {}", file);
|
||||
localizationBundle = loadLocalizationFile(file);
|
||||
}
|
||||
if (StringUtils.isNotEmpty(language) && localizationBundle == null) {
|
||||
String file = String.format(LOCALIZATION_FILENAME_FMT, language);
|
||||
LOG.trace("Attempting to load localization from: {}", file);
|
||||
localizationBundle = loadLocalizationFile(file);
|
||||
}
|
||||
if (localizationBundle == null) {
|
||||
LOG.debug("No localization found. Falling back to default language.");
|
||||
localizationBundle = this.fallback;
|
||||
}
|
||||
this.localized = Objects.requireNonNull(localizationBundle);
|
||||
} catch (IOException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
}
|
||||
}
|
||||
|
||||
// returns null if no resource for given path
|
||||
private static ResourceBundle loadLocalizationFile(String resourcePath) throws IOException {
|
||||
try (InputStream in = Localization.class.getResourceAsStream(resourcePath)) {
|
||||
if (in != null) {
|
||||
Reader reader = new InputStreamReader(in, StandardCharsets.UTF_8);
|
||||
return new PropertyResourceBundle(reader);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object handleGetObject(String key) {
|
||||
return localized.containsKey(key) ? localized.getObject(key) : fallback.getObject(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enumeration<String> getKeys() {
|
||||
Collection<String> keys = Sets.union(localized.keySet(), fallback.keySet());
|
||||
return Collections.enumeration(keys);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,7 +10,6 @@ import javafx.scene.layout.VBox;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.common.vaults.VaultListManager;
|
||||
import org.cryptomator.ui.common.FontLoader;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.fxapp.FxApplication;
|
||||
import org.cryptomator.ui.fxapp.UpdateChecker;
|
||||
@@ -21,18 +20,15 @@ import org.slf4j.LoggerFactory;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import java.io.File;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.NoSuchFileException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@MainWindowScoped
|
||||
public class MainWindowController implements FxController {
|
||||
|
||||
private static final String TITLE_FONT = "/css/dosis-bold.ttf";
|
||||
private static final Logger LOG = LoggerFactory.getLogger(MainWindowController.class);
|
||||
private static final String MASTERKEY_FILENAME = "masterkey.cryptomator"; // TODO: deduplicate constant declared in multiple classes
|
||||
|
||||
@@ -64,7 +60,6 @@ public class MainWindowController implements FxController {
|
||||
@FXML
|
||||
public void initialize() {
|
||||
LOG.debug("init MainWindowController");
|
||||
loadFont(TITLE_FONT);
|
||||
titleBar.setOnMousePressed(event -> {
|
||||
xOffset = event.getSceneX();
|
||||
yOffset = event.getSceneY();
|
||||
@@ -115,14 +110,6 @@ public class MainWindowController implements FxController {
|
||||
return Stream.empty();
|
||||
}
|
||||
|
||||
private void loadFont(String resourcePath) {
|
||||
try {
|
||||
FontLoader.load(resourcePath);
|
||||
} catch (FontLoader.FontLoaderException e) {
|
||||
LOG.warn("Error loading font from path: " + resourcePath, e);
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void close() {
|
||||
if (minimizeToSysTray) {
|
||||
|
||||
@@ -12,6 +12,7 @@ import javafx.scene.input.KeyCombination;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.stage.StageStyle;
|
||||
import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
@@ -34,8 +35,8 @@ abstract class MainWindowModule {
|
||||
@Provides
|
||||
@MainWindow
|
||||
@MainWindowScoped
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, resourceBundle);
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, MainWindowSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@@ -57,15 +58,7 @@ abstract class MainWindowModule {
|
||||
@FxmlScene(FxmlFile.MAIN_WINDOW)
|
||||
@MainWindowScoped
|
||||
static Scene provideMainScene(@MainWindow FXMLLoaderFactory fxmlLoaders, MainWindowController mainWindowController, VaultListController vaultListController) {
|
||||
Scene scene = fxmlLoaders.createScene("/fxml/main_window.fxml");
|
||||
|
||||
// still not perfect... cant't we have a global menubar via the AWT tray app?
|
||||
KeyCombination cmdN = new KeyCodeCombination(KeyCode.N, KeyCombination.SHORTCUT_DOWN);
|
||||
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
|
||||
scene.getAccelerators().put(cmdN, vaultListController::didClickAddVault);
|
||||
scene.getAccelerators().put(cmdW, mainWindowController::close);
|
||||
|
||||
return scene;
|
||||
return fxmlLoaders.createScene("/fxml/main_window.fxml");
|
||||
}
|
||||
|
||||
// ------------------
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package org.cryptomator.ui.mainwindow;
|
||||
|
||||
import dagger.Lazy;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.input.KeyCode;
|
||||
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;
|
||||
|
||||
@MainWindowScoped
|
||||
public class MainWindowSceneFactory extends DefaultSceneFactory {
|
||||
|
||||
protected static final KeyCodeCombination SHORTCUT_N = new KeyCodeCombination(KeyCode.N, KeyCombination.SHORTCUT_DOWN);
|
||||
|
||||
private final Lazy<MainWindowController> mainWindowController;
|
||||
private final Lazy<VaultListController> vaultListController;
|
||||
|
||||
@Inject
|
||||
public MainWindowSceneFactory(Settings settings, Lazy<MainWindowController> mainWindowController, Lazy<VaultListController> vaultListController) {
|
||||
super(settings);
|
||||
this.mainWindowController = mainWindowController;
|
||||
this.vaultListController = vaultListController;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setupDefaultAccelerators(Scene scene, Stage stage) {
|
||||
if (SystemUtils.IS_OS_WINDOWS) {
|
||||
scene.getAccelerators().put(ALT_F4, mainWindowController.get()::close);
|
||||
} else {
|
||||
scene.getAccelerators().put(SHORTCUT_W, mainWindowController.get()::close);
|
||||
}
|
||||
scene.getAccelerators().put(SHORTCUT_N, vaultListController.get()::didClickAddVault);
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,7 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
//TODO: Add check if a vault in the list is invalid and add notification & controller
|
||||
@MainWindowScoped
|
||||
public class VaultListController implements FxController {
|
||||
|
||||
@@ -53,10 +54,6 @@ public class VaultListController implements FxController {
|
||||
if (c.wasAdded()) {
|
||||
Vault anyAddedVault = c.getAddedSubList().get(0);
|
||||
vaultList.getSelectionModel().select(anyAddedVault);
|
||||
window.setIconified(false);
|
||||
window.show();
|
||||
window.toFront();
|
||||
window.requestFocus(); // TODO: this beeps on macOS if there is a modal child window...
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,19 +1,14 @@
|
||||
package org.cryptomator.ui.migration;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.Lazy;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.IntoMap;
|
||||
import dagger.multibindings.IntoSet;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.KeyCodeCombination;
|
||||
import javafx.scene.input.KeyCombination;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
@@ -26,7 +21,6 @@ import javax.inject.Provider;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.Set;
|
||||
|
||||
@Module
|
||||
abstract class MigrationModule {
|
||||
@@ -34,29 +28,19 @@ abstract class MigrationModule {
|
||||
@Provides
|
||||
@MigrationWindow
|
||||
@MigrationScoped
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@MigrationWindow
|
||||
@MigrationScoped
|
||||
static Map<KeyCodeCombination, Runnable> provideDefaultAccellerators(@MigrationWindow Set<Map.Entry<KeyCombination, Runnable>> accelerators) {
|
||||
return Map.ofEntries(accelerators.toArray(Map.Entry[]::new));
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@MigrationWindow
|
||||
@MigrationScoped
|
||||
static Stage provideStage(@MainWindow Stage owner, ResourceBundle resourceBundle, @Named("windowIcon") Optional<Image> windowIcon, @MigrationWindow Lazy<Map<KeyCodeCombination, Runnable>> accelerators) {
|
||||
static Stage provideStage(@MainWindow Stage owner, ResourceBundle resourceBundle, @Named("windowIcon") Optional<Image> windowIcon) {
|
||||
Stage stage = new Stage();
|
||||
stage.setTitle(resourceBundle.getString("migration.title"));
|
||||
stage.setResizable(false);
|
||||
stage.initModality(Modality.WINDOW_MODAL);
|
||||
stage.initOwner(owner);
|
||||
stage.sceneProperty().addListener(observable -> {
|
||||
stage.getScene().getAccelerators().putAll(accelerators.get());
|
||||
});
|
||||
windowIcon.ifPresent(stage.getIcons()::add);
|
||||
return stage;
|
||||
}
|
||||
@@ -84,19 +68,6 @@ abstract class MigrationModule {
|
||||
|
||||
// ------------------
|
||||
|
||||
@Provides
|
||||
@IntoSet
|
||||
@MigrationWindow
|
||||
static Map.Entry<KeyCombination, Runnable> provideCloseWindowShortcut(@MigrationWindow Stage window) {
|
||||
if (SystemUtils.IS_OS_WINDOWS) {
|
||||
return Map.entry(new KeyCodeCombination(KeyCode.F4, KeyCombination.ALT_DOWN), window::close);
|
||||
} else {
|
||||
return Map.entry(new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN), window::close);
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(MigrationStartController.class)
|
||||
|
||||
@@ -7,8 +7,13 @@ import javafx.animation.Timeline;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.ObjectBinding;
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.DoubleProperty;
|
||||
import javafx.beans.property.ReadOnlyDoubleProperty;
|
||||
import javafx.beans.property.SimpleBooleanProperty;
|
||||
import javafx.beans.property.SimpleDoubleProperty;
|
||||
import javafx.beans.value.WritableValue;
|
||||
import javafx.concurrent.ScheduledService;
|
||||
import javafx.concurrent.Task;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.ContentDisplay;
|
||||
@@ -17,6 +22,7 @@ import javafx.util.Duration;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.common.vaults.VaultState;
|
||||
import org.cryptomator.cryptofs.migration.Migrators;
|
||||
import org.cryptomator.cryptofs.migration.api.MigrationProgressListener;
|
||||
import org.cryptomator.cryptofs.migration.api.NoApplicableMigratorException;
|
||||
import org.cryptomator.cryptolib.api.InvalidPassphraseException;
|
||||
import org.cryptomator.keychain.KeychainAccess;
|
||||
@@ -39,6 +45,7 @@ public class MigrationRunController implements FxController {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(MigrationRunController.class);
|
||||
private static final String MASTERKEY_FILENAME = "masterkey.cryptomator"; // TODO: deduplicate constant declared in multiple classes
|
||||
private static final Duration MIGRATION_PROGRESS_UPDATE_INTERVAL = Duration.millis(25);
|
||||
|
||||
private final Stage window;
|
||||
private final Vault vault;
|
||||
@@ -48,6 +55,9 @@ public class MigrationRunController implements FxController {
|
||||
private final Lazy<Scene> successScene;
|
||||
private final ObjectBinding<ContentDisplay> migrateButtonContentDisplay;
|
||||
private final BooleanProperty migrationButtonDisabled;
|
||||
private final DoubleProperty migrationProgress;
|
||||
private final ScheduledService<Double> migrationProgressObservationService;
|
||||
private volatile double volatileMigrationProgress = -1.0;
|
||||
public NiceSecurePasswordField passwordField;
|
||||
|
||||
@Inject
|
||||
@@ -60,6 +70,10 @@ public class MigrationRunController implements FxController {
|
||||
this.successScene = successScene;
|
||||
this.migrateButtonContentDisplay = Bindings.createObjectBinding(this::getMigrateButtonContentDisplay, vault.stateProperty());
|
||||
this.migrationButtonDisabled = new SimpleBooleanProperty();
|
||||
this.migrationProgress = new SimpleDoubleProperty(volatileMigrationProgress);
|
||||
this.migrationProgressObservationService = new MigrationProgressObservationService();
|
||||
migrationProgressObservationService.setExecutor(executor);
|
||||
migrationProgressObservationService.setPeriod(MIGRATION_PROGRESS_UPDATE_INTERVAL);
|
||||
}
|
||||
|
||||
public void initialize() {
|
||||
@@ -79,17 +93,18 @@ public class MigrationRunController implements FxController {
|
||||
LOG.info("Migrating vault {}", vault.getPath());
|
||||
CharSequence password = passwordField.getCharacters();
|
||||
vault.setState(VaultState.PROCESSING);
|
||||
migrationProgressObservationService.start();
|
||||
Tasks.create(() -> {
|
||||
Migrators migrators = Migrators.get();
|
||||
migrators.migrate(vault.getPath(), MASTERKEY_FILENAME, password);
|
||||
migrators.migrate(vault.getPath(), MASTERKEY_FILENAME, password, this::migrationProgressChanged);
|
||||
return migrators.needsMigration(vault.getPath(), MASTERKEY_FILENAME);
|
||||
}).onSuccess(needsAnotherMigration -> {
|
||||
LOG.info("Migration of '{}' succeeded.", vault.getDisplayableName());
|
||||
if (needsAnotherMigration) {
|
||||
vault.setState(VaultState.NEEDS_MIGRATION);
|
||||
} else {
|
||||
vault.setState(VaultState.LOCKED);
|
||||
passwordField.swipe();
|
||||
LOG.info("Migration of '{}' succeeded.", vault.getDisplayableName());
|
||||
window.setScene(successScene.get());
|
||||
}
|
||||
}).onError(InvalidPassphraseException.class, e -> {
|
||||
@@ -105,9 +120,29 @@ public class MigrationRunController implements FxController {
|
||||
LOG.error("Migration failed for technical reasons.", e);
|
||||
vault.setState(VaultState.ERROR);
|
||||
// TODO show generic error screen
|
||||
}).andFinally(() -> {
|
||||
migrationProgressObservationService.cancel();
|
||||
migrationProgressObservationService.reset();
|
||||
}).runOnce(executor);
|
||||
}
|
||||
|
||||
// Called by a background task. We can not directly modify observable properties from here
|
||||
private void migrationProgressChanged(MigrationProgressListener.ProgressState state, double progress) {
|
||||
switch (state) {
|
||||
case INITIALIZING:
|
||||
volatileMigrationProgress = -1.0;
|
||||
break;
|
||||
case MIGRATING:
|
||||
volatileMigrationProgress = progress;
|
||||
break;
|
||||
case FINALIZING:
|
||||
volatileMigrationProgress = 1.0;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unexpted state " + state);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadStoredPassword() {
|
||||
assert keychainAccess.isPresent();
|
||||
char[] storedPw = null;
|
||||
@@ -126,6 +161,27 @@ public class MigrationRunController implements FxController {
|
||||
}
|
||||
}
|
||||
|
||||
// Sets migrationProgress to volatileMigrationProgress at its configured interval
|
||||
private class MigrationProgressObservationService extends ScheduledService<Double> {
|
||||
|
||||
@Override
|
||||
protected Task<Double> createTask() {
|
||||
return new Task<>() {
|
||||
@Override
|
||||
protected Double call() {
|
||||
return volatileMigrationProgress;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void succeeded() {
|
||||
assert getValue() != null;
|
||||
migrationProgress.set(getValue());
|
||||
super.succeeded();
|
||||
}
|
||||
}
|
||||
|
||||
/* Animations */
|
||||
|
||||
private void shakeWindow() {
|
||||
@@ -180,4 +236,12 @@ public class MigrationRunController implements FxController {
|
||||
}
|
||||
}
|
||||
|
||||
public ReadOnlyDoubleProperty migrationProgressProperty() {
|
||||
return migrationProgress;
|
||||
}
|
||||
|
||||
public double getMigrationProgress() {
|
||||
return migrationProgress.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+26
@@ -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<UiTheme> 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 */
|
||||
|
||||
@@ -6,10 +6,8 @@ import dagger.Provides;
|
||||
import dagger.multibindings.IntoMap;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.KeyCodeCombination;
|
||||
import javafx.scene.input.KeyCombination;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
@@ -28,8 +26,8 @@ abstract class PreferencesModule {
|
||||
@Provides
|
||||
@PreferencesWindow
|
||||
@PreferencesScoped
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, resourceBundle);
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@@ -46,13 +44,8 @@ abstract class PreferencesModule {
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.PREFERENCES)
|
||||
@PreferencesScoped
|
||||
static Scene providePreferencesScene(@PreferencesWindow FXMLLoaderFactory fxmlLoaders, @PreferencesWindow Stage window) {
|
||||
Scene scene = fxmlLoaders.createScene("/fxml/preferences.fxml");
|
||||
|
||||
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
|
||||
scene.getAccelerators().put(cmdW, window::close);
|
||||
|
||||
return scene;
|
||||
static Scene providePreferencesScene(@PreferencesWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene("/fxml/preferences.fxml");
|
||||
}
|
||||
|
||||
// ------------------
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ import javafx.scene.input.KeyCodeCombination;
|
||||
import javafx.scene.input.KeyCombination;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
@@ -29,8 +30,8 @@ abstract class QuitModule {
|
||||
@Provides
|
||||
@QuitWindow
|
||||
@QuitScoped
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, resourceBundle);
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@@ -48,13 +49,8 @@ abstract class QuitModule {
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.QUIT)
|
||||
@QuitScoped
|
||||
static Scene provideUnlockScene(@QuitWindow FXMLLoaderFactory fxmlLoaders, @QuitWindow Stage window) {
|
||||
Scene scene = fxmlLoaders.createScene("/fxml/quit.fxml");
|
||||
|
||||
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
|
||||
scene.getAccelerators().put(cmdW, window::close);
|
||||
|
||||
return scene;
|
||||
static Scene provideUnlockScene(@QuitWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene("/fxml/quit.fxml");
|
||||
}
|
||||
|
||||
// ------------------
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package org.cryptomator.ui.recoverykey;
|
||||
|
||||
import dagger.BindsInstance;
|
||||
import dagger.Lazy;
|
||||
import dagger.Subcomponent;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Named;
|
||||
import java.util.Optional;
|
||||
|
||||
@RecoveryKeyScoped
|
||||
@Subcomponent(modules = {RecoveryKeyModule.class})
|
||||
public interface RecoveryKeyComponent {
|
||||
|
||||
@RecoveryKeyWindow
|
||||
Stage window();
|
||||
|
||||
@FxmlScene(FxmlFile.RECOVERYKEY_CREATE)
|
||||
Lazy<Scene> scene();
|
||||
|
||||
default void showRecoveryKeyCreationWindow() {
|
||||
Stage stage = window();
|
||||
stage.setScene(scene().get());
|
||||
stage.sizeToScene();
|
||||
stage.show();
|
||||
}
|
||||
|
||||
@Subcomponent.Builder
|
||||
interface Builder {
|
||||
|
||||
@BindsInstance
|
||||
Builder vault(@RecoveryKeyWindow Vault vault);
|
||||
|
||||
@BindsInstance
|
||||
Builder owner(@Named("keyRecoveryOwner") Stage owner);
|
||||
|
||||
RecoveryKeyComponent build();
|
||||
}
|
||||
|
||||
}
|
||||
+103
@@ -0,0 +1,103 @@
|
||||
package org.cryptomator.ui.recoverykey;
|
||||
|
||||
import dagger.Lazy;
|
||||
import javafx.animation.KeyFrame;
|
||||
import javafx.animation.KeyValue;
|
||||
import javafx.animation.Timeline;
|
||||
import javafx.beans.property.ReadOnlyStringProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.beans.value.WritableValue;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.util.Duration;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.cryptolib.api.InvalidPassphraseException;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
import org.cryptomator.ui.common.Tasks;
|
||||
import org.cryptomator.ui.controls.NiceSecurePasswordField;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
@RecoveryKeyScoped
|
||||
public class RecoveryKeyCreationController implements FxController {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(RecoveryKeyCreationController.class);
|
||||
|
||||
private final Stage window;
|
||||
private final Lazy<Scene> successScene;
|
||||
private final Vault vault;
|
||||
private final ExecutorService executor;
|
||||
private final RecoveryKeyFactory recoveryKeyFactory;
|
||||
private final StringProperty recoveryKeyProperty;
|
||||
public NiceSecurePasswordField passwordField;
|
||||
|
||||
@Inject
|
||||
public RecoveryKeyCreationController(@RecoveryKeyWindow Stage window, @FxmlScene(FxmlFile.RECOVERYKEY_DISPLAY) Lazy<Scene> successScene, @RecoveryKeyWindow Vault vault, RecoveryKeyFactory recoveryKeyFactory, ExecutorService executor, @RecoveryKeyWindow StringProperty recoveryKey) {
|
||||
this.window = window;
|
||||
this.successScene = successScene;
|
||||
this.vault = vault;
|
||||
this.executor = executor;
|
||||
this.recoveryKeyFactory = recoveryKeyFactory;
|
||||
this.recoveryKeyProperty = recoveryKey;
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void createRecoveryKey() {
|
||||
Tasks.create(() -> {
|
||||
return recoveryKeyFactory.createRecoveryKey(vault.getPath(), passwordField.getCharacters());
|
||||
}).onSuccess(result -> {
|
||||
recoveryKeyProperty.set(result);
|
||||
window.setScene(successScene.get());
|
||||
}).onError(IOException.class, e -> {
|
||||
LOG.error("Creation of recovery key failed.", e);
|
||||
}).onError(InvalidPassphraseException.class, e -> {
|
||||
shakeWindow();
|
||||
}).runOnce(executor);
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void close() {
|
||||
window.close();
|
||||
}
|
||||
|
||||
/* Animations */
|
||||
|
||||
private void shakeWindow() {
|
||||
WritableValue<Double> writableWindowX = new WritableValue<>() {
|
||||
@Override
|
||||
public Double getValue() {
|
||||
return window.getX();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(Double value) {
|
||||
window.setX(value);
|
||||
}
|
||||
};
|
||||
Timeline timeline = new Timeline( //
|
||||
new KeyFrame(Duration.ZERO, new KeyValue(writableWindowX, window.getX())), //
|
||||
new KeyFrame(new Duration(100), new KeyValue(writableWindowX, window.getX() - 22.0)), //
|
||||
new KeyFrame(new Duration(200), new KeyValue(writableWindowX, window.getX() + 18.0)), //
|
||||
new KeyFrame(new Duration(300), new KeyValue(writableWindowX, window.getX() - 14.0)), //
|
||||
new KeyFrame(new Duration(400), new KeyValue(writableWindowX, window.getX() + 10.0)), //
|
||||
new KeyFrame(new Duration(500), new KeyValue(writableWindowX, window.getX() - 6.0)), //
|
||||
new KeyFrame(new Duration(600), new KeyValue(writableWindowX, window.getX() + 2.0)), //
|
||||
new KeyFrame(new Duration(700), new KeyValue(writableWindowX, window.getX())) //
|
||||
);
|
||||
timeline.play();
|
||||
}
|
||||
|
||||
/* Getter/Setter */
|
||||
|
||||
public Vault getVault() {
|
||||
return vault;
|
||||
}
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
package org.cryptomator.ui.recoverykey;
|
||||
|
||||
import javafx.beans.property.ReadOnlyStringProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@RecoveryKeyScoped
|
||||
public class RecoveryKeyDisplayController implements FxController {
|
||||
|
||||
private final Stage window;
|
||||
private final Vault vault;
|
||||
private final StringProperty recoveryKeyProperty;
|
||||
|
||||
@Inject
|
||||
public RecoveryKeyDisplayController(@RecoveryKeyWindow Stage window, @RecoveryKeyWindow Vault vault, @RecoveryKeyWindow StringProperty recoveryKey) {
|
||||
this.window = window;
|
||||
this.vault = vault;
|
||||
this.recoveryKeyProperty = recoveryKey;
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void close() {
|
||||
window.close();
|
||||
}
|
||||
|
||||
/* Getter/Setter */
|
||||
|
||||
public Vault getVault() {
|
||||
return vault;
|
||||
}
|
||||
|
||||
public ReadOnlyStringProperty recoveryKeyProperty() {
|
||||
return recoveryKeyProperty;
|
||||
}
|
||||
|
||||
public String getRecoveryKey() {
|
||||
return recoveryKeyProperty.get();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package org.cryptomator.ui.recoverykey;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.hash.Hashing;
|
||||
import org.cryptomator.cryptofs.CryptoFileSystemProvider;
|
||||
import org.cryptomator.cryptolib.api.InvalidPassphraseException;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
|
||||
@Singleton
|
||||
public class RecoveryKeyFactory {
|
||||
|
||||
private static final String MASTERKEY_FILENAME = "masterkey.cryptomator"; // TODO: deduplicate constant declared in multiple classes
|
||||
|
||||
private final WordEncoder wordEncoder;
|
||||
|
||||
@Inject
|
||||
public RecoveryKeyFactory(WordEncoder wordEncoder) {
|
||||
this.wordEncoder = wordEncoder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param vaultPath Path to the storage location of a vault
|
||||
* @param password The vault's password
|
||||
* @return The recovery key of the vault at the given path
|
||||
* @throws IOException If the masterkey file could not be read
|
||||
* @throws InvalidPassphraseException If the provided password is wrong
|
||||
* @apiNote This is a long-running operation and should be invoked in a background thread
|
||||
*/
|
||||
public String createRecoveryKey(Path vaultPath, CharSequence password) throws IOException, InvalidPassphraseException {
|
||||
byte[] rawKey = CryptoFileSystemProvider.exportRawKey(vaultPath, MASTERKEY_FILENAME, new byte[0], password);
|
||||
try {
|
||||
return createRecoveryKey(rawKey);
|
||||
} finally {
|
||||
Arrays.fill(rawKey, (byte) 0x00);
|
||||
}
|
||||
}
|
||||
|
||||
// visible for testing
|
||||
String createRecoveryKey(byte[] rawKey) {
|
||||
Preconditions.checkArgument(rawKey.length == 64, "key should be 64 bytes");
|
||||
byte[] paddedKey = Arrays.copyOf(rawKey, 66);
|
||||
try {
|
||||
// copy 16 most significant bits of CRC32(rawKey) to the end of paddedKey:
|
||||
Hashing.crc32().hashBytes(rawKey).writeBytesTo(paddedKey, 64, 2);
|
||||
return wordEncoder.encodePadded(paddedKey);
|
||||
} finally {
|
||||
Arrays.fill(paddedKey, (byte) 0x00);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether a String is a syntactically correct recovery key with a valid checksum
|
||||
* @param recoveryKey A word sequence which might be a recovery key
|
||||
* @return <code>true</code> if this seems to be a legitimate recovery key
|
||||
*/
|
||||
public boolean validateRecoveryKey(String recoveryKey) {
|
||||
final byte[] paddedKey;
|
||||
try {
|
||||
paddedKey = wordEncoder.decode(recoveryKey);
|
||||
} catch (IllegalArgumentException e) {
|
||||
return false;
|
||||
}
|
||||
if (paddedKey.length != 66) {
|
||||
return false;
|
||||
}
|
||||
byte[] rawKey = Arrays.copyOf(paddedKey, 64);
|
||||
byte[] expectedCrc16 = Arrays.copyOfRange(paddedKey, 64, 66);
|
||||
byte[] actualCrc32 = Hashing.crc32().hashBytes(rawKey).asBytes();
|
||||
byte[] actualCrc16 = Arrays.copyOf(actualCrc32, 2);
|
||||
return Arrays.equals(expectedCrc16, actualCrc16);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package org.cryptomator.ui.recoverykey;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.IntoMap;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Provider;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
@Module
|
||||
abstract class RecoveryKeyModule {
|
||||
|
||||
@Provides
|
||||
@RecoveryKeyWindow
|
||||
@RecoveryKeyScoped
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@RecoveryKeyWindow
|
||||
@RecoveryKeyScoped
|
||||
static Stage provideStage(ResourceBundle resourceBundle, @Named("windowIcon") Optional<Image> windowIcon, @Named("keyRecoveryOwner") Stage owner) {
|
||||
Stage stage = new Stage();
|
||||
stage.setTitle(resourceBundle.getString("recoveryKey.title"));
|
||||
stage.setResizable(false);
|
||||
stage.initModality(Modality.WINDOW_MODAL);
|
||||
stage.initOwner(owner);
|
||||
windowIcon.ifPresent(stage.getIcons()::add);
|
||||
return stage;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@RecoveryKeyWindow
|
||||
@RecoveryKeyScoped
|
||||
static StringProperty provideRecoveryKeyProperty() {
|
||||
return new SimpleStringProperty();
|
||||
}
|
||||
|
||||
// ------------------
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.RECOVERYKEY_CREATE)
|
||||
@RecoveryKeyScoped
|
||||
static Scene provideRecoveryKeyCreationScene(@RecoveryKeyWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene("/fxml/recoverykey_create.fxml");
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.RECOVERYKEY_DISPLAY)
|
||||
@RecoveryKeyScoped
|
||||
static Scene provideRecoveryKeyDisplayScene(@RecoveryKeyWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene("/fxml/recoverykey_display.fxml");
|
||||
}
|
||||
|
||||
// ------------------
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(RecoveryKeyCreationController.class)
|
||||
abstract FxController bindRecoveryKeyCreationController(RecoveryKeyCreationController controller);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(RecoveryKeyDisplayController.class)
|
||||
abstract FxController bindRecoveryKeyDisplayController(RecoveryKeyDisplayController controller);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.cryptomator.ui.recoverykey;
|
||||
|
||||
import javax.inject.Scope;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@Scope
|
||||
@Documented
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface RecoveryKeyScoped {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.cryptomator.ui.recoverykey;
|
||||
|
||||
import javax.inject.Qualifier;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
|
||||
@Qualifier
|
||||
@Documented
|
||||
@Retention(RUNTIME)
|
||||
@interface RecoveryKeyWindow {
|
||||
|
||||
}
|
||||
+7
-2
@@ -1,8 +1,10 @@
|
||||
package org.cryptomator.ui.keyrecovery;
|
||||
package org.cryptomator.ui.recoverykey;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.base.Splitter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@@ -14,16 +16,19 @@ import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
@Singleton
|
||||
class WordEncoder {
|
||||
|
||||
private static final String DEFAULT_WORD_FILE = "/i18n/4096words_en.txt";
|
||||
private static final int WORD_COUNT = 4096;
|
||||
private static final char DELIMITER = ' ';
|
||||
|
||||
private final List<String> words;
|
||||
private final Map<String, Integer> indices;
|
||||
|
||||
@Inject
|
||||
public WordEncoder() {
|
||||
this("/i18n/4096words_en.txt");
|
||||
this(DEFAULT_WORD_FILE);
|
||||
}
|
||||
|
||||
public WordEncoder(String wordFile) {
|
||||
@@ -11,6 +11,7 @@ import javafx.scene.input.KeyCodeCombination;
|
||||
import javafx.scene.input.KeyCombination;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
@@ -30,8 +31,8 @@ abstract class RemoveVaultModule {
|
||||
@Provides
|
||||
@RemoveVaultWindow
|
||||
@RemoveVaultScoped
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, resourceBundle);
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@@ -50,13 +51,8 @@ abstract class RemoveVaultModule {
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.REMOVE_VAULT)
|
||||
@RemoveVaultScoped
|
||||
static Scene provideRemoveVaultScene(@RemoveVaultWindow FXMLLoaderFactory fxmlLoaders, @RemoveVaultWindow Stage window) {
|
||||
Scene scene = fxmlLoaders.createScene("/fxml/remove_vault.fxml");
|
||||
|
||||
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
|
||||
scene.getAccelerators().put(cmdW, window::close);
|
||||
|
||||
return scene;
|
||||
static Scene provideRemoveVaultScene(@RemoveVaultWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene("/fxml/remove_vault.fxml");
|
||||
}
|
||||
|
||||
// ------------------
|
||||
|
||||
@@ -6,11 +6,9 @@ import dagger.Provides;
|
||||
import dagger.multibindings.IntoMap;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.KeyCodeCombination;
|
||||
import javafx.scene.input.KeyCombination;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
@@ -24,14 +22,14 @@ import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
@Module(subcomponents={ForgetPasswordComponent.class})
|
||||
@Module(subcomponents = {ForgetPasswordComponent.class})
|
||||
abstract class UnlockModule {
|
||||
|
||||
@Provides
|
||||
@UnlockWindow
|
||||
@UnlockScoped
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, resourceBundle);
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@@ -49,25 +47,15 @@ abstract class UnlockModule {
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.UNLOCK)
|
||||
@UnlockScoped
|
||||
static Scene provideUnlockScene(@UnlockWindow FXMLLoaderFactory fxmlLoaders, @UnlockWindow Stage window) {
|
||||
Scene scene = fxmlLoaders.createScene("/fxml/unlock2.fxml"); // TODO rename fxml file
|
||||
|
||||
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
|
||||
scene.getAccelerators().put(cmdW, window::close);
|
||||
|
||||
return scene;
|
||||
static Scene provideUnlockScene(@UnlockWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene("/fxml/unlock.fxml");
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.UNLOCK_SUCCESS)
|
||||
@UnlockScoped
|
||||
static Scene provideUnlockSuccessScene(@UnlockWindow FXMLLoaderFactory fxmlLoaders, @UnlockWindow Stage window) {
|
||||
Scene scene = fxmlLoaders.createScene("/fxml/unlock_success.fxml");
|
||||
|
||||
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
|
||||
scene.getAccelerators().put(cmdW, window::close);
|
||||
|
||||
return scene;
|
||||
static Scene provideUnlockSuccessScene(@UnlockWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene("/fxml/unlock_success.fxml");
|
||||
}
|
||||
|
||||
|
||||
|
||||
+9
-1
@@ -5,6 +5,7 @@ import javafx.stage.Stage;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.ui.changepassword.ChangePasswordComponent;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.recoverykey.RecoveryKeyComponent;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@@ -14,12 +15,14 @@ public class GeneralVaultOptionsController implements FxController {
|
||||
private final Vault vault;
|
||||
private final Stage window;
|
||||
private final ChangePasswordComponent.Builder changePasswordWindow;
|
||||
private final RecoveryKeyComponent.Builder recoveryKeyWindow;
|
||||
|
||||
@Inject
|
||||
GeneralVaultOptionsController(@VaultOptionsWindow Vault vault, @VaultOptionsWindow Stage window, ChangePasswordComponent.Builder changePasswordWindow) {
|
||||
GeneralVaultOptionsController(@VaultOptionsWindow Vault vault, @VaultOptionsWindow Stage window, ChangePasswordComponent.Builder changePasswordWindow, RecoveryKeyComponent.Builder recoveryKeyWindow) {
|
||||
this.vault = vault;
|
||||
this.window = window;
|
||||
this.changePasswordWindow = changePasswordWindow;
|
||||
this.recoveryKeyWindow = recoveryKeyWindow;
|
||||
}
|
||||
|
||||
@FXML
|
||||
@@ -27,4 +30,9 @@ public class GeneralVaultOptionsController implements FxController {
|
||||
changePasswordWindow.vault(vault).owner(window).build().showChangePasswordWindow();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void showRecoveryKey() {
|
||||
recoveryKeyWindow.vault(vault).owner(window).build().showRecoveryKeyCreationWindow();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<String> 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<String> {
|
||||
|
||||
private final Set<String> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,20 +6,18 @@ import dagger.Provides;
|
||||
import dagger.multibindings.IntoMap;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.KeyCodeCombination;
|
||||
import javafx.scene.input.KeyCombination;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.stage.StageStyle;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.ui.changepassword.ChangePasswordComponent;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
import org.cryptomator.ui.mainwindow.MainWindow;
|
||||
import org.cryptomator.ui.recoverykey.RecoveryKeyComponent;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Provider;
|
||||
@@ -27,14 +25,14 @@ import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
@Module(subcomponents = {ChangePasswordComponent.class})
|
||||
@Module(subcomponents = {ChangePasswordComponent.class, RecoveryKeyComponent.class})
|
||||
abstract class VaultOptionsModule {
|
||||
|
||||
@Provides
|
||||
@VaultOptionsWindow
|
||||
@VaultOptionsScoped
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, resourceBundle);
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@@ -53,13 +51,8 @@ abstract class VaultOptionsModule {
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.VAULT_OPTIONS)
|
||||
@VaultOptionsScoped
|
||||
static Scene provideVaultOptionsScene(@VaultOptionsWindow FXMLLoaderFactory fxmlLoaders, @VaultOptionsWindow Stage window) {
|
||||
Scene scene = fxmlLoaders.createScene("/fxml/vault_options.fxml");
|
||||
|
||||
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
|
||||
scene.getAccelerators().put(cmdW, window::close);
|
||||
|
||||
return scene;
|
||||
static Scene provideVaultOptionsScene(@VaultOptionsWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene("/fxml/vault_options.fxml");
|
||||
}
|
||||
|
||||
// ------------------
|
||||
|
||||
@@ -6,11 +6,9 @@ import dagger.Provides;
|
||||
import dagger.multibindings.IntoMap;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.KeyCodeCombination;
|
||||
import javafx.scene.input.KeyCombination;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
@@ -29,8 +27,8 @@ abstract class WrongFileAlertModule {
|
||||
@Provides
|
||||
@WrongFileAlertWindow
|
||||
@WrongFileAlertScoped
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, resourceBundle);
|
||||
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@@ -48,13 +46,8 @@ abstract class WrongFileAlertModule {
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.WRONGFILEALERT)
|
||||
@WrongFileAlertScoped
|
||||
static Scene provideWrongFileAlertScene(@WrongFileAlertWindow FXMLLoaderFactory fxmlLoaders, @WrongFileAlertWindow Stage window) {
|
||||
Scene scene = fxmlLoaders.createScene("/fxml/wrongfilealert.fxml"); // TODO rename fxml file
|
||||
|
||||
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
|
||||
scene.getAccelerators().put(cmdW, window::close);
|
||||
|
||||
return scene;
|
||||
static Scene provideWrongFileAlertScene(@WrongFileAlertWindow FXMLLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene("/fxml/wrongfilealert.fxml");
|
||||
}
|
||||
|
||||
// ------------------
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
apple.applescript.AppleScriptEngineFactory
|
||||
@@ -16,6 +16,10 @@
|
||||
src: url('opensans-bold.ttf');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
src: url('dosis-bold.ttf');
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* Root Styling & Colors *
|
||||
@@ -76,6 +80,7 @@
|
||||
INDICATOR_BG: RED_5;
|
||||
PROGRESS_INDICATOR_BEGIN: GRAY_7;
|
||||
PROGRESS_INDICATOR_END: GRAY_5;
|
||||
PROGRESS_BAR_BG: GRAY_2;
|
||||
PASSWORD_STRENGTH_INDICATOR_BG: GRAY_3;
|
||||
PASSWORD_STRENGTH_INDICATOR_BG_STRENGTH_0: RED_5;
|
||||
PASSWORD_STRENGTH_INDICATOR_BG_STRENGTH_1: ORANGE_5;
|
||||
@@ -460,6 +465,42 @@
|
||||
-fx-padding: 4px 6px 4px 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* Text Areas *
|
||||
* *
|
||||
******************************************************************************/
|
||||
|
||||
.text-area {
|
||||
-fx-cursor: default;
|
||||
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_NORMAL;
|
||||
-fx-background-insets: 0, 1px;
|
||||
-fx-background-radius: 4px;
|
||||
-fx-padding: 0;
|
||||
}
|
||||
|
||||
.text-input:focused {
|
||||
-fx-background-color: CONTROL_BORDER_FOCUSED, CONTROL_BG_NORMAL;
|
||||
}
|
||||
|
||||
.text-input:disabled {
|
||||
-fx-text-fill: TEXT_FILL_SECONDARY;
|
||||
-fx-background-color: CONTROL_BORDER_DISABLED, CONTROL_BG_DISABLED;
|
||||
}
|
||||
|
||||
.text-area > .scroll-pane > .scroll-bar {
|
||||
-fx-padding: 2px;
|
||||
}
|
||||
|
||||
.text-area .content {
|
||||
-fx-padding: 0.2em 0.5em 0.2em 0.5em;
|
||||
-fx-cursor: text;
|
||||
-fx-text-fill: TEXT_FILL;
|
||||
-fx-highlight-fill: PRIMARY_BG;
|
||||
-fx-prompt-text-fill: TEXT_FILL_SECONDARY;
|
||||
-fx-background-color: null;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* Buttons *
|
||||
@@ -776,3 +817,31 @@
|
||||
.progress-indicator:indeterminate .segment11 {
|
||||
-fx-shape:"m 14.321262,6.5816808 c -0.824944,0.3797564 -0.10368,1.8484772 0.718513,1.3544717 L 18.786514,5.9486042 C 19.644992,5.4932031 18.92648,4.1387308 18.068001,4.5941315 z";
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* ProgressBar *
|
||||
* *
|
||||
******************************************************************************/
|
||||
|
||||
.progress-bar {
|
||||
-fx-indeterminate-bar-length: 100;
|
||||
-fx-indeterminate-bar-escape: true;
|
||||
-fx-indeterminate-bar-flip: true;
|
||||
-fx-indeterminate-bar-animation-time: 2;
|
||||
}
|
||||
|
||||
.progress-bar > .bar {
|
||||
-fx-background-color: CONTROL_PRIMARY_BG_NORMAL;
|
||||
-fx-background-radius: 4px;
|
||||
-fx-padding: 0.5em;
|
||||
}
|
||||
|
||||
.progress-bar:indeterminate > .bar {
|
||||
-fx-background-color: linear-gradient(to left, transparent, CONTROL_PRIMARY_BG_NORMAL);
|
||||
}
|
||||
|
||||
.progress-bar > .track {
|
||||
-fx-background-color: PROGRESS_BAR_BG;
|
||||
-fx-background-radius: 4px;
|
||||
}
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
src: url('opensans-bold.ttf');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
src: url('dosis-bold.ttf');
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* Root Styling & Colors *
|
||||
@@ -76,6 +80,7 @@
|
||||
INDICATOR_BG: RED_5;
|
||||
PROGRESS_INDICATOR_BEGIN: GRAY_2;
|
||||
PROGRESS_INDICATOR_END: GRAY_4;
|
||||
PROGRESS_BAR_BG: GRAY_8;
|
||||
PASSWORD_STRENGTH_INDICATOR_BG: GRAY_5;
|
||||
PASSWORD_STRENGTH_INDICATOR_BG_STRENGTH_0: RED_5;
|
||||
PASSWORD_STRENGTH_INDICATOR_BG_STRENGTH_1: ORANGE_5;
|
||||
@@ -460,6 +465,42 @@
|
||||
-fx-padding: 4px 6px 4px 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* Text Areas *
|
||||
* *
|
||||
******************************************************************************/
|
||||
|
||||
.text-area {
|
||||
-fx-cursor: default;
|
||||
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_NORMAL;
|
||||
-fx-background-insets: 0, 1px;
|
||||
-fx-background-radius: 4px;
|
||||
-fx-padding: 0;
|
||||
}
|
||||
|
||||
.text-input:focused {
|
||||
-fx-background-color: CONTROL_BORDER_FOCUSED, CONTROL_BG_NORMAL;
|
||||
}
|
||||
|
||||
.text-input:disabled {
|
||||
-fx-text-fill: TEXT_FILL_SECONDARY;
|
||||
-fx-background-color: CONTROL_BORDER_DISABLED, CONTROL_BG_DISABLED;
|
||||
}
|
||||
|
||||
.text-area > .scroll-pane > .scroll-bar {
|
||||
-fx-padding: 2px;
|
||||
}
|
||||
|
||||
.text-area .content {
|
||||
-fx-padding: 0.2em 0.5em 0.2em 0.5em;
|
||||
-fx-cursor: text;
|
||||
-fx-text-fill: TEXT_FILL;
|
||||
-fx-highlight-fill: PRIMARY_BG;
|
||||
-fx-prompt-text-fill: TEXT_FILL_SECONDARY;
|
||||
-fx-background-color: null;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* Buttons *
|
||||
@@ -776,3 +817,31 @@
|
||||
.progress-indicator:indeterminate .segment11 {
|
||||
-fx-shape:"m 14.321262,6.5816808 c -0.824944,0.3797564 -0.10368,1.8484772 0.718513,1.3544717 L 18.786514,5.9486042 C 19.644992,5.4932031 18.92648,4.1387308 18.068001,4.5941315 z";
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* ProgressBar *
|
||||
* *
|
||||
******************************************************************************/
|
||||
|
||||
.progress-bar {
|
||||
-fx-indeterminate-bar-length: 100;
|
||||
-fx-indeterminate-bar-escape: true;
|
||||
-fx-indeterminate-bar-flip: true;
|
||||
-fx-indeterminate-bar-animation-time: 2;
|
||||
}
|
||||
|
||||
.progress-bar > .bar {
|
||||
-fx-background-color: CONTROL_PRIMARY_BG_NORMAL;
|
||||
-fx-background-radius: 4px;
|
||||
-fx-padding: 0.5em;
|
||||
}
|
||||
|
||||
.progress-bar:indeterminate > .bar {
|
||||
-fx-background-color: linear-gradient(to left, transparent, CONTROL_PRIMARY_BG_NORMAL);
|
||||
}
|
||||
|
||||
.progress-bar > .track {
|
||||
-fx-background-color: PROGRESS_BAR_BG;
|
||||
-fx-background-radius: 4px;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.ButtonBar?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.StackPane?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.shape.Circle?>
|
||||
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
|
||||
<?import org.cryptomator.ui.controls.FormattedLabel?>
|
||||
<VBox xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="org.cryptomator.ui.addvaultwizard.AddVaultFailureExisitingController"
|
||||
minWidth="400"
|
||||
maxWidth="400"
|
||||
minHeight="145"
|
||||
spacing="12">
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="12"/>
|
||||
</padding>
|
||||
<children>
|
||||
<HBox spacing="12" alignment="CENTER_LEFT" VBox.vgrow="ALWAYS">
|
||||
<StackPane alignment="CENTER" HBox.hgrow="NEVER">
|
||||
<Circle styleClass="glyph-icon-primary" radius="24"/>
|
||||
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="EXCLAMATION" glyphSize="24"/>
|
||||
</StackPane>
|
||||
<FormattedLabel format="%addvaultwizard.existing.error" arg1="${controller.vaultName}" wrapText="true"/>
|
||||
</HBox>
|
||||
|
||||
<VBox alignment="BOTTOM_CENTER" VBox.vgrow="ALWAYS">
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="B+C">
|
||||
<buttons>
|
||||
<Button text="%generic.button.back" ButtonBar.buttonData="BACK_PREVIOUS" onAction="#back"/>
|
||||
<Button text="%generic.button.cancel" ButtonBar.buttonData="CANCEL_CLOSE" defaultButton="true" cancelButton="true" onAction="#close"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
</VBox>
|
||||
</children>
|
||||
</VBox>
|
||||
|
||||
@@ -10,9 +10,8 @@
|
||||
<?import javafx.scene.layout.Region?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
|
||||
<?import org.cryptomator.ui.controls.PasswordStrengthIndicator?>
|
||||
<?import org.cryptomator.ui.controls.SecurePasswordField?>
|
||||
<?import org.cryptomator.ui.controls.NiceSecurePasswordField?>
|
||||
<?import org.cryptomator.ui.controls.PasswordStrengthIndicator?>
|
||||
<VBox xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="org.cryptomator.ui.addvaultwizard.CreateNewVaultPasswordController"
|
||||
@@ -41,7 +40,6 @@
|
||||
<Label fx:id="passwordMatchLabel" styleClass="label-secondary" labelFor="$reenterField"/>
|
||||
</HBox>
|
||||
</VBox>
|
||||
<CheckBox fx:id="finalConfirmationCheckbox" text="%addvaultwizard.new.finalConfirmation" wrapText="true"/>
|
||||
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.ButtonBar?>
|
||||
<?import javafx.scene.control.CheckBox?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.control.TextArea?>
|
||||
<?import javafx.scene.layout.Region?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<VBox xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="org.cryptomator.ui.addvaultwizard.CreateNewVaultRecoveryKeyController"
|
||||
prefWidth="400"
|
||||
prefHeight="400"
|
||||
spacing="12"
|
||||
alignment="CENTER_LEFT">
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="24"/>
|
||||
</padding>
|
||||
<children>
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
|
||||
<Label text="%addvaultwizard.new.recoveryKeyInstruction" wrapText="true"/>
|
||||
|
||||
<TextArea editable="false" text="${controller.recoveryKey}" wrapText="true"/>
|
||||
|
||||
<CheckBox fx:id="finalConfirmationCheckbox" text="%addvaultwizard.new.recoveryKeySavedCheckbox" wrapText="true"/>
|
||||
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="+X">
|
||||
<buttons>
|
||||
<Button text="%generic.button.next" ButtonBar.buttonData="NEXT_FORWARD" onAction="#next" defaultButton="true" disable="${!finalConfirmationCheckbox.selected}"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
</children>
|
||||
</VBox>
|
||||
@@ -3,6 +3,7 @@
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.ButtonBar?>
|
||||
<?import javafx.scene.control.ProgressBar?>
|
||||
<?import javafx.scene.control.ProgressIndicator?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import org.cryptomator.ui.controls.FormattedLabel?>
|
||||
@@ -23,6 +24,8 @@
|
||||
<NiceSecurePasswordField fx:id="passwordField"/>
|
||||
</VBox>
|
||||
|
||||
<ProgressBar progress="${controller.migrationProgress}" prefWidth="Infinity" visible="${controller.vault.processing}"/>
|
||||
|
||||
<VBox alignment="BOTTOM_CENTER" VBox.vgrow="ALWAYS">
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="B+X">
|
||||
<buttons>
|
||||
|
||||
@@ -6,10 +6,15 @@
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.control.RadioButton?>
|
||||
<?import javafx.scene.control.ToggleGroup?>
|
||||
<VBox xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="org.cryptomator.ui.preferences.GeneralPreferencesController"
|
||||
spacing="6">
|
||||
<fx:define>
|
||||
<ToggleGroup fx:id="nodeOrientation"/>
|
||||
</fx:define>
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="12"/>
|
||||
</padding>
|
||||
@@ -18,6 +23,12 @@
|
||||
<Label text="%preferences.general.theme"/>
|
||||
<ChoiceBox fx:id="themeChoiceBox"/>
|
||||
</HBox>
|
||||
|
||||
<HBox spacing="6" alignment="CENTER_LEFT">
|
||||
<Label text="Interface Orientation" HBox.hgrow="NEVER"/>
|
||||
<RadioButton fx:id="nodeOrientationLtr" text="Left to Right" alignment="CENTER_LEFT" toggleGroup="${nodeOrientation}"/>
|
||||
<RadioButton fx:id="nodeOrientationRtl" text="Right to Left" alignment="CENTER_RIGHT" toggleGroup="${nodeOrientation}"/>
|
||||
</HBox>
|
||||
|
||||
<CheckBox fx:id="startHiddenCheckbox" text="%preferences.general.startHidden"/>
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.ButtonBar?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import org.cryptomator.ui.controls.FormattedLabel?>
|
||||
<?import org.cryptomator.ui.controls.NiceSecurePasswordField?>
|
||||
<VBox xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="org.cryptomator.ui.recoverykey.RecoveryKeyCreationController"
|
||||
minWidth="400"
|
||||
maxWidth="400"
|
||||
minHeight="145"
|
||||
spacing="12"
|
||||
alignment="TOP_CENTER">
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="12"/>
|
||||
</padding>
|
||||
<children>
|
||||
<VBox spacing="6">
|
||||
<FormattedLabel format="%recoveryKey.enterPassword.prompt" arg1="${controller.vault.displayableName}" wrapText="true"/>
|
||||
<NiceSecurePasswordField fx:id="passwordField" HBox.hgrow="ALWAYS"/>
|
||||
</VBox>
|
||||
|
||||
<VBox alignment="BOTTOM_CENTER" VBox.vgrow="ALWAYS">
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="C+X">
|
||||
<buttons>
|
||||
<Button text="%generic.button.cancel" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#close" />
|
||||
<Button text="%generic.button.next" ButtonBar.buttonData="NEXT_FORWARD" defaultButton="true" onAction="#createRecoveryKey" disable="${passwordField.text.empty}"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
</VBox>
|
||||
</children>
|
||||
</VBox>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.ButtonBar?>
|
||||
<?import javafx.scene.control.TextArea?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.StackPane?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.shape.Circle?>
|
||||
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
|
||||
<?import org.cryptomator.ui.controls.FormattedLabel?>
|
||||
<VBox xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="org.cryptomator.ui.recoverykey.RecoveryKeyDisplayController"
|
||||
minWidth="400"
|
||||
maxWidth="400"
|
||||
minHeight="145"
|
||||
maxHeight="180"
|
||||
spacing="12"
|
||||
alignment="TOP_CENTER">
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="12"/>
|
||||
</padding>
|
||||
<children>
|
||||
<HBox spacing="12" alignment="CENTER_LEFT" VBox.vgrow="ALWAYS">
|
||||
<StackPane alignment="CENTER" HBox.hgrow="NEVER">
|
||||
<Circle styleClass="glyph-icon-primary" radius="24"/>
|
||||
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="CHECK" glyphSize="24"/>
|
||||
</StackPane>
|
||||
|
||||
<VBox spacing="6" HBox.hgrow="ALWAYS">
|
||||
<FormattedLabel format="%recoveryKey.display.message" arg1="${controller.vault.displayableName}" wrapText="true" VBox.vgrow="NEVER"/>
|
||||
<TextArea editable="false" text="${controller.recoveryKey}" wrapText="true" VBox.vgrow="ALWAYS"/>
|
||||
</VBox>
|
||||
</HBox>
|
||||
|
||||
<VBox alignment="BOTTOM_CENTER" VBox.vgrow="ALWAYS">
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="+C">
|
||||
<buttons>
|
||||
<Button text="%generic.button.done" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#close"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
</VBox>
|
||||
</children>
|
||||
</VBox>
|
||||
@@ -12,9 +12,8 @@
|
||||
<Insets topRightBottomLeft="24"/>
|
||||
</padding>
|
||||
<children>
|
||||
<!-- TODO -->
|
||||
<Label text="Migration disabled during Alpha"/>
|
||||
<Button styleClass="button-large" text="TODO Upgrade Vault" minWidth="120" onAction="#showVaultMigrator" disable="true">
|
||||
<Label text="%main.vaultDetail.migratePrompt" wrapText="true"/>
|
||||
<Button styleClass="button-large" text="%main.vaultDetail.migrateButton" minWidth="120" onAction="#showVaultMigrator">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="FILE_IMPORT" glyphSize="15"/>
|
||||
</graphic>
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
<Arc styleClass="onboarding-overlay-arc" AnchorPane.bottomAnchor="5" type="OPEN" centerX="-10" centerY="0" radiusY="100" radiusX="60" startAngle="0" length="-60" strokeWidth="1"/>
|
||||
</AnchorPane>
|
||||
</StackPane>
|
||||
<Button styleClass="toolbar-button" text="%main.vaultlist.addVaultBtn" onAction="#didClickAddVault" alignment="BASELINE_CENTER" maxWidth="Infinity" mnemonicParsing="false">
|
||||
<Button styleClass="toolbar-button" text="%main.vaultlist.addVaultBtn" onAction="#didClickAddVault" alignment="BASELINE_CENTER" maxWidth="Infinity">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="PLUS"/>
|
||||
</graphic>
|
||||
|
||||
@@ -12,5 +12,6 @@
|
||||
</padding>
|
||||
<children>
|
||||
<Button text="%vaultOptions.general.changePasswordBtn" onAction="#changePassword"/>
|
||||
<Button text="%vaultOptions.general.showRecoveryKeyBtn" onAction="#showRecoveryKey"/>
|
||||
</children>
|
||||
</VBox>
|
||||
|
||||
@@ -1,16 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.CheckBox?>
|
||||
<?import javafx.scene.control.ChoiceBox?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.control.RadioButton?>
|
||||
<?import javafx.scene.control.TextField?>
|
||||
<?import javafx.scene.control.ToggleGroup?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.text.Text?>
|
||||
<?import org.cryptomator.ui.controls.AlphanumericTextField?>
|
||||
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
|
||||
<VBox xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="org.cryptomator.ui.vaultoptions.MountOptionsController"
|
||||
spacing="6">
|
||||
<fx:define>
|
||||
<ToggleGroup fx:id="mountPoint"/>
|
||||
</fx:define>
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="12"/>
|
||||
</padding>
|
||||
@@ -32,6 +41,26 @@
|
||||
</children>
|
||||
</HBox>
|
||||
|
||||
<!-- TODO windows drive letter, see https://github.com/cryptomator/cryptomator/blob/1.4.16/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java#L283-L298 -->
|
||||
<Text text="TODO Mount Point"/>
|
||||
<RadioButton toggleGroup="${mountPoint}" fx:id="mountPointAuto" text="TODO Automatically pick a suitable location"/>
|
||||
<HBox spacing="6" visible="${controller.osIsWindows}" managed="${controller.osIsWindows}">
|
||||
<RadioButton toggleGroup="${mountPoint}" fx:id="mountPointWinDriveLetter" text="TODO Choose specific drive letter"/>
|
||||
<ChoiceBox fx:id="driveLetterSelection" disable="${!mountPointWinDriveLetter.selected}"/>
|
||||
</HBox>
|
||||
<RadioButton toggleGroup="${mountPoint}" fx:id="mountPointCustomDir" text="TODO Choose empty directory"/>
|
||||
<HBox visible="${mountPointCustomDir.selected}">
|
||||
<padding>
|
||||
<Insets left="24"/>
|
||||
</padding>
|
||||
<children>
|
||||
<TextField text="${controller.customMountPath}" HBox.hgrow="ALWAYS" maxWidth="Infinity" disable="true"/>
|
||||
<Button text="TODO change" onAction="#chooseCustomMountPoint" contentDisplay="LEFT">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="FOLDER_OPEN" glyphSize="15"/>
|
||||
</graphic>
|
||||
</Button>
|
||||
</children>
|
||||
</HBox>
|
||||
</children>
|
||||
|
||||
</VBox>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,6 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
additionalStyleSheets=
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
generic.button.apply=Apply
|
||||
@@ -21,8 +24,10 @@ addvaultwizard.title=Add Vault
|
||||
addvaultwizard.welcome.newButton=Create New Vault
|
||||
addvaultwizard.welcome.existingButton=Open Existing Vault
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Choose a name for the vault
|
||||
addvaultwizard.new.namePrompt=Vault Name
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Where should Cryptomator store the encrypted files of your vault?
|
||||
addvaultwizard.new.locationLabel=Storage location
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
@@ -32,11 +37,16 @@ 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 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.finalConfirmation=I understand that I will not be able to recover my data if I forget my password
|
||||
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
|
||||
addvault.new.readme.storageLocation.fileName=WHAT IS THIS DIRECTORY.rtf
|
||||
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ VAULT FILES ⚠️
|
||||
addvault.new.readme.storageLocation.2=This is your vault's storage location. {\\b DO NOT} alter any files within this directory.
|
||||
@@ -50,6 +60,7 @@ addvault.new.readme.accessLocation.3=Feel free to remove this file.
|
||||
addvaultwizard.existing.instruction=Choose the "masterkey.cryptomator" file of your existing vault.
|
||||
addvaultwizard.existing.chooseBtn=Choose…
|
||||
addvaultwizard.existing.filePickerTitle=Select Masterkey File
|
||||
addvaultwizard.existing.error=Unable to add vault "%s": Not a valid vault. Please look into the log for more information.
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions=Added vault "%s".\nYou need to unlock this vault to access or add contents. Alternatively you can unlock it at any later point in time.
|
||||
addvaultwizard.success.unlockNow=Unlock Now
|
||||
@@ -121,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
|
||||
@@ -133,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
|
||||
@@ -140,12 +156,22 @@ 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
|
||||
recoveryKey.enterPassword.prompt=Enter your password to show the recovery key for "%s":
|
||||
recoveryKey.display.message=Recovery Key for "%s":
|
||||
|
||||
# Misc
|
||||
passwordStrength.messageLabel.0=Very weak
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,180 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
generic.button.apply=Použít
|
||||
generic.button.back=Zpět
|
||||
generic.button.cancel=Zrušit
|
||||
generic.button.change=Změnit
|
||||
generic.button.done=Hotovo
|
||||
generic.button.next=Další
|
||||
|
||||
# Tray Menu
|
||||
traymenu.showMainWindow=Zobrazit
|
||||
traymenu.showPreferencesWindow=Nastavení
|
||||
traymenu.quitApplication=Ukončit
|
||||
traymenu.vault.unlock=Odemknout
|
||||
traymenu.vault.lock=Zamknout
|
||||
traymenu.vault.reveal=Zobrazit
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Přidat trezor
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Vytvořit nový trezor
|
||||
addvaultwizard.welcome.existingButton=Otevřít existující trezor
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Zvolte jméno trezoru
|
||||
addvaultwizard.new.namePrompt=Jméno trezoru
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Kde by měl Cryptomator ukládat šifrované soubory vašeho trezoru?
|
||||
addvaultwizard.new.locationLabel=Umístění úložiště
|
||||
addvaultwizard.new.locationPrompt=...
|
||||
addvaultwizard.new.directoryPickerLabel=Vlastní umístění
|
||||
addvaultwizard.new.directoryPickerButton=Vybrat...
|
||||
addvaultwizard.new.directoryPickerTitle=Vyberte adresář
|
||||
addvaultwizard.new.enterPassword=Zadejte heslo pro trezor
|
||||
addvaultwizard.new.fileAlreadyExists=Trezor nemůže být vytvořen na tomto umístění, protože stejný objekt již existuje.
|
||||
addvaultwizard.new.invalidName=Neplatné jméno trezoru. Prosím změňte jméno adresáře.
|
||||
### Password
|
||||
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 ⚠️
|
||||
addvault.new.readme.storageLocation.2=Toto je umístění vašeho trezoru. NEMĚŇTE žádné soubory uvnitř adresáře.
|
||||
addvault.new.readme.storageLocation.3=Pokud chcete zašifrovat soubory pomocí Cryptomatoru, odemkněte trezor a použijte přidělený disk.
|
||||
addvault.new.readme.storageLocation.4=Pokud potřebujete pomoc, zkuste %s.
|
||||
addvault.new.readme.accessLocation.fileName=Vítej ve svém novém trezoru.rtf
|
||||
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ ZAŠIFROVANÁ JEDNOTKA 🔐️
|
||||
addvault.new.readme.accessLocation.2=Toto je přístup k vašemu trezoru. Všechny soubory přidané do této jednotky budou šifrovány pomocí Cryptomatoru. Pro přístup k této jednotce kdykoliv v budoucnu ji jednoduše opět odemkněte pomocí Cryptomatoru.
|
||||
addvault.new.readme.accessLocation.3=Tento soubor můžete odstranit.
|
||||
## Existing
|
||||
addvaultwizard.existing.instruction=Vyberte soubor "masterkey.cryptomator" z vašeho stávajícího trezoru.
|
||||
addvaultwizard.existing.chooseBtn=Vybrat...
|
||||
addvaultwizard.existing.filePickerTitle=Vyberte Masterkey soubor
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions=Vytvořen trezor "%s".\nNejprve odemkněte tento trezor, pak do něj můžete přidat svůj obsah. Nebo jej můžete odemknout kdykoliv v budoucnu.
|
||||
addvaultwizard.success.unlockNow=Odemknout nyní
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=Odstranit trezor
|
||||
removeVault.information=Toto jen umožní Cryptomatoru zapomenout tento trezor. Později jej můžete opět přidat. Žádné šifrované soubory nebudou z vašeho disku smazány.
|
||||
removeVault.confirmBtn=Odstranit trezor
|
||||
|
||||
# Change Password
|
||||
changepassword.title=Změnit heslo
|
||||
changepassword.enterOldPassword=Zadejte současné heslo pro "%s"
|
||||
changepassword.enterNewPassword=Zadejte nové heslo pro váš trezor
|
||||
changepassword.reenterNewPassword=Potvrď nové heslo
|
||||
changepassword.passwordsMatch=Hesla se shodují!
|
||||
changepassword.passwordsDoNotMatch=Hesla se neshodují
|
||||
changepassword.finalConfirmation=UPOZORNĚNÍ: Pokud heslo zapomenete/ztratíte, nenávratně příjdete o přístup ke svému obsahu!
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=Zapomenout heslo
|
||||
forgetPassword.information=Toto smaže uložené heslo pro tento trezor.
|
||||
forgetPassword.confirmBtn=Zapomenout heslo
|
||||
|
||||
# Unlock
|
||||
unlock.title=Odemknout trezor
|
||||
unlock.passwordPrompt=Zadejte heslo pro "%s":
|
||||
unlock.savePassword=Uložit heslo
|
||||
unlock.unlockBtn=Odemknout
|
||||
## Success
|
||||
unlock.success.message=Trezor "%s" byl úspěšně odemčen a nyní je dostupný.
|
||||
unlock.success.revealBtn=Zobrazit trezor
|
||||
|
||||
# Migration
|
||||
migration.title=Upgrade trezoru
|
||||
## Start
|
||||
migration.start.prompt=Váš trezor "%s" musí být aktualizován na nový formát.\nNež začnete, ujistěte se, že není žádná probíhající či čekající synchronizace na tomto trezoru.
|
||||
migration.start.confirm=Ano, můj trezor je plně synchronizován.
|
||||
## Run
|
||||
migration.run.enterPassword=Zadejte heslo pro "%s"
|
||||
migration.run.startMigrationBtn=Migrovat trezor
|
||||
## Sucess
|
||||
migration.success.nextStepsInstructions=Migrace "%s" byla úspěšná.\nNyní můžete svůj trezor odemknout.
|
||||
migration.success.unlockNow=Odemknout nyní
|
||||
|
||||
# Preferences
|
||||
preferences.title=Nastavení
|
||||
## General
|
||||
preferences.general=Obecné
|
||||
preferences.general.theme=Vzhled
|
||||
preferences.general.startHidden=Skrýt okno Cryptomatoru při spuštění
|
||||
preferences.general.debugLogging=Ladicí režim
|
||||
## Volume
|
||||
preferences.volume=Virtuální jednotky
|
||||
preferences.volume.type=Typ připojení
|
||||
preferences.volume.webdav.port=WebDAV Port
|
||||
preferences.volume.webdav.scheme=WebDAV schéma
|
||||
## Updates
|
||||
preferences.updates=Aktualizace
|
||||
preferences.updates.currentVersion=Aktuální verze: %s
|
||||
preferences.updates.autoUpdateCheck=Automaticky kontrolovat aktualizace
|
||||
preferences.updates.checkNowBtn=Zkontrolovat nyní
|
||||
preferences.updates.updateAvailable=Dostupná nová verze %s.
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Zavřít
|
||||
main.preferencesBtn.tooltip=Nastavení
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Klikněte sem pro přidání nového trezoru
|
||||
main.vaultlist.contextMenu.remove=Odstranit trezor
|
||||
main.vaultlist.addVaultBtn=Přidat trezor
|
||||
## Vault Detail
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=UZAMKNUTO
|
||||
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
|
||||
main.vaultDetail.bytesPerSecondRead=přečteno:
|
||||
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
|
||||
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é
|
||||
passwordStrength.messageLabel.1=slabé
|
||||
passwordStrength.messageLabel.2=dostatečné
|
||||
passwordStrength.messageLabel.3=silné
|
||||
passwordStrength.messageLabel.4=velmi silné
|
||||
|
||||
# Quit
|
||||
quit.prompt=Uzavřít aplikaci? Máte nezamčené trezory.
|
||||
quit.lockAndQuit=Uzamknout a zavřít
|
||||
@@ -1,3 +1,5 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
generic.button.apply=Übernehmen
|
||||
@@ -21,69 +23,94 @@ addvaultwizard.title=Tresor hinzufügen
|
||||
addvaultwizard.welcome.newButton=Neuen Tresor erstellen
|
||||
addvaultwizard.welcome.existingButton=Existierenden Tresor öffnen
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Wähle einen Namen für den Tresor
|
||||
addvaultwizard.new.namePrompt=Tresorname
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Wo soll Cryptomator die verschlüsselten Daten deines Tresors ablegen?
|
||||
addvaultwizard.new.locationLabel=Speicherort
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Eigenen Ort wählen…
|
||||
addvaultwizard.new.directoryPickerButton=Durchsuchen…
|
||||
addvaultwizard.new.directoryPickerLabel=Eigener Ort
|
||||
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.
|
||||
addvaultwizard.new.invalidName=Ungültiger Tresorname. Tresore müssen wie Verzeichnisse benannt werden.
|
||||
addvaultwizard.new.ioException=Auf das ausgewählte Verzeichnis kann nicht zugegriffen werden. Prüfe die Zugriffsrechte und stelle sicher, dass Cryptomator nicht von einer anderen Anwendung blockiert wird.
|
||||
### Password
|
||||
addvaultwizard.new.reenterPassword=Bestätige das Passwort
|
||||
addvaultwizard.new.passwordsMatch=Passwörter stimmen überein!
|
||||
addvaultwizard.new.passwordsDoNotMatch=Passwörter stimmen nicht überein
|
||||
addvaultwizard.new.finalConfirmation=Mir ist bewusst, dass ich den Tresor ohne das Passwort NICHT mehr öffnen kann.
|
||||
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 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 exsitierenden Tresors aus.
|
||||
addvaultwizard.existing.chooseBtn=Dursuchen…
|
||||
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 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 altes Passwort ein
|
||||
changepassword.enterNewPassword=Vergib ein neues Passwort
|
||||
changepassword.enterOldPassword=Gib dein derzeitiges Passwort für "%s" ein
|
||||
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
|
||||
changepassword.finalConfirmation=Mir ist bewusst, dass ich den Tresor ohne das Passwort NICHT mehr öffnen kann.
|
||||
changepassword.finalConfirmation=Mir ist bewusst, dass ich den Tresor ohne das Passwort NICHT mehr öffnen kann
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=Passwort vergessen
|
||||
forgetPassword.information=Dies löscht das gespeicherte Passwort dieses Tresors aus dem Schlüsselbund deines Betriebssystems.
|
||||
forgetPassword.confirmBtn=Passwort vergessen
|
||||
|
||||
# Unlock
|
||||
unlock.title=Tresor öffnen
|
||||
unlock.passwordPrompt=Gib das Passwort für den Tresor "%s" ein
|
||||
unlock.title=Tresor entsperren
|
||||
unlock.passwordPrompt=Gib das Passwort für "%s" ein:
|
||||
unlock.savePassword=Passwort speichern
|
||||
unlock.unlockBtn=Entsperren
|
||||
## Success
|
||||
unlock.success.message="%s" erfolgreich ensperrt!
|
||||
unlock.success.message="%s" erfolgreich entsperrt!
|
||||
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 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.startMigrationBtn=Tresor migrieren
|
||||
## Sucess
|
||||
migration.success.nextStepsInstructions=„%s“ erfolgreich migriert.\nDu kannst deinen Tresor jetzt entsperren.
|
||||
migration.success.unlockNow=Jetzt entsperren
|
||||
|
||||
# Preferences
|
||||
preferences.title=Einstellungen
|
||||
## General
|
||||
preferences.general=Allgemein
|
||||
preferences.general.theme=Look & Feel
|
||||
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
|
||||
@@ -93,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
|
||||
@@ -101,30 +128,49 @@ main.closeBtn.tooltip=Schließen
|
||||
main.preferencesBtn.tooltip=Einstellungen
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Klicke hier, um einen Tresor hinzuzufügen
|
||||
main.vaultlist.contextMenu.add=Tresor hinzufügen
|
||||
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
|
||||
main.vaultDetail.bytesPerSecondRead=gelesen:
|
||||
main.vaultDetail.bytesPerSecondWritten=geschrieben:
|
||||
main.vaultDetail.throughput.idle=idle
|
||||
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
|
||||
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.display.message=Wiederherstellungsschlüssel für „%s“:
|
||||
|
||||
# Misc
|
||||
passwordStrength.messageLabel.0=Sehr schwach
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
|
||||
# Tray Menu
|
||||
|
||||
# Add Vault Wizard
|
||||
## Welcome
|
||||
## New
|
||||
### Name
|
||||
### Location
|
||||
### Password
|
||||
### Recovery Key
|
||||
### Information
|
||||
## Existing
|
||||
## Success
|
||||
|
||||
# Remove Vault
|
||||
|
||||
# Change Password
|
||||
|
||||
# Forget Password
|
||||
|
||||
# Unlock
|
||||
## Success
|
||||
|
||||
# Migration
|
||||
## Start
|
||||
## Run
|
||||
## Sucess
|
||||
|
||||
# Preferences
|
||||
## General
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
# Main Window
|
||||
## Vault List
|
||||
## Vault Detail
|
||||
### Locked
|
||||
### Unlocked
|
||||
### Needs Migration
|
||||
|
||||
# Wrong File Alert
|
||||
|
||||
# Vault Options
|
||||
## General
|
||||
## Mount
|
||||
|
||||
# Recovery Key
|
||||
|
||||
# Misc
|
||||
|
||||
# Quit
|
||||
@@ -0,0 +1,184 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
generic.button.apply=Aplicar
|
||||
generic.button.back=Volver
|
||||
generic.button.cancel=Cancelar
|
||||
generic.button.change=Modificar
|
||||
generic.button.done=Hecho
|
||||
generic.button.next=Continuar
|
||||
|
||||
# Tray Menu
|
||||
traymenu.showMainWindow=Mostrar
|
||||
traymenu.showPreferencesWindow=Preferencias
|
||||
traymenu.quitApplication=Salir
|
||||
traymenu.vault.unlock=Desbloquear
|
||||
traymenu.vault.lock=Bloquear
|
||||
traymenu.vault.reveal=Revelar
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Añadir bóveda
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Crear bóveda nueva
|
||||
addvaultwizard.welcome.existingButton=Abrir bóveda existente
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Elegir un nombre para la bóveda
|
||||
addvaultwizard.new.namePrompt=Nombre de la bóveda
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=¿Dónde se deben almacenar los archivos cifrados de la bóveda?
|
||||
addvaultwizard.new.locationLabel=Lugar de almacenamiento
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Ubicación personalizada
|
||||
addvaultwizard.new.directoryPickerButton=Elegir…
|
||||
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. 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
|
||||
addvault.new.readme.storageLocation.fileName=QUÉ ES ESTE DIRECTORIO.rtf
|
||||
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ ARCHIVOS DE LA BÓVEDA ⚠️
|
||||
addvault.new.readme.storageLocation.2=Esta es la ubicación del almacenamiento de su bóveda. {\\b NO} altere ningún archivo dentro de este directorio.
|
||||
addvault.new.readme.storageLocation.3=Si se desea cifrar archivos usando Cryptomator, desbloquear la bóveda y utilizar la unidad proporcionada.
|
||||
addvault.new.readme.storageLocation.4=Si se necesita ayuda, probar %s.
|
||||
addvault.new.readme.accessLocation.fileName=BIENVENIDO A SU BÓVEDA.rtf
|
||||
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ VOLUMEN CIFRADO 🔐️
|
||||
addvault.new.readme.accessLocation.2=Esta es el lugar de acceso de la bóveda. Cualquier archivo añadido a este volumen será cifrado por Cryptomator. Para acceder a este volumen en otro momento, es necesario desbloquearlo otra vez desde la aplicación de Cryptomator.
|
||||
addvault.new.readme.accessLocation.3=No dude en eliminar este archivo.
|
||||
## Existing
|
||||
addvaultwizard.existing.instruction=Elegir el archivo "masterkey.cryptomator" de la bóveda existente.
|
||||
addvaultwizard.existing.chooseBtn=Elegir…
|
||||
addvaultwizard.existing.filePickerTitle=Seleccionar archivo Masterkey
|
||||
addvaultwizard.existing.error=No se puede añadir la bóveda "%s": No es una bóveda válida. Verificar el registro para más información.
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions=Bóveda "%s" añadida.\nSe necesita desbloquear esta bóveda para acceder o añadir contenido. Alternativamente se \n puede desbloquear en otro momento.
|
||||
addvaultwizard.success.unlockNow=Desbloquear ahora
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=Eliminar bóveda
|
||||
removeVault.information=Esto sólo hará que Cryptomator olvide la bóveda. Se la puede añadir de nuevo más tarde. Los archivos cifrados no se eliminarán del disco duro.
|
||||
removeVault.confirmBtn=Eliminar bóveda
|
||||
|
||||
# Change Password
|
||||
changepassword.title=Cambiar contraseña
|
||||
changepassword.enterOldPassword=Ingresar la contraseña actual para "%s"
|
||||
changepassword.enterNewPassword=Ingresar una contraseña nueva para la bóveda
|
||||
changepassword.reenterNewPassword=Confirmar la contraseña nueva
|
||||
changepassword.passwordsMatch=¡Las contraseñas coinciden!
|
||||
changepassword.passwordsDoNotMatch=Las contraseñas no coinciden
|
||||
changepassword.finalConfirmation=Entiendo que no podré recuperar mis datos si olvido mi contraseña
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=Olvidar contraseña
|
||||
forgetPassword.information=Esto eliminará la contraseña guardada de esta bóveda de su cadena de claves del sistema.
|
||||
forgetPassword.confirmBtn=Olvidar contraseña
|
||||
|
||||
# Unlock
|
||||
unlock.title=Desbloquear bóveda
|
||||
unlock.passwordPrompt=Ingresar contraseña para "%s":
|
||||
unlock.savePassword=Guardar contraseña
|
||||
unlock.unlockBtn=Desbloquear
|
||||
## Success
|
||||
unlock.success.message=¡"%s" se desbloqueó con éxito! La bóveda ya es accesible.
|
||||
unlock.success.revealBtn=Revelar bóveda
|
||||
|
||||
# Migration
|
||||
migration.title=Mejorar bóveda
|
||||
## Start
|
||||
migration.start.prompt=La bóveda "%s" necesita ser actualizada a un formato más nuevo. Antes de continuar, asegurarse de que no haya ninguna sincronización pendiente afectando esta bóveda.
|
||||
migration.start.confirm=Sí, mi bóveda está sincronizada
|
||||
## Run
|
||||
migration.run.enterPassword=Ingresar la contraseña para "%s"
|
||||
migration.run.startMigrationBtn=Migrar bóveda
|
||||
## Sucess
|
||||
migration.success.nextStepsInstructions="%s" se migró con éxito.\nYa se puede desbloquear la bóveda.
|
||||
migration.success.unlockNow=Desbloquear ahora
|
||||
|
||||
# Preferences
|
||||
preferences.title=Preferencias
|
||||
## General
|
||||
preferences.general=General
|
||||
preferences.general.theme=Apariencia
|
||||
preferences.general.startHidden=Ocultar ventana al iniciar Cryptomator
|
||||
preferences.general.debugLogging=Habilitar registro de depuración
|
||||
## Volume
|
||||
preferences.volume=Unidad virtual
|
||||
preferences.volume.type=Tipo de volumen
|
||||
preferences.volume.webdav.port=Puerto WebDAV
|
||||
preferences.volume.webdav.scheme=Esquema WebDAV
|
||||
## Updates
|
||||
preferences.updates=Actualizaciones
|
||||
preferences.updates.currentVersion=Versión actual: %s
|
||||
preferences.updates.autoUpdateCheck=Buscar actualizaciones automáticamente
|
||||
preferences.updates.checkNowBtn=Buscar ahora
|
||||
preferences.updates.updateAvailable=Actualización a la versión %s disponible.
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Cerrar
|
||||
main.preferencesBtn.tooltip=Preferencias
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Hacer clic aquí para añadir una bóveda
|
||||
main.vaultlist.contextMenu.remove=Eliminar bóveda
|
||||
main.vaultlist.addVaultBtn=Añadir bóveda
|
||||
## Vault Detail
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=BLOQUEADO
|
||||
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
|
||||
main.vaultDetail.bytesPerSecondRead=leído:
|
||||
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
|
||||
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
|
||||
recoveryKey.enterPassword.prompt=Ingresar la contraseña para mostrar la clave de recuperación para "%s":
|
||||
recoveryKey.display.message=Clave de recuperación para "%s":
|
||||
|
||||
# Misc
|
||||
passwordStrength.messageLabel.0=Muy débil
|
||||
passwordStrength.messageLabel.1=Débil
|
||||
passwordStrength.messageLabel.2=Aceptable
|
||||
passwordStrength.messageLabel.3=Fuerte
|
||||
passwordStrength.messageLabel.4=Muy fuerte
|
||||
|
||||
# Quit
|
||||
quit.prompt=¿Salir de la aplicación? Hay bóvedas desbloqueadas.
|
||||
quit.lockAndQuit=Bloquear y salir
|
||||
@@ -0,0 +1,184 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
generic.button.apply=Appliquer
|
||||
generic.button.back=Précédent
|
||||
generic.button.cancel=Annuler
|
||||
generic.button.change=Modifier
|
||||
generic.button.done=Terminé
|
||||
generic.button.next=Suivant
|
||||
|
||||
# Tray Menu
|
||||
traymenu.showMainWindow=Montrer
|
||||
traymenu.showPreferencesWindow=Préférences
|
||||
traymenu.quitApplication=Quitter
|
||||
traymenu.vault.unlock=Déverrouiller
|
||||
traymenu.vault.lock=Verrouiller
|
||||
traymenu.vault.reveal=Révéler
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Ajouter un coffre
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Créer un nouveau coffre
|
||||
addvaultwizard.welcome.existingButton=Ouvrir un coffre existant
|
||||
## New
|
||||
### Name
|
||||
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 ?
|
||||
addvaultwizard.new.locationLabel=Emplacement de stockage
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Emplacement personnalisé
|
||||
addvaultwizard.new.directoryPickerButton=Choisir...
|
||||
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 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
|
||||
addvault.new.readme.storageLocation.fileName=QUEL EST CE RÉPERTOIRE.rtf
|
||||
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ FICHIERS DU COFFRE ⚠️
|
||||
addvault.new.readme.storageLocation.2=Ceci est l'emplacement de stockage de votre coffre. {\\b NE PAS} modifier les fichiers dans ce répertoire.
|
||||
addvault.new.readme.storageLocation.3=Si vous voulez chiffrer des fichiers en utilisant Cryptomator, déverrouillez le coffre et utilisez le lecteur fourni.
|
||||
addvault.new.readme.storageLocation.4=Si vous avez besoin d'aide, essayez %s.
|
||||
addvault.new.readme.accessLocation.fileName=BIENVENUE DANS VOTRE COFFRE.rft
|
||||
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ VOLUME CHIFFRÉ 🔐️
|
||||
addvault.new.readme.accessLocation.2=Ceci est l'emplacement d'accès à votre coffre. Tous les fichiers ajoutés à ce volume seront chiffrés par Cryptomator. Pour accéder à ce volume plus tard, il suffit de le déverrouiller de nouveau à partir de l'application Cryptomator.
|
||||
addvault.new.readme.accessLocation.3=Vous pouvez supprimer ce fichier.
|
||||
## Existing
|
||||
addvaultwizard.existing.instruction=Selectionner le fichier "masterkey.cryptomator" de votre coffre existant.
|
||||
addvaultwizard.existing.chooseBtn=Choisir...
|
||||
addvaultwizard.existing.filePickerTitle=Sélectionner le fichier clef
|
||||
addvaultwizard.existing.error=Impossible d'ajouter le coffre "%s" : le coffre n’est pas valide. Veuillez consulter le journal pour plus d'informations.
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions=Coffre “%s” ajouté.\nIl faudra déverrouiller ce coffre afin d’y accéder ou d’y ajouter du contenu. Cette action n’a pas à être effectuée immédiatement.
|
||||
addvaultwizard.success.unlockNow=Déverouiller
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=Supprimer le coffre
|
||||
removeVault.information=Ceci ne fera que retirer ce coffre de Cryptomator. Vous pourrez l’ajouter à nouveau plus tard. Aucun fichier chiffré ne sera supprimé de votre disque dur.
|
||||
removeVault.confirmBtn=Supprimer le coffre
|
||||
|
||||
# Change Password
|
||||
changepassword.title=Modifier le mot de passe
|
||||
changepassword.enterOldPassword=Entrez le mot de passe actuel pour "%s"
|
||||
changepassword.enterNewPassword=Entrez un nouveau mot de passe pour votre coffre
|
||||
changepassword.reenterNewPassword=Confirmez le nouveau mot de passe
|
||||
changepassword.passwordsMatch=Mots de passe identiques !
|
||||
changepassword.passwordsDoNotMatch=Les mots de passe ne correspondent pas
|
||||
changepassword.finalConfirmation=Je comprends que je ne pourrai pas récupérer mes données si j'oublie mon mot de passe
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=Oublier le mot de passe
|
||||
forgetPassword.information=Ceci supprimera le mot de passe enregistré pour ce coffre de votre chaîne de clés système.
|
||||
forgetPassword.confirmBtn=Oublier le mot de passe
|
||||
|
||||
# Unlock
|
||||
unlock.title=Déverrouiller le coffre
|
||||
unlock.passwordPrompt=Entrez le mot de passe pour “%s” :
|
||||
unlock.savePassword=Enregistrer le mot de passe
|
||||
unlock.unlockBtn=Déverrouiller
|
||||
## Success
|
||||
unlock.success.message=“%s” déverrouillé ! Le contenu de votre coffre est maintenant accessible.
|
||||
unlock.success.revealBtn=Révéler le coffre
|
||||
|
||||
# Migration
|
||||
migration.title=Mettre à jour le coffre
|
||||
## Start
|
||||
migration.start.prompt=Le coffre “%s” doit être mis à jour. Assurez-vous qu’aucune synchronisation n’est en cours sur ce coffre avant de continuer.
|
||||
migration.start.confirm=Ce coffre est bien synchronisé
|
||||
## Run
|
||||
migration.run.enterPassword=Entrez le mot de passe pour %s
|
||||
migration.run.startMigrationBtn=Migrer le coffre
|
||||
## Sucess
|
||||
migration.success.nextStepsInstructions=“%s” migré.\nVous pouvez à présent déverrouiller ce coffre.
|
||||
migration.success.unlockNow=Déverouiller
|
||||
|
||||
# Preferences
|
||||
preferences.title=Préférences
|
||||
## General
|
||||
preferences.general=Général
|
||||
preferences.general.theme=Apparence
|
||||
preferences.general.startHidden=Démarrer Cryptomator en mode caché
|
||||
preferences.general.debugLogging=Activer les logs debug
|
||||
## Volume
|
||||
preferences.volume=Disque virtuel
|
||||
preferences.volume.type=Type de volume
|
||||
preferences.volume.webdav.port=port WebDav
|
||||
preferences.volume.webdav.scheme=Schéma WebDAV
|
||||
## Updates
|
||||
preferences.updates=Mises à jour
|
||||
preferences.updates.currentVersion=Version actuelle : “%s”
|
||||
preferences.updates.autoUpdateCheck=Vérifier automatiquement l’existence de mise à jour
|
||||
preferences.updates.checkNowBtn=Vérifier maintenant
|
||||
preferences.updates.updateAvailable=Mise à jour “%s” disponible.
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Fermer
|
||||
main.preferencesBtn.tooltip=Préférences
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Cliquez ici pour ajouter un coffre
|
||||
main.vaultlist.contextMenu.remove=Supprimer le coffre
|
||||
main.vaultlist.addVaultBtn=Ajouter un coffre
|
||||
## Vault Detail
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=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
|
||||
main.vaultDetail.bytesPerSecondRead=lecture :
|
||||
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
|
||||
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
|
||||
recoveryKey.enterPassword.prompt=Entrez votre mot de passe pour afficher la clé de récupération pour "%s":
|
||||
recoveryKey.display.message=Clé de récupération pour "%s":
|
||||
|
||||
# Misc
|
||||
passwordStrength.messageLabel.0=Très faible
|
||||
passwordStrength.messageLabel.1=Faible
|
||||
passwordStrength.messageLabel.2=Satisfaisant
|
||||
passwordStrength.messageLabel.3=Fort
|
||||
passwordStrength.messageLabel.4=Très fort
|
||||
|
||||
# Quit
|
||||
quit.prompt=Quitter l'application ? Il y a des coffres déverrouillées.
|
||||
quit.lockAndQuit=Verrouiller et quitter
|
||||
@@ -0,0 +1,55 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
|
||||
# Tray Menu
|
||||
|
||||
# Add Vault Wizard
|
||||
## Welcome
|
||||
## New
|
||||
### Name
|
||||
### Location
|
||||
### Password
|
||||
### Recovery Key
|
||||
### Information
|
||||
## Existing
|
||||
## Success
|
||||
|
||||
# Remove Vault
|
||||
|
||||
# Change Password
|
||||
|
||||
# Forget Password
|
||||
|
||||
# Unlock
|
||||
## Success
|
||||
|
||||
# Migration
|
||||
## Start
|
||||
## Run
|
||||
## Sucess
|
||||
|
||||
# Preferences
|
||||
## General
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
# Main Window
|
||||
## Vault List
|
||||
## Vault Detail
|
||||
### Locked
|
||||
### Unlocked
|
||||
### Needs Migration
|
||||
|
||||
# Wrong File Alert
|
||||
|
||||
# Vault Options
|
||||
## General
|
||||
## Mount
|
||||
|
||||
# Recovery Key
|
||||
|
||||
# Misc
|
||||
|
||||
# Quit
|
||||
@@ -0,0 +1,184 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
generic.button.apply=Applica
|
||||
generic.button.back=Indietro
|
||||
generic.button.cancel=Annulla
|
||||
generic.button.change=Modifica
|
||||
generic.button.done=Fatto
|
||||
generic.button.next=Avanti
|
||||
|
||||
# Tray Menu
|
||||
traymenu.showMainWindow=Visualizza
|
||||
traymenu.showPreferencesWindow=Impostazioni
|
||||
traymenu.quitApplication=Esci
|
||||
traymenu.vault.unlock=Sblocca
|
||||
traymenu.vault.lock=Blocca
|
||||
traymenu.vault.reveal=Mostra
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Aggiungi Cassaforte
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Crea Nuova Cassaforte
|
||||
addvaultwizard.welcome.existingButton=Apri Cassaforte Esistente
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Scegli un nome per la tua cassaforte
|
||||
addvaultwizard.new.namePrompt=Nome Cassaforte
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Dove dovrebbe memorizzare Cryptomator i file crittografati della tua cassaforte?
|
||||
addvaultwizard.new.locationLabel=Posizione archivio
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Posizione personalizzata
|
||||
addvaultwizard.new.directoryPickerButton=Scegli…
|
||||
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 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
|
||||
addvault.new.readme.storageLocation.fileName=CHE COSA È QUESTA DIRECTORY.rtf
|
||||
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ FILE CASSAFORTE ⚠️
|
||||
addvault.new.readme.storageLocation.2=Questa è la posizione di archiviazione della tua cassaforte. {\\b NON} modifica qualsiasi file all'interno di questa cartella.
|
||||
addvault.new.readme.storageLocation.3=Se vuoi crittografare i file usando Cryptomator, sblocca la cassaforte e usa l'unità fornita.
|
||||
addvault.new.readme.storageLocation.4=Se hai bisogno di aiuto, prova %s.
|
||||
addvault.new.readme.accessLocation.fileName=BENVENUTO NELLA TUA CASSAFORTE.rtf
|
||||
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ VOLUME CRIPTATO 🔐️
|
||||
addvault.new.readme.accessLocation.2=Questa è la posizione di accesso del tuo caveau. Tutti i file aggiunti a questo volume verranno crittografati da Cryptomator. Per accedere a questo volume in un secondo momento, è sufficiente sbloccarlo nuovamente dall'applicazione Cryptomator.
|
||||
addvault.new.readme.accessLocation.3=Sei libero di rimuovere questo file.
|
||||
## Existing
|
||||
addvaultwizard.existing.instruction=Scegliere il file "masterkey.cryptomator" del deposito esistente.
|
||||
addvaultwizard.existing.chooseBtn=Scegli…
|
||||
addvaultwizard.existing.filePickerTitle=Seleziona file Masterkey
|
||||
addvaultwizard.existing.error=Impossibile aggiungere cassaforte "%s": Non è una cassaforte valida. Per favore, controlla il log per maggiori informazioni.
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions=Aggiunta cassaforte"%s".\nÈ necessario sbloccare questa cassaforte per accedere o aggiungere contenuti. In alternativa puoi sbloccarla in qualsiasi momento successivo.
|
||||
addvaultwizard.success.unlockNow=Sblocca adesso
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=Rimuovi Cassaforte
|
||||
removeVault.information=Questo farà dimenticare Cryptomator a questo vault. Puoi aggiungerlo di nuovo in seguito. Nessun file crittografato verrà eliminato dal tuo disco rigido.
|
||||
removeVault.confirmBtn=Rimuovi Cassaforte
|
||||
|
||||
# Change Password
|
||||
changepassword.title=Modifica password
|
||||
changepassword.enterOldPassword=Inserisci la password attuale per "%s"
|
||||
changepassword.enterNewPassword=Inserisci una nuova password per la tua cassaforte
|
||||
changepassword.reenterNewPassword=Conferma la nuova password
|
||||
changepassword.passwordsMatch=Le password corrispondono!
|
||||
changepassword.passwordsDoNotMatch=Le password non corrispondono
|
||||
changepassword.finalConfirmation=Ho capito che non potrò recuperare i miei dati se dimentico la mia password
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=Password dimenticata
|
||||
forgetPassword.information=Questo cancellerà la password salvata di questa cassaforte dal tuo portachiavi di sistema.
|
||||
forgetPassword.confirmBtn=Password dimenticata
|
||||
|
||||
# Unlock
|
||||
unlock.title=Sblocca Cassaforte
|
||||
unlock.passwordPrompt=Inserisci la password per "%s":
|
||||
unlock.savePassword=Salva password
|
||||
unlock.unlockBtn=Sblocca
|
||||
## Success
|
||||
unlock.success.message=Sbloccato "%s" con successo! La tua cassaforte è ora accessibile.
|
||||
unlock.success.revealBtn=Rivela Cassaforte
|
||||
|
||||
# Migration
|
||||
migration.title=Aggiorna Cassaforte
|
||||
## Start
|
||||
migration.start.prompt=La tua cassaforte "%s" deve essere aggiornata a un formato più recente. Prima di procedere, assicurati che non ci sia nessuna sincronizzazione in sospeso che influisca su questa cassaforte.
|
||||
migration.start.confirm=Sì, la mia cassaforte è completamente sincronizzata
|
||||
## Run
|
||||
migration.run.enterPassword=Immettere la password per "%s"
|
||||
migration.run.startMigrationBtn=Migra Cassaforte
|
||||
## Sucess
|
||||
migration.success.nextStepsInstructions=Migrato "%s" con successo.\nOra puoi sbloccare la tua cassaforte.
|
||||
migration.success.unlockNow=Sblocca adesso
|
||||
|
||||
# Preferences
|
||||
preferences.title=Impostazioni
|
||||
## General
|
||||
preferences.general=Generali
|
||||
preferences.general.theme=Aspetto
|
||||
preferences.general.startHidden=Nascondi la finestra all'avvio di Cryptomator
|
||||
preferences.general.debugLogging=Abilita i registri di debug
|
||||
## Volume
|
||||
preferences.volume=Drive virtuale
|
||||
preferences.volume.type=Tipo volume
|
||||
preferences.volume.webdav.port=Porta WebDAV
|
||||
preferences.volume.webdav.scheme=Schema WebDAV
|
||||
## Updates
|
||||
preferences.updates=Aggiornamenti
|
||||
preferences.updates.currentVersion=Versione attuale %s
|
||||
preferences.updates.autoUpdateCheck=Controlla automaticamente la presenza di aggiornamenti
|
||||
preferences.updates.checkNowBtn=Controlla adesso
|
||||
preferences.updates.updateAvailable=Disponibile aggiornamento alla versione %s.
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Chiudi
|
||||
main.preferencesBtn.tooltip=Impostazioni
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Clicca qui per aggiungere una cassaforte
|
||||
main.vaultlist.contextMenu.remove=Rimuovi Cassaforte
|
||||
main.vaultlist.addVaultBtn=Aggiungi Cassaforte
|
||||
## Vault Detail
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=BLOCCATO
|
||||
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
|
||||
main.vaultDetail.bytesPerSecondRead=lettura:
|
||||
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
|
||||
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
|
||||
recoveryKey.enterPassword.prompt=Inserisci la password per visualizzare la chiave di recupero per "%s":
|
||||
recoveryKey.display.message=Chiave di recupero per "%s":
|
||||
|
||||
# Misc
|
||||
passwordStrength.messageLabel.0=Molto debole
|
||||
passwordStrength.messageLabel.1=Debole
|
||||
passwordStrength.messageLabel.2=Sufficiente
|
||||
passwordStrength.messageLabel.3=Forte
|
||||
passwordStrength.messageLabel.4=Molto forte
|
||||
|
||||
# Quit
|
||||
quit.prompt=Chiudere l'applicazione? Ci sono depositi sbloccati.
|
||||
quit.lockAndQuit=Blocca ed Esci
|
||||
@@ -0,0 +1,184 @@
|
||||
# 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=金庫の暗号化済みファイルをどの場所に保存しますか?
|
||||
addvaultwizard.new.locationLabel=保存場所
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=ユーザー設定
|
||||
addvaultwizard.new.directoryPickerButton=選択...
|
||||
addvaultwizard.new.directoryPickerTitle=ディレクトリを選択
|
||||
addvaultwizard.new.enterPassword=金庫のパスワードを入力してください
|
||||
addvaultwizard.new.fileAlreadyExists=いくつかのオブジェクトが既に存在しているため、このパスに金庫を作成することはできません。
|
||||
addvaultwizard.new.invalidName=無効な金庫の名前です。一般的なディレクトリの名前を検討してください。
|
||||
addvaultwizard.new.ioException=選択したディレクトリは、基本的なテストに失敗しました。適切なアクセス権限があることを確認し、Cryptomator に干渉しないようにしてください。
|
||||
### Password
|
||||
addvaultwizard.new.reenterPassword=パスワードの確認
|
||||
addvaultwizard.new.passwordsMatch=パスワードが一致しました!
|
||||
addvaultwizard.new.passwordsDoNotMatch=パスワードが一致しません
|
||||
addvaultwizard.new.createVaultBtn=金庫を作成
|
||||
### 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.3=Cryptomator を利用してファイルを暗号化するには、金庫を施錠して表示されるドライブを使用してください。
|
||||
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=このファイルはいつでも削除できます。
|
||||
## Existing
|
||||
addvaultwizard.existing.instruction=既存の金庫の "masterkey.cryptomator" ファイルを選択してください。
|
||||
addvaultwizard.existing.chooseBtn=選択...
|
||||
addvaultwizard.existing.filePickerTitle=Masterkey ファイルを選択
|
||||
addvaultwizard.existing.error=金庫 "%s" を追加できませんでした。不正な金庫です。詳細情報についてはログをご覧ください。
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions=金庫 "%s" を追加しました。\n金庫にアクセスしたり、コンテンツを追加したりするには、金庫を解錠する必要があります。あるいは、後で解錠することが可能です。
|
||||
addvaultwizard.success.unlockNow=今すぐ解錠
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=金庫を削除
|
||||
removeVault.information=この操作で、Cryptomator がこの金庫を認識しなくなります。あとで、再度追加することが可能です。暗号化されたファイルが、ドライブから削除されることはありません。
|
||||
removeVault.confirmBtn=金庫を削除
|
||||
|
||||
# Change Password
|
||||
changepassword.title=パスワードの変更
|
||||
changepassword.enterOldPassword="%s" の現在のパスワードを入力してください
|
||||
changepassword.enterNewPassword=金庫の新しいパスワードを入力してください
|
||||
changepassword.reenterNewPassword=新しいパスワードの確認
|
||||
changepassword.passwordsMatch=パスワードが一致しました!
|
||||
changepassword.passwordsDoNotMatch=パスワードが一致しません
|
||||
changepassword.finalConfirmation=パスワードを忘れた場合に、データを復元できないことを理解しました
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=パスワードを削除
|
||||
forgetPassword.information=システムから金庫の保存済みパスワードを削除します。
|
||||
forgetPassword.confirmBtn=パスワードを削除
|
||||
|
||||
# Unlock
|
||||
unlock.title=金庫を解錠
|
||||
unlock.passwordPrompt="%s" のパスワードを入力してください:
|
||||
unlock.savePassword=パスワードを保存
|
||||
unlock.unlockBtn=解錠
|
||||
## Success
|
||||
unlock.success.message="%s" の解錠に成功しました! 金庫にアクセス可能です。
|
||||
unlock.success.revealBtn=金庫を表示
|
||||
|
||||
# Migration
|
||||
migration.title=金庫をアップグレード
|
||||
## Start
|
||||
migration.start.prompt="%s" を新しいフォーマットに更新する必要があります。続行する前に、この金庫に影響する保留中の同期がないことをご確認ください。
|
||||
migration.start.confirm=はい。同期が完了しています
|
||||
## Run
|
||||
migration.run.enterPassword="%s" のパスワードを入力してください
|
||||
migration.run.startMigrationBtn=金庫を移行
|
||||
## Sucess
|
||||
migration.success.nextStepsInstructions="%s" の移行が成功しました。\n金庫を解錠できるようになりました。
|
||||
migration.success.unlockNow=今すぐ解錠
|
||||
|
||||
# Preferences
|
||||
preferences.title=設定
|
||||
## General
|
||||
preferences.general=基本設定
|
||||
preferences.general.theme=外見 & 操作性
|
||||
preferences.general.startHidden=Cryptomator を開始したとき、ウィンドウを隠す
|
||||
preferences.general.debugLogging=ログを有効にする
|
||||
## Volume
|
||||
preferences.volume=仮想ドライブ
|
||||
preferences.volume.type=マウント方法
|
||||
preferences.volume.webdav.port=WebDAV ポート
|
||||
preferences.volume.webdav.scheme=WebDAV スキーム
|
||||
## Updates
|
||||
preferences.updates=更新
|
||||
preferences.updates.currentVersion=現在のバージョン: %s
|
||||
preferences.updates.autoUpdateCheck=自動的に更新を確認する
|
||||
preferences.updates.checkNowBtn=今すぐ確認
|
||||
preferences.updates.updateAvailable=利用可能なバージョン %s に更新します。
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=閉じる
|
||||
main.preferencesBtn.tooltip=設定
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=ここをクリックして金庫を追加
|
||||
main.vaultlist.contextMenu.remove=金庫を削除
|
||||
main.vaultlist.addVaultBtn=金庫を追加
|
||||
## Vault Detail
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=施錠済み
|
||||
main.vaultDetail.unlockBtn=解錠
|
||||
main.vaultDetail.optionsBtn=金庫のオプション
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=解錠済み
|
||||
main.vaultDetail.accessLocation=アクセス可能な金庫のコンテンツ:
|
||||
main.vaultDetail.revealBtn=ドライブを表示
|
||||
main.vaultDetail.lockBtn=施錠
|
||||
main.vaultDetail.bytesPerSecondRead=読み取り:
|
||||
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=不明なファイル
|
||||
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=回復キー
|
||||
recoveryKey.enterPassword.prompt="%s" の回復キーを表示するために、パスワードを入力してください:
|
||||
recoveryKey.display.message="%s" の回復キー:
|
||||
|
||||
# Misc
|
||||
passwordStrength.messageLabel.0=非常に弱い
|
||||
passwordStrength.messageLabel.1=弱い
|
||||
passwordStrength.messageLabel.2=普通
|
||||
passwordStrength.messageLabel.3=強い
|
||||
passwordStrength.messageLabel.4=非常に強い
|
||||
|
||||
# Quit
|
||||
quit.prompt=アプリケーションを終了しますか? 施錠していない金庫が残っています。
|
||||
quit.lockAndQuit=施錠して終了
|
||||
@@ -0,0 +1,184 @@
|
||||
# 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=Vault 추가
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=새 Vault 생성
|
||||
addvaultwizard.welcome.existingButton=기존 Vault 열기
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=새 Vault의 이름을 입력하십시요.
|
||||
addvaultwizard.new.namePrompt=Vault 이름
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Cryptomator Vault 내 암호화 파일을 어느 경로에 저장하시겠습니까?
|
||||
addvaultwizard.new.locationLabel=저장소 위치
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=사용자 지정 위치
|
||||
addvaultwizard.new.directoryPickerButton=선택
|
||||
addvaultwizard.new.directoryPickerTitle=디렉터리 선택
|
||||
addvaultwizard.new.enterPassword=Vault의 비밀번호를 입력하십시요.
|
||||
addvaultwizard.new.fileAlreadyExists=이미 다른 객체가 존재하고 있어 해당 경로에 Vault를 생성할 수 없습니다.
|
||||
addvaultwizard.new.invalidName=유효하지 않은 Vault 이름입니다. 일반적인 디렉터리 이름으로 지정해주십시요.
|
||||
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
|
||||
addvault.new.readme.storageLocation.fileName=이 디렉터리에 대해.rtf
|
||||
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ VAULT 파일 ⚠️
|
||||
addvault.new.readme.storageLocation.2=이곳은 Vault 파일 저장경로입니다. {\\b 절대로} 이 디렉터리의 파일을 임의로 교체하거나 수정하지 마십시요.
|
||||
addvault.new.readme.storageLocation.3=Cryptomator를 사용하여 파일을 암호화하고 싶으시면, Vault를 잠금해제하고 준비된 드라이브에 사용하십시요.
|
||||
addvault.new.readme.storageLocation.4=도움이 필요하시면, %s를 시도하여 보십시요.
|
||||
addvault.new.readme.accessLocation.fileName=Vault에 오신것을 환영합니다.rtf
|
||||
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ 암호화된 볼륨 🔐️
|
||||
addvault.new.readme.accessLocation.2=이곳은 Vault의 접근장소입니다. 이 볼륨에 추가된 파일은 Cryptomator로 암호화 될 것입니다. 나중에 이 볼륨에 접근하기 위해서는, 단순히 Cryptomator 애플리케이션 내에서 잠금해제하여 주십시요.
|
||||
addvault.new.readme.accessLocation.3=이 파일은 지우셔도 무방합니다.
|
||||
## Existing
|
||||
addvaultwizard.existing.instruction=기존 Vault 의 "masterkey.cryptomator" 파일을 선택하여 주십시요.
|
||||
addvaultwizard.existing.chooseBtn=선택
|
||||
addvaultwizard.existing.filePickerTitle=마스터키 파일 선택
|
||||
addvaultwizard.existing.error="%s" Vault를 추가할 수 없습니다: Vault가 유효하지 않습니다. 자세한 내용은 로그를 참조하여 주십시요.
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions="%s" Vault가 추가되었습니다.\n이 Vault를 접근하거나 컨텐츠를 추가하려면 잠금해제가 필요합니다. 그렇지만 언제든지 잠금해제가 가능합니다.
|
||||
addvaultwizard.success.unlockNow=지금 잠금해제
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=Vault 제거
|
||||
removeVault.information=이 행위는 단지 Cryptomator에서 이 Vault를 잊게합니다. 나중에 다시 추가 할 수 있습니다. 암호화된 파일은 하드디스크에서 삭제되지 않을 것입니다.
|
||||
removeVault.confirmBtn=Vault 제거
|
||||
|
||||
# Change Password
|
||||
changepassword.title=비밀번호 변경
|
||||
changepassword.enterOldPassword="%s"의 비밀번호를 입력하여 주십시요.
|
||||
changepassword.enterNewPassword=Vault의 새 비밀번호를 입력하십시요.
|
||||
changepassword.reenterNewPassword=새 비밀번호 확인
|
||||
changepassword.passwordsMatch=비밀번호 일치!
|
||||
changepassword.passwordsDoNotMatch=비밀번호가 일치하지 않습니다.
|
||||
changepassword.finalConfirmation=지정한 비밀번호를 잊어버리면 데이터를 복구할 수 없음을 알고있습니다.
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=비밀번호 분실
|
||||
forgetPassword.information=시스템 키체인에서 이 Vault의 저장된 비밀번호가 삭제될 것입니다.
|
||||
forgetPassword.confirmBtn=비밀번호 분실
|
||||
|
||||
# Unlock
|
||||
unlock.title=Vault 잠금해제
|
||||
unlock.passwordPrompt="%s"의 비밀번호를 입력하십시요.
|
||||
unlock.savePassword=비밀번호 저장
|
||||
unlock.unlockBtn=잠금해제
|
||||
## Success
|
||||
unlock.success.message="%s"의 잠금해제가 성공적으로 수행되었습니다! 이제 이 Vault의 접근이 가능합니다.
|
||||
unlock.success.revealBtn=Vault 표시
|
||||
|
||||
# Migration
|
||||
migration.title=Vault 업그레이드
|
||||
## Start
|
||||
migration.start.prompt="%s" vault는 새로운 포멧으로 업데이트가 필요합니다. 작업 전, 이 Vault에 영향을 줄만한 동기화가 보류중인지 확인하여 주십시요.
|
||||
migration.start.confirm=네, 이 Vault는 동기화가 완전히 된 상태입니다.
|
||||
## Run
|
||||
migration.run.enterPassword="%s"의 비밀번호를 입력하십시요.
|
||||
migration.run.startMigrationBtn=Vault 마이그레이션
|
||||
## Sucess
|
||||
migration.success.nextStepsInstructions="%s" 의 마이그레이션이 성공적으로 완료되었습니다. 이제 Vault를 잠금해제할 수 있습니다.
|
||||
migration.success.unlockNow=지금 잠금해제
|
||||
|
||||
# Preferences
|
||||
preferences.title=환경설정
|
||||
## General
|
||||
preferences.general=일반
|
||||
preferences.general.theme=테마설정
|
||||
preferences.general.startHidden=Cryptomator를 시작할 때 창 숨김
|
||||
preferences.general.debugLogging=디버그 로그기록을 사용하도록 설정
|
||||
## Volume
|
||||
preferences.volume=가상 드라이브
|
||||
preferences.volume.type=볼륨 유형
|
||||
preferences.volume.webdav.port=WebDAV 포트
|
||||
preferences.volume.webdav.scheme=WebDAV 스킴
|
||||
## Updates
|
||||
preferences.updates=업데이트
|
||||
preferences.updates.currentVersion=현재 버전: %s
|
||||
preferences.updates.autoUpdateCheck=자동으로 업데이트 확인
|
||||
preferences.updates.checkNowBtn=지금 확인
|
||||
preferences.updates.updateAvailable=버전 %s의 업데이트가 가능합니다.
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=닫기
|
||||
main.preferencesBtn.tooltip=환경설정
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Vault를 추가하기 위해 이곳을 클릭합니다.
|
||||
main.vaultlist.contextMenu.remove=Vault 제거
|
||||
main.vaultlist.addVaultBtn=Vault 추가
|
||||
## Vault Detail
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=잠김
|
||||
main.vaultDetail.unlockBtn=잠금해제
|
||||
main.vaultDetail.optionsBtn=Vault 옵션
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=잠금해제됨
|
||||
main.vaultDetail.accessLocation=이 Vault의 내용은 다음의 경로에서 접근할 수 있습니다:
|
||||
main.vaultDetail.revealBtn=드라이브 표시
|
||||
main.vaultDetail.lockBtn=잠금
|
||||
main.vaultDetail.bytesPerSecondRead=읽기:
|
||||
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=알 수 없는 파일
|
||||
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=복구 키
|
||||
recoveryKey.enterPassword.prompt="%s"의 복구 키를 표시하려면 비밀번호를 입력하여 주십시요.
|
||||
recoveryKey.display.message="%s"의 복구 키
|
||||
|
||||
# Misc
|
||||
passwordStrength.messageLabel.0=매우 취약함
|
||||
passwordStrength.messageLabel.1=취약함
|
||||
passwordStrength.messageLabel.2=보통
|
||||
passwordStrength.messageLabel.3=강함
|
||||
passwordStrength.messageLabel.4=매우 강함
|
||||
|
||||
# Quit
|
||||
quit.prompt=애플리케이션을 종료하시겠습니까? Vault가 잠금해제된 상태입니다.
|
||||
quit.lockAndQuit=Vault 잠금 후 종료하기
|
||||
@@ -0,0 +1,184 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
generic.button.apply=Toepassen
|
||||
generic.button.back=Terug
|
||||
generic.button.cancel=Annuleren
|
||||
generic.button.change=Wijzig
|
||||
generic.button.done=Klaar
|
||||
generic.button.next=Volgende
|
||||
|
||||
# Tray Menu
|
||||
traymenu.showMainWindow=Toon
|
||||
traymenu.showPreferencesWindow=Voorkeuren
|
||||
traymenu.quitApplication=Afsluiten
|
||||
traymenu.vault.unlock=Ontgrendel
|
||||
traymenu.vault.lock=Vergrendel
|
||||
traymenu.vault.reveal=Laat zien
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Kluis toevoegen
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Nieuwe Kluis Aanmaken
|
||||
addvaultwizard.welcome.existingButton=Open Bestaande Kluis
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Kies een naam voor de kluis
|
||||
addvaultwizard.new.namePrompt=Kluisnaam
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Waar moet Cryptomator de versleutelde bestanden van je kluis opslaan?
|
||||
addvaultwizard.new.locationLabel=Opslaglocatie
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Andere locatie
|
||||
addvaultwizard.new.directoryPickerButton=Kies…
|
||||
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 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
|
||||
addvault.new.readme.storageLocation.fileName=WAT IS DEZE MAP.rtf
|
||||
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ KLUIS BESTANDEN ⚠️
|
||||
addvault.new.readme.storageLocation.2=Dit is de opslaglocatie van uw kluis. Wijzig {\\b GEEN} bestanden binnen deze map.
|
||||
addvault.new.readme.storageLocation.3=Als u bestanden wilt versleutelen met Cryptomator, ontgrendel dan de kluis en gebruik de opgegeven schijf.
|
||||
addvault.new.readme.storageLocation.4=Als je hulp nodig hebt, probeer %s.
|
||||
addvault.new.readme.accessLocation.fileName=WELKOM IN UW KLUIS.rtf
|
||||
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐 VERSLEUTELD VOLUME 🔐
|
||||
addvault.new.readme.accessLocation.2=Dit is de toegangslocatie van uw kluis. Alle bestanden die aan dit volume worden toegevoegd zullen worden versleuteld door Cryptomator. Om dit volume op een later tijdstip te kunnen gebruiken, ontgrendelt u het gewoon opnieuw vanuit de Cryptomator applicatie.
|
||||
addvault.new.readme.accessLocation.3=Voel je vrij om dit bestand te verwijderen.
|
||||
## Existing
|
||||
addvaultwizard.existing.instruction=Kies het "masterkey.cryptomator" bestand van uw bestaande kluis.
|
||||
addvaultwizard.existing.chooseBtn=Kies…
|
||||
addvaultwizard.existing.filePickerTitle=Selecteer het Masterkey-bestand
|
||||
addvaultwizard.existing.error=Kluis "%s" kan niet toegevoegd worden: Geen geldige kluis. Kijk in het logbestand voor verdere informatie.
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions=Toegevoegde kluis "%s".\nOntgrendel deze kluis om toegang te krijgen tot of om inhoud toe te voegen. Optioneel kunt u deze op elk later tijdstip ontgrendelen.
|
||||
addvaultwizard.success.unlockNow=Nu Ontgrendelen
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=Verwijder Kluis
|
||||
removeVault.information=Dit laat Cryptomator enkel deze kluis vergeten. U kunt deze later opnieuw toevoegen. Er worden geen versleutelde bestanden van uw harde schijf verwijderd.
|
||||
removeVault.confirmBtn=Verwijder Kluis
|
||||
|
||||
# Change Password
|
||||
changepassword.title=Wijzig wachtwoord
|
||||
changepassword.enterOldPassword=Voer het huidige wachtwoord voor "%s" in
|
||||
changepassword.enterNewPassword=Voer een nieuw wachtwoord voor de kluis in
|
||||
changepassword.reenterNewPassword=Bevestig het nieuwe wachtwoord
|
||||
changepassword.passwordsMatch=Wachtwoorden komen overeen!
|
||||
changepassword.passwordsDoNotMatch=Wachtwoorden komen niet overeen
|
||||
changepassword.finalConfirmation=Ik begrijp dat ik mijn gegevens niet kan herstellen als ik mijn wachtwoord vergeet
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=Wachtwoord vergeten
|
||||
forgetPassword.information=Dit zal het opgeslagen wachtwoord van deze kluis uit uw systeem wissen.
|
||||
forgetPassword.confirmBtn=Wachtwoord vergeten
|
||||
|
||||
# Unlock
|
||||
unlock.title=Kluis ontgrendelen
|
||||
unlock.passwordPrompt=Voer wachtwoord voor "%s" in:
|
||||
unlock.savePassword=Wachtwoord Opslaan
|
||||
unlock.unlockBtn=Ontgrendel
|
||||
## Success
|
||||
unlock.success.message="%s" is met succes ontgrendeld! Uw kluis is nu toegankelijk.
|
||||
unlock.success.revealBtn=Toon kluis
|
||||
|
||||
# Migration
|
||||
migration.title=Kluis upgraden
|
||||
## Start
|
||||
migration.start.prompt=Uw kluis "%s" moet worden bijgewerkt naar een nieuw formaat. Zorg dat er geen lopende synchronisaties zijn voordat u doorgaat.
|
||||
migration.start.confirm=Ja, mijn kluis is volledig gesynchroniseerd
|
||||
## Run
|
||||
migration.run.enterPassword=Voer wachtwoord voor "%s" in
|
||||
migration.run.startMigrationBtn=Kluis migreren
|
||||
## Sucess
|
||||
migration.success.nextStepsInstructions="%s" is succesvol gemigreerd.\nU kunt nu uw kluis ontgrendelen.
|
||||
migration.success.unlockNow=Nu Ontgrendelen
|
||||
|
||||
# Preferences
|
||||
preferences.title=Voorkeuren
|
||||
## General
|
||||
preferences.general=Algemeen
|
||||
preferences.general.theme=Uiterlijk
|
||||
preferences.general.startHidden=Verberg venster bij het opstarten van Cryptomator
|
||||
preferences.general.debugLogging=Debug logging aanzetten
|
||||
## Volume
|
||||
preferences.volume=Virtuele schijf
|
||||
preferences.volume.type=Type volume
|
||||
preferences.volume.webdav.port=WebDAV Poort
|
||||
preferences.volume.webdav.scheme=WebDAV Schema
|
||||
## Updates
|
||||
preferences.updates=Updates
|
||||
preferences.updates.currentVersion=Huidige Versie: "%s"
|
||||
preferences.updates.autoUpdateCheck=Automatisch controleren op updates
|
||||
preferences.updates.checkNowBtn=Controleer nu
|
||||
preferences.updates.updateAvailable=Update naar versie "%s" beschikbaar.
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Sluiten
|
||||
main.preferencesBtn.tooltip=Voorkeuren
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Klik hier om een kluis toe te voegen
|
||||
main.vaultlist.contextMenu.remove=Verwijder Kluis
|
||||
main.vaultlist.addVaultBtn=Kluis toevoegen
|
||||
## Vault Detail
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=VERGRENDELD
|
||||
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
|
||||
main.vaultDetail.bytesPerSecondRead=lezen:
|
||||
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
|
||||
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
|
||||
recoveryKey.enterPassword.prompt=Voer uw wachtwoord in om de herstelsleutel voor "%s" te tonen:
|
||||
recoveryKey.display.message=Herstelsleutel voor "%s":
|
||||
|
||||
# Misc
|
||||
passwordStrength.messageLabel.0=Zeer zwak
|
||||
passwordStrength.messageLabel.1=Zwak
|
||||
passwordStrength.messageLabel.2=Redelijk
|
||||
passwordStrength.messageLabel.3=Sterk
|
||||
passwordStrength.messageLabel.4=Zeer sterk
|
||||
|
||||
# Quit
|
||||
quit.prompt=Applicatie afsluiten? Er zijn kluizen ontgrendeld.
|
||||
quit.lockAndQuit=Vergrendelen en Afsluiten
|
||||
@@ -0,0 +1,55 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
|
||||
# Tray Menu
|
||||
|
||||
# Add Vault Wizard
|
||||
## Welcome
|
||||
## New
|
||||
### Name
|
||||
### Location
|
||||
### Password
|
||||
### Recovery Key
|
||||
### Information
|
||||
## Existing
|
||||
## Success
|
||||
|
||||
# Remove Vault
|
||||
|
||||
# Change Password
|
||||
|
||||
# Forget Password
|
||||
|
||||
# Unlock
|
||||
## Success
|
||||
|
||||
# Migration
|
||||
## Start
|
||||
## Run
|
||||
## Sucess
|
||||
|
||||
# Preferences
|
||||
## General
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
# Main Window
|
||||
## Vault List
|
||||
## Vault Detail
|
||||
### Locked
|
||||
### Unlocked
|
||||
### Needs Migration
|
||||
|
||||
# Wrong File Alert
|
||||
|
||||
# Vault Options
|
||||
## General
|
||||
## Mount
|
||||
|
||||
# Recovery Key
|
||||
|
||||
# Misc
|
||||
|
||||
# Quit
|
||||
@@ -0,0 +1,179 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
generic.button.apply=Aplicar
|
||||
generic.button.back=Voltar
|
||||
generic.button.cancel=Cancelar
|
||||
generic.button.change=Alterar
|
||||
generic.button.done=Pronto
|
||||
generic.button.next=Próximo
|
||||
|
||||
# Tray Menu
|
||||
traymenu.showMainWindow=Exibir
|
||||
traymenu.showPreferencesWindow=Preferências
|
||||
traymenu.quitApplication=Sair
|
||||
traymenu.vault.unlock=Desbloquear
|
||||
traymenu.vault.lock=Bloquear
|
||||
traymenu.vault.reveal=Exibir
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Adicionar Cofre
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Criar Um Novo Cofre
|
||||
addvaultwizard.welcome.existingButton=Abrir Um Cofre Existente
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Escolha um nome para o cofre
|
||||
addvaultwizard.new.namePrompt=Nome do Cofre
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Onde o Cryptomator deve armazenar os arquivos criptografados do seu cofre?
|
||||
addvaultwizard.new.locationLabel=Localização do armazenamento
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Local Personalizado
|
||||
addvaultwizard.new.directoryPickerButton=Escolher…
|
||||
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.
|
||||
### 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
|
||||
addvault.new.readme.storageLocation.fileName=O QUE É ESTE DIRETÓRIO.rtf
|
||||
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ ARQUIVOS DO COFRE ⚠️
|
||||
addvault.new.readme.storageLocation.2=Esta é a localização do seu cofre. {\\b NÃO} altere arquivos neste diretório.
|
||||
addvault.new.readme.storageLocation.3=Se você quiser criptografar seus arquivos usando o Cryptomator, desbloqueie o cofre e use o local de armazenamento provido.
|
||||
addvault.new.readme.storageLocation.4=Se precisar de ajuda, tente %s.
|
||||
addvault.new.readme.accessLocation.fileName=BEM VINDO AO SEU COFRE.rtf
|
||||
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ VOLUME CRIPTOGRAFADO 🔐️
|
||||
addvault.new.readme.accessLocation.2=Este é o local de acesso do seu cofre. Qualquer arquivo que você adicionar a este volume será criptografado pelo Cryptomator. Para acessar este volume posteriormente, simplesmente desbloqueie novamente o cofre na aplicação do Cryptomator.
|
||||
addvault.new.readme.accessLocation.3=Sinta-se livre para apagar este arquivo.
|
||||
## Existing
|
||||
addvaultwizard.existing.instruction=Selecione o arquivo "masterkey.cryptomator" do seu cofre existente.
|
||||
addvaultwizard.existing.chooseBtn=Selecionar…
|
||||
addvaultwizard.existing.filePickerTitle=Selecionar Arquivo Masterkey
|
||||
addvaultwizard.existing.error=Não foi possível adicionar o cofre "%s": Não é um cofre válido. Por favor, procure no log para mais informações.
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions=Cofre "%s" adicionado.\nVocê precisa desbloquear este cofre para acessar ou adicionar conteúdo. Você também pode desbloqueá-lo a qualquer momento.
|
||||
addvaultwizard.success.unlockNow=Desbloquear Agora
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=Remover Cofre
|
||||
removeVault.information=Isso apenas fará que o Cryptomator esqueça este cofre. Você pode adicioná--lo novamente. Nenhum arquivo criptografado será apagado do seu disco rígido.
|
||||
removeVault.confirmBtn=Remover Cofre
|
||||
|
||||
# Change Password
|
||||
changepassword.title=Alterar Senha
|
||||
changepassword.enterOldPassword=Digite a senha atual para "%s"
|
||||
changepassword.enterNewPassword=Digite uma nova senha para o seu cofre
|
||||
changepassword.reenterNewPassword=Confirme a nova senha
|
||||
changepassword.passwordsMatch=As senhas são idênticas!
|
||||
changepassword.passwordsDoNotMatch=As senhas são diferentes
|
||||
changepassword.finalConfirmation=Eu entendo que não poderei recuperar meus dados se esquecer minha senha
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=Esquecer Senha
|
||||
forgetPassword.information=Isso removerá a senha salva deste cofre do chaveiro do seu sistema.
|
||||
forgetPassword.confirmBtn=Esquecer Senha
|
||||
|
||||
# Unlock
|
||||
unlock.title=Desbloquear Cofre
|
||||
unlock.passwordPrompt=Digite a senha para "%s":
|
||||
unlock.savePassword=Salvar Senha
|
||||
unlock.unlockBtn=Desbloquear
|
||||
## Success
|
||||
unlock.success.message="%s" foi desbloqueado com sucesso! Seu cofre agora está acessível.
|
||||
unlock.success.revealBtn=Revelar Cofre
|
||||
|
||||
# Migration
|
||||
migration.title=Atualizar Cofre
|
||||
## Start
|
||||
migration.start.prompt=Seu cofre "%s" precisa ser atualizado para um novo formato. Antes de prosseguir, certifique-se de que nenhuma sincronização pendente está afetando este cofre.
|
||||
migration.start.confirm=Sim, meu cofre está completamente sincronizado
|
||||
## Run
|
||||
migration.run.enterPassword=Digite a senha para "%s"
|
||||
migration.run.startMigrationBtn=Migrar Cofre
|
||||
## Sucess
|
||||
migration.success.nextStepsInstructions="%s" migrado com sucesso.\nVocê agora pode desbloquear este cofre.
|
||||
migration.success.unlockNow=Desbloquear Agora
|
||||
|
||||
# Preferences
|
||||
preferences.title=Preferências
|
||||
## General
|
||||
preferences.general=Geral
|
||||
preferences.general.theme=Aparência
|
||||
preferences.general.startHidden=Ocultar janela ao iniciar o Cryptomator
|
||||
preferences.general.debugLogging=Ativar log de debug
|
||||
## Volume
|
||||
preferences.volume=Volume Virtual
|
||||
preferences.volume.type=Tipo de Volume
|
||||
preferences.volume.webdav.port=Porta WebDAV
|
||||
preferences.volume.webdav.scheme=Esquema WebDAV
|
||||
## Updates
|
||||
preferences.updates=Atualizações
|
||||
preferences.updates.currentVersion=Versão atual: %s
|
||||
preferences.updates.autoUpdateCheck=Buscar atualizações automaticamente
|
||||
preferences.updates.checkNowBtn=Buscar Agora
|
||||
preferences.updates.updateAvailable=Atualizar para versão %s disponível.
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Fechar
|
||||
main.preferencesBtn.tooltip=Preferências
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Clique aqui para adicionar um cofre
|
||||
main.vaultlist.contextMenu.remove=Remover Cofre
|
||||
main.vaultlist.addVaultBtn=Adicionar Cofre
|
||||
## Vault Detail
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=BLOQUEADO
|
||||
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
|
||||
main.vaultDetail.bytesPerSecondRead=leitura:
|
||||
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
|
||||
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
|
||||
vaultOptions.mount.customMountFlags=Flags Personalizadas de Montagem
|
||||
|
||||
# Recovery Key
|
||||
recoveryKey.title=Chave de recuperação
|
||||
recoveryKey.enterPassword.prompt=Digite sua senha para mostrar a chave de recuperação de "%s":
|
||||
recoveryKey.display.message=Chave de recuperação de "%s":
|
||||
|
||||
# Misc
|
||||
passwordStrength.messageLabel.0=Muito fraca
|
||||
passwordStrength.messageLabel.1=Fraca
|
||||
passwordStrength.messageLabel.2=Média
|
||||
passwordStrength.messageLabel.3=Forte
|
||||
passwordStrength.messageLabel.4=Muito forte
|
||||
|
||||
# Quit
|
||||
quit.prompt=Sair da aplicação? Existem cofres desbloqueados.
|
||||
@@ -0,0 +1,184 @@
|
||||
# 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=Неверное имя хранилища. Укажите корректное имя каталога.
|
||||
addvaultwizard.new.ioException=Выбранный каталог не прошел начальную проверку. Убедитесь, что у вас есть права доступа и ничего не мешает Cryptomator.
|
||||
### Password
|
||||
addvaultwizard.new.reenterPassword=Подтвердите пароль
|
||||
addvaultwizard.new.passwordsMatch=Пароли совпадают
|
||||
addvaultwizard.new.passwordsDoNotMatch=Пароли не совпадают
|
||||
addvaultwizard.new.createVaultBtn=Создать хранилище
|
||||
### 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.3=Если вы хотите зашифровать файлы с помощью Cryptomator, разблокируйте хранилище и используйте предоставленный диск.
|
||||
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=Этот файл можно удалить.
|
||||
## Existing
|
||||
addvaultwizard.existing.instruction=Выберите файл "masterkey.cryptomator" из имеющегося хранилища.
|
||||
addvaultwizard.existing.chooseBtn=Выбрать…
|
||||
addvaultwizard.existing.filePickerTitle=Выберите файл мастер-ключа
|
||||
addvaultwizard.existing.error=Невозможно добавить хранилище "%s": оно некорректное. См. информацию в журнале событий.
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions=Добавлено хранилище "%s".\nДля добавления данных или доступа к содержимому нужно разблокировать хранилище. Его можно разблокировать и позже.
|
||||
addvaultwizard.success.unlockNow=Разблокировать
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=Удалить хранилище
|
||||
removeVault.information=Cryptomator просто забудет это хранилище. Позже вы можете добавить его снова. Зашифрованные файлы не будут удалены с жёсткого диска.
|
||||
removeVault.confirmBtn=Удалить хранилище
|
||||
|
||||
# Change Password
|
||||
changepassword.title=Изменить пароль
|
||||
changepassword.enterOldPassword=Введите текущий пароль для "%s"
|
||||
changepassword.enterNewPassword=Введите новый пароль для хранилища
|
||||
changepassword.reenterNewPassword=Подтвердите новый пароль
|
||||
changepassword.passwordsMatch=Пароли совпадают
|
||||
changepassword.passwordsDoNotMatch=Пароли не совпадают
|
||||
changepassword.finalConfirmation=Я понимаю, что не смогу восстановить свои данные, если забуду пароль
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=Не помню пароль
|
||||
forgetPassword.information=Сохранённый пароль от этого хранилища будет удалён из вашей связки ключей.
|
||||
forgetPassword.confirmBtn=Не помню пароль
|
||||
|
||||
# Unlock
|
||||
unlock.title=Разблокировать хранилище
|
||||
unlock.passwordPrompt=Введите пароль для "%s"
|
||||
unlock.savePassword=Сохранить пароль
|
||||
unlock.unlockBtn=Разблокировать
|
||||
## Success
|
||||
unlock.success.message=Разблокировка "%s" успешно выполнена! Доступ в хранилище открыт.
|
||||
unlock.success.revealBtn=Показать хранилище
|
||||
|
||||
# Migration
|
||||
migration.title=Обновить хранилище
|
||||
## Start
|
||||
migration.start.prompt=Хранилище "%s" нужно обновить до более нового формата. Прежде чем продолжить, убедитесь, что нет отложенной синхронизации, которая может повлиять на хранилище.
|
||||
migration.start.confirm=Да, моё хранилище полностью синхронизировано
|
||||
## Run
|
||||
migration.run.enterPassword=Введите пароль для "%s"
|
||||
migration.run.startMigrationBtn=Перенести хранилище
|
||||
## Sucess
|
||||
migration.success.nextStepsInstructions=Перенос "%s" успешно выполнен.\nТеперь можно разблокировать хранилище.
|
||||
migration.success.unlockNow=Разблокировать
|
||||
|
||||
# Preferences
|
||||
preferences.title=Настройки
|
||||
## General
|
||||
preferences.general=Общие
|
||||
preferences.general.theme=Оформление
|
||||
preferences.general.startHidden=Скрывать окно при запуске Cryptomator
|
||||
preferences.general.debugLogging=Вести журнал отладки
|
||||
## Volume
|
||||
preferences.volume=Виртуальный диск
|
||||
preferences.volume.type=Тип тома
|
||||
preferences.volume.webdav.port=Порт WebDAV
|
||||
preferences.volume.webdav.scheme=Схема WebDAV
|
||||
## Updates
|
||||
preferences.updates=Обновления
|
||||
preferences.updates.currentVersion=Текущая версия: %s
|
||||
preferences.updates.autoUpdateCheck=Автоматически проверять наличие обновлений
|
||||
preferences.updates.checkNowBtn=Проверить
|
||||
preferences.updates.updateAvailable=Доступно обновление до версии %s.
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Закрыть
|
||||
main.preferencesBtn.tooltip=Настройки
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Нажмите здесь, чтобы добавить хранилище
|
||||
main.vaultlist.contextMenu.remove=Удалить хранилище
|
||||
main.vaultlist.addVaultBtn=Добавить хранилище
|
||||
## Vault Detail
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=ЗАБЛОКИРОВАНО
|
||||
main.vaultDetail.unlockBtn=Разблокировать
|
||||
main.vaultDetail.optionsBtn=Параметры хранилища
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=РАЗБЛОКИРОВАНО
|
||||
main.vaultDetail.accessLocation=Содержимое хранилища доступно здесь:
|
||||
main.vaultDetail.revealBtn=Показать диск
|
||||
main.vaultDetail.lockBtn=Заблокировать
|
||||
main.vaultDetail.bytesPerSecondRead=чтение:
|
||||
main.vaultDetail.bytesPerSecondWritten=запись:
|
||||
main.vaultDetail.throughput.idle=бездействие
|
||||
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=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=Ключ восстановления
|
||||
recoveryKey.enterPassword.prompt=Введите пароль, чтобы показать ключ для "%s":
|
||||
recoveryKey.display.message=Ключ восстановления для "%s":
|
||||
|
||||
# Misc
|
||||
passwordStrength.messageLabel.0=Очень слабый
|
||||
passwordStrength.messageLabel.1=Слабый
|
||||
passwordStrength.messageLabel.2=Хороший
|
||||
passwordStrength.messageLabel.3=Сильный
|
||||
passwordStrength.messageLabel.4=Очень сильный
|
||||
|
||||
# Quit
|
||||
quit.prompt=Выйти из приложения? Есть разблокированные хранилища.
|
||||
quit.lockAndQuit=Заблокировать и выйти
|
||||
@@ -0,0 +1,183 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
generic.button.apply=Verkställ
|
||||
generic.button.back=Bakåt
|
||||
generic.button.cancel=Avbryt
|
||||
generic.button.change=Ändra
|
||||
generic.button.done=Klar
|
||||
generic.button.next=Nästa
|
||||
|
||||
# Tray Menu
|
||||
traymenu.showMainWindow=Visa
|
||||
traymenu.showPreferencesWindow=Inställningar
|
||||
traymenu.quitApplication=Avsluta
|
||||
traymenu.vault.unlock=Lås upp
|
||||
traymenu.vault.lock=Lås
|
||||
traymenu.vault.reveal=Visa
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Lägg till valv
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Skapa nytt valv
|
||||
addvaultwizard.welcome.existingButton=Öppna befintligt valv
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Välj namn för valvet
|
||||
addvaultwizard.new.namePrompt=Valvets namn
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Var ska Cryptomator lagra de krypterade filerna för ditt valv?
|
||||
addvaultwizard.new.locationLabel=Lagringsplats
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Anpassad plats
|
||||
addvaultwizard.new.directoryPickerButton=Välj…
|
||||
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.
|
||||
### 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
|
||||
addvault.new.readme.storageLocation.fileName=VAD ÄR DETTA FÖR KATALOG.rtf
|
||||
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ VALV-FILER ⚠️
|
||||
addvault.new.readme.storageLocation.2=Detta är ditt valvs lagringsplats. {\\b ÄNDRA INTE} någon fil i denna katalog.
|
||||
addvault.new.readme.storageLocation.3=Om du vill kryptera filer med Cryptomator, lås upp valvet och använd angiven enhet.
|
||||
addvault.new.readme.storageLocation.4=Om du behöver hjälp, prova %s.
|
||||
addvault.new.readme.accessLocation.fileName=VÄLKOMMEN TILL DITT VALV.rtf
|
||||
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ KRYPTERAD VOLYM 🔐️
|
||||
addvault.new.readme.accessLocation.2=Detta är ditt valvs åtkomstplats. Filer som läggs till i denna volym kommer att krypteras av Cryptomator. För att komma åt denna volym senare, lås bara upp den igen från Cryptomator-programmet.
|
||||
addvault.new.readme.accessLocation.3=Du kan ta bort denna fil.
|
||||
## Existing
|
||||
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
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=Ta bort valv
|
||||
removeVault.information=Detta kommer bara ta bort valvet från Cryptomator. Du kan lägga till det igen senare. Inga krypterade filer kommer tas bort från din hårddisk.
|
||||
removeVault.confirmBtn=Ta bort valv
|
||||
|
||||
# Change Password
|
||||
changepassword.title=Ändra lösenord
|
||||
changepassword.enterOldPassword=Ange nuvarande lösenord för "%s"
|
||||
changepassword.enterNewPassword=Ange ett nytt lösenord för ditt valv
|
||||
changepassword.reenterNewPassword=Bekräfta det nya lösenordet
|
||||
changepassword.passwordsMatch=Lösenorden stämmer överens!
|
||||
changepassword.passwordsDoNotMatch=Lösenorden stämmer inte överens
|
||||
changepassword.finalConfirmation=Jag förstår att jag inte kommer kunna återställa mitt data om jag glömmer mitt lösenord
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=Glöm lösenord
|
||||
forgetPassword.information=Detta kommer radera det sparade lösenordet för detta valv från ditt systems lösenordshantering.
|
||||
forgetPassword.confirmBtn=Glöm lösenord
|
||||
|
||||
# Unlock
|
||||
unlock.title=Lås upp valv
|
||||
unlock.passwordPrompt=Ange lösenord för "%s":
|
||||
unlock.savePassword=Spara lösenord
|
||||
unlock.unlockBtn=Lås upp
|
||||
## Success
|
||||
unlock.success.message="%s" upplåst! Ditt valv är nu åtkomligt.
|
||||
unlock.success.revealBtn=Visa valv
|
||||
|
||||
# Migration
|
||||
migration.title=Uppgradera valv
|
||||
## Start
|
||||
migration.start.prompt=Ditt valv "%s" behöver uppdateras till ett nyare format. Säkerställ att ingen filsynkronisering kommer påverka valvet innan du fortsätter.
|
||||
migration.start.confirm=Ja, mitt valv är synkroniserat
|
||||
## Run
|
||||
migration.run.enterPassword=Ange lösenordet för "%s"
|
||||
migration.run.startMigrationBtn=Migrera valv
|
||||
## Sucess
|
||||
migration.success.nextStepsInstructions="%s" migrerades fullständigt.\nDu kan nu låsa upp ditt valv.
|
||||
migration.success.unlockNow=Lås upp nu
|
||||
|
||||
# Preferences
|
||||
preferences.title=Inställningar
|
||||
## General
|
||||
preferences.general=Allmänt
|
||||
preferences.general.theme=Utseende
|
||||
preferences.general.startHidden=Dölj fönster när Cryptomator startar
|
||||
preferences.general.debugLogging=Aktivera debug loggning
|
||||
## Volume
|
||||
preferences.volume=Virtuell enhet
|
||||
preferences.volume.type=Volym-typ
|
||||
preferences.volume.webdav.port=WebDAV Port
|
||||
preferences.volume.webdav.scheme=WebDAV Schema
|
||||
## Updates
|
||||
preferences.updates=Uppdateringar
|
||||
preferences.updates.currentVersion=Nuvarande version: %s
|
||||
preferences.updates.autoUpdateCheck=Kontrollera uppdateringar automatiskt
|
||||
preferences.updates.checkNowBtn=Kontrollera nu
|
||||
preferences.updates.updateAvailable=Uppdatering till version %s finns tillgänglig.
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Stäng
|
||||
main.preferencesBtn.tooltip=Inställningar
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Klicka här för att lägga till valv
|
||||
main.vaultlist.contextMenu.remove=Ta bort valv
|
||||
main.vaultlist.addVaultBtn=Lägg till valv
|
||||
## Vault Detail
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=LÅ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
|
||||
main.vaultDetail.bytesPerSecondRead=läst:
|
||||
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
|
||||
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
|
||||
recoveryKey.enterPassword.prompt=Ange ditt lösenord för att visa återställningsnyckeln för "%s":
|
||||
recoveryKey.display.message=Återställningsnyckel för "%s":
|
||||
|
||||
# Misc
|
||||
passwordStrength.messageLabel.0=Mycket svagt
|
||||
passwordStrength.messageLabel.1=Svagt
|
||||
passwordStrength.messageLabel.2=Skapligt
|
||||
passwordStrength.messageLabel.3=Starkt
|
||||
passwordStrength.messageLabel.4=Mycket starkt
|
||||
|
||||
# Quit
|
||||
quit.prompt=Avsluta applikationen? Det finns olåsta valv.
|
||||
quit.lockAndQuit=Lås och avsluta
|
||||
@@ -0,0 +1,184 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
generic.button.apply=Uygula
|
||||
generic.button.back=Geri
|
||||
generic.button.cancel=İptal
|
||||
generic.button.change=Değiştir
|
||||
generic.button.done=Bitti
|
||||
generic.button.next=İleri
|
||||
|
||||
# Tray Menu
|
||||
traymenu.showMainWindow=Göster
|
||||
traymenu.showPreferencesWindow=Seçenekler
|
||||
traymenu.quitApplication=Çık
|
||||
traymenu.vault.unlock=Kilidi Aç
|
||||
traymenu.vault.lock=Kilitle
|
||||
traymenu.vault.reveal=Göster
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Kasa Ekle
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Yeni Kasa Oluştur
|
||||
addvaultwizard.welcome.existingButton=Varolan Kasayı Aç
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Kasa için bir isim seç
|
||||
addvaultwizard.new.namePrompt=Kasa Adı
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Cryptomator kasanızın şifreli dosyalarını nerede depolasın?
|
||||
addvaultwizard.new.locationLabel=Depolama yeri
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Özel Konum
|
||||
addvaultwizard.new.directoryPickerButton=Seç…
|
||||
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
|
||||
addvault.new.readme.storageLocation.fileName=BU DİZİN NEDİR.rtf
|
||||
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ KASA DOSYALARI ⚠️
|
||||
addvault.new.readme.storageLocation.2=Bu kasanızın depolama yeri. Bu dizindeki herhangi bir dosyayı asla {\\b DEĞİŞTİRMEYİN}.
|
||||
addvault.new.readme.storageLocation.3=Dosyaları Cryptomator kullanarak şifrelemek istiyorsanız kasanın kilidini açın ve verilen sürücüyü kullanın.
|
||||
addvault.new.readme.storageLocation.4=Eğer yardıma ihtiyacınız varsa, %s 'ı deneyin.
|
||||
addvault.new.readme.accessLocation.fileName=KASANIZA HOŞGELDİNİZ.rtf
|
||||
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ ŞİFRELENMİŞ BİRİM 🔐️
|
||||
addvault.new.readme.accessLocation.2=Bu kasanızın erişim yeri. Bu birime eklenen dosyalar Cryptomator tarafından şifrelenir. Bu birime daha sonra bir daha erişmek için Cryptomator uygulamasından tekrar kilidini kaldırmanız yeterlidir.
|
||||
addvault.new.readme.accessLocation.3=Bu dosyayı silmeye çekinmeyin.
|
||||
## Existing
|
||||
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ç
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=Kasayı Sil
|
||||
removeVault.information=Bu, yalnızca Cryptomator'ın bu kasayı unutmasını sağlar. Daha sonra tekrar ekleyebilirsiniz. Şifrelenmiş hiçbir dosya sabit diskinizden silinmez.
|
||||
removeVault.confirmBtn=Kasayı Sil
|
||||
|
||||
# Change Password
|
||||
changepassword.title=Şifreyi Değiştir
|
||||
changepassword.enterOldPassword="%s" için şuanki şifreyi gir
|
||||
changepassword.enterNewPassword=Kasanız için yeni bir şifre girin
|
||||
changepassword.reenterNewPassword=Yeni şifreyi onaylayın
|
||||
changepassword.passwordsMatch=Şifreler eşleşti!
|
||||
changepassword.passwordsDoNotMatch=Şifreler eşleşmiyor
|
||||
changepassword.finalConfirmation=Şifremi unutursam verilerimi kurtaramayacağımın farkındayım
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=Şifreyi Unut
|
||||
forgetPassword.information=Bu, bu kasanın kaydedilmiş şifresini sistem anahtarlığınızdan siler.
|
||||
forgetPassword.confirmBtn=Şifreyi Unut
|
||||
|
||||
# Unlock
|
||||
unlock.title=Kasa Kilidini Aç
|
||||
unlock.passwordPrompt="%s" için şifre girin:
|
||||
unlock.savePassword=Şifreyi Kaydet
|
||||
unlock.unlockBtn=Kilidi Aç
|
||||
## Success
|
||||
unlock.success.message="%s" 'nin kilidi başarıyla açıldı! Kasanız şimdi erişilebilir durumda.
|
||||
unlock.success.revealBtn=Kasayı Göster
|
||||
|
||||
# Migration
|
||||
migration.title=Kasayı Güncelle
|
||||
## Start
|
||||
migration.start.prompt="%s" kasanızın daha yeni bir biçime güncellenmesi gerekiyor. Devam etmeden önce, bu kasayı etkileyen bekleyen bir senkronizasyon olmadığından emin olun.
|
||||
migration.start.confirm=Evet, kasam tamamen senkronize edildi
|
||||
## Run
|
||||
migration.run.enterPassword="%s" için şifre girin
|
||||
migration.run.startMigrationBtn=Kasayı Taşı
|
||||
## Sucess
|
||||
migration.success.nextStepsInstructions="%s" başarıyla taşındı.\nKasanızın kilidini şimdi kaldırabilirsiniz.
|
||||
migration.success.unlockNow=Kilidi Şimdi Aç
|
||||
|
||||
# Preferences
|
||||
preferences.title=Seçenekler
|
||||
## General
|
||||
preferences.general=Genel
|
||||
preferences.general.theme=Görünüş ve Davranış
|
||||
preferences.general.startHidden=Cryptomator'ı başlatırken pencereyi gizle
|
||||
preferences.general.debugLogging=Hata ayıklama günlüğünü etkinleştir
|
||||
## Volume
|
||||
preferences.volume=Sanal Sürücü
|
||||
preferences.volume.type=Birim Tipi
|
||||
preferences.volume.webdav.port=WebDAV Portu
|
||||
preferences.volume.webdav.scheme=WebDAV Düzeni
|
||||
## Updates
|
||||
preferences.updates=Güncellemeler
|
||||
preferences.updates.currentVersion=Şuanki Sürüm: %s
|
||||
preferences.updates.autoUpdateCheck=Güncellemeleri otomatik kontrol et
|
||||
preferences.updates.checkNowBtn=Şimdi Kontrol Et
|
||||
preferences.updates.updateAvailable=%s sürümüne güncelleme mevcut.
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Kapat
|
||||
main.preferencesBtn.tooltip=Seçenekler
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Kasa eklemek için buraya tıklayın
|
||||
main.vaultlist.contextMenu.remove=Kasayı Sil
|
||||
main.vaultlist.addVaultBtn=Kasa Ekle
|
||||
## Vault Detail
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=KİLİTLİ
|
||||
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
|
||||
main.vaultDetail.bytesPerSecondRead=okuma:
|
||||
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
|
||||
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
|
||||
passwordStrength.messageLabel.1=Zayıf
|
||||
passwordStrength.messageLabel.2=Orta
|
||||
passwordStrength.messageLabel.3=Güçlü
|
||||
passwordStrength.messageLabel.4=Çok güçlü
|
||||
|
||||
# Quit
|
||||
quit.prompt=Uygulamadan çıkmak mı istiyorsunuz? Hala kilidi açılmış kasalar var.
|
||||
quit.lockAndQuit=Kilitle ve Çık
|
||||
@@ -1,126 +0,0 @@
|
||||
app.name = كريبتوماتور
|
||||
# main.fxml
|
||||
main.emptyListInstructions = اضغط هنا لاضافة محفظة
|
||||
main.directoryList.contextMenu.remove = ازل من القائمة
|
||||
main.directoryList.contextMenu.changePassword = تغيير كلمة المرور
|
||||
main.addDirectory.contextMenu.new = انشاء محفظة جديدة
|
||||
main.addDirectory.contextMenu.open = افتح محفظة موجوده
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = فحص التحديثات
|
||||
welcome.newVersionMessage = يمكنك الان تحميل الاصدار رقم %1$s\nالاصدار الحالي %2$s
|
||||
# initialize.fxml
|
||||
initialize.label.password = كلمة المرور
|
||||
initialize.label.retypePassword = اعد كتابة كلمة المرور
|
||||
initialize.button.ok = انشاء محفظة
|
||||
initialize.messageLabel.alreadyInitialized = لقد تم تهيئة المحفظة
|
||||
initialize.messageLabel.initializationFailed = تعذر تهيئة المحفظة . يرجي مراجعة ملف التفاصيل ( log file )
|
||||
# notfound.fxml
|
||||
notfound.label = تعذر العثور علي المحفظه , هل قمت بنقلها ؟
|
||||
# upgrade.fxml
|
||||
upgrade.button = ترقية المحفظة
|
||||
upgrade.version3dropBundleExtension.msg = This vault needs to be migrated to a newer format.\n"%1$s" will be renamed to "%2$s".\nPlease make sure synchronization has finished before proceeding.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = Automatic migration failed.\n"%s" already exists.
|
||||
# unlock.fxml
|
||||
unlock.label.password = كلمة المرور
|
||||
unlock.label.mountName = Drive Name
|
||||
unlock.label.winDriveLetter = Custom Drive Letter
|
||||
unlock.label.downloadsPageLink = جميع اصدارات كريبتوماتور
|
||||
unlock.label.advancedHeading = خيارات اضافية
|
||||
unlock.button.unlock = افتح المحفظة
|
||||
unlock.button.advancedOptions.show = خيارات اكثر
|
||||
unlock.button.advancedOptions.hide = خيارات اقل
|
||||
unlock.choicebox.winDriveLetter.auto = دخول تلقائي
|
||||
unlock.errorMessage.wrongPassword = كلمة مرور خاطئة
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = محفظة غير مدعومة . هذه المحفظة تم انشاؤها بواسطة اصدار اقدم من كريبتوماتور
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = محفظة غير مدعومة . هذه المحفظة تم انشاؤها بواسطة اصدار احدث من كريبتوماتور
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = كلمة المرور القديمة
|
||||
changePassword.label.newPassword = كلمة المرور الجديدة
|
||||
changePassword.label.retypePassword = اعد كتابة كلمة المرور
|
||||
changePassword.label.downloadsPageLink = جميع اصدارات كريبتوماتور
|
||||
changePassword.button.change = تغيير كلمة المرور
|
||||
changePassword.errorMessage.wrongPassword = كلمة مرور خاطئة
|
||||
changePassword.errorMessage.decryptionFailed = فشل فك التشفير
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = اغلاق المحفظة
|
||||
unlocked.moreOptions.reveal = Reveal Drive
|
||||
unlocked.label.revealFailed = Command failed
|
||||
unlocked.label.unmountFailed = Ejecting drive failed
|
||||
unlocked.label.statsEncrypted = مشفر
|
||||
unlocked.label.statsDecrypted = غير مشفر
|
||||
unlocked.ioGraph.yAxis.label = Throughput (MiB/s)
|
||||
# settings.fxml
|
||||
settings.version.label = الاصدار %s
|
||||
settings.checkForUpdates.label = افحص التحديثات
|
||||
# tray icon
|
||||
tray.menu.open = فتح
|
||||
tray.menu.quit = اغلاق
|
||||
tray.infoMsg.title = لا يزال مستخدم
|
||||
tray.infoMsg.msg = Cryptomator is still alive. Quit it from the tray icon.
|
||||
tray.infoMsg.msg.osx = Cryptomator is still alive. Quit it from the menu bar icon.
|
||||
initialize.messageLabel.passwordStrength.0 = ضعيف جدا
|
||||
initialize.messageLabel.passwordStrength.1 = ضعيف
|
||||
initialize.messageLabel.passwordStrength.2 = عادي
|
||||
initialize.messageLabel.passwordStrength.3 = قوي
|
||||
initialize.messageLabel.passwordStrength.4 = قوي جدا
|
||||
initialize.label.doNotForget = هام \: في حالة نسيانك لكلمة المرور , لا يوجد طريقة لاستعادتها مره اخري
|
||||
main.directoryList.remove.confirmation.title = ازالة المحفظة
|
||||
main.directoryList.remove.confirmation.header = هل تريد فعلا ازالة المحفظة ؟
|
||||
main.directoryList.remove.confirmation.content = The vault will only be removed from the list. To permanently delete it, please delete the vault from your filesystem.
|
||||
upgrade.version3to4.msg = This vault needs to be migrated to a newer format.\nEncrypted folder names will be updated.\nPlease make sure synchronization has finished before proceeding.
|
||||
upgrade.version3to4.err.io = Migration failed due to an I/O Exception. See log file for details.
|
||||
# upgrade.fxml
|
||||
upgrade.confirmation.label = Yes, I've made sure that synchronization has finished
|
||||
unlock.label.savePassword = حفظ كلمة المرور
|
||||
unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.
|
||||
unlock.savePassword.delete.confirmation.title = حذف كلمة المرور المحفوظة
|
||||
unlock.savePassword.delete.confirmation.header = Do you really want to delete the saved password of this vault?
|
||||
unlock.savePassword.delete.confirmation.content = The saved password of this vault will be immediately deleted from your system keychain. If you'd like to save your password again, you'd have to unlock your vault with the "Save Password" option enabled.
|
||||
settings.debugMode.label = Debug Mode
|
||||
upgrade.version3dropBundleExtension.title = Vault Version 3 Upgrade (Drop Bundle Extension)
|
||||
upgrade.version3to4.title = Vault Version 3 to 4 Upgrade
|
||||
upgrade.version4to5.title = Vault Version 4 to 5 Upgrade
|
||||
upgrade.version4to5.msg = This vault needs to be migrated to a newer format.\nEncrypted files will be updated.\nPlease make sure synchronization has finished before proceeding.\n\nNote\: Modification date of all files will be changed to the current date/time in the process.
|
||||
upgrade.version4to5.err.io = Migration failed due to an I/O Exception. See log file for details.
|
||||
unlock.label.revealAfterMount = Reveal Drive
|
||||
unlocked.lock.force.confirmation.title = Locking of %1$s failed
|
||||
unlocked.lock.force.confirmation.header = Do you want to force locking?
|
||||
unlocked.lock.force.confirmation.content = This may be because other programs are still accessing files in the vault or because some other problem occurred.\n\nPrograms still accessing the files may not work correctly and data not already written by those programs may be lost.
|
||||
unlock.label.unlockAfterStartup = Auto-Unlock on Start (Experimental)
|
||||
unlock.errorMessage.unlockFailed = Unlock failed. See log file for details.
|
||||
upgrade.version5toX.title = Vault Version Upgrade
|
||||
upgrade.version5toX.msg = This vault needs to be migrated to a newer format.\nPlease make sure synchronization has finished before proceeding.
|
||||
main.createVault.nonEmptyDir.title = Creating vault failed
|
||||
main.createVault.nonEmptyDir.header = Chosen directory is not empty
|
||||
main.createVault.nonEmptyDir.content = The selected directory already contains files (possibly hidden). A vault can only be created in an empty directory.
|
||||
settings.webdav.port.label = WebDAV Port
|
||||
settings.webdav.port.prompt = 0 \= Choose automatically
|
||||
settings.webdav.port.apply = Apply
|
||||
settings.webdav.prefGvfsScheme.label = WebDAV Scheme
|
||||
settings.volume.label = Preferred Volume Type
|
||||
settings.volume.webdav = WebDAV
|
||||
settings.volume.fuse = FUSE
|
||||
unlock.successLabel.vaultCreated = Vault was successfully created.
|
||||
unlock.successLabel.passwordChanged = Password was successfully changed.
|
||||
unlock.successLabel.upgraded = Vault was successfully upgraded.
|
||||
unlock.label.useOwnMountPath = Custom Mount Point
|
||||
welcome.askForUpdateCheck.dialog.title = Update check
|
||||
welcome.askForUpdateCheck.dialog.header = Enable the integrated update check?
|
||||
welcome.askForUpdateCheck.dialog.content = Recommended\: Enable the update check to always be sure you have the newest version of Cryptomator, with all security patches, installed.\n\nYou can change this from within the settings at any time.
|
||||
settings.volume.dokany = Dokany
|
||||
main.gracefulShutdown.dialog.title = Locking vault(s) failed
|
||||
main.gracefulShutdown.dialog.header = Vault(s) in use
|
||||
main.gracefulShutdown.dialog.content = One or more vaults are still in use by other programs. Please close them to allow Cryptomator to shut down properly, then try again.\n\nIf this doesn't work, Cryptomator can shut down forcefully, but this can incur data loss and is not recommended.
|
||||
main.gracefulShutdown.button.tryAgain = Try Again
|
||||
main.gracefulShutdown.button.forceShutdown = Force Shutdown
|
||||
unlock.pendingMessage.unlocking = Unlocking vault...
|
||||
unlock.failedDialog.title = Unlock failed
|
||||
unlock.failedDialog.header = Unlock failed
|
||||
unlock.failedDialog.content.mountPathNonExisting = Mount point does not exist.
|
||||
unlock.failedDialog.content.mountPathNotEmpty = Mount point is not empty.
|
||||
unlock.label.useReadOnlyMode = Read-Only
|
||||
unlock.label.chooseMountPath = Choose empty directory…
|
||||
ctrl.secPasswordField.nonPrintableChars = Password contains control characters.\nRecommendation\: Remove them to ensure compatibility with other clients.
|
||||
ctrl.secPasswordField.capsLocked = Caps Lock is activated.
|
||||
unlock.label.useCustomMountFlags = Custom Mount Flags
|
||||
unlock.choicebox.winDriveLetter.occupied = occupied
|
||||
@@ -1,128 +0,0 @@
|
||||
app.name = Криптоматор
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Натиснете тук за добавяне на сейф
|
||||
main.directoryList.contextMenu.remove = Премахване от листата
|
||||
main.directoryList.contextMenu.changePassword = Смяна на парола
|
||||
main.addDirectory.contextMenu.new = Създаване на нов сейф
|
||||
main.addDirectory.contextMenu.open = Отворяне на съществуващ сейф
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Проверка за обновления...
|
||||
welcome.newVersionMessage = Версия %1$s може да бъде свалена.\nТази е %2$s.
|
||||
# initialize.fxml
|
||||
initialize.label.password = Парола
|
||||
initialize.label.retypePassword = Повторете паролата
|
||||
initialize.button.ok = Създаване на сейф
|
||||
initialize.messageLabel.alreadyInitialized = Сейфа е вече активен
|
||||
initialize.messageLabel.initializationFailed = Неуспешно активиране на сейф. Проверете лог файловете за повече информация.
|
||||
# notfound.fxml
|
||||
notfound.label = Сейфа не може да бъде намерен. Може би е бил преместен?
|
||||
# upgrade.fxml
|
||||
upgrade.button = Обновете сейфа
|
||||
upgrade.version3dropBundleExtension.msg = Този сейф трябва да бъде променен към новия формат.\n"%1$s" ще бъде преименуван в "%2$s".\nМоля, уверете се, че синхронизацията е преключила преди да продължите.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = Автоматичната промяна е неуспешна. "%s" вече съществува.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Парола
|
||||
unlock.label.mountName = Име на диск
|
||||
# Fuzzy
|
||||
unlock.label.winDriveLetter = Инициали на диск
|
||||
unlock.label.downloadsPageLink = Всички версии на Криптоматор
|
||||
unlock.label.advancedHeading = Опции за напреднали
|
||||
unlock.button.unlock = Отключване на сейф
|
||||
unlock.button.advancedOptions.show = Повече опции
|
||||
unlock.button.advancedOptions.hide = По-малко опции
|
||||
unlock.choicebox.winDriveLetter.auto = Автоматично наименование на диска
|
||||
unlock.errorMessage.wrongPassword = Неправилна парола
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Неподържана версия. Този сейф е бил създаден със стара версия на Криптоматор.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Неподържана версия. Този сейф е бил създаден с по-нова версия на Криптоматор.
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Стара парола
|
||||
changePassword.label.newPassword = Нова парола
|
||||
changePassword.label.retypePassword = Повторете паролата
|
||||
changePassword.label.downloadsPageLink = Всички версии на Криптоматор
|
||||
changePassword.button.change = Смени паролата
|
||||
changePassword.errorMessage.wrongPassword = Неправилна парола
|
||||
changePassword.errorMessage.decryptionFailed = Неуспешно декриптиране
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Заключване на Сейфа
|
||||
unlocked.moreOptions.reveal = Покажи диска
|
||||
unlocked.label.revealFailed = Командата е неуспешна
|
||||
unlocked.label.unmountFailed = Изваждането на диска е неуспешно
|
||||
unlocked.label.statsEncrypted = криптирано
|
||||
unlocked.label.statsDecrypted = декрептирано
|
||||
unlocked.ioGraph.yAxis.label = Скорост (MB/s)
|
||||
# settings.fxml
|
||||
settings.version.label = Версия %s
|
||||
settings.checkForUpdates.label = Проверка за обновления
|
||||
# tray icon
|
||||
tray.menu.open = Отворяне
|
||||
tray.menu.quit = Изход
|
||||
tray.infoMsg.title = Все още върви
|
||||
tray.infoMsg.msg = Криптоматор все още върви. Излезте от иконата в трея.
|
||||
tray.infoMsg.msg.osx = Криптоматор все още върви. Излезте от иконата в менюто.
|
||||
initialize.messageLabel.passwordStrength.0 = Прекалено слаба
|
||||
initialize.messageLabel.passwordStrength.1 = Слаба
|
||||
initialize.messageLabel.passwordStrength.2 = Добра
|
||||
initialize.messageLabel.passwordStrength.3 = Силна
|
||||
initialize.messageLabel.passwordStrength.4 = Много силна
|
||||
initialize.label.doNotForget = ВАЖНО\: Ако забравите паролата, няма начин да възстановите данните.
|
||||
main.directoryList.remove.confirmation.title = Премахване на сейф
|
||||
main.directoryList.remove.confirmation.header = Наистина ли искате да премахнете този сейф?
|
||||
main.directoryList.remove.confirmation.content = Този сейф ще бъде премахнат само от листа. За да го изтриете напълно, моля, изтрийте сейфа от файл системата.
|
||||
upgrade.version3to4.msg = Този сейф трябва да бъде преместен към по-нов формат.\nКриптираните имена на папки ще бъдат обновени.\nМоля, проверете дали сихронизацията е приключила преди да продължите.
|
||||
upgrade.version3to4.err.io = Преместването е отменено поради грешка в диска. Вижте лог файла за детайли.
|
||||
# upgrade.fxml
|
||||
upgrade.confirmation.label = Да, сигурен съм, че сихронизацията е приключила
|
||||
unlock.label.savePassword = Запазване на парола
|
||||
unlock.errorMessage.unauthenticVersionMac = Неуспешна оторизация на MAC версията
|
||||
unlock.savePassword.delete.confirmation.title = Изтриване на запазената парола
|
||||
unlock.savePassword.delete.confirmation.header = Неистина ли искате да изтриете запазената парола за този сейф?
|
||||
unlock.savePassword.delete.confirmation.content = Запазената парола за този сейф ще бъде незабавно премахната от Вашата система. Ако желаете да запазите паролата отново, трябва да отключите сейса с пусната опция "Запазване на павола".
|
||||
settings.debugMode.label = Режим за отстраняване на грешки
|
||||
upgrade.version3dropBundleExtension.title = Обновяване до сейф версия 3
|
||||
upgrade.version3to4.title = Обновяване на сейф от 3-та до 4-та версия
|
||||
upgrade.version4to5.title = Обновяване на сейф от 4-та до 5-та версия
|
||||
upgrade.version4to5.msg = Този сейф трябва да бъде променен към по-нов формат.\nКриптираните файлове ще бъдат обновени.\nМоля, проверете дали сихронизацията е приключила преди да продължите.\n\nЗабележка\: Датата на промяна на всички файлове ще бъде обновена до момента.
|
||||
upgrade.version4to5.err.io = Преместването провалено поради грешка в диска. Вижте лог файла за детайли.
|
||||
unlock.label.revealAfterMount = Показване на диска
|
||||
unlocked.lock.force.confirmation.title = Заключването на %1$s провалено
|
||||
unlocked.lock.force.confirmation.header = Желаете ли принудително заключване?
|
||||
unlocked.lock.force.confirmation.content = Това е може би защото други програми все още използват файловете в сейфа или защото има някакъв друг проблем.\n\nПрограмите, имащи достъп до файловете, може да не работят правилно и информацията, незаписана от тези програми, може да бъде изгубена.
|
||||
unlock.label.unlockAfterStartup = Автоматично отключване при стартиране (Експериментално)
|
||||
unlock.errorMessage.unlockFailed = Грешка при отключване. Вижте лог файла за детайли.
|
||||
upgrade.version5toX.title = Обновяване на версията на сейфа
|
||||
upgrade.version5toX.msg = Този сейф трябва да бъде обновен до по-нов формат.\nМоля, уверете се, че сихронизацията е приключила, преди да продължите.
|
||||
main.createVault.nonEmptyDir.title = Неуспешно създаване на сейф
|
||||
main.createVault.nonEmptyDir.header = Избраната директория не е празна
|
||||
main.createVault.nonEmptyDir.content = Избраната директория съдържа файлове /може би скрити/. Сейфът може да бъде създаден само в празна директория
|
||||
settings.webdav.port.label = WebCAM порт
|
||||
settings.webdav.port.prompt = 0 \= Автоматично избиране
|
||||
settings.webdav.port.apply = Приложи
|
||||
settings.webdav.prefGvfsScheme.label = WebDAV схема
|
||||
settings.volume.label = Метод за точка
|
||||
settings.volume.webdav = WebDAV
|
||||
settings.volume.fuse = Предпазител
|
||||
unlock.successLabel.vaultCreated = Сейфът беше създаден успешно
|
||||
unlock.successLabel.passwordChanged = Паролата беше сменена успешно
|
||||
unlock.successLabel.upgraded = Криптоматор беше обновен
|
||||
# Fuzzy
|
||||
unlock.label.useOwnMountPath = Използвайте собствена точка за монтиране
|
||||
welcome.askForUpdateCheck.dialog.title = Update check
|
||||
welcome.askForUpdateCheck.dialog.header = Enable the integrated update check?
|
||||
welcome.askForUpdateCheck.dialog.content = Recommended\: Enable the update check to always be sure you have the newest version of Cryptomator, with all security patches, installed.\n\nYou can change this from within the settings at any time.
|
||||
settings.volume.dokany = Dokany
|
||||
main.gracefulShutdown.dialog.title = Locking vault(s) failed
|
||||
main.gracefulShutdown.dialog.header = Vault(s) in use
|
||||
main.gracefulShutdown.dialog.content = One or more vaults are still in use by other programs. Please close them to allow Cryptomator to shut down properly, then try again.\n\nIf this doesn't work, Cryptomator can shut down forcefully, but this can incur data loss and is not recommended.
|
||||
main.gracefulShutdown.button.tryAgain = Try Again
|
||||
main.gracefulShutdown.button.forceShutdown = Force Shutdown
|
||||
unlock.pendingMessage.unlocking = Unlocking vault...
|
||||
unlock.failedDialog.title = Unlock failed
|
||||
unlock.failedDialog.header = Unlock failed
|
||||
unlock.failedDialog.content.mountPathNonExisting = Mount point does not exist.
|
||||
unlock.failedDialog.content.mountPathNotEmpty = Mount point is not empty.
|
||||
unlock.label.useReadOnlyMode = Read-Only
|
||||
unlock.label.chooseMountPath = Choose empty directory…
|
||||
ctrl.secPasswordField.nonPrintableChars = Password contains control characters.\nRecommendation\: Remove them to ensure compatibility with other clients.
|
||||
ctrl.secPasswordField.capsLocked = Caps Lock is activated.
|
||||
unlock.label.useCustomMountFlags = Custom Mount Flags
|
||||
unlock.choicebox.winDriveLetter.occupied = occupied
|
||||
@@ -1,128 +0,0 @@
|
||||
app.name = Cryptomator
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Feu click ací per afegir una caixa forta
|
||||
main.directoryList.contextMenu.remove = Elimina de la llista
|
||||
main.directoryList.contextMenu.changePassword = Canvia la contrasenya
|
||||
main.addDirectory.contextMenu.new = Crea una caixa forta nova
|
||||
main.addDirectory.contextMenu.open = Obri una caixa forta existent
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Comprovant actualitzacions
|
||||
welcome.newVersionMessage = La versió %1$s és disponible per descarregar.\nLa versió actual és %2$s.
|
||||
# initialize.fxml
|
||||
initialize.label.password = Contrasenya
|
||||
initialize.label.retypePassword = Torneu a escriure la contrasenya
|
||||
initialize.button.ok = Crea una caixa forta
|
||||
initialize.messageLabel.alreadyInitialized = La caixa forta ja està inicialitzada
|
||||
initialize.messageLabel.initializationFailed = No s'ha pogut inicialitzar la caixa forta. Consulteu l'arxiu de registre per a més informació.
|
||||
# notfound.fxml
|
||||
notfound.label = No s'ha trobat la caixa forta. S'ha mogut a altre lloc?
|
||||
# upgrade.fxml
|
||||
upgrade.button = Actualitza la caixa forta
|
||||
upgrade.version3dropBundleExtension.msg = Esta caixa forta es deu actualitzar a un format més modern.\nEs va a canviar el nom de "%1$s" a "%2$s".\nAssegureu-vos de que la sincronització ha acabat abans d'iniciar el procés.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = Error en la migració automàtica.\n"%s" ja existeix.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Contrasenya
|
||||
unlock.label.mountName = Nom de la unitat
|
||||
# Fuzzy
|
||||
unlock.label.winDriveLetter = Lletra de la unitat
|
||||
unlock.label.downloadsPageLink = Totes les versions de Cryptomator
|
||||
unlock.label.advancedHeading = Opcions avançades
|
||||
unlock.button.unlock = Debloqueja la caixa forta
|
||||
unlock.button.advancedOptions.show = Més opcions
|
||||
unlock.button.advancedOptions.hide = Menys opcions
|
||||
unlock.choicebox.winDriveLetter.auto = Assigna automàticament
|
||||
unlock.errorMessage.wrongPassword = Contrasenya incorrecta
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = La caixa forta no és compatible. Aquesta caixa forta s'ha creat amb una versió anterior de Cryptomator.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = La caixa forta no és compatible. Aquesta caixa forta s'ha creat amb una versió més nova de Cryptomator.
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Contrasenya antiga
|
||||
changePassword.label.newPassword = Contrasenya nova
|
||||
changePassword.label.retypePassword = Torneu a escriure la contrasenya
|
||||
changePassword.label.downloadsPageLink = Totes les versions de Cryptomator
|
||||
changePassword.button.change = Canvia la contrasenya
|
||||
changePassword.errorMessage.wrongPassword = Contrasenya incorrecta
|
||||
changePassword.errorMessage.decryptionFailed = Ha fallat el desencriptatge
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Bloqueja la caixa forta
|
||||
unlocked.moreOptions.reveal = Mostra la unitat
|
||||
unlocked.label.revealFailed = L'ordre ha fallat
|
||||
unlocked.label.unmountFailed = Error al expulsar la unidad
|
||||
unlocked.label.statsEncrypted = xifrat
|
||||
unlocked.label.statsDecrypted = desxifrat
|
||||
unlocked.ioGraph.yAxis.label = Velocitat de transferència de dades (MiB/s)
|
||||
# settings.fxml
|
||||
settings.version.label = Versió %s
|
||||
settings.checkForUpdates.label = Comprova si hi ha actualitzacions
|
||||
# tray icon
|
||||
tray.menu.open = Obri
|
||||
tray.menu.quit = Surt
|
||||
tray.infoMsg.title = Encara s'està executant
|
||||
tray.infoMsg.msg = Cryptomator encara està executant-se. Sortiu des de la icona de la safata.
|
||||
tray.infoMsg.msg.osx = Cryptomator encara està executant-se. Sortiu des de la icona de la barra de menú
|
||||
initialize.messageLabel.passwordStrength.0 = Molt dèbil
|
||||
initialize.messageLabel.passwordStrength.1 = Dèbil
|
||||
initialize.messageLabel.passwordStrength.2 = Acceptable
|
||||
initialize.messageLabel.passwordStrength.3 = Forta
|
||||
initialize.messageLabel.passwordStrength.4 = Molt forta
|
||||
initialize.label.doNotForget = IMPORTANT\: No hi ha manera de recuperar les dades si oblideu la contrasenya.
|
||||
main.directoryList.remove.confirmation.title = Suprimeix la caixa forta
|
||||
main.directoryList.remove.confirmation.header = ¿Esteu segur que voleu suprimir aquesta caixa forta?
|
||||
main.directoryList.remove.confirmation.content = La caixa forta només es suprimeix de la llista. Per tal de eliminar-la permanentment esborreu la caixa forta del vostre sistema de fitxers.
|
||||
upgrade.version3to4.msg = S'ha de migrar la caixa forta a un format més nou.\nS'actualitzaran els noms xifrats de les carpetes.\nAssegureu-vos que la sincronització ha acabat abans de continuar.
|
||||
upgrade.version3to4.err.io = Error en la migració degut a una excepció de E/S. Comproveu el registre per veure'n els detalls.\n
|
||||
# upgrade.fxml
|
||||
upgrade.confirmation.label = Sí, m'he assegurat que la sincronització hagi acabat
|
||||
unlock.label.savePassword = Desa la contrasenya
|
||||
unlock.errorMessage.unauthenticVersionMac = No s'ha pogut autenticar la versió de MAC.
|
||||
unlock.savePassword.delete.confirmation.title = Elimina la contrasenya desada
|
||||
unlock.savePassword.delete.confirmation.header = Esteu segur que voleu eliminar la contrasenya desada d'aquesta unitat?
|
||||
unlock.savePassword.delete.confirmation.content = La contrasenya desada d'aquesta caixa forta va a ser eliminada inmediatament del clauer del seu sistema. Si voleu tornar a desar la contrasenya haureu de tornar a desbloquejar la vostra caixa forta i activar l'opció "Desa la contrasenya".
|
||||
settings.debugMode.label = Mode de depuració
|
||||
upgrade.version3dropBundleExtension.title = Actualitza la caixa forta a la versió 3 (Drop Bundle Extension)
|
||||
upgrade.version3to4.title = Actualitza la caixa forta de la versió 3 a la 4
|
||||
upgrade.version4to5.title = Actualitza la caixa forta de la versió 4 a la 5
|
||||
upgrade.version4to5.msg = S'ha de migrar la caixa forta a un format més nou.\nS'actualitzaran els fitxers xifrats.\nAssegureu-vos que la sincronització ha acabat abans de continuar.\n\nNota\: la data de modificació de tots els fitxers es canviarà a la data/hora del procés.
|
||||
upgrade.version4to5.err.io = La migració ha fallat a causa d'una excepció d'E/S. Comproveu el registre per veure'n els detalls.
|
||||
unlock.label.revealAfterMount = Mostra la unitat
|
||||
unlocked.lock.force.confirmation.title = Ha fallat el bloqueig de %1$s
|
||||
unlocked.lock.force.confirmation.header = Voleu forçar el bloqueig?
|
||||
unlocked.lock.force.confirmation.content = Això pot ser perquè altres programes encara estan accedint als fitxers de la caixa forta o perquè s'ha produït un altre problema.\n\nEls programes què encara estan accedint als fitxers poden funcionar incorrectament i les dades què aquests programes no hagin escrit es poden perdre.
|
||||
unlock.label.unlockAfterStartup = Desbloqueig automàtic al iniciar (experimental)
|
||||
unlock.errorMessage.unlockFailed = Ha fallat el desbloqueig. Comproveu el registre per veure'n els detalls.
|
||||
upgrade.version5toX.title = Actualització de la versió de la caixa forta
|
||||
upgrade.version5toX.msg = S'ha de migrar la caixa forta a un format més nou.\nAssegureu-vos que la sincronització ha acabat abans de continuar.
|
||||
main.createVault.nonEmptyDir.title = Ha fallat la creació de la caixa forta
|
||||
main.createVault.nonEmptyDir.header = El directori seleccionat no és buit
|
||||
main.createVault.nonEmptyDir.content = Hi ha fitxers (possibement ocults) al directori seleccionat. Només es pot crear una caixa forta a un directori buit.
|
||||
settings.webdav.port.label = Port WebDAV
|
||||
settings.webdav.port.prompt = 0 \= Tria automàticament
|
||||
settings.webdav.port.apply = Aplica
|
||||
settings.webdav.prefGvfsScheme.label = Esquema de WebDAV
|
||||
settings.volume.label = Tipus de volum preferit
|
||||
settings.volume.webdav = WebDAV
|
||||
settings.volume.fuse = FUSE
|
||||
unlock.successLabel.vaultCreated = La caixa forta s'ha creat correctament.
|
||||
unlock.successLabel.passwordChanged = La contrasenya s'ha canviat correctament.
|
||||
unlock.successLabel.upgraded = Cryptomator s'ha actualitzat correctament.
|
||||
# Fuzzy
|
||||
unlock.label.useOwnMountPath = Utilitza un punt de muntatge personalitzat
|
||||
welcome.askForUpdateCheck.dialog.title = Comprovació d'actualizacions
|
||||
welcome.askForUpdateCheck.dialog.header = Activo la comprovació automàtica d'actualitzacions?
|
||||
welcome.askForUpdateCheck.dialog.content = Recomanat\: Activa la comprovació d'actualitzacions per assegurar-vos que sempre teniu la darrera versió de Cryptomator instal·lada amb totes les actualitzacions de seguretat.\n\nPodeu canviar aquesta opció des de la configuració en qualsevol moment.
|
||||
settings.volume.dokany = Dokany
|
||||
main.gracefulShutdown.dialog.title = Ha fallat el bloqueig de la caixa(es) forta(es)
|
||||
main.gracefulShutdown.dialog.header = La caixa(es) forta(es) és(són) en ús
|
||||
main.gracefulShutdown.dialog.content = Hi ha programes encara estan utilitzant una caixa forta o més d'una. Tanqueu-los per permetre que Cryptomator es tanqui correctament i, a continuació, torneu-ho a intentar.\n\nSi això no funciona, es pot forçar l'aturada de Cryptomator tot i que no es recomana, donç pot comportar pèrdua de dades.
|
||||
main.gracefulShutdown.button.tryAgain = Torna-ho a intentar
|
||||
main.gracefulShutdown.button.forceShutdown = Força l'aturada
|
||||
unlock.pendingMessage.unlocking = La caixa forta s'està desbloquejant...
|
||||
unlock.failedDialog.title = El desbloqueig ha fallat
|
||||
unlock.failedDialog.header = El desbloqueig ha fallat
|
||||
unlock.failedDialog.content.mountPathNonExisting = El punt de muntatge no existeix.
|
||||
unlock.failedDialog.content.mountPathNotEmpty = El punt de muntatge no és buit
|
||||
unlock.label.useReadOnlyMode = Només de lectura
|
||||
unlock.label.chooseMountPath = Trieu un directori buit...
|
||||
ctrl.secPasswordField.nonPrintableChars = Password contains control characters.\nRecommendation\: Remove them to ensure compatibility with other clients.
|
||||
ctrl.secPasswordField.capsLocked = Caps Lock is activated.
|
||||
unlock.label.useCustomMountFlags = Custom Mount Flags
|
||||
unlock.choicebox.winDriveLetter.occupied = occupied
|
||||
@@ -1,130 +0,0 @@
|
||||
app.name = Cryptomator
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Trezor přidáte kliknutím zde\n
|
||||
main.directoryList.contextMenu.remove = Odstranit ze seznamu
|
||||
main.directoryList.contextMenu.changePassword = Změnit heslo
|
||||
main.addDirectory.contextMenu.new = Vytvořit nový trezor
|
||||
main.addDirectory.contextMenu.open = Otevřít existující trezor
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Hledání aktualizací...
|
||||
welcome.newVersionMessage = Ke stažení je verze %1$s.\nNyní je nainstalovaná %2$s.
|
||||
# initialize.fxml
|
||||
initialize.label.password = Heslo
|
||||
initialize.label.retypePassword = Zopakování hesla
|
||||
initialize.button.ok = Vytvořit trezor
|
||||
initialize.messageLabel.alreadyInitialized = Trezor je už připravený
|
||||
initialize.messageLabel.initializationFailed = Trezor se nepodařilo připravit. Podrobnosti naleznete v souboru se záznamem událostí (log).
|
||||
# notfound.fxml
|
||||
notfound.label = Trezor nebyl nalezen. Možná byl přesunut?
|
||||
# upgrade.fxml
|
||||
upgrade.button = Přechod na novější verzi trezoru
|
||||
upgrade.version3dropBundleExtension.msg = Tento trezor je třeba aktualizovat na novější formát.\n„%1$s“ bude přejmenováno na „%2$s“.\nNež budete pokračovat ověřte, že synchronizace byla dokončena.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = Automatický převod se nezdařil.\n„%s“ už existuje.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Heslo
|
||||
unlock.label.mountName = Název jednotky
|
||||
# Fuzzy
|
||||
unlock.label.winDriveLetter = Písmeno jednotky
|
||||
unlock.label.downloadsPageLink = Všechny verze Cryptomator
|
||||
unlock.label.advancedHeading = Pokročilé volby
|
||||
unlock.button.unlock = Odemknout trezor
|
||||
unlock.button.advancedOptions.show = Více možností
|
||||
unlock.button.advancedOptions.hide = Méně možností
|
||||
unlock.choicebox.winDriveLetter.auto = Přiřadit automaticky
|
||||
unlock.errorMessage.wrongPassword = Chybné heslo
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Nepodporovaná verze trezoru. Byl vytvořen ve starším Cryptomator.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Nepodporovaná verze trezoru. Byl vytvořen v novějším Cryptomator.
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Původní heslo
|
||||
changePassword.label.newPassword = Nové heslo
|
||||
changePassword.label.retypePassword = Zopakujte heslo
|
||||
changePassword.label.downloadsPageLink = Všechny verze Cryptomator
|
||||
changePassword.button.change = Změnit heslo
|
||||
changePassword.errorMessage.wrongPassword = Chybné heslo
|
||||
changePassword.errorMessage.decryptionFailed = Nepodařilo se rozšifrovat
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Uzamknout trezor
|
||||
unlocked.moreOptions.reveal = Odkrýt jednotku
|
||||
unlocked.label.revealFailed = Vykonání příkazu se nezdařilo
|
||||
unlocked.label.unmountFailed = Odpojení jednotky se nezdařilo
|
||||
unlocked.label.statsEncrypted = zašifrováno
|
||||
unlocked.label.statsDecrypted = rozšifrováno
|
||||
unlocked.ioGraph.yAxis.label = Propustnost (MiB/s)
|
||||
# settings.fxml
|
||||
settings.version.label = Verze %s
|
||||
settings.checkForUpdates.label = Zjistit případné aktualizace
|
||||
# tray icon
|
||||
tray.menu.open = Otevřít
|
||||
tray.menu.quit = Ukončit
|
||||
tray.infoMsg.title = Stále ještě spuštěné
|
||||
tray.infoMsg.msg = Cryptomator je pořád ještě spuštěný. Ukončete ho přes ikonu v oznamovací oblasti.
|
||||
tray.infoMsg.msg.osx = Cryptomator je pořád ještě spuštěný. Ukončete ho z ikony v liště nabídek.
|
||||
initialize.messageLabel.passwordStrength.0 = Velmi slabé
|
||||
initialize.messageLabel.passwordStrength.1 = Slabé
|
||||
initialize.messageLabel.passwordStrength.2 = Dobré
|
||||
initialize.messageLabel.passwordStrength.3 = Silné
|
||||
# Easter egg for Czech users.
|
||||
initialize.messageLabel.passwordStrength.4 = Velmi silné
|
||||
initialize.label.doNotForget = DŮLEŽITÉ\: Pokud heslo ztratíte/zapomenete, nenávratně přijdete o přístup k datům\!
|
||||
main.directoryList.remove.confirmation.title = Odebrat trezor
|
||||
main.directoryList.remove.confirmation.header = Opravdu chcete tento trezor odebrat?
|
||||
main.directoryList.remove.confirmation.content = Trezor bude pouze odebrán ze seznamu v Cryptomator. Končené odstranění provedete až smazáním jeho složky na souborovém systému.
|
||||
upgrade.version3to4.msg = Tento trezor je třeba aktualizovat na novější formát.\nNázvy šifrovaných složek budou aktualizovány.\nNež budete pokračovat ověřte, že byla dokončena synchronizace.
|
||||
upgrade.version3to4.err.io = Převod se nezdařil kvůli výjimce na vst./výst. Podrobnosti naleznete v souboru se záznamem událostí (log).
|
||||
# upgrade.fxml
|
||||
upgrade.confirmation.label = Ano, je ověřeno, že synchronizace byla dokončena
|
||||
unlock.label.savePassword = Uložit heslo
|
||||
unlock.errorMessage.unauthenticVersionMac = Nedaří se ověřit MAC funkci verze.
|
||||
unlock.savePassword.delete.confirmation.title = Smazat uložené heslo
|
||||
unlock.savePassword.delete.confirmation.header = Opravdu chcete smazat uložené heslo pro tento trezor?
|
||||
unlock.savePassword.delete.confirmation.content = Uložené heslo k tomuto trezoru bude okamžitě vymazáno ze systémové klíčenky. Pokud ho tam budete chtít znovu uložit, bude třeba trezor odemknout se zapnutou volbou „Uložit heslo“.
|
||||
settings.debugMode.label = Ladící režim
|
||||
# Extension of what please? File, protocol, aplication extension for example? And bundle of what with what? Thanks :)
|
||||
upgrade.version3dropBundleExtension.title = Přechod z verze 3 trezoru na novější (odebrat příp. .cryptomator a registraci bundle v macOS)
|
||||
upgrade.version3to4.title = Aktualizace trezoru z verze 3 na 4
|
||||
upgrade.version4to5.title = Aktualizace trezoru z verze 4 na 5
|
||||
upgrade.version4to5.msg = Tento trezor je třeba aktualizovat na novější formát.\nZašifrované soubory budou aktualizovány.\nNež budete pokračovat ověřte, že synchronizace byla dokončena.\n\nPozn.\: Datum úpravy bude v rámci toho u všech dotčených souborů změněn na aktuální datum a čas.
|
||||
upgrade.version4to5.err.io = Převod se nezdařil kvůli chybě na vstupu nebo výstupu. Podrobnosti naleznete v souboru se záznamem událostí (log).
|
||||
unlock.label.revealAfterMount = Odkrýt jednotku
|
||||
unlocked.lock.force.confirmation.title = Zamykání %1$s se nezdařilo
|
||||
unlocked.lock.force.confirmation.header = Chcete vynutit uzamčení?
|
||||
unlocked.lock.force.confirmation.content = Toto může být způsobeno tím, že ostatní aplikace stále ještě přistupují k souborům v trezoru nebo došlo k nějakému jinému problému.\n\nMůže se ovšem stát, že aplikace které stáje ještě pracují se soubory z trezoru to nemusí ustát a může dojít ke ztrátě ještě neuložených dat.
|
||||
unlock.label.unlockAfterStartup = Automatické odemknutí při spuštění (experimentální)
|
||||
unlock.errorMessage.unlockFailed = Odemknutí se nezdařilo. Podrobnosti naleznete v souboru se záznamem událostí (log).
|
||||
upgrade.version5toX.title = Aktualizace verze trezoru
|
||||
upgrade.version5toX.msg = Tento trezor je třeba aktualizovat na novější formát.\nNež budete pokračovat ověřte, že byla dokončena synchronizace.
|
||||
main.createVault.nonEmptyDir.title = Vytvoření trezoru se nezdařilo
|
||||
main.createVault.nonEmptyDir.header = Zvolená složka není prázdná
|
||||
main.createVault.nonEmptyDir.content = Zvolená složka už obsahuje soubory (možná skryté). Trezor je možné vytvořit pouze v prázdné složce.
|
||||
settings.webdav.port.label = Port WebDAV
|
||||
settings.webdav.port.prompt = 0 \= zvolit automaticky
|
||||
settings.webdav.port.apply = Použít
|
||||
settings.webdav.prefGvfsScheme.label = WebDAV schéma
|
||||
settings.volume.label = Způsob připojení (mount)
|
||||
settings.volume.webdav = WebDAV
|
||||
settings.volume.fuse = FUSE
|
||||
unlock.successLabel.vaultCreated = Trezor byl úspěšně vytvořen.
|
||||
unlock.successLabel.passwordChanged = Heslo bylo úspěšně změněno.
|
||||
unlock.successLabel.upgraded = Cryptomator byl úspěšně povýšen na novou verzi.
|
||||
# Fuzzy
|
||||
unlock.label.useOwnMountPath = Použít vlastní přípojný bod
|
||||
welcome.askForUpdateCheck.dialog.title = Zjišťování aktualizací
|
||||
welcome.askForUpdateCheck.dialog.header = Zjišťovat automaticky nové verze?
|
||||
welcome.askForUpdateCheck.dialog.content = Ke zjištění aktualizací, Cryptomator stáhne aktuální verzi z instalačních serverů a zobrazí nápovědu, když je k dispozici novější verze, než je nainstalovaná.\n\nDoporučujeme zapnout zjišťování aktualizací a zajistit tak, že vždy budete mít nejnovější verzi Cryptomator, se všemi opravami zabezpečení nainstalovanými. Pokud automatické zjišťování nezapnete, je možné ručně stahovat nejnovější verzi z https\://cryptomator.org/downloads/.\n\nToto nastavení je možné kdykoli změnit v nastavení aplikace.
|
||||
settings.volume.dokany = Dokany
|
||||
main.gracefulShutdown.dialog.title = Zamčení trezorů se nezdařilo
|
||||
main.gracefulShutdown.dialog.header = Trezory v používání
|
||||
main.gracefulShutdown.dialog.content = Jeden nebo více trezorů je stále v používání ostatními programy. Ukončete je aby se Cryptomator mohl správně vypnout a zkuste to znovu.\n\nPokud to nezabere, Cryptomator je možné vypnout vynuceně, ale to může vést ke ztrátě dat a není proto doporučeno.
|
||||
main.gracefulShutdown.button.tryAgain = Zkusit znovu
|
||||
main.gracefulShutdown.button.forceShutdown = Vynutit vypnutí
|
||||
unlock.pendingMessage.unlocking = Odemykání trezoru…
|
||||
unlock.failedDialog.title = Odemknutí se nezdařilo
|
||||
unlock.failedDialog.header = Odemknutí se nezdařilo
|
||||
unlock.failedDialog.content.mountPathNonExisting = Přípojný bod neexistuje.
|
||||
unlock.failedDialog.content.mountPathNotEmpty = Přípojný bod není prázdný.
|
||||
unlock.label.useReadOnlyMode = Pouze pro čtení
|
||||
unlock.label.chooseMountPath = Zvolte prázdnou složku…
|
||||
ctrl.secPasswordField.nonPrintableChars = Heslo obsahuje řídící znaky.\nDoporučení\: Odeberete je kvůli kompatibilitě s ostatními klienty.
|
||||
ctrl.secPasswordField.capsLocked = Je zapnutá klávesa Caps Lock.
|
||||
unlock.label.useCustomMountFlags = Custom Mount Flags
|
||||
unlock.choicebox.winDriveLetter.occupied = occupied
|
||||
@@ -1,127 +0,0 @@
|
||||
app.name = Cryptomator
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Tryk her for at tilføje en ny Vault
|
||||
main.directoryList.contextMenu.remove = Fjern fra listen
|
||||
main.directoryList.contextMenu.changePassword = Skift adgangskode
|
||||
main.addDirectory.contextMenu.new = Opret ny Vault
|
||||
main.addDirectory.contextMenu.open = Åben en eksisterende Vault
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Tjek for opdateringer
|
||||
welcome.newVersionMessage = Version %1$s kan nu hentes.\nDette er %2$s.
|
||||
# initialize.fxml
|
||||
initialize.label.password = Adgangskode
|
||||
initialize.label.retypePassword = Gentag Adgangskode
|
||||
initialize.button.ok = Opret Vault
|
||||
initialize.messageLabel.alreadyInitialized = Vault er allerede initialiseret
|
||||
initialize.messageLabel.initializationFailed = Kunne ikke initialisere Vault. Se logfilen for yderligere detaljer.
|
||||
# notfound.fxml
|
||||
notfound.label = Vault'en kunne ikke findes. Er den blevet flyttet?
|
||||
# upgrade.fxml
|
||||
upgrade.button = Opgradér Vault
|
||||
upgrade.version3dropBundleExtension.msg = Denne Vault skal migreres til et nyere format.\n"%1$s" vil blive omdøbt til "%2$s".\nVent venligst til al synkronisering er gennemført, inden du fortsætter.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = Automatisk migrering fejlede.\n"%s" eksisterer allerede.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Adgangskode
|
||||
unlock.label.mountName = Drev navn
|
||||
# Fuzzy
|
||||
unlock.label.winDriveLetter = Drev bogstav
|
||||
unlock.label.downloadsPageLink = Alle Cryptomator versioner
|
||||
unlock.label.advancedHeading = Avancerede Indstillinger
|
||||
unlock.button.unlock = Lås op for Vault
|
||||
unlock.button.advancedOptions.show = Flere valgmuligheder
|
||||
unlock.button.advancedOptions.hide = Færre valgmuligheder
|
||||
unlock.choicebox.winDriveLetter.auto = Tildel automatisk
|
||||
unlock.errorMessage.wrongPassword = Forkert adgangskode
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Ikke-understøttet Vault. Denne Vault er blevet oprettet med en ældre version af Cryptomator.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Ikke-understøttet Vault. Denne Vault er blevet oprettet med en nyere version af Cryptomator.
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Gammel adgangskode
|
||||
changePassword.label.newPassword = Ny adgangskode
|
||||
changePassword.label.retypePassword = Gentag adgangskode
|
||||
changePassword.label.downloadsPageLink = Alle Cryptomator versioner
|
||||
changePassword.button.change = Skift adgangskode
|
||||
changePassword.errorMessage.wrongPassword = Forkert adgangskode
|
||||
changePassword.errorMessage.decryptionFailed = Dekryptering fejlede
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Lås Vault
|
||||
unlocked.moreOptions.reveal = Vis drev
|
||||
unlocked.label.revealFailed = Kommando fejlede
|
||||
unlocked.label.unmountFailed = Afmontering af drev fejlede
|
||||
unlocked.label.statsEncrypted = Krypteret
|
||||
unlocked.label.statsDecrypted = Dekrypteret
|
||||
unlocked.ioGraph.yAxis.label = Throughput (MiB/s)
|
||||
# settings.fxml
|
||||
settings.version.label = Version %s
|
||||
settings.checkForUpdates.label = Tjek for opdateringer
|
||||
# tray icon
|
||||
tray.menu.open = Åbn
|
||||
tray.menu.quit = Afslut
|
||||
tray.infoMsg.title = Kører Stadig
|
||||
tray.infoMsg.msg = Cryptomator kører stadig. Afslut programmet fra tray-ikonet.
|
||||
tray.infoMsg.msg.osx = Cryptomator kører stadig. Afslut programmet fra menu-baren.
|
||||
initialize.messageLabel.passwordStrength.0 = Meget svag
|
||||
initialize.messageLabel.passwordStrength.1 = Svag
|
||||
initialize.messageLabel.passwordStrength.2 = Mellem
|
||||
initialize.messageLabel.passwordStrength.3 = Stærk
|
||||
initialize.messageLabel.passwordStrength.4 = Meget stærk
|
||||
initialize.label.doNotForget = VIGTIGT\: Hvis du glemmer dit password, er der ingen måde hvorpå data kan genskabes.
|
||||
main.directoryList.remove.confirmation.title = Slet Vault
|
||||
main.directoryList.remove.confirmation.header = Er du sikker på at du vil slette denne Vault?
|
||||
main.directoryList.remove.confirmation.content = Valgte Vault vil kun blive slettet fra listen. For at slette denne permanent, skal du slette filerne fra dit filsystem.
|
||||
upgrade.version3to4.msg = Denne Vault skal migreres til et nyere format.\nDe krypterede foldernavne vil blive opdateret.\nVent venligst til al synkronisering er gennemført, inden du fortsætter.
|
||||
upgrade.version3to4.err.io = Migrering fejlede pga. en I/O fejl. Se logfilen for yderligere detaljer.
|
||||
# upgrade.fxml
|
||||
upgrade.confirmation.label = Ja, jeg har sikret mig at al synkronisering er gennemført.
|
||||
unlock.label.savePassword = Gem adgangskode
|
||||
unlock.errorMessage.unauthenticVersionMac = Kunne ikke autentificere versions-MAC
|
||||
unlock.savePassword.delete.confirmation.title = Slet gemt adgangskode
|
||||
unlock.savePassword.delete.confirmation.header = Er du sikker på at du vil slette den til Vault'en gemte adgangskode?
|
||||
unlock.savePassword.delete.confirmation.content = Den til Vault'en gemte adgangskode vil blive slettet fra dit systems keychain med øjeblikkelig virkning. Hvis du vil gemme din adgangskode på ny, skal du låse din Vault op med indstillingen "Gem adgangskode" slået til.
|
||||
settings.debugMode.label = Debug Tilstand
|
||||
upgrade.version3dropBundleExtension.title = Vault Version 3 Opgradering (Drop Bundle Extension)
|
||||
upgrade.version3to4.title = Vault Version 3 til 4 Opgradering
|
||||
upgrade.version4to5.title = Vault Version 4 til 5 Opgradering
|
||||
upgrade.version4to5.msg = Denne Vault skal migreres til et nyere format.\nDe krypterede filer vil blive opdateret.\nVent venligst til al synkronisering er gennemført, inden du fortsætter.\n\nNote\: Denne proces vil påvirke ændringsdato og -tidspunkt for samtlige filer.
|
||||
upgrade.version4to5.err.io = Migrering fejlede pga. en I/O fejl. Se logfilen for yderligere detaljer.
|
||||
unlock.label.revealAfterMount = Vis drev
|
||||
unlocked.lock.force.confirmation.title = Locking of %1$s failed
|
||||
unlocked.lock.force.confirmation.header = Do you want to force locking?
|
||||
unlocked.lock.force.confirmation.content = This may be because other programs are still accessing files in the vault or because some other problem occurred.\n\nPrograms still accessing the files may not work correctly and data not already written by those programs may be lost.
|
||||
unlock.label.unlockAfterStartup = Auto-Unlock on Start (Experimental)
|
||||
unlock.errorMessage.unlockFailed = Unlock failed. See log file for details.
|
||||
upgrade.version5toX.title = Vault Version Upgrade
|
||||
upgrade.version5toX.msg = This vault needs to be migrated to a newer format.\nPlease make sure synchronization has finished before proceeding.
|
||||
main.createVault.nonEmptyDir.title = Creating vault failed
|
||||
main.createVault.nonEmptyDir.header = Chosen directory is not empty
|
||||
main.createVault.nonEmptyDir.content = The selected directory already contains files (possibly hidden). A vault can only be created in an empty directory.
|
||||
settings.webdav.port.label = WebDAV Port
|
||||
settings.webdav.port.prompt = 0 \= Choose automatically
|
||||
settings.webdav.port.apply = Apply
|
||||
settings.webdav.prefGvfsScheme.label = WebDAV Scheme
|
||||
settings.volume.label = Preferred Volume Type
|
||||
settings.volume.webdav = WebDAV
|
||||
settings.volume.fuse = FUSE
|
||||
unlock.successLabel.vaultCreated = Vault was successfully created.
|
||||
unlock.successLabel.passwordChanged = Password was successfully changed.
|
||||
unlock.successLabel.upgraded = Vault was successfully upgraded.
|
||||
unlock.label.useOwnMountPath = Custom Mount Point
|
||||
welcome.askForUpdateCheck.dialog.title = Update check
|
||||
welcome.askForUpdateCheck.dialog.header = Enable the integrated update check?
|
||||
welcome.askForUpdateCheck.dialog.content = Recommended\: Enable the update check to always be sure you have the newest version of Cryptomator, with all security patches, installed.\n\nYou can change this from within the settings at any time.
|
||||
settings.volume.dokany = Dokany
|
||||
main.gracefulShutdown.dialog.title = Locking vault(s) failed
|
||||
main.gracefulShutdown.dialog.header = Vault(s) in use
|
||||
main.gracefulShutdown.dialog.content = One or more vaults are still in use by other programs. Please close them to allow Cryptomator to shut down properly, then try again.\n\nIf this doesn't work, Cryptomator can shut down forcefully, but this can incur data loss and is not recommended.
|
||||
main.gracefulShutdown.button.tryAgain = Try Again
|
||||
main.gracefulShutdown.button.forceShutdown = Force Shutdown
|
||||
unlock.pendingMessage.unlocking = Unlocking vault...
|
||||
unlock.failedDialog.title = Unlock failed
|
||||
unlock.failedDialog.header = Unlock failed
|
||||
unlock.failedDialog.content.mountPathNonExisting = Mount point does not exist.
|
||||
unlock.failedDialog.content.mountPathNotEmpty = Mount point is not empty.
|
||||
unlock.label.useReadOnlyMode = Read-Only
|
||||
unlock.label.chooseMountPath = Choose empty directory…
|
||||
ctrl.secPasswordField.nonPrintableChars = Password contains control characters.\nRecommendation\: Remove them to ensure compatibility with other clients.
|
||||
ctrl.secPasswordField.capsLocked = Caps Lock is activated.
|
||||
unlock.label.useCustomMountFlags = Custom Mount Flags
|
||||
unlock.choicebox.winDriveLetter.occupied = occupied
|
||||
@@ -1,126 +0,0 @@
|
||||
app.name = Cryptomator
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Klicken Sie hier, um neue Tresore hinzuzufügen
|
||||
main.directoryList.contextMenu.remove = Aus Liste entfernen
|
||||
main.directoryList.contextMenu.changePassword = Passwort ändern
|
||||
main.addDirectory.contextMenu.new = Tresor erstellen
|
||||
main.addDirectory.contextMenu.open = Tresor öffnen
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Prüfe auf Updates...
|
||||
welcome.newVersionMessage = Version %1$s kann heruntergeladen werden.\nInstallierte Version %2$s.
|
||||
# initialize.fxml
|
||||
initialize.label.password = Passwort
|
||||
initialize.label.retypePassword = Passwort bestätigen
|
||||
initialize.button.ok = Tresor erstellen
|
||||
initialize.messageLabel.alreadyInitialized = Tresor bereits vorhanden
|
||||
initialize.messageLabel.initializationFailed = Fehler beim Initialisieren. Details in der Log-Datei.
|
||||
# notfound.fxml
|
||||
notfound.label = Tresor konnte nicht gefunden werden.\nWurde er verschoben?
|
||||
# upgrade.fxml
|
||||
upgrade.button = Tresor aktualisieren
|
||||
upgrade.version3dropBundleExtension.msg = Dieser Tresor muss auf ein neueres Format aktualisiert werden.\n"%1$s" wird in "%2$s" umbenannt.\nStellen Sie bitte sicher, dass derzeit keine Synchronisation stattfindet.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = Migration fehlgeschlagen.\n"%s" existiert bereits.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Passwort
|
||||
unlock.label.mountName = Laufwerksname
|
||||
unlock.label.winDriveLetter = Eigener Laufwerksbuchstabe
|
||||
unlock.label.downloadsPageLink = Alle Cryptomator Versionen
|
||||
unlock.label.advancedHeading = Erweiterte Optionen
|
||||
unlock.button.unlock = Tresor entsperren
|
||||
unlock.button.advancedOptions.show = Weitere Optionen
|
||||
unlock.button.advancedOptions.hide = Weniger Optionen
|
||||
unlock.choicebox.winDriveLetter.auto = Automatisch ermitteln
|
||||
unlock.errorMessage.wrongPassword = Falsches Passwort
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Tresor nicht unterstützt. Der Tresor wurde mit einer älteren Version von Cryptomator erstellt.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Tresor nicht unterstützt. Der Tresor wurde mit einer neueren Version von Cryptomator erstellt.
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Altes Passwort
|
||||
changePassword.label.newPassword = Neues Passwort
|
||||
changePassword.label.retypePassword = Passwort bestätigen
|
||||
changePassword.label.downloadsPageLink = Alle Cryptomator Versionen
|
||||
changePassword.button.change = Passwort ändern
|
||||
changePassword.errorMessage.wrongPassword = Falsches Passwort
|
||||
changePassword.errorMessage.decryptionFailed = Entschlüsselung fehlgeschlagen
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Tresor sperren
|
||||
unlocked.moreOptions.reveal = Laufwerk anzeigen
|
||||
unlocked.label.revealFailed = Befehl fehlgeschlagen
|
||||
unlocked.label.unmountFailed = Trennen des Laufwerks fehlgeschlagen
|
||||
unlocked.label.statsEncrypted = verschlüsselt
|
||||
unlocked.label.statsDecrypted = entschlüsselt
|
||||
unlocked.ioGraph.yAxis.label = Durchsatz (MiB/s)
|
||||
# settings.fxml
|
||||
settings.version.label = Version %s
|
||||
settings.checkForUpdates.label = Auf Updates prüfen
|
||||
# tray icon
|
||||
tray.menu.open = Öffnen
|
||||
tray.menu.quit = Beenden
|
||||
tray.infoMsg.title = Cryptomator läuft noch
|
||||
tray.infoMsg.msg = Cryptomator läuft noch. Mit dem Tray-Icon beenden.
|
||||
tray.infoMsg.msg.osx = Cryptomator läuft noch. Über die Menüleiste beenden.
|
||||
initialize.messageLabel.passwordStrength.0 = Sehr schwach
|
||||
initialize.messageLabel.passwordStrength.1 = Schwach
|
||||
initialize.messageLabel.passwordStrength.2 = Mittel
|
||||
initialize.messageLabel.passwordStrength.3 = Stark
|
||||
initialize.messageLabel.passwordStrength.4 = Sehr stark
|
||||
initialize.label.doNotForget = WICHTIG\: Falls Sie Ihr Passwort vergessen, gibt es keine Möglichkeit Ihre Daten wiederherzustellen.
|
||||
main.directoryList.remove.confirmation.title = Tresor entfernen
|
||||
main.directoryList.remove.confirmation.header = Möchten Sie diesen Tresor wirklich entfernen?
|
||||
main.directoryList.remove.confirmation.content = Dieser Tresor wird nur aus der Liste entfernt. Um den Tresor unwiderruflich zu löschen, entfernen Sie bitte den Tresor aus Ihrem Dateisystem.
|
||||
upgrade.version3to4.msg = Dieser Tresor muss auf ein neueres Format aktualisiert werden.\nVerschlüsselte Ordnernamen werden dabei aktualisiert.\nStellen Sie bitte sicher, dass derzeit keine Synchronisation stattfindet.
|
||||
upgrade.version3to4.err.io = Migration aufgrund eines I/O-Fehlers fehlgeschlagen.\nWeitere Informationen in der Log-Datei.
|
||||
# upgrade.fxml
|
||||
upgrade.confirmation.label = Ja, die Synchronisation ist abgeschlossen
|
||||
unlock.label.savePassword = Passwort speichern
|
||||
unlock.errorMessage.unauthenticVersionMac = Versions-MAC konnte nicht authentifiziert werden.
|
||||
unlock.savePassword.delete.confirmation.title = Gespeichertes Passwort löschen
|
||||
unlock.savePassword.delete.confirmation.header = Möchten Sie das gespeicherte Passwort von diesem Tresor wirklich löschen?
|
||||
unlock.savePassword.delete.confirmation.content = Das gespeicherte Passwort von diesem Tresor wird sofort aus Ihrem System-Schlüsselbund gelöscht. Falls Sie das Passwort erneut speichern möchten, müssen Sie den Tresor entsperren und dabei die "Passwort speichern"-Option aktiviert haben.
|
||||
settings.debugMode.label = Debug-Modus
|
||||
upgrade.version3dropBundleExtension.title = Upgrade Tresor-Version 3 (Entfall der Bundle-Extension)
|
||||
upgrade.version3to4.title = Upgrade Tresor-Version 3 zu 4
|
||||
upgrade.version4to5.title = Upgrade Tresor-Version 4 zu 5
|
||||
upgrade.version4to5.msg = Dieser Tresor muss auf ein neueres Format aktualisiert werden.\nVerschlüsselte Dateien werden dabei aktualisiert.\nStellen Sie sicher, dass keine Synchronisation stattfindet, bevor Sie fortfahren.\n\nHinweis\: Beim Upgrade wird das Änderungsdatum aller Dateien auf das aktuelle Datum geändert.
|
||||
upgrade.version4to5.err.io = Migration aufgrund eines I/O-Fehlers fehlgeschlagen.\nWeitere Informationen in der Log-Datei.
|
||||
unlock.label.revealAfterMount = Laufwerk anzeigen
|
||||
unlocked.lock.force.confirmation.title = Sperren von %1$s fehlgeschlagen
|
||||
unlocked.lock.force.confirmation.header = Möchten Sie das Sperren erzwingen?
|
||||
unlocked.lock.force.confirmation.content = Dies kann passieren, wenn andere Programme weiterhin auf Dateien im Tresor zugreifen. Oder es ist ein anderes Problem aufgetreten.\n\nProgramme, die weiterhin auf die Dateien zugreifen, könnten nicht mehr richtig funktionieren, oder Daten, die durch diese Programme noch nicht geschrieben wurden, könnten verloren gehen.
|
||||
unlock.label.unlockAfterStartup = Automatisch entsperren beim Start (Experimentell)
|
||||
unlock.errorMessage.unlockFailed = Entsperren fehlgeschlagen. Siehe Log-Datei für Details.
|
||||
upgrade.version5toX.title = Upgrade Tresor-Version 5 zu X
|
||||
upgrade.version5toX.msg = Dieser Tresor muss auf ein neueres Format aktualisiert werden.\nStellen Sie sicher, dass keine Synchronisation stattfindet, bevor Sie fortfahren.
|
||||
main.createVault.nonEmptyDir.title = Erstellung des Tresors fehlgeschlagen
|
||||
main.createVault.nonEmptyDir.header = Ausgewählter Ordner ist nicht leer
|
||||
main.createVault.nonEmptyDir.content = Der ausgewählte Ordner enthält bereits Dateien (möglicherweise unsichtbar). Ein Tresor kann nur innerhalb eines leeren Ordners erstellt werden.
|
||||
settings.webdav.port.label = WebDAV-Port
|
||||
settings.webdav.port.prompt = 0 \= automatische Auswahl
|
||||
settings.webdav.port.apply = Anwenden
|
||||
settings.webdav.prefGvfsScheme.label = WebDAV URL Schema
|
||||
settings.volume.label = Laufwerkseinbindung
|
||||
settings.volume.webdav = WebDAV
|
||||
settings.volume.fuse = FUSE
|
||||
unlock.successLabel.vaultCreated = Der Tresor wurde erfolgreich erstellt.
|
||||
unlock.successLabel.passwordChanged = Das Passwort wurde erfolgreich geändert.
|
||||
unlock.successLabel.upgraded = Der Tresor wurde erfolgreich aktualisiert.
|
||||
unlock.label.useOwnMountPath = Eigenes Laufwerksverzeichnis
|
||||
welcome.askForUpdateCheck.dialog.title = Auf Updates prüfen
|
||||
welcome.askForUpdateCheck.dialog.header = Eingebaute Update-Prüfung aktivieren?
|
||||
welcome.askForUpdateCheck.dialog.content = Empfehlung\: Aktivieren Sie die Update-Prüfung, um sicherzustellen, dass Sie stets die neueste Cryptomator-Version mit allen Sicherheits-Patches verwenden.\n\nDiese Einstellung können Sie jederzeit im Einstellungs-Menü ändern.
|
||||
settings.volume.dokany = Dokany
|
||||
main.gracefulShutdown.dialog.title = Sperren des Tresors gescheitert
|
||||
main.gracefulShutdown.dialog.header = Tresor in Gebrauch
|
||||
main.gracefulShutdown.dialog.content = Ein oder mehrere Tresore werden noch von anderen Programmen genutzt. Bitte schliessen Sie die Programme um es Cryptomator zu ermöglichen richtig herunter zu fahren. Versuchen Sie es danach erneut.\n\nFalls dies nicht klappt, kann Cryptomator das Beenden erzwingen. Dies kann zu einem Datenverlust führen und ist nicht empfohlen.
|
||||
main.gracefulShutdown.button.tryAgain = Versuchen Sie es erneut
|
||||
main.gracefulShutdown.button.forceShutdown = Herunterfahren erzwingen
|
||||
unlock.pendingMessage.unlocking = Entsperre Tresor...
|
||||
unlock.failedDialog.title = Entsperren fehlgeschlagen
|
||||
unlock.failedDialog.header = Entsperren fehlgeschlagen
|
||||
unlock.failedDialog.content.mountPathNonExisting = Laufwerksverzeichnis existiert nicht.
|
||||
unlock.failedDialog.content.mountPathNotEmpty = Laufwerksverzeichnis ist nicht leer.
|
||||
unlock.label.useReadOnlyMode = Nur lesend
|
||||
unlock.label.chooseMountPath = Leeren Ordner auswählen…
|
||||
ctrl.secPasswordField.nonPrintableChars = Das Passwort enthält Steuerzeichen.\nEmpfehlung\: Entfernen Sie diese, um die Kompatibilität mit anderen Clients sicherzustellen.
|
||||
ctrl.secPasswordField.capsLocked = Die Feststelltaste ist aktiviert.
|
||||
unlock.label.useCustomMountFlags = Eigene Laufwerksoptionen
|
||||
unlock.choicebox.winDriveLetter.occupied = belegt
|
||||
@@ -1,147 +0,0 @@
|
||||
# Copyright (c) 2016 The Cryptomator Contributors
|
||||
# This file is licensed under the terms of the MIT license.
|
||||
# See the LICENSE.txt file for more info.
|
||||
#
|
||||
# Contributors:
|
||||
# Sebastian Stenzel - initial translation
|
||||
|
||||
app.name=Cryptomator
|
||||
|
||||
ctrl.secPasswordField.nonPrintableChars=Password contains control characters.\nRecommendation: Remove them to ensure compatibility with other clients.
|
||||
ctrl.secPasswordField.capsLocked=Caps Lock is activated.
|
||||
|
||||
# main.fxml
|
||||
main.emptyListInstructions=Click here to add a vault
|
||||
main.directoryList.contextMenu.remove=Remove from List
|
||||
main.directoryList.contextMenu.changePassword=Change Password
|
||||
main.addDirectory.contextMenu.new=Create New Vault
|
||||
main.addDirectory.contextMenu.open=Open Existing Vault
|
||||
main.directoryList.remove.confirmation.title=Remove Vault
|
||||
main.directoryList.remove.confirmation.header=Do you really want to remove this vault?
|
||||
main.directoryList.remove.confirmation.content=The vault will only be removed from the list. To permanently delete it, please delete the vault from your filesystem.
|
||||
main.createVault.nonEmptyDir.title=Creating vault failed
|
||||
main.createVault.nonEmptyDir.header=Chosen directory is not empty
|
||||
main.createVault.nonEmptyDir.content=The selected directory already contains files (possibly hidden). A vault can only be created in an empty directory.
|
||||
main.gracefulShutdown.dialog.title=Locking vault(s) failed
|
||||
main.gracefulShutdown.dialog.header=Vault(s) in use
|
||||
main.gracefulShutdown.dialog.content=One or more vaults are still in use by other programs. Please close them to allow Cryptomator to shut down properly, then try again.\n\nIf this doesn't work, Cryptomator can shut down forcefully, but this can incur data loss and is not recommended.
|
||||
main.gracefulShutdown.button.tryAgain=Try Again
|
||||
main.gracefulShutdown.button.forceShutdown=Force Shutdown
|
||||
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking=Checking for Updates...
|
||||
welcome.newVersionMessage=Version %1$s can be downloaded.\nThis is %2$s.
|
||||
welcome.askForUpdateCheck.dialog.title=Update check
|
||||
welcome.askForUpdateCheck.dialog.header=Enable the integrated update check?
|
||||
welcome.askForUpdateCheck.dialog.content=Recommended: Enable the update check to always be sure you have the newest version of Cryptomator, with all security patches, installed.\n\nYou can change this from within the settings at any time.
|
||||
|
||||
# initialize.fxml
|
||||
initialize.label.password=Password
|
||||
initialize.label.retypePassword=Retype Password
|
||||
initialize.button.ok=Create Vault
|
||||
initialize.messageLabel.alreadyInitialized=Vault already initialized
|
||||
initialize.messageLabel.initializationFailed=Could not initialize vault. See log file for details.
|
||||
initialize.messageLabel.passwordStrength.0=Very weak
|
||||
initialize.messageLabel.passwordStrength.1=Weak
|
||||
initialize.messageLabel.passwordStrength.2=Fair
|
||||
initialize.messageLabel.passwordStrength.3=Strong
|
||||
initialize.messageLabel.passwordStrength.4=Very strong
|
||||
initialize.label.doNotForget=IMPORTANT: If you forget your password, there is no way to recover your data.
|
||||
|
||||
# notfound.fxml
|
||||
notfound.label=Vault couldn't be found. Has it been moved?
|
||||
|
||||
# upgrade.fxml
|
||||
upgrade.confirmation.label=Yes, I've made sure that synchronization has finished
|
||||
upgrade.button=Upgrade Vault
|
||||
|
||||
upgrade.version3dropBundleExtension.title=Vault Version 3 Upgrade (Drop Bundle Extension)
|
||||
upgrade.version3dropBundleExtension.msg=This vault needs to be migrated to a newer format.\n"%1$s" will be renamed to "%2$s".\nPlease make sure synchronization has finished before proceeding.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists=Automatic migration failed.\n"%s" already exists.
|
||||
|
||||
upgrade.version3to4.title=Vault Version 3 to 4 Upgrade
|
||||
upgrade.version3to4.msg=This vault needs to be migrated to a newer format.\nEncrypted folder names will be updated.\nPlease make sure synchronization has finished before proceeding.
|
||||
upgrade.version3to4.err.io=Migration failed due to an I/O Exception. See log file for details.
|
||||
|
||||
upgrade.version4to5.title=Vault Version 4 to 5 Upgrade
|
||||
upgrade.version4to5.msg=This vault needs to be migrated to a newer format.\nEncrypted files will be updated.\nPlease make sure synchronization has finished before proceeding.\n\nNote: Modification date of all files will be changed to the current date/time in the process.
|
||||
upgrade.version4to5.err.io=Migration failed due to an I/O Exception. See log file for details.
|
||||
|
||||
upgrade.version5toX.title=Vault Version Upgrade
|
||||
upgrade.version5toX.msg=This vault needs to be migrated to a newer format.\nPlease make sure synchronization has finished before proceeding.
|
||||
|
||||
# unlock.fxml
|
||||
unlock.label.password=Password
|
||||
unlock.label.savePassword=Save Password
|
||||
unlock.label.mountName=Drive Name
|
||||
unlock.label.useCustomMountFlags=Custom Mount Flags
|
||||
unlock.label.unlockAfterStartup=Auto-Unlock on Start (Experimental)
|
||||
unlock.label.revealAfterMount=Reveal Drive
|
||||
unlock.label.useReadOnlyMode=Read-Only
|
||||
unlock.label.winDriveLetter=Custom Drive Letter
|
||||
unlock.label.useOwnMountPath=Custom Mount Point
|
||||
unlock.label.chooseMountPath=Choose empty directory…
|
||||
unlock.label.downloadsPageLink=All Cryptomator versions
|
||||
unlock.button.unlock=Unlock Vault
|
||||
unlock.button.advancedOptions.show=More Options
|
||||
unlock.button.advancedOptions.hide=Less Options
|
||||
unlock.savePassword.delete.confirmation.title=Delete Saved Password
|
||||
unlock.savePassword.delete.confirmation.header=Do you really want to delete the saved password of this vault?
|
||||
unlock.savePassword.delete.confirmation.content=The saved password of this vault will be immediately deleted from your system keychain. If you'd like to save your password again, you'd have to unlock your vault with the "Save Password" option enabled.
|
||||
unlock.choicebox.winDriveLetter.auto=Assign automatically
|
||||
unlock.choicebox.winDriveLetter.occupied=occupied
|
||||
unlock.errorMessage.wrongPassword=Wrong password
|
||||
unlock.errorMessage.unlockFailed=Unlock failed. See log file for details.
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware=Unsupported vault. This vault has been created with an older version of Cryptomator.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault=Unsupported vault. This vault has been created with a newer version of Cryptomator.
|
||||
unlock.errorMessage.unauthenticVersionMac=Could not authenticate version MAC.
|
||||
unlock.successLabel.vaultCreated=Vault was successfully created.
|
||||
unlock.successLabel.passwordChanged=Password was successfully changed.
|
||||
unlock.successLabel.upgraded=Vault was successfully upgraded.
|
||||
|
||||
unlock.failedDialog.title=Unlock failed
|
||||
unlock.failedDialog.header=Unlock failed
|
||||
unlock.failedDialog.content.mountPathNonExisting=Mount point does not exist.
|
||||
unlock.failedDialog.content.mountPathNotEmpty=Mount point is not empty.
|
||||
|
||||
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword=Old Password
|
||||
changePassword.label.newPassword=New Password
|
||||
changePassword.label.retypePassword=Retype Password
|
||||
changePassword.label.downloadsPageLink=All Cryptomator versions
|
||||
changePassword.button.change=Change Password
|
||||
changePassword.errorMessage.wrongPassword=Wrong password
|
||||
changePassword.errorMessage.decryptionFailed=Decryption failed
|
||||
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock=Lock Vault
|
||||
unlocked.moreOptions.reveal=Reveal Drive
|
||||
unlocked.label.revealFailed=Command failed
|
||||
unlocked.label.unmountFailed=Ejecting drive failed
|
||||
unlocked.label.statsEncrypted=encrypted
|
||||
unlocked.label.statsDecrypted=decrypted
|
||||
unlocked.ioGraph.yAxis.label=Throughput (MiB/s)
|
||||
unlocked.lock.force.confirmation.title=Locking of %1$s failed
|
||||
unlocked.lock.force.confirmation.header=Do you want to force locking?
|
||||
unlocked.lock.force.confirmation.content=This may be because other programs are still accessing files in the vault or because some other problem occurred.\n\nPrograms still accessing the files may not work correctly and data not already written by those programs may be lost.
|
||||
|
||||
# settings.fxml
|
||||
settings.version.label=Version %s
|
||||
settings.checkForUpdates.label=Check for Updates
|
||||
settings.webdav.port.label=WebDAV Port
|
||||
settings.webdav.port.prompt=0 = Choose automatically
|
||||
settings.webdav.port.apply=Apply
|
||||
settings.webdav.prefGvfsScheme.label=WebDAV Scheme
|
||||
settings.debugMode.label=Debug Mode
|
||||
settings.volume.label=Preferred Volume Type
|
||||
settings.volume.webdav=WebDAV
|
||||
settings.volume.fuse=FUSE
|
||||
settings.volume.dokany=Dokany
|
||||
|
||||
# tray icon
|
||||
tray.menu.open=Open
|
||||
tray.menu.quit=Quit
|
||||
tray.infoMsg.title=Still Running
|
||||
tray.infoMsg.msg=Cryptomator is still alive. Quit it from the tray icon.
|
||||
tray.infoMsg.msg.osx=Cryptomator is still alive. Quit it from the menu bar icon.
|
||||
@@ -1,130 +0,0 @@
|
||||
app.name = Cryptomator
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Haga clic aquí para añadir una caja fuerte
|
||||
# should it be imperative?
|
||||
main.directoryList.contextMenu.remove = Eliminar de la lista
|
||||
main.directoryList.contextMenu.changePassword = Cambiar la contraseña
|
||||
main.addDirectory.contextMenu.new = Crear una nueva caja fuerte
|
||||
main.addDirectory.contextMenu.open = Abrir una caja fuerte existente
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Comprobando actualizaciones...
|
||||
welcome.newVersionMessage = La versión %1$s está disponible para descargar.\nLa versión actual es %2$s.
|
||||
# initialize.fxml
|
||||
initialize.label.password = Contraseña
|
||||
initialize.label.retypePassword = Repetir contraseña
|
||||
initialize.button.ok = Crear caja fuerte
|
||||
initialize.messageLabel.alreadyInitialized = La caja fuerte ya está inicializada
|
||||
initialize.messageLabel.initializationFailed = No se ha podido inicializar la caja fuerte. Consulte el archivo de registro para más información.
|
||||
# notfound.fxml
|
||||
notfound.label = No se ha encontrado la caja fuerte. ¿Se movió a otro lugar?
|
||||
# upgrade.fxml
|
||||
upgrade.button = Actualizar caja fuerte
|
||||
upgrade.version3dropBundleExtension.msg = Este caja fuerte se debe actualizar a un formato más moderno.\n"%1$s" se renombrará a "%2$s".\nAsegúrese de que la sincronización ha terminado antes de iniciar el proceso.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = Error en la migración automática.\n"%s" ya existe.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Contraseña
|
||||
unlock.label.mountName = Nombre de la unidad
|
||||
# Fuzzy
|
||||
unlock.label.winDriveLetter = Letra de la unidad
|
||||
unlock.label.downloadsPageLink = Todas las versiones de Cryptomator
|
||||
unlock.label.advancedHeading = Opciones avanzadas
|
||||
unlock.button.unlock = Desbloquear caja fuerte
|
||||
unlock.button.advancedOptions.show = Más opciones
|
||||
unlock.button.advancedOptions.hide = Menos opciones
|
||||
unlock.choicebox.winDriveLetter.auto = Asignar automáticamente
|
||||
unlock.errorMessage.wrongPassword = Contraseña incorrecta
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Caja fuerte no soportada. Esta caja se ha creado con una versión anterior de Cryptomator.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Caja fuerte no soportada. Esta caja se ha creado con una versión más moderna de Cryptomator.
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Contraseña antigua
|
||||
# Can also use "current password" = "contraseña actual"
|
||||
changePassword.label.newPassword = Nueva contraseña
|
||||
changePassword.label.retypePassword = Repetir contraseña
|
||||
changePassword.label.downloadsPageLink = Todas las versiones de Cryptomator
|
||||
changePassword.button.change = Cambiar contraseña
|
||||
changePassword.errorMessage.wrongPassword = Contraseña incorrecta
|
||||
changePassword.errorMessage.decryptionFailed = Error en el descifrado
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Bloquear caja fuerte
|
||||
unlocked.moreOptions.reveal = Revelar unidad
|
||||
unlocked.label.revealFailed = La orden ha fallado
|
||||
unlocked.label.unmountFailed = Error al expulsar la unidad
|
||||
unlocked.label.statsEncrypted = encriptado
|
||||
unlocked.label.statsDecrypted = desencriptado
|
||||
unlocked.ioGraph.yAxis.label = Rendimiento (MiB/s)
|
||||
# settings.fxml
|
||||
settings.version.label = Versión %s
|
||||
settings.checkForUpdates.label = Comprobar actualizaciones
|
||||
# tray icon
|
||||
tray.menu.open = Abrir
|
||||
tray.menu.quit = Salir
|
||||
tray.infoMsg.title = Todavía en ejecución
|
||||
tray.infoMsg.msg = Cryptomator todavía está en ejecución. Para salir use el icono de la bandeja.
|
||||
tray.infoMsg.msg.osx = Cryptomator todavía está en ejecución. Para salir use el icono de la barra del menú.
|
||||
initialize.messageLabel.passwordStrength.0 = Muy débil
|
||||
initialize.messageLabel.passwordStrength.1 = Débil
|
||||
initialize.messageLabel.passwordStrength.2 = Suficiente
|
||||
initialize.messageLabel.passwordStrength.3 = Fuerte
|
||||
initialize.messageLabel.passwordStrength.4 = Muy fuerte
|
||||
initialize.label.doNotForget = IMPORTANTE\: Si olvida la contraseña, no habrá ninguna manera de recuperar los datos.
|
||||
main.directoryList.remove.confirmation.title = Borrar caja fuerte
|
||||
main.directoryList.remove.confirmation.header = ¿Quiere de realmente eliminar esta caja fuerte?
|
||||
main.directoryList.remove.confirmation.content = La caja fuerte solo se elimina de la lista. Para borrarla permanente elimine los datos de su sistema de archivos.
|
||||
upgrade.version3to4.msg = Este caja fuerte se debe migrar a un formato más moderno.\nLos nombres de las carpetas cifradas se actualizarán.\nAsegúrese de que la sincronización ha terminado antes de continuar.
|
||||
upgrade.version3to4.err.io = Error en la migración debido a una excepción de E/S. Consulte el archivo de registro para más información.
|
||||
# upgrade.fxml
|
||||
upgrade.confirmation.label = Sí, me he asegurado de que la sincronización ha terminado
|
||||
unlock.label.savePassword = Guardar contraseña
|
||||
unlock.errorMessage.unauthenticVersionMac = No se pudo autentificar la versión de MAC.
|
||||
unlock.savePassword.delete.confirmation.title = Borrar contraseña guardada
|
||||
unlock.savePassword.delete.confirmation.header = ¿Quiere realmente borrar la contraseña guardada de esta unidad?
|
||||
unlock.savePassword.delete.confirmation.content = La contraseña guardada de esta caja fuerte, será borrada inmediatamente del sistema de claves. Si quiere guardar su contraseña de nuevo, tiene que volver a desbloquear la caja fuerte marcando la opción de "Guardar contraseña".
|
||||
settings.debugMode.label = Modo depuración
|
||||
upgrade.version3dropBundleExtension.title = Actualizar caja fuerte a la versión 3 (Drop Bundle Extension)
|
||||
upgrade.version3to4.title = Actualizar caja fuerte de versión 3 a 4
|
||||
upgrade.version4to5.title = Actualizar caja fuerte de versión 4 a 5
|
||||
upgrade.version4to5.msg = Esta caja fuerte tiene que ser migrada a un formato más moderno.\nLos archivos encriptados se actualizarán.\nAsegúrese de que la sincronización ha terminado antes de iniciar el proceso.\n\nNota\: las fechas de modificación de todos los archivos, se cambiarán a la fecha actual.
|
||||
upgrade.version4to5.err.io = Error en la migración debido a una excepción E/S. Consulte el archivo de registro para más información.
|
||||
unlock.label.revealAfterMount = Revelar unidad
|
||||
unlocked.lock.force.confirmation.title = Error al bloquear %1$s
|
||||
unlocked.lock.force.confirmation.header = ¿Quiere forzar el bloqueo?
|
||||
unlocked.lock.force.confirmation.content = Esto puede ser debido a que otros programas estén todavía accediendo a la caja fuerte o porque se ha producido algún otro problema.\n\nLos programas que estén todavía accediendo a los archivos pueden no funcionar correctamente y se pueden perder los datos pendientes de escribir por estos programas.
|
||||
unlock.label.unlockAfterStartup = Autodesbloqueo al arrancar (experimental)
|
||||
unlock.errorMessage.unlockFailed = Error al desbloquear. Consulte el archivo de registro para más información.
|
||||
upgrade.version5toX.title = Actualizar la versión de la caja fuerte
|
||||
upgrade.version5toX.msg = Esta caja fuerte debe ser migrada a un formato más moderno.\nAsegúrese de que la sincronización ha terminado antes de iniciar el proceso.
|
||||
main.createVault.nonEmptyDir.title = Error en la creación de la bóveda
|
||||
main.createVault.nonEmptyDir.header = El directorio elegido no está vacío
|
||||
main.createVault.nonEmptyDir.content = El directorio seleccionado ya contiene archivos (posiblemente ocultos). Una bóveda sólo puede crearse en un directorio vacío.
|
||||
settings.webdav.port.label = Puerto WebDAV
|
||||
settings.webdav.port.prompt = 0 \= Elige automáticamente
|
||||
settings.webdav.port.apply = Aplicar
|
||||
settings.webdav.prefGvfsScheme.label = Esquema de WebDAV
|
||||
settings.volume.label = Método de montaje
|
||||
settings.volume.webdav = WebDAV
|
||||
settings.volume.fuse = FUSE
|
||||
unlock.successLabel.vaultCreated = La caja fuerte fue creada exitosamente.
|
||||
unlock.successLabel.passwordChanged = La contraseña ha sido cambiada con éxito.
|
||||
unlock.successLabel.upgraded = Cryptomator fue actualizado exitosamente.
|
||||
# Fuzzy
|
||||
unlock.label.useOwnMountPath = Usar Punto de montaje propio
|
||||
welcome.askForUpdateCheck.dialog.title = Buscar actualización
|
||||
welcome.askForUpdateCheck.dialog.header = ¿Habilitar la búsqueda de actualizaciones automática?
|
||||
welcome.askForUpdateCheck.dialog.content = Para buscar actualizaciones, Cryptomator buscará la versión actual en los servidores de Cryptomator y le mostrará una sugerencia si hay una versión más nueva disponible.\n\nRecomendamos habilitar la comprobación de actualización para asegurarse siempre de que tiene instalada la versión más reciente de Cryptomator, con todos los parches de seguridad. Si no habilita la verificación de actualización, puede verificar y descargar la versión actual desde https\://cryptomator.org/downloads/.\n\nPuede cambiar esto en cualquier momento desde dentro de la configuración.
|
||||
settings.volume.dokany = Dokany
|
||||
main.gracefulShutdown.dialog.title = No fue posible cerrar la(s) caja(s) fuerte(s)
|
||||
main.gracefulShutdown.dialog.header = Caja(s) Fuertes(s) en uso
|
||||
main.gracefulShutdown.dialog.content = Una o más cajas fuertes están siendo utilizadas por otros programas. Por favor ciérrelos para permitir a Cryptomator cerrarse adecuadamente, e intente de nuevo.\n\nSi esto no funciona, Cryptomator puede cerrarse forzosamente, pero esta vía puede provocar pérdida de información y no es recomendada.
|
||||
main.gracefulShutdown.button.tryAgain = Intente de nuevo
|
||||
main.gracefulShutdown.button.forceShutdown = Forzar apagado
|
||||
unlock.pendingMessage.unlocking = Desbloqueando la caja fuerte...
|
||||
unlock.failedDialog.title = Falló el desbloqueo
|
||||
unlock.failedDialog.header = Falló el desbloqueo
|
||||
unlock.failedDialog.content.mountPathNonExisting = El punto de montaje no existe.
|
||||
unlock.failedDialog.content.mountPathNotEmpty = El punto de montaje no está vacío.
|
||||
unlock.label.useReadOnlyMode = Sólo lectura
|
||||
unlock.label.chooseMountPath = Elija un directorio vacío...
|
||||
ctrl.secPasswordField.nonPrintableChars = La contraseña contiene caracteres de control.\nRecomendación\: elimínelos para asegurar la compatibilidad con otros clientes.
|
||||
ctrl.secPasswordField.capsLocked = Las mayúsculas están activadas.
|
||||
unlock.label.useCustomMountFlags = Custom Mount Flags
|
||||
unlock.choicebox.winDriveLetter.occupied = occupied
|
||||
@@ -1,131 +0,0 @@
|
||||
app.name = Cryptomator
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Cliquer ici pour ajouter un coffre-fort
|
||||
main.directoryList.contextMenu.remove = Retirer de la liste
|
||||
main.directoryList.contextMenu.changePassword = Changer le mot de passe
|
||||
main.addDirectory.contextMenu.new = Créer un nouveau coffre-fort
|
||||
main.addDirectory.contextMenu.open = Ouvrir un coffre-fort existant
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Rechercher les mises à jour...
|
||||
welcome.newVersionMessage = La version %1$s peut-être téléchargée.\nLa version installée est la %2$s.
|
||||
# initialize.fxml
|
||||
initialize.label.password = Mot de passe
|
||||
initialize.label.retypePassword = Confirmation
|
||||
initialize.button.ok = Créer le coffre-fort
|
||||
initialize.messageLabel.alreadyInitialized = Coffre-fort déjà initialisé
|
||||
initialize.messageLabel.initializationFailed = Impossible d'initialiser le coffre-fort. Vérifiez le fichier de log pour plus de détails.
|
||||
# notfound.fxml
|
||||
notfound.label = Coffre-fort introuvable. A-t-il été déplacé?
|
||||
# upgrade.fxml
|
||||
upgrade.button = Mettre à jour
|
||||
upgrade.version3dropBundleExtension.msg = Ce coffre-fort doit être converti dans un format plus récent.\n"%1$s" sera renommé en "%2$s".\nAssurez-vous que la synchronisation est terminée avant de continuer.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = La conversion automatique a échoué.\n"%s" existe déjà.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Mot de passe
|
||||
unlock.label.mountName = Nom du lecteur
|
||||
# Fuzzy
|
||||
unlock.label.winDriveLetter = Lettre du lecteur
|
||||
unlock.label.downloadsPageLink = Toutes les versions de Cryptomator
|
||||
unlock.label.advancedHeading = Options avancées
|
||||
unlock.button.unlock = Déverrouiller le coffre-fort
|
||||
unlock.button.advancedOptions.show = Plus d'options
|
||||
unlock.button.advancedOptions.hide = Moins d'options
|
||||
unlock.choicebox.winDriveLetter.auto = Assigner automatiquement
|
||||
unlock.errorMessage.wrongPassword = Mot de passe incorrect
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Coffre-fort non supporté. Ce coffre a été créé avec une ancienne version de Cryptomator.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Coffre-fort non supporté. Ce coffre a été créé avec une version de Cryptomator plus récente.
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Ancien mot de passe
|
||||
changePassword.label.newPassword = Nouveau mot de passe
|
||||
changePassword.label.retypePassword = Vérification
|
||||
changePassword.label.downloadsPageLink = Toutes les versions de Cryptomator
|
||||
changePassword.button.change = Modification du mot de masse
|
||||
changePassword.errorMessage.wrongPassword = Mot de passe incorrect
|
||||
# En français, on dit déchiffrement lorsque la clé est connue
|
||||
changePassword.errorMessage.decryptionFailed = Echec du déchiffrement
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Verrouiller le coffre-fort
|
||||
unlocked.moreOptions.reveal = Voir le lecteur
|
||||
unlocked.label.revealFailed = Echec de la commande
|
||||
unlocked.label.unmountFailed = Echec de l'éjection du lecteur
|
||||
# Crypter n'existe pas en français.
|
||||
unlocked.label.statsEncrypted = chiffré
|
||||
# Décryptage signifie récupérer les données en clair tout en ne connaissant pas la clé
|
||||
unlocked.label.statsDecrypted = déchiffré
|
||||
unlocked.ioGraph.yAxis.label = Débit (MiB/s)
|
||||
# settings.fxml
|
||||
settings.version.label = Version %s
|
||||
settings.checkForUpdates.label = Vérifier les mises à jour
|
||||
# tray icon
|
||||
tray.menu.open = Ouvrir
|
||||
tray.menu.quit = Quitter
|
||||
tray.infoMsg.title = Action en cours
|
||||
tray.infoMsg.msg = Cryptomator est toujours en fonctionnement. Utiliser l'icône de la barre des tâches pour quitter.
|
||||
tray.infoMsg.msg.osx = Cryptomator est toujours en fonctionnement. Utilisez la barre de menu pour quitter.
|
||||
initialize.messageLabel.passwordStrength.0 = Très faible
|
||||
initialize.messageLabel.passwordStrength.1 = Faible
|
||||
initialize.messageLabel.passwordStrength.2 = Correct
|
||||
initialize.messageLabel.passwordStrength.3 = Fort
|
||||
initialize.messageLabel.passwordStrength.4 = Très fort
|
||||
initialize.label.doNotForget = ATTENTION \: Si vous oubliez votre mot de passe, il n'y aura aucun moyen de récupérer vos données.
|
||||
main.directoryList.remove.confirmation.title = Supprimer le coffre-fort
|
||||
main.directoryList.remove.confirmation.header = Voulez-vous vraiment supprimer ce coffre-fort ?
|
||||
main.directoryList.remove.confirmation.content = Le coffre-fort sera seulement retiré de la liste. Pour le supprimer complètement, supprimez les fichiers depuis votre système de fichiers.
|
||||
upgrade.version3to4.msg = Ce coffre-fort doit être converti dans un nouveau format. \nLes noms des dossiers chiffrés seront mis à jour.\nMerci de vous assurer que la synchronisation est terminée avant de continuer.
|
||||
upgrade.version3to4.err.io = La migration a échoué à cause d'une erreur d'entrée/sortie. Vérifiez le fichier de log pour plus de détails.
|
||||
# upgrade.fxml
|
||||
upgrade.confirmation.label = Oui, je suis certain que la synchronisation est terminée
|
||||
unlock.label.savePassword = Se souvenir du mot de passe
|
||||
unlock.errorMessage.unauthenticVersionMac = Impossible d'authentifier la version MAC
|
||||
unlock.savePassword.delete.confirmation.title = Supprimer le mot de passe sauvegardé
|
||||
unlock.savePassword.delete.confirmation.header = Voulez vous vraiment oublier le mot de passe de ce coffre-fort ?
|
||||
unlock.savePassword.delete.confirmation.content = Le mot de passe de ce coffre sera supprimé immédiatement du trousseau. Si vous voulez le sauvegarder à nouveau, vous devrez cocher la case "Se souvenir du mot de passe" lors du déverrouillage du coffre.
|
||||
settings.debugMode.label = Mode Débug
|
||||
upgrade.version3dropBundleExtension.title = Mise à jour du coffre-fort (en version 3 extension "Drop Bundle")
|
||||
upgrade.version3to4.title = Mise à jour de la version du coffre-fort (v3 à v4)
|
||||
upgrade.version4to5.title = Mise à jour de la version du coffre-fort (v4 à v5)
|
||||
upgrade.version4to5.msg = Ce coffre-fort doit être migré vers un format plus récent.\nLes fichiers chiffrés seront mis à jour.\nVeuillez vérifier que la synchronisation est terminée avant de commencer.\n\nNote \: la date de modification des fichiers sera mise à jour avec la date courante.
|
||||
upgrade.version4to5.err.io = La migration a échoué à cause d'une erreur d'entrée/sortie. Vérifiez le fichier de log pour plus de détails.
|
||||
unlock.label.revealAfterMount = Voir le lecteur
|
||||
unlocked.lock.force.confirmation.title = Le verrouillage de %1$s a échoué
|
||||
unlocked.lock.force.confirmation.header = Voulez-vous forcer le verrouillage ?
|
||||
unlocked.lock.force.confirmation.content = D'autres programmes sont peut être en train d'accéder à des fichiers dans le coffre-fort ou un autre problème s'est produit.\n\nLes programmes accédant encore aux fichiers pourraient ne pas fonctionner normalement et les données pas encore sauvegardées par ces programmes pourraient être perdues.
|
||||
unlock.label.unlockAfterStartup = Déverouiller automatiquement au démarrage (experimental)
|
||||
unlock.errorMessage.unlockFailed = Le déverouillage a échoué. Référez-vous au fichier log pour plus de détails.
|
||||
upgrade.version5toX.title = Mise à jour du coffre-fort
|
||||
upgrade.version5toX.msg = Ce coffre-fort doit être converti dans un format plus récent. \nVeuillez-vous assurez que la synchronisation est achevée avant de continuer.
|
||||
main.createVault.nonEmptyDir.title = Echec de création du coffre-fort
|
||||
main.createVault.nonEmptyDir.header = Le répertoire sélectionné n'est pas vide
|
||||
main.createVault.nonEmptyDir.content = Le répertoire sélectionné contient déjà des fichiers (potentiellement cachés). Un coffre-fort ne peut être créé que dans un répertoire vide.
|
||||
settings.webdav.port.label = Port de WebDAV
|
||||
settings.webdav.port.prompt = 0 \= choisir automatiquement
|
||||
settings.webdav.port.apply = Appliquer
|
||||
settings.webdav.prefGvfsScheme.label = stratagème webdav
|
||||
settings.volume.label = méthode de montage
|
||||
settings.volume.webdav = WebDAV
|
||||
settings.volume.fuse = limite
|
||||
unlock.successLabel.vaultCreated = Le coffre-fort a été créé avec succès
|
||||
unlock.successLabel.passwordChanged = Le mot de passe a été changé avec succès
|
||||
unlock.successLabel.upgraded = Cryptomator a été mise à jour avec succès
|
||||
# Fuzzy
|
||||
unlock.label.useOwnMountPath = Utiliser son propre point de montage
|
||||
welcome.askForUpdateCheck.dialog.title = vérification de la mise à jour
|
||||
welcome.askForUpdateCheck.dialog.header = Activer le contrôle de mise à jour intégré ?
|
||||
welcome.askForUpdateCheck.dialog.content = Pour vérifier les mises à jour, Cryptomator récupère la version actuelle sur les serveurs Cryptomator et vous donne un aperçu si une nouvelle version est disponible.\n\nNous vous recommandons d'activer la vérification de mise à jour pour vous assurer que vous avez toujours la dernière version de Cryptomator, avec tous les correctifs de sécurité, installés. Si vous n'activez pas le contrôle de mise à jour, vous pouvez vérifier et télécharger la version actuelle à partir de https\://cryptomator.org/downloads/.\n\nVous pouvez le modifier à tout moment à partir des paramètres.
|
||||
settings.volume.dokany = Dokany
|
||||
main.gracefulShutdown.dialog.title = Échec en fermant le coffre-fort.
|
||||
main.gracefulShutdown.dialog.header = Coffre-fort est en cours d'utilisation.
|
||||
main.gracefulShutdown.dialog.content = Un ou plusieurs coffre-forts sont en cours d'utilisation par d'autres logiciels. S'il vous plait, fermer-les pour permettre à Cryptomator de finir proprement.\n\nSi ça ne marche pas, Cryptomator peut fermer par force, mais cela peut résulter d'une perte de vos fichiers (non recommandé).
|
||||
main.gracefulShutdown.button.tryAgain = Réessayez
|
||||
main.gracefulShutdown.button.forceShutdown = Arrêt forcé
|
||||
unlock.pendingMessage.unlocking = Déverrouillage du coffre-fort ...
|
||||
unlock.failedDialog.title = Déverrouillage a échoué
|
||||
unlock.failedDialog.header = Déverrouillage a échoué
|
||||
unlock.failedDialog.content.mountPathNonExisting = Le point de montage n'existe pas.
|
||||
unlock.failedDialog.content.mountPathNotEmpty = Le point de montage n'est pas vide.
|
||||
unlock.label.useReadOnlyMode = Lecture Seulement
|
||||
unlock.label.chooseMountPath = Choisissez un répertoire vide…
|
||||
ctrl.secPasswordField.nonPrintableChars = Le mot de passe contient des caractères non imprimables.\nRecommandation\: Supprimez-les pour assurer la compatibilité avec d'autres clients.
|
||||
ctrl.secPasswordField.capsLocked = Le verrouillage des majuscules est activé.
|
||||
unlock.label.useCustomMountFlags = Custom Mount Flags
|
||||
unlock.choicebox.winDriveLetter.occupied = occupied
|
||||
@@ -1,128 +0,0 @@
|
||||
app.name = Cryptomateur
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Cliquez ici pour ajouter un coffre-fort
|
||||
main.directoryList.contextMenu.remove = Retirer de la liste
|
||||
main.directoryList.contextMenu.changePassword = Modifier le mot de passe
|
||||
main.addDirectory.contextMenu.new = Créer un nouveau coffre-fort
|
||||
main.addDirectory.contextMenu.open = Ouvrir un coffre-fort existant
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Vérification des mise à jour en cours ...
|
||||
welcome.newVersionMessage = La version %1$s peut être téléchargée.\nCeci est %2$s.
|
||||
# initialize.fxml
|
||||
initialize.label.password = Mot de passe
|
||||
initialize.label.retypePassword = Resaisir le mot de passe
|
||||
initialize.button.ok = Créer un coffre-fort
|
||||
initialize.messageLabel.alreadyInitialized = Coffre-fort déjà initialisé
|
||||
initialize.messageLabel.initializationFailed = Incapable d'initialiser le coffre-fort. Voir le fichier journal pour plus de détails.
|
||||
# notfound.fxml
|
||||
notfound.label = Le coffre-fort n'a pu être trouvé. A t-il été déplacé ?
|
||||
# upgrade.fxml
|
||||
upgrade.button = Mise à jour coffre-fort
|
||||
upgrade.version3dropBundleExtension.msg = Ce coffre-fort doit être migrer vers un format plus récent. "%1$s" sera renommé en "%2$s".\nVeuillez vous assurer que la synchronisation soit terminé avant de continuer.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = La migration automatique a échouée.\n"%s" existe déjà.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Mot de passe
|
||||
unlock.label.mountName = Nom du lecteur
|
||||
# Fuzzy
|
||||
unlock.label.winDriveLetter = Lettre du lecteur
|
||||
unlock.label.downloadsPageLink = Toutes les version de Cryptomateur
|
||||
unlock.label.advancedHeading = Options avancées
|
||||
unlock.button.unlock = Déverrouiller le coffre-fort
|
||||
unlock.button.advancedOptions.show = Plus d'options
|
||||
unlock.button.advancedOptions.hide = Moins d'options
|
||||
unlock.choicebox.winDriveLetter.auto = Assigner automatiquement
|
||||
unlock.errorMessage.wrongPassword = Mauvais mot de passe
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Coffre-fort non pris en charge. Ce coffre-fort a été créé avec une ancienne version de Cryptomateur.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Coffre-fort non pris en charge. Ce coffre-fort a été créé avec une version plus récente de Cryptomateur.
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Ancient mot de passe
|
||||
changePassword.label.newPassword = Nouveau mot de passe
|
||||
changePassword.label.retypePassword = Resaisir mot de passe
|
||||
changePassword.label.downloadsPageLink = Toutes les versions de Cryptomateur
|
||||
changePassword.button.change = Modifier mot de passe
|
||||
changePassword.errorMessage.wrongPassword = Mauvais mot de passe
|
||||
changePassword.errorMessage.decryptionFailed = Le déchiffrement a échoué
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Verrouiller coffre-fort
|
||||
unlocked.moreOptions.reveal = Dévoiler le lecteur
|
||||
unlocked.label.revealFailed = La commande a échoué
|
||||
unlocked.label.unmountFailed = L'éjection du lecteur a échoué
|
||||
unlocked.label.statsEncrypted = chiffré
|
||||
unlocked.label.statsDecrypted = déchiffré
|
||||
unlocked.ioGraph.yAxis.label = Débit (MiB/s)
|
||||
# settings.fxml
|
||||
settings.version.label = Version %s
|
||||
settings.checkForUpdates.label = Rechercher les mises à jour
|
||||
# tray icon
|
||||
tray.menu.open = Ouvrir
|
||||
tray.menu.quit = Quitter
|
||||
tray.infoMsg.title = Toujours en cours
|
||||
tray.infoMsg.msg = Crytomateur est encore actif. Quitter en utilisant de la zone de notification.
|
||||
tray.infoMsg.msg.osx = Crytomateur est encore actif. Quitter en utilisant le menu de la barre d'icone.
|
||||
initialize.messageLabel.passwordStrength.0 = Très faible
|
||||
initialize.messageLabel.passwordStrength.1 = Faible
|
||||
initialize.messageLabel.passwordStrength.2 = Bon
|
||||
initialize.messageLabel.passwordStrength.3 = Fort
|
||||
initialize.messageLabel.passwordStrength.4 = Très fort
|
||||
initialize.label.doNotForget = IMPROTANT \: Si vous oubliez votre mot de passe, il n'y a aucun moyen de récupérer vos données.
|
||||
main.directoryList.remove.confirmation.title = Retirer le coffre-fort
|
||||
main.directoryList.remove.confirmation.header = Voulez-vous vraiment retirer le coffre-fort ?
|
||||
main.directoryList.remove.confirmation.content = Ce coffre-fort sera seulement retirer de la liste. Pour le supprimer définitivement, veuillez le supprimer de votre système de fichiers.
|
||||
upgrade.version3to4.msg = Ce coffre-fort doit être migrer vers un format plus récent.\nLe nom des répertoires chiffrés sera mis à jour.\nVeuillez vous assurer que la synchronisation soit terminé avant de continuer.
|
||||
upgrade.version3to4.err.io = La migration a échoué à cause d'un Exception E/S. Voir le fichier journal pour plus de détails.
|
||||
# upgrade.fxml
|
||||
upgrade.confirmation.label = Oui, je me suis assuré que la synchronisation est terminé
|
||||
unlock.label.savePassword = Sauvegarder le mot de passe
|
||||
unlock.errorMessage.unauthenticVersionMac = Incapable d'authentifier la version MAC.
|
||||
unlock.savePassword.delete.confirmation.title = Supprimer le mot de passe sauvegardé
|
||||
unlock.savePassword.delete.confirmation.header = Etes-vous certain de vouloir supprimer le mot de passe sauvegardé pour ce coffre-fort ?
|
||||
unlock.savePassword.delete.confirmation.content = Le mot de passe sauvegardé pour ce coffre-fort sera supprimé immédiatement de votre trousseau système. Si vous voulez sauvegarder votre mot de passe de nouveau, vous devez déverrouiller votre coffre-fort avec l’option « Sauvegarder mot de passe » activée.
|
||||
settings.debugMode.label = Mode débogage
|
||||
upgrade.version3dropBundleExtension.title = Vault Version 3 Upgrade (Drop Bundle Extension)
|
||||
upgrade.version3to4.title = Mise à jour de la version 3 à 4 du coffre-fort
|
||||
upgrade.version4to5.title = Mise à jour de la version 4 à 5 du coffre-fort
|
||||
upgrade.version4to5.msg = Ce coffre-fort doit être migrer vers un format plus récent.\nLes fichiers chiffrés seront mis à jour.\nVeuillez vous assurer que la synchronisation soit terminé avant de continuer.\n\nNote \: Lors du processus les dates de modification des fichiers seront modifiés à la date/heure courante.
|
||||
upgrade.version4to5.err.io = La migration a échoué à cause d'un Exception E/S. Voir le fichier journal pour plus de détails.
|
||||
unlock.label.revealAfterMount = Révéler le lecteur
|
||||
unlocked.lock.force.confirmation.title = Le vérouillage de %1$s a échoué
|
||||
unlocked.lock.force.confirmation.header = Voulez-vous forcer le vérouillage ?
|
||||
unlocked.lock.force.confirmation.content = Ceci est peut-être dû au fait que d'autres programmes sont encore en train d'accéder aux fichiers dans le coffre-fort ou à cause d'un autre problème.\n\nLes programmes qui accèdent encore aux fichiers peuvent ne pas fonctionner correctement et les données non écrites par ces programmes peuvent être perdus.
|
||||
unlock.label.unlockAfterStartup = Déverouillage automatique au lancement (Expérimantal)
|
||||
unlock.errorMessage.unlockFailed = Déverouillage échoué. Voir le fichier journal pour plus de détails.
|
||||
upgrade.version5toX.title = Mise à jour de la version du coffre-fort
|
||||
upgrade.version5toX.msg = Ce coffre-fort doit être migrer vers un format plus récent.\nVeuillez vous assurer que la synchronisation soit terminé avant de continuer.
|
||||
main.createVault.nonEmptyDir.title = La création du coffre-fort a échoué
|
||||
main.createVault.nonEmptyDir.header = Le répertoire choisi n'est pas vide
|
||||
main.createVault.nonEmptyDir.content = Le répertoire sélectionné contient déjà des fichiers (peut-être cachés). Un coffre-fort ne peut être créé que dans un répertoire vide.
|
||||
settings.webdav.port.label = Port WebDAV
|
||||
settings.webdav.port.prompt = 0 \= Coisir automatiquement
|
||||
settings.webdav.port.apply = Appliquer
|
||||
settings.webdav.prefGvfsScheme.label = Schema WebDAV
|
||||
settings.volume.label = Type de volume préféré
|
||||
settings.volume.webdav = WebDAV
|
||||
settings.volume.fuse = FUSE
|
||||
unlock.successLabel.vaultCreated = Le coffre-fort a été créé avec succès.
|
||||
unlock.successLabel.passwordChanged = Mot de passe mis à jour avec succès.
|
||||
unlock.successLabel.upgraded = Cryptomateur a été mis à jour avec succès.
|
||||
# Fuzzy
|
||||
unlock.label.useOwnMountPath = Utiliser point de montage personalisé
|
||||
welcome.askForUpdateCheck.dialog.title = Vérifier mise à jour
|
||||
welcome.askForUpdateCheck.dialog.header = Activer la vérification de mise à jour intégré ?
|
||||
welcome.askForUpdateCheck.dialog.content = Afin de vérifier les mises à jour, Crytomateur ira chercher la version courante sur les serveurs de Cryptomateur et affichera une indication si une version plus récente est disponible.\n\nNous reccommandons d'activer l'option de vérification des mises à jour afin de vous assurer de disposer de la version la plus récente de Cryptomateur avec tous les correctifs de sécurité installés. Si vous n'activez pas l'option de vérification des mises à jour, vous pouvez véridier et télécharger la version courante à partir de https\://cryptomator.org/downloads/.\n\nVous pouvez modifier cela à tout moment dans les paramètres.
|
||||
settings.volume.dokany = Dokany
|
||||
main.gracefulShutdown.dialog.title = Vérouillage de(s) coffre-fort(s) a échoué(s)
|
||||
main.gracefulShutdown.dialog.header = Coffre-fort(s) en cours d'utilisation
|
||||
main.gracefulShutdown.dialog.content = Un ou plusieurs coffre-forts sont en cours d'utilisation par d'autres programmes. Veuillez les fermer afin de permettre à Cryptomateur de se fermer correctement, puis essayez de nouveau.\n\nSi cela ne fonctionne pas, Cryptomateur peut se fermer de manière forcé, mais cela peut provoquer des pertes de données et n'est pas recommandé.
|
||||
main.gracefulShutdown.button.tryAgain = Essayez de nouveau
|
||||
main.gracefulShutdown.button.forceShutdown = Fermeture forcée
|
||||
unlock.pendingMessage.unlocking = Unlocking vault...
|
||||
unlock.failedDialog.title = Unlock failed
|
||||
unlock.failedDialog.header = Unlock failed
|
||||
unlock.failedDialog.content.mountPathNonExisting = Mount point does not exist.
|
||||
unlock.failedDialog.content.mountPathNotEmpty = Mount point is not empty.
|
||||
unlock.label.useReadOnlyMode = Read-Only
|
||||
unlock.label.chooseMountPath = Choose empty directory…
|
||||
ctrl.secPasswordField.nonPrintableChars = Password contains control characters.\nRecommendation\: Remove them to ensure compatibility with other clients.
|
||||
ctrl.secPasswordField.capsLocked = Caps Lock is activated.
|
||||
unlock.label.useCustomMountFlags = Custom Mount Flags
|
||||
unlock.choicebox.winDriveLetter.occupied = occupied
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user