mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-05-14 16:51:28 +00:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad2c9116b9 | ||
|
|
8e24745b3e | ||
|
|
08f664e3df | ||
|
|
b6d1d1dc22 | ||
|
|
a0ef02b95c | ||
|
|
a6cefe67c4 | ||
|
|
be2b63ab2a | ||
|
|
78f11b4a5e | ||
|
|
0f20c7c3c9 | ||
|
|
d4235174f7 | ||
|
|
f16be84aa3 | ||
|
|
833f2d8566 | ||
|
|
c02a63878e |
@@ -16,7 +16,7 @@ before_install: "curl -L --cookie 'oraclelicense=accept-securebackup-cookie;' ht
|
||||
|
||||
script: mvn -fmain/pom.xml clean test
|
||||
|
||||
after_success: mvn -fmain/pom.xml clean test jacoco:report coveralls:report
|
||||
after_success: mvn -fmain/pom.xml -Ptest-coverage clean test jacoco:report-aggregate coveralls:report
|
||||
|
||||
notifications:
|
||||
webhooks:
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>ant-kit</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 44 KiB |
@@ -10,7 +10,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>commons-test</artifactId>
|
||||
<name>Cryptomator common test dependencies</name>
|
||||
|
||||
@@ -10,18 +10,35 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>commons</artifactId>
|
||||
<name>Cryptomator common</name>
|
||||
<description>Shared utilities</description>
|
||||
|
||||
<dependencies>
|
||||
<!-- Libs -->
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- DI -->
|
||||
<dependency>
|
||||
<groupId>com.google.dagger</groupId>
|
||||
<artifactId>dagger</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.dagger</groupId>
|
||||
<artifactId>dagger-compiler</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- Test -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
@@ -38,4 +55,13 @@
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.cryptomator.common;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
@Module
|
||||
public class CommonsModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Named("SemVer")
|
||||
Comparator<String> providesSemVerComparator() {
|
||||
return new SemVerComparator();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
* Contributors:
|
||||
* Sebastian Stenzel - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.cryptomator.ui.util;
|
||||
package org.cryptomator.common;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
@@ -6,10 +6,11 @@
|
||||
* Contributors:
|
||||
* Sebastian Stenzel - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.cryptomator.ui.util;
|
||||
package org.cryptomator.common;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
import org.cryptomator.common.SemVerComparator;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>filesystem-api</artifactId>
|
||||
<name>Cryptomator filesystem: API</name>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>filesystem-crypto-integration-tests</artifactId>
|
||||
<name>Cryptomator filesystem: Encryption layer tests</name>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>filesystem-crypto</artifactId>
|
||||
<name>Cryptomator filesystem: Encryption layer</name>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>filesystem-inmemory</artifactId>
|
||||
<name>Cryptomator filesystem: In-memory mock</name>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>filesystem-invariants-tests</artifactId>
|
||||
<name>Cryptomator filesystem: Invariants tests</name>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>filesystem-nameshortening</artifactId>
|
||||
<name>Cryptomator filesystem: Name shortening layer</name>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>filesystem-nio</artifactId>
|
||||
<name>Cryptomator filesystem: NIO-based physical layer</name>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>filesystem-stats</artifactId>
|
||||
<name>Cryptomator filesystem: Throughput statistics</name>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>frontend-api</artifactId>
|
||||
<name>Cryptomator frontend: API</name>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>frontend-webdav</artifactId>
|
||||
<name>Cryptomator frontend: WebDAV frontend</name>
|
||||
|
||||
@@ -10,10 +10,12 @@ package org.cryptomator.frontend.webdav;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.cryptomator.common.CommonsModule;
|
||||
|
||||
import dagger.Component;
|
||||
|
||||
@Singleton
|
||||
@Component
|
||||
@Component(modules = {CommonsModule.class})
|
||||
public interface WebDavComponent {
|
||||
|
||||
WebDavServer server();
|
||||
|
||||
@@ -12,11 +12,13 @@ package org.cryptomator.frontend.webdav.mount;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Comparator;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
@@ -26,15 +28,18 @@ import org.cryptomator.frontend.CommandFailedException;
|
||||
import org.cryptomator.frontend.Frontend.MountParam;
|
||||
|
||||
@Singleton
|
||||
final class MacOsXWebDavMounter implements WebDavMounterStrategy {
|
||||
final class MacOsXAppleScriptWebDavMounter implements WebDavMounterStrategy {
|
||||
|
||||
private final Comparator<String> semVerComparator;
|
||||
|
||||
@Inject
|
||||
MacOsXWebDavMounter() {
|
||||
MacOsXAppleScriptWebDavMounter(@Named("SemVer") Comparator<String> semVerComparator) {
|
||||
this.semVerComparator = semVerComparator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldWork() {
|
||||
return SystemUtils.IS_OS_MAC_OSX;
|
||||
return SystemUtils.IS_OS_MAC_OSX && semVerComparator.compare(SystemUtils.OS_VERSION, "10.10") >= 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -0,0 +1,89 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2014, 2016 Sebastian Stenzel, Markus Kreusch
|
||||
* This file is licensed under the terms of the MIT license.
|
||||
* See the LICENSE.txt file for more info.
|
||||
*
|
||||
* Contributors:
|
||||
* Sebastian Stenzel - initial API and implementation, strategy fine tuning
|
||||
* Markus Kreusch - Refactored WebDavMounter to use strategy pattern
|
||||
******************************************************************************/
|
||||
package org.cryptomator.frontend.webdav.mount;
|
||||
|
||||
import java.net.URI;
|
||||
import java.nio.file.FileSystems;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Comparator;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.cryptomator.frontend.CommandFailedException;
|
||||
import org.cryptomator.frontend.Frontend.MountParam;
|
||||
import org.cryptomator.frontend.webdav.mount.command.Script;
|
||||
|
||||
@Singleton
|
||||
final class MacOsXShellScriptWebDavMounter implements WebDavMounterStrategy {
|
||||
|
||||
private final Comparator<String> semVerComparator;
|
||||
|
||||
@Inject
|
||||
MacOsXShellScriptWebDavMounter(@Named("SemVer") Comparator<String> semVerComparator) {
|
||||
this.semVerComparator = semVerComparator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldWork() {
|
||||
return SystemUtils.IS_OS_MAC_OSX && semVerComparator.compare(SystemUtils.OS_VERSION, "10.10") < 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warmUp(int serverPort) {
|
||||
// no-op
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebDavMount mount(URI uri, Map<MountParam, Optional<String>> mountParams) throws CommandFailedException {
|
||||
final String mountName = mountParams.getOrDefault(MountParam.MOUNT_NAME, Optional.empty()).orElseThrow(() -> {
|
||||
return new IllegalArgumentException("Missing mount parameter MOUNT_NAME.");
|
||||
});
|
||||
|
||||
// we don't use the uri to derive a path, as it *could* be longer than 255 chars.
|
||||
final String path = "/Volumes/Cryptomator_" + UUID.randomUUID().toString();
|
||||
final Script mountScript = Script.fromLines("mkdir \"$MOUNT_PATH\"", "mount_webdav -S -v $MOUNT_NAME \"$DAV_AUTHORITY$DAV_PATH\" \"$MOUNT_PATH\"").addEnv("DAV_AUTHORITY", uri.getRawAuthority())
|
||||
.addEnv("DAV_PATH", uri.getRawPath()).addEnv("MOUNT_PATH", path).addEnv("MOUNT_NAME", mountName);
|
||||
mountScript.execute();
|
||||
return new MacWebDavMount(path);
|
||||
}
|
||||
|
||||
private static class MacWebDavMount extends AbstractWebDavMount {
|
||||
private final String mountPath;
|
||||
private final Script revealScript;
|
||||
private final Script unmountScript;
|
||||
|
||||
private MacWebDavMount(String mountPath) {
|
||||
this.mountPath = mountPath;
|
||||
this.revealScript = Script.fromLines("open \"$MOUNT_PATH\"").addEnv("MOUNT_PATH", mountPath);
|
||||
this.unmountScript = Script.fromLines("diskutil umount $MOUNT_PATH").addEnv("MOUNT_PATH", mountPath);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unmount() throws CommandFailedException {
|
||||
// only attempt unmount if user didn't unmount manually:
|
||||
if (Files.exists(FileSystems.getDefault().getPath(mountPath))) {
|
||||
unmountScript.execute();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reveal() throws CommandFailedException {
|
||||
revealScript.execute();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -19,74 +19,87 @@ import javax.inject.Singleton;
|
||||
|
||||
@Singleton
|
||||
class MountStrategies implements Collection<WebDavMounterStrategy> {
|
||||
|
||||
|
||||
private final Collection<WebDavMounterStrategy> delegate;
|
||||
|
||||
|
||||
@Inject
|
||||
MountStrategies(LinuxGvfsWebDavMounter linuxMounter, MacOsXWebDavMounter osxMounter, WindowsWebDavMounter winMounter) {
|
||||
delegate = unmodifiableList(asList(linuxMounter, osxMounter, winMounter));
|
||||
MountStrategies(LinuxGvfsWebDavMounter linuxMounter, MacOsXAppleScriptWebDavMounter osxAppleScriptMounter, MacOsXShellScriptWebDavMounter osxShellScriptMounter, WindowsWebDavMounter winMounter) {
|
||||
delegate = unmodifiableList(asList(linuxMounter, osxAppleScriptMounter, osxShellScriptMounter, winMounter));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return delegate.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return delegate.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(Object o) {
|
||||
return delegate.contains(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<WebDavMounterStrategy> iterator() {
|
||||
return delegate.iterator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] toArray() {
|
||||
return delegate.toArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T[] toArray(T[] a) {
|
||||
return delegate.toArray(a);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean add(WebDavMounterStrategy e) {
|
||||
return delegate.add(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean remove(Object o) {
|
||||
return delegate.remove(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsAll(Collection<?> c) {
|
||||
return delegate.containsAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addAll(Collection<? extends WebDavMounterStrategy> c) {
|
||||
return delegate.addAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeAll(Collection<?> c) {
|
||||
return delegate.removeAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean retainAll(Collection<?> c) {
|
||||
return delegate.retainAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
delegate.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
return delegate.equals(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return delegate.hashCode();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -11,10 +11,16 @@ package org.cryptomator.frontend.webdav.mount;
|
||||
|
||||
import static org.cryptomator.frontend.webdav.mount.command.Script.fromLines;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
@@ -22,12 +28,16 @@ import java.util.regex.Pattern;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.CharUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.cryptomator.frontend.CommandFailedException;
|
||||
import org.cryptomator.frontend.Frontend.MountParam;
|
||||
import org.cryptomator.frontend.webdav.mount.command.CommandResult;
|
||||
import org.cryptomator.frontend.webdav.mount.command.Script;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* A {@link WebDavMounterStrategy} utilizing the "net use" command.
|
||||
@@ -37,7 +47,9 @@ import org.cryptomator.frontend.webdav.mount.command.Script;
|
||||
@Singleton
|
||||
final class WindowsWebDavMounter implements WebDavMounterStrategy {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(WindowsWebDavMounter.class);
|
||||
private static final Pattern WIN_MOUNT_DRIVELETTER_PATTERN = Pattern.compile("\\s*([A-Z]):\\s*");
|
||||
private static final Pattern REG_QUERY_PROXY_OVERRIDES_PATTERN = Pattern.compile("\\s*ProxyOverride\\s+REG_SZ\\s+(.*)\\s*");
|
||||
private static final String AUTO_ASSIGN_DRIVE_LETTER = "*";
|
||||
private static final String LOCALHOST = "localhost";
|
||||
private static final int MOUNT_TIMEOUT_SECONDS = 60;
|
||||
@@ -60,12 +72,12 @@ final class WindowsWebDavMounter implements WebDavMounterStrategy {
|
||||
|
||||
@Override
|
||||
public WebDavMount mount(URI uri, Map<MountParam, Optional<String>> mountParams) throws CommandFailedException {
|
||||
final String driveLetter = mountParams.getOrDefault(MountParam.WIN_DRIVE_LETTER, Optional.of(AUTO_ASSIGN_DRIVE_LETTER)).orElse(AUTO_ASSIGN_DRIVE_LETTER);
|
||||
final String driveLetter = mountParams.getOrDefault(MountParam.WIN_DRIVE_LETTER, Optional.empty()).orElse(AUTO_ASSIGN_DRIVE_LETTER);
|
||||
if (driveLetters.getOccupiedDriveLetters().contains(CharUtils.toChar(driveLetter))) {
|
||||
throw new CommandFailedException("Drive letter occupied.");
|
||||
}
|
||||
|
||||
final String hostname = mountParams.getOrDefault(MountParam.HOSTNAME, Optional.of(LOCALHOST)).orElse(LOCALHOST);
|
||||
|
||||
final String hostname = mountParams.getOrDefault(MountParam.HOSTNAME, Optional.empty()).orElse(LOCALHOST);
|
||||
try {
|
||||
final URI adjustedUri = new URI(uri.getScheme(), uri.getUserInfo(), hostname, uri.getPort(), uri.getPath(), uri.getQuery(), uri.getFragment());
|
||||
CommandResult mountResult = mount(adjustedUri, driveLetter);
|
||||
@@ -74,14 +86,14 @@ final class WindowsWebDavMounter implements WebDavMounterStrategy {
|
||||
throw new IllegalArgumentException("Invalid host: " + hostname);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private CommandResult mount(URI uri, String driveLetter) throws CommandFailedException {
|
||||
final Script proxyBypassScript = fromLines(
|
||||
"reg add \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\" /v \"ProxyOverride\" /d \"<local>;%DAV_HOST%;%DAV_HOST%:%DAV_PORT%\" /f");
|
||||
proxyBypassScript.addEnv("DAV_HOST", uri.getHost());
|
||||
proxyBypassScript.addEnv("DAV_PORT", String.valueOf(uri.getPort()));
|
||||
proxyBypassScript.execute();
|
||||
|
||||
try {
|
||||
addProxyOverrides(uri);
|
||||
} catch (IOException e) {
|
||||
throw new CommandFailedException(e);
|
||||
}
|
||||
|
||||
final String driveLetterStr = AUTO_ASSIGN_DRIVE_LETTER.equals(driveLetter) ? AUTO_ASSIGN_DRIVE_LETTER : driveLetter + ":";
|
||||
final Script mountScript = fromLines("net use %DRIVE_LETTER% \\\\%DAV_HOST%@%DAV_PORT%\\DavWWWRoot%DAV_UNC_PATH% /persistent:no");
|
||||
mountScript.addEnv("DRIVE_LETTER", driveLetterStr);
|
||||
@@ -90,6 +102,44 @@ final class WindowsWebDavMounter implements WebDavMounterStrategy {
|
||||
mountScript.addEnv("DAV_UNC_PATH", uri.getRawPath().replace('/', '\\'));
|
||||
return mountScript.execute(MOUNT_TIMEOUT_SECONDS, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
private void addProxyOverrides(URI uri) throws IOException, CommandFailedException {
|
||||
try {
|
||||
// get existing value for ProxyOverride key from reqistry:
|
||||
ProcessBuilder query = new ProcessBuilder("reg", "query", "\"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\"", "/v", "ProxyOverride");
|
||||
Process queryCmd = query.start();
|
||||
String queryStdOut = IOUtils.toString(queryCmd.getInputStream(), StandardCharsets.UTF_8);
|
||||
int queryResult = queryCmd.waitFor();
|
||||
|
||||
// determine new value for ProxyOverride key:
|
||||
Set<String> overrides = new HashSet<>();
|
||||
Matcher matcher = REG_QUERY_PROXY_OVERRIDES_PATTERN.matcher(queryStdOut);
|
||||
if (queryResult == 0 && matcher.find()) {
|
||||
String[] existingOverrides = StringUtils.split(matcher.group(1), ';');
|
||||
overrides.addAll(Arrays.asList(existingOverrides));
|
||||
}
|
||||
overrides.removeIf(s -> s.startsWith(uri.getHost() + ":"));
|
||||
overrides.add("<local>");
|
||||
overrides.add(uri.getHost());
|
||||
overrides.add(uri.getHost() + ":" + uri.getPort());
|
||||
|
||||
// set new value:
|
||||
String overridesStr = StringUtils.join(overrides, ';');
|
||||
ProcessBuilder add = new ProcessBuilder("reg", "add", "\"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\"", "/v", "ProxyOverride", "/d", "\"" + overridesStr + "\"", "/f");
|
||||
LOG.debug("Invoking command: " + StringUtils.join(add.command(), ' '));
|
||||
Process addCmd = add.start();
|
||||
int addResult = addCmd.waitFor();
|
||||
if (addResult != 0) {
|
||||
String addStdErr = IOUtils.toString(addCmd.getErrorStream(), StandardCharsets.UTF_8);
|
||||
throw new CommandFailedException(addStdErr);
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
InterruptedIOException ioException = new InterruptedIOException();
|
||||
ioException.initCause(e);
|
||||
throw ioException;
|
||||
}
|
||||
}
|
||||
|
||||
private String getDriveLetter(String result) throws CommandFailedException {
|
||||
final Matcher matcher = WIN_MOUNT_DRIVELETTER_PATTERN.matcher(result);
|
||||
|
||||
1
main/jacoco-report/.gitignore
vendored
Normal file
1
main/jacoco-report/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/target/
|
||||
82
main/jacoco-report/pom.xml
Normal file
82
main/jacoco-report/pom.xml
Normal file
@@ -0,0 +1,82 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Copyright (c) 2016 Sebastian Stenzel This file is licensed under the terms of the MIT license. See the LICENSE.txt file for more info. -->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>jacoco-report</artifactId>
|
||||
<name>Cryptomator Code Coverage Report</name>
|
||||
|
||||
<dependencies>
|
||||
<!-- Commons -->
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>commons</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>commons-test</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Filesystem Layers -->
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>filesystem-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>filesystem-crypto</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>filesystem-crypto-integration-tests</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>filesystem-inmemory</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>filesystem-nameshortening</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>filesystem-nio</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>filesystem-stats</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Frontends -->
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>frontend-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>frontend-webdav</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>report-aggregate</id>
|
||||
<phase>verify</phase>
|
||||
<goals>
|
||||
<goal>report-aggregate</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
39
main/pom.xml
39
main/pom.xml
@@ -7,7 +7,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>Cryptomator</name>
|
||||
|
||||
@@ -35,12 +35,12 @@
|
||||
<hamcrest.version>1.3</hamcrest.version> <!-- keep in sync with version required by JUnit -->
|
||||
<commons-io.version>2.4</commons-io.version>
|
||||
<commons-collections.version>4.0</commons-collections.version>
|
||||
<commons-lang3.version>3.3.2</commons-lang3.version>
|
||||
<commons-lang3.version>3.4</commons-lang3.version>
|
||||
<commons-codec.version>1.10</commons-codec.version>
|
||||
<commons-httpclient.version>3.1</commons-httpclient.version>
|
||||
<jackson-databind.version>2.4.4</jackson-databind.version>
|
||||
<mockito.version>1.10.19</mockito.version>
|
||||
<dagger.version>2.0.2</dagger.version>
|
||||
<dagger.version>2.4</dagger.version>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
@@ -49,6 +49,16 @@
|
||||
<url>https://jitpack.io</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<pluginRepositories>
|
||||
<pluginRepository>
|
||||
<id>jacoco-snapshots</id>
|
||||
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
</pluginRepository>
|
||||
</pluginRepositories>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
@@ -81,6 +91,12 @@
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>filesystem-invariants-tests</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>filesystem-nameshortening</artifactId>
|
||||
@@ -288,6 +304,12 @@
|
||||
<module>ant-kit</module>
|
||||
</modules>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>test-coverage</id>
|
||||
<modules>
|
||||
<module>jacoco-report</module>
|
||||
</modules>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
<build>
|
||||
@@ -312,7 +334,7 @@
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<version>0.7.5.201505241946</version>
|
||||
<version>0.7.7-SNAPSHOT</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>prepare-agent</id>
|
||||
@@ -321,6 +343,12 @@
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<excludes>
|
||||
<exclude>**/*_*</exclude>
|
||||
<exclude>**/Dagger*</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
@@ -339,6 +367,9 @@
|
||||
<artifactId>coveralls-maven-plugin</artifactId>
|
||||
<version>4.0.0</version>
|
||||
<configuration>
|
||||
<jacocoReports>
|
||||
<jacocoReport>jacoco-report/target/site/jacoco-aggregate/jacoco.xml</jacocoReport>
|
||||
</jacocoReports>
|
||||
<repoToken>${env.COVERALLS_REPO_TOKEN}</repoToken>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>uber-jar</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>main</artifactId>
|
||||
<version>1.0.3d</version>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<artifactId>ui</artifactId>
|
||||
<name>Cryptomator GUI</name>
|
||||
|
||||
@@ -36,6 +36,8 @@ public class Cryptomator {
|
||||
private static final CleanShutdownPerformer CLEAN_SHUTDOWN_PERFORMER = new CleanShutdownPerformer();
|
||||
|
||||
public static void main(String[] args) {
|
||||
String cryptomatorVersion = Optional.ofNullable(Cryptomator.class.getPackage().getImplementationVersion()).orElse("SNAPSHOT");
|
||||
LOG.info("Starting Cryptomator {} on {} {} ({})", cryptomatorVersion, SystemUtils.OS_NAME, SystemUtils.OS_VERSION, SystemUtils.OS_ARCH);
|
||||
if (SystemUtils.IS_OS_MAC_OSX) {
|
||||
/*
|
||||
* On OSX we're in an awkward position. We need to register a handler in the main thread of this application. However, we can't
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
*******************************************************************************/
|
||||
package org.cryptomator.ui;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.cryptomator.common.CommonsModule;
|
||||
import org.cryptomator.crypto.engine.impl.CryptoEngineModule;
|
||||
import org.cryptomator.frontend.FrontendFactory;
|
||||
import org.cryptomator.frontend.webdav.WebDavServer;
|
||||
@@ -24,7 +24,6 @@ import org.cryptomator.ui.model.VaultObjectMapperProvider;
|
||||
import org.cryptomator.ui.settings.Settings;
|
||||
import org.cryptomator.ui.settings.SettingsProvider;
|
||||
import org.cryptomator.ui.util.DeferredCloser;
|
||||
import org.cryptomator.ui.util.SemVerComparator;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
@@ -33,7 +32,7 @@ import dagger.Provides;
|
||||
import javafx.application.Application;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
@Module(includes = CryptoEngineModule.class)
|
||||
@Module(includes = {CryptoEngineModule.class, CommonsModule.class})
|
||||
class CryptomatorModule {
|
||||
|
||||
private final Application application;
|
||||
@@ -65,13 +64,6 @@ class CryptomatorModule {
|
||||
return closer;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Named("SemVer")
|
||||
Comparator<String> provideSemVerComparator() {
|
||||
return new SemVerComparator();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Named("VaultJsonMapper")
|
||||
|
||||
@@ -136,6 +136,7 @@ class ExitUtil {
|
||||
return;
|
||||
} else {
|
||||
settings.setNumTrayNotifications(settings.getNumTrayNotifications() - 1);
|
||||
settings.save();
|
||||
}
|
||||
final Runnable notificationCmd;
|
||||
if (SystemUtils.IS_OS_MAC_OSX) {
|
||||
|
||||
@@ -38,6 +38,7 @@ public class MainApplication extends Application {
|
||||
|
||||
@Override
|
||||
public void start(Stage primaryStage) throws IOException {
|
||||
LOG.info("JavaFX application started");
|
||||
final CryptomatorComponent comp = DaggerCryptomatorComponent.builder().cryptomatorModule(new CryptomatorModule(this, primaryStage)).build();
|
||||
final MainController mainCtrl = comp.mainController();
|
||||
closer = comp.deferredCloser();
|
||||
|
||||
@@ -40,6 +40,7 @@ import javafx.beans.binding.BooleanBinding;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ListChangeListener.Change;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.fxml.FXML;
|
||||
@@ -94,6 +95,9 @@ public class MainController extends LocalizedFXMLViewController {
|
||||
this.changePasswordController = changePasswordController;
|
||||
this.settingsController = settingsController;
|
||||
this.vaults = FXCollections.observableList(settings.getDirectories());
|
||||
this.vaults.addListener((Change<? extends Vault> c) -> {
|
||||
settings.save();
|
||||
});
|
||||
|
||||
// derived bindings:
|
||||
this.isShowingSettings = activeController.isEqualTo(settingsController.get());
|
||||
|
||||
@@ -59,9 +59,9 @@ public class SettingsController extends LocalizedFXMLViewController {
|
||||
useIpv6Checkbox.setSelected(SystemUtils.IS_OS_WINDOWS && settings.shouldUseIpv6());
|
||||
versionLabel.setText(String.format(localization.getString("settings.version.label"), applicationVersion().orElse("SNAPSHOT")));
|
||||
|
||||
EasyBind.subscribe(checkForUpdatesCheckbox.selectedProperty(), settings::setCheckForUpdatesEnabled);
|
||||
EasyBind.subscribe(checkForUpdatesCheckbox.selectedProperty(), this::checkForUpdateDidChange);
|
||||
EasyBind.subscribe(portField.textProperty(), this::portDidChange);
|
||||
EasyBind.subscribe(useIpv6Checkbox.selectedProperty(), settings::setUseIpv6);
|
||||
EasyBind.subscribe(useIpv6Checkbox.selectedProperty(), this::useIpv6DidChange);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -73,21 +73,30 @@ public class SettingsController extends LocalizedFXMLViewController {
|
||||
return Optional.ofNullable(getClass().getPackage().getImplementationVersion());
|
||||
}
|
||||
|
||||
private void checkForUpdateDidChange(Boolean newValue) {
|
||||
settings.setCheckForUpdatesEnabled(newValue);
|
||||
settings.save();
|
||||
}
|
||||
|
||||
private void portDidChange(String newValue) {
|
||||
try {
|
||||
int port = Integer.parseInt(newValue);
|
||||
if (port < Settings.MIN_PORT) {
|
||||
if (port < Settings.MIN_PORT || port > Settings.MAX_PORT) {
|
||||
settings.setPort(Settings.DEFAULT_PORT);
|
||||
} else if (port < Settings.MAX_PORT) {
|
||||
settings.setPort(port);
|
||||
} else {
|
||||
portField.setText(String.valueOf(Settings.MAX_PORT));
|
||||
settings.setPort(port);
|
||||
settings.save();
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
portField.setText(String.valueOf(Settings.DEFAULT_PORT));
|
||||
}
|
||||
}
|
||||
|
||||
private void useIpv6DidChange(Boolean newValue) {
|
||||
settings.setUseIpv6(newValue);
|
||||
settings.save();
|
||||
}
|
||||
|
||||
private void filterNumericKeyEvents(KeyEvent t) {
|
||||
if (t.getCharacter() == null || t.getCharacter().length() == 0) {
|
||||
return;
|
||||
|
||||
@@ -1,27 +1,70 @@
|
||||
package org.cryptomator.ui.settings;
|
||||
|
||||
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;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@Singleton
|
||||
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 static final String LOCALIZATION_FILE = String.format(LOCALIZATION_FILENAME_FMT, Locale.getDefault().getLanguage());
|
||||
|
||||
private final ResourceBundle fallback;
|
||||
private final ResourceBundle localized;
|
||||
|
||||
@Inject
|
||||
public Localization() {
|
||||
this.parent = ResourceBundle.getBundle("localization");
|
||||
try (InputStream in = getClass().getResourceAsStream(LOCALIZATION_DEFAULT_FILE)) {
|
||||
Objects.requireNonNull(in);
|
||||
Reader reader = new InputStreamReader(in, StandardCharsets.UTF_8);
|
||||
this.fallback = new PropertyResourceBundle(reader);
|
||||
LOG.info("Loaded localization from {}", LOCALIZATION_FILE);
|
||||
} catch (IOException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
}
|
||||
|
||||
try (InputStream in = getClass().getResourceAsStream(LOCALIZATION_FILE)) {
|
||||
if (in != null) {
|
||||
Reader reader = new InputStreamReader(in, StandardCharsets.UTF_8);
|
||||
this.localized = new PropertyResourceBundle(reader);
|
||||
} else {
|
||||
this.localized = this.fallback;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object handleGetObject(String key) {
|
||||
return parent.getObject(key);
|
||||
return localized.containsKey(key) ? localized.getObject(key) : fallback.getObject(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enumeration<String> getKeys() {
|
||||
return parent.getKeys();
|
||||
Collection<String> keys = CollectionUtils.union(localized.keySet(), fallback.keySet());
|
||||
return Collections.enumeration(keys);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ package org.cryptomator.ui.settings;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.cryptomator.ui.model.Vault;
|
||||
|
||||
@@ -23,10 +24,12 @@ public class Settings implements Serializable {
|
||||
private static final long serialVersionUID = 7609959894417878744L;
|
||||
public static final int MIN_PORT = 1024;
|
||||
public static final int MAX_PORT = 65535;
|
||||
public static final int DEFAULT_PORT = 0;
|
||||
public static final int DEFAULT_PORT = 42427;
|
||||
public static final boolean DEFAULT_USE_IPV6 = false;
|
||||
public static final Integer DEFAULT_NUM_TRAY_NOTIFICATIONS = 3;
|
||||
|
||||
private final Consumer<Settings> saveCmd;
|
||||
|
||||
@JsonProperty("directories")
|
||||
private List<Vault> directories;
|
||||
|
||||
@@ -35,7 +38,7 @@ public class Settings implements Serializable {
|
||||
|
||||
@JsonProperty("port")
|
||||
private Integer port;
|
||||
|
||||
|
||||
@JsonProperty("useIpv6")
|
||||
private Boolean useIpv6;
|
||||
|
||||
@@ -45,8 +48,12 @@ public class Settings implements Serializable {
|
||||
/**
|
||||
* Package-private constructor; use {@link SettingsProvider}.
|
||||
*/
|
||||
Settings() {
|
||||
Settings(Consumer<Settings> saveCmd) {
|
||||
this.saveCmd = saveCmd;
|
||||
}
|
||||
|
||||
public void save() {
|
||||
saveCmd.accept(this);
|
||||
}
|
||||
|
||||
/* Getter/Setter */
|
||||
|
||||
@@ -16,6 +16,12 @@ import java.nio.file.FileSystems;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
@@ -23,7 +29,6 @@ import javax.inject.Provider;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.cryptomator.ui.util.DeferredCloser;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -32,9 +37,10 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
@Singleton
|
||||
public class SettingsProvider implements Provider<Settings> {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(Settings.class);
|
||||
private static final Logger LOG = LoggerFactory.getLogger(SettingsProvider.class);
|
||||
private static final Path SETTINGS_DIR;
|
||||
private static final String SETTINGS_FILE = "settings.json";
|
||||
private static final long SAVE_DELAY_MS = 1000;
|
||||
|
||||
static {
|
||||
final String appdata = System.getenv("APPDATA");
|
||||
@@ -52,12 +58,12 @@ public class SettingsProvider implements Provider<Settings> {
|
||||
}
|
||||
}
|
||||
|
||||
private final DeferredCloser deferredCloser;
|
||||
private final ObjectMapper objectMapper;
|
||||
private final ScheduledExecutorService saveScheduler = Executors.newSingleThreadScheduledExecutor();
|
||||
private final AtomicReference<ScheduledFuture<?>> scheduledSaveCmd = new AtomicReference<>();
|
||||
|
||||
@Inject
|
||||
public SettingsProvider(DeferredCloser deferredCloser, @Named("VaultJsonMapper") ObjectMapper objectMapper) {
|
||||
this.deferredCloser = deferredCloser;
|
||||
public SettingsProvider(@Named("VaultJsonMapper") ObjectMapper objectMapper) {
|
||||
this.objectMapper = objectMapper;
|
||||
}
|
||||
|
||||
@@ -72,28 +78,39 @@ public class SettingsProvider implements Provider<Settings> {
|
||||
|
||||
@Override
|
||||
public Settings get() {
|
||||
Settings settings = null;
|
||||
final Settings settings = new Settings(this::scheduleSave);
|
||||
try {
|
||||
final Path settingsPath = getSettingsPath();
|
||||
final InputStream in = Files.newInputStream(settingsPath, StandardOpenOption.READ);
|
||||
settings = objectMapper.readValue(in, Settings.class);
|
||||
objectMapper.readerForUpdating(settings).readValue(in);
|
||||
LOG.info("Settings loaded from " + settingsPath);
|
||||
} catch (IOException e) {
|
||||
LOG.warn("Failed to load settings, creating new one.");
|
||||
settings = new Settings();
|
||||
LOG.info("Failed to load settings, creating new one.");
|
||||
}
|
||||
deferredCloser.closeLater(settings, this::save);
|
||||
return settings;
|
||||
}
|
||||
|
||||
private void save(Settings settings) {
|
||||
private void scheduleSave(Settings settings) {
|
||||
if (settings == null) {
|
||||
return;
|
||||
}
|
||||
ScheduledFuture<?> saveCmd = saveScheduler.schedule(() -> {
|
||||
this.save(settings);
|
||||
} , SAVE_DELAY_MS, TimeUnit.MILLISECONDS);
|
||||
ScheduledFuture<?> previousSaveCmd = scheduledSaveCmd.getAndSet(saveCmd);
|
||||
if (previousSaveCmd != null) {
|
||||
previousSaveCmd.cancel(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void save(Settings settings) {
|
||||
Objects.requireNonNull(settings);
|
||||
try {
|
||||
final Path settingsPath = getSettingsPath();
|
||||
Files.createDirectories(settingsPath.getParent());
|
||||
final OutputStream out = Files.newOutputStream(settingsPath, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.CREATE);
|
||||
objectMapper.writeValue(out, settings);
|
||||
LOG.info("Settings saved to " + settingsPath);
|
||||
} catch (IOException e) {
|
||||
LOG.error("Failed to save settings.", e);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
# 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:
|
||||
# Markus Kreusch - initial translation
|
||||
# Markus Kreusch
|
||||
# Michael Schmetter
|
||||
# Sebastian Wiesendahl
|
||||
# Tim Marius Wunderlich
|
||||
|
||||
app.name = Cryptomator
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Klicken Sie hier, um neue Tresore hinzuzufügen
|
||||
@@ -65,6 +69,7 @@ unlocked.label.statsDecrypted = entschlüsselt
|
||||
unlocked.ioGraph.yAxis.label = Durchsatz (MiB/s)
|
||||
# mac_warnings.fxml
|
||||
macWarnings.windowTitle = Achtung - Kompromittierte Datei in %s
|
||||
# "potentially detected" or "potentially malicious"?
|
||||
macWarnings.message = Cryptomator hat möglicherweise unerlaubte Veränderungen in den folgenden Dateien erkannt\:
|
||||
macWarnings.moreInformationButton = Mehr erfahren
|
||||
macWarnings.whitelistButton = Trotzdem entschlüsseln
|
||||
@@ -80,4 +85,4 @@ 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.
|
||||
tray.infoMsg.msg.osx = Cryptomator läuft noch. Über die Menüleiste beenden.
|
||||
87
main/ui/src/main/resources/localization/es.txt
Normal file
87
main/ui/src/main/resources/localization/es.txt
Normal file
@@ -0,0 +1,87 @@
|
||||
# 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.
|
||||
#
|
||||
# Contributos:
|
||||
# Jay
|
||||
# Sebastian Wiesendahl
|
||||
|
||||
app.name = Cryptomator
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Click 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 = Chequando por actualizaciónes...
|
||||
welcome.newVersionMessage = Se puede bajar version %s. Este es %s.
|
||||
# initialize.fxml
|
||||
initialize.label.password = Contraseña
|
||||
initialize.label.retypePassword = Reintroduzca contraseña
|
||||
initialize.button.ok = Crear caja fuerte
|
||||
initialize.messageLabel.alreadyInitialized = Caja fuerte ya está inicializado
|
||||
initialize.messageLabel.initializationFailed = No se pudo inicializar la caja fuerte. Ver archivo de registro para detalles.
|
||||
# notfound.fxml
|
||||
notfound.label = No se pudo encontrar 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 nuevo formato.\n"%1$s" se renombra a "%2$s".\nPor favor aseguranse que la sincronización ya se terminó antes de continuar.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = Migración automática ha fallado.\n"%s" ya existe.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Contraseña
|
||||
unlock.label.mountName = Nombre del disco
|
||||
unlock.label.winDriveLetter = Letra del disco
|
||||
unlock.label.downloadsPageLink = Todas las versiones de Cryptomator
|
||||
unlock.label.advancedHeading = Opciones avanzadas
|
||||
unlock.button.unlock = Abrir 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.mountingFailed = Monteo ha fallado. Ver archivo del registro para detalles.
|
||||
unlock.errorMessage.unsupportedKeyLengthInstallJCE = Decifración ha fallado. Por favor instala archivos de la Oracle JCE Unlimited Strength Policy.
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Caja fuerte insupportado. Este caja se ha creado con una versión pasada de Cryptomator.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Caja fuerte insupportado. Este caja se ha creado con una versión nueva de Cryptomator.
|
||||
unlock.messageLabel.startServerFailed = Iniciación del servidor de WebDAV ha fallado.
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Contraseña anterior
|
||||
# Can also use "current password" = "contraseña actual"
|
||||
changePassword.label.newPassword = Nueva contraseña
|
||||
changePassword.label.retypePassword = Reintroduzca 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 = Decifración ha fallado
|
||||
changePassword.errorMessage.unsupportedKeyLengthInstallJCE = Decifración ha fallado. Por favor instala Oracle JCE Unlimited Strength Policy.
|
||||
changePassword.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Caja fuerte insupportado. Este caja se ha creado con una versión pasada de Cryptomator.
|
||||
changePassword.errorMessage.unsupportedVersion.softwareOlderThanVault = Caja fuerte insupportado. Este caja se ha creado con una versión nueva de Cryptomator.
|
||||
changePassword.infoMessage.success = Contraseña se ha cambiado
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Encerrar caja fuerte
|
||||
unlocked.moreOptions.reveal = Revelar disco
|
||||
unlocked.moreOptions.copyUrl = Copiar URL de WebDAV
|
||||
unlocked.label.revealFailed = Comando ha fallado
|
||||
unlocked.label.unmountFailed = Expulsar el disco ha fallado
|
||||
unlocked.label.statsEncrypted = cifrado
|
||||
unlocked.label.statsDecrypted = decifrado
|
||||
unlocked.ioGraph.yAxis.label = Procesamiento (MiB/s)
|
||||
# mac_warnings.fxml
|
||||
macWarnings.windowTitle = Peligro - archivo corrupto en %s
|
||||
macWarnings.message = Cryptomator ha detectado corrupciones malciosas en los seguientes archivos\:
|
||||
macWarnings.moreInformationButton = Aprende más
|
||||
macWarnings.whitelistButton = Decifrar selecionado de todos modos
|
||||
# settings.fxml
|
||||
settings.version.label = Version %s
|
||||
settings.checkForUpdates.label = Chequear por actualizaciones
|
||||
settings.port.label = Puerta de WebDAV *
|
||||
settings.port.prompt = 0 \= Elige automáticamente
|
||||
settings.useipv6.label = Usa literal de IPv6
|
||||
settings.requiresRestartLabel = * Cryptomator se necesita reiniciar
|
||||
# tray icon
|
||||
tray.menu.open = Abrir
|
||||
tray.menu.quit = Salir
|
||||
tray.infoMsg.title = Todavía en ejecución
|
||||
tray.infoMsg.msg = Cryptomator todavía esta en ejecución. Sale del icono del tray.
|
||||
tray.infoMsg.msg.osx = Cryptomator todavía esta en ejecución. Sale del icono de la barra del menú.
|
||||
86
main/ui/src/main/resources/localization/fr.txt
Normal file
86
main/ui/src/main/resources/localization/fr.txt
Normal file
@@ -0,0 +1,86 @@
|
||||
# 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:
|
||||
# Jean-Noël Charon
|
||||
# Olivier Thomasson
|
||||
# vesparny
|
||||
|
||||
app.name = Cryptomator
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Cliquez ici pour ajouter un coffre
|
||||
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
|
||||
main.addDirectory.contextMenu.open = Ouvrir un coffre existant
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Recherche de mise à jour...
|
||||
welcome.newVersionMessage = La version %s peut-être téléchargée. Il s'agit de %s.
|
||||
# initialize.fxml
|
||||
initialize.label.password = Mot de passe
|
||||
initialize.label.retypePassword = Confirmation
|
||||
initialize.button.ok = Créer le coffre
|
||||
initialize.messageLabel.alreadyInitialized = Coffre déjà initialisé
|
||||
initialize.messageLabel.initializationFailed = Impossible d'initialiser le coffre. Voir le fichier de log pour plus de détails.
|
||||
# notfound.fxml
|
||||
notfound.label = Coffre introuvable. A t'il été déplacé?
|
||||
# upgrade.fxml
|
||||
upgrade.button = Mettre à niveau
|
||||
upgrade.version3dropBundleExtension.msg = Ce coffre 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
|
||||
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
|
||||
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.mountingFailed = Echec du montage. Voir le fichier de log pour plus de détails.
|
||||
unlock.errorMessage.unsupportedKeyLengthInstallJCE = Echec du décryptage. Veuillez installer la Policy Oracle "JCE Unlimited Strength Policy".
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Coffre non supporté. Ce coffre a été créé avec une ancienne version de Cryptomator.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Coffre non supporté. Ce coffre a été créé avec une version de Cryptomator plus récente.
|
||||
unlock.messageLabel.startServerFailed = Le serveur WebDAV n'a pas pu démarrer.
|
||||
# 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
|
||||
changePassword.errorMessage.decryptionFailed = Echec du décryptage
|
||||
changePassword.errorMessage.unsupportedKeyLengthInstallJCE = Echec du décryptage. Veuillez installer la Policy Oracle "JCE Unlimited Strength Policy".
|
||||
changePassword.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Coffre non supporté. Ce coffre a été créé avec une ancienne version de Cryptomator.
|
||||
changePassword.errorMessage.unsupportedVersion.softwareOlderThanVault = Coffre non supporté. Ce coffre a été créé avec une version de Cryptomator plus récente.
|
||||
changePassword.infoMessage.success = Password changed
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Verrouiller le coffre
|
||||
unlocked.moreOptions.reveal = Voir le lecteur
|
||||
unlocked.moreOptions.copyUrl = Copier l'URL WebDAV
|
||||
unlocked.label.revealFailed = Echec de la commande
|
||||
unlocked.label.unmountFailed = Echec de l'éjection du lecteur
|
||||
unlocked.label.statsEncrypted = crypté
|
||||
unlocked.label.statsDecrypted = décryptage
|
||||
unlocked.ioGraph.yAxis.label = Débit (MiB/s)
|
||||
# mac_warnings.fxml
|
||||
macWarnings.windowTitle = Attention - Fichier corrompu dans %s
|
||||
macWarnings.message = Cryptomator a détecté des corruptions de données dans les fichiers suivants\:
|
||||
macWarnings.moreInformationButton = En savoir plus
|
||||
macWarnings.whitelistButton = Décrypter tout de même
|
||||
# settings.fxml
|
||||
settings.version.label = Version %s
|
||||
settings.checkForUpdates.label = Vérif. des mises à jour
|
||||
settings.port.label = Port WebDAV *
|
||||
settings.port.prompt = 0 \= Choix automatique
|
||||
settings.useipv6.label = Utiliser un litéral IPv6
|
||||
settings.requiresRestartLabel = * Redémarrage requis
|
||||
# tray icon
|
||||
tray.menu.open = Ouvrir
|
||||
tray.menu.quit = Quitter
|
||||
tray.infoMsg.title = Toujours en fonctionnement
|
||||
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.
|
||||
84
main/ui/src/main/resources/localization/hu.txt
Normal file
84
main/ui/src/main/resources/localization/hu.txt
Normal file
@@ -0,0 +1,84 @@
|
||||
# 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:
|
||||
# Roland Burda
|
||||
|
||||
app.name = Cryptomator
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Kattints ide egy széf létrehozásához
|
||||
main.directoryList.contextMenu.remove = Eltávolítás listából
|
||||
main.directoryList.contextMenu.changePassword = Jelszó megváltoztatása
|
||||
main.addDirectory.contextMenu.new = Új széf létrehozása
|
||||
main.addDirectory.contextMenu.open = Létez\u0151 széf megnyitása
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Frissítések keresése...
|
||||
welcome.newVersionMessage = Új verzió érhet\u0151 el\: %s. Jelenlegi verzió\: %s.
|
||||
# initialize.fxml
|
||||
initialize.label.password = Jelszó
|
||||
initialize.label.retypePassword = Jelszó ismét
|
||||
initialize.button.ok = Széf létrehozása
|
||||
initialize.messageLabel.alreadyInitialized = A széf már meg van nyitva
|
||||
initialize.messageLabel.initializationFailed = Nem sikerült megnyitni a széfet. További információ a naplófájlban.
|
||||
# notfound.fxml
|
||||
notfound.label = Széf nem található. Lehetséges, hogy áthelyezésre került?
|
||||
# upgrade.fxml
|
||||
upgrade.button = Széf frissítése
|
||||
upgrade.version3dropBundleExtension.msg = A széf új verzióra történ\u0151 migrációja szükséges. "%1$s" a következ\u0151re lesz átnevezve\: "%2$s". Kérlek gy\u0151z\u0151dj meg a szinkronizáció befejeztér\u0151l, miel\u0151tt más m\u0171veletet végeznél.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = Automatikus migráció meghíusúlt. "%s" már létezik.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Jelszó
|
||||
unlock.label.mountName = Meghajtó neve
|
||||
unlock.label.winDriveLetter = Meghajtó bet\u0171jele
|
||||
unlock.label.downloadsPageLink = Összes Cryptomator verzió
|
||||
unlock.label.advancedHeading = Haladó beállítások
|
||||
unlock.button.unlock = Széf feloldása
|
||||
unlock.button.advancedOptions.show = További beállítások
|
||||
unlock.button.advancedOptions.hide = Alapbeállítások
|
||||
unlock.choicebox.winDriveLetter.auto = Automatikus hozzárendelés
|
||||
unlock.errorMessage.wrongPassword = Hibás jelszó
|
||||
unlock.errorMessage.mountingFailed = Meghajtó felcsatolása sikertelen. További információk a naplófájlban.
|
||||
unlock.errorMessage.unsupportedKeyLengthInstallJCE = A titkosítás feloldása sikertelen. Kérlek telepítsd a "Oracle JCE Unlimited Strength Policy Files"-t.
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Nem támogatott széf. Ez a széf a Cryptomator egy korábbi verziójával került létrehozásra.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Nem támogatott széf. Ez a széf a Cryptomator egy újabb verziójával került létrehozásra.
|
||||
unlock.messageLabel.startServerFailed = WebDAV szerver indítása sikertelen.
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Régi jelszó
|
||||
changePassword.label.newPassword = Új jelszó
|
||||
changePassword.label.retypePassword = Új jelszó ismét
|
||||
changePassword.label.downloadsPageLink = Összes Cryptomator verzió
|
||||
changePassword.button.change = Jelszó megváltoztatása
|
||||
changePassword.errorMessage.wrongPassword = Hibás jelszó
|
||||
changePassword.errorMessage.decryptionFailed = A titkosítás feloldása meghíusúlt
|
||||
changePassword.errorMessage.unsupportedKeyLengthInstallJCE = A titkosítás feloldása sikertelen. Kérlek telepítsd a "Oracle JCE Unlimited Strength Policy"-t.
|
||||
changePassword.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Nem támogatott széf. Ez a széf a Cryptomator egy korábbi verziójával került létrehozásra.
|
||||
changePassword.errorMessage.unsupportedVersion.softwareOlderThanVault = Nem támogatott széf. Ez a széf a Cryptomator egy újabb verziójával került létrehozásra.
|
||||
changePassword.infoMessage.success = Jelszó megváltoztatva
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Széf lezárása
|
||||
unlocked.moreOptions.reveal = Meghajtó felfedése
|
||||
unlocked.moreOptions.copyUrl = WebDAV URL másolása
|
||||
unlocked.label.revealFailed = Parancs meghíusúlt
|
||||
unlocked.label.unmountFailed = Meghajtó leválasztása sikertelen
|
||||
unlocked.label.statsEncrypted = titkosított
|
||||
unlocked.label.statsDecrypted = titkosítás feloldva
|
||||
unlocked.ioGraph.yAxis.label = Teljesítmény (MiB/s)
|
||||
# mac_warnings.fxml
|
||||
macWarnings.windowTitle = Veszély - Korrupt fájl a következ\u0151ben\: %s
|
||||
macWarnings.message = Cryptomator potenciálisan rosszindulatú hibákat fedezett fel a következ\u0151 fájlokban\:
|
||||
macWarnings.moreInformationButton = Tudj meg többet
|
||||
macWarnings.whitelistButton = Kiválasztottak titkosításának feloldása mindenképp
|
||||
# settings.fxml
|
||||
settings.version.label = Verzió\: %s
|
||||
settings.checkForUpdates.label = Frissítések keresése
|
||||
settings.port.label = WebDAV Port *
|
||||
settings.port.prompt = 0 \= Automatikus választás
|
||||
settings.useipv6.label = Literális IPv6 használata
|
||||
settings.requiresRestartLabel = * Cryptomator újraindítása szükséges
|
||||
# tray icon
|
||||
tray.menu.open = Megnyit
|
||||
tray.menu.quit = Kilépés
|
||||
tray.infoMsg.title = M\u0171velet folyamatban
|
||||
tray.infoMsg.msg = Cryptomator még fut. A tálcán található ikon segítségével bezárhatod.
|
||||
tray.infoMsg.msg.osx = Cryptomator még fut. A menüsávban található ikon segítségével bezárhatod.
|
||||
84
main/ui/src/main/resources/localization/it.txt
Normal file
84
main/ui/src/main/resources/localization/it.txt
Normal file
@@ -0,0 +1,84 @@
|
||||
# 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:
|
||||
# vesparny
|
||||
|
||||
app.name = Cryptomator
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Clicca qui per aggiungere un vault
|
||||
main.directoryList.contextMenu.remove = Rimuovi dalla lista
|
||||
main.directoryList.contextMenu.changePassword = Cambia la password
|
||||
main.addDirectory.contextMenu.new = Crea un nuovo vault
|
||||
main.addDirectory.contextMenu.open = Apri un vault
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Verifica aggiornamenti...
|
||||
welcome.newVersionMessage = La versione %s può essere scaricata. Questa è %s
|
||||
# initialize.fxml
|
||||
initialize.label.password = Password
|
||||
initialize.label.retypePassword = Conferma password
|
||||
initialize.button.ok = Crea un vault
|
||||
initialize.messageLabel.alreadyInitialized = Vault già inizializzato
|
||||
initialize.messageLabel.initializationFailed = Non è possibile inizializzare il vault. Controlla il file di log per dettagli.
|
||||
# notfound.fxml
|
||||
notfound.label = Il vault non può essere trovato. E' stato rimosso?
|
||||
# upgrade.fxml
|
||||
upgrade.button = Aggiorna vault
|
||||
upgrade.version3dropBundleExtension.msg = Questo vault deve essere migrato ad un nuovo formato.\n"%1$s" verrà rinominato in "%2$s".\nPer favore verifica che la sincronizzazione sia finita prima di procedere\n
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = Migrazione automatica fallita.\n"%s" esiste già.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Password
|
||||
unlock.label.mountName = nome del drive
|
||||
unlock.label.winDriveLetter = lettera del drive
|
||||
unlock.label.downloadsPageLink = Tutte le versioni di Cryptomator
|
||||
unlock.label.advancedHeading = Opzioni avanzate
|
||||
unlock.button.unlock = Sblocca vault
|
||||
unlock.button.advancedOptions.show = Più opzioni
|
||||
unlock.button.advancedOptions.hide = Meno opzioni
|
||||
unlock.choicebox.winDriveLetter.auto = Assegna automaticamente
|
||||
unlock.errorMessage.wrongPassword = Password errata
|
||||
unlock.errorMessage.mountingFailed = Montaggio fallito. Controlla il file di log per dettagli.
|
||||
unlock.errorMessage.unsupportedKeyLengthInstallJCE = Decriptaggio fallito.
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Vault non supportato. Questo vault è stato creato con una versione di Cryptomator più vecchia.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Vault non supportato. Questo vault è stato creato con una versione di Cryptomator più recente.
|
||||
unlock.messageLabel.startServerFailed = Avvio del server WebDAV fallito
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Vecchia password
|
||||
changePassword.label.newPassword = Nuova password
|
||||
changePassword.label.retypePassword = Conferma password
|
||||
changePassword.label.downloadsPageLink = Tutte le versioni di Cryptomator
|
||||
changePassword.button.change = Cambia la password
|
||||
changePassword.errorMessage.wrongPassword = Password errata
|
||||
changePassword.errorMessage.decryptionFailed = Decriptaggio fallito
|
||||
changePassword.errorMessage.unsupportedKeyLengthInstallJCE = Decriptaggio fallito. Per favore installa Oracle JCE Unlimited Strength Policy
|
||||
changePassword.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Vault non supportato. Questo vault è stato creato con una versione di Cryptomator più recente.
|
||||
changePassword.errorMessage.unsupportedVersion.softwareOlderThanVault = Vault non supportato. Questo vault è stato creato con una versione di Cryptomator più vecchia.
|
||||
changePassword.infoMessage.success = Password cambiata
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Blocca vault
|
||||
unlocked.moreOptions.reveal = Apri il disco
|
||||
unlocked.moreOptions.copyUrl = Copia url WebDAV
|
||||
unlocked.label.revealFailed = Comando fallito
|
||||
unlocked.label.unmountFailed = Espulsione disco fallita
|
||||
unlocked.label.statsEncrypted = criptato
|
||||
unlocked.label.statsDecrypted = decriptato
|
||||
unlocked.ioGraph.yAxis.label = Volume dati (MiB/s)
|
||||
# mac_warnings.fxml
|
||||
macWarnings.windowTitle = Pericolo - File corroto in %s
|
||||
macWarnings.message = Cryptomator ha individuato potenziali pericolose corruzioni nei seguenti file\:
|
||||
macWarnings.moreInformationButton = Più informazioni
|
||||
macWarnings.whitelistButton = Decripta i selezionati comunque
|
||||
# settings.fxml
|
||||
settings.version.label = Versione %s
|
||||
settings.checkForUpdates.label = Verifica aggiornamenti
|
||||
settings.port.label = WebDAV Port *
|
||||
settings.port.prompt = 0 \= Scegli automaticamente
|
||||
settings.useipv6.label = Utilizza IPv6 literal
|
||||
settings.requiresRestartLabel = * Cryptomator deve essere riavviato
|
||||
# tray icon
|
||||
tray.menu.open = Apri
|
||||
tray.menu.quit = Chiudi
|
||||
tray.infoMsg.title = Ancora in esecuzione
|
||||
tray.infoMsg.msg = Cryptomator è ancora in esecuzione. Chiudilo utilizzando l'icona nel menù di stato.
|
||||
tray.infoMsg.msg.osx = Cryptomator è ancora in esecuzione. Chiudilo utilizzando l'icona nella barra del menù.
|
||||
84
main/ui/src/main/resources/localization/kr.txt
Normal file
84
main/ui/src/main/resources/localization/kr.txt
Normal file
@@ -0,0 +1,84 @@
|
||||
# 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:
|
||||
# ChangHwan Kim
|
||||
|
||||
app.name = Cryptomator
|
||||
# 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 = %s 버전이 새로 다운로드 가능합니다. 지금 버전은 %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 = 이 보관함은 새로운 형식으로 다시 바뀔 필요가 있습니다. "%1$s"의 이름은 "%2$s"로 바뀔 것입니다. 진행하기 전에 동기화가 완료되었는지 다시 한 번 확인해주시기 바랍니다.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = 자동 마이그레이션 실패. "%s"가 이미 존재합니다.
|
||||
# unlock.fxml
|
||||
unlock.label.password = 비밀번호
|
||||
unlock.label.mountName = 드라이브 이름
|
||||
unlock.label.winDriveLetter = 드라이브 문자
|
||||
unlock.label.downloadsPageLink = 모든 Cryptomator 버전
|
||||
unlock.label.advancedHeading = 고급 옵션
|
||||
unlock.button.unlock = 보관함 해제
|
||||
unlock.button.advancedOptions.show = 더 많은 옵션
|
||||
unlock.button.advancedOptions.hide = 기본 옵션
|
||||
unlock.choicebox.winDriveLetter.auto = 자동으로 할당
|
||||
unlock.errorMessage.wrongPassword = 틀린 비밀번호
|
||||
unlock.errorMessage.mountingFailed = 마운트 실패. 자세한 사항은 로그 파일을 참조하세요.
|
||||
unlock.errorMessage.unsupportedKeyLengthInstallJCE = 복호화 실패. Oracle JCE Unlimited Strength Policy Files을 설치하세요.
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = 지원되지 않는 보관함. 이 보관함은 이전 버전의 Cryptomator에서 생성되었습니다.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = 지원되지 않는 보관함. 이 보관함은 최신 버전의 Cryptomator에서 생성되었습니다.
|
||||
unlock.messageLabel.startServerFailed = WedDAV 서버 시작 실패
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = 이전 비밀번호
|
||||
changePassword.label.newPassword = 새로운 비밀번호
|
||||
changePassword.label.retypePassword = 비밀번호 재입력
|
||||
changePassword.label.downloadsPageLink = 모든 Cryptomator 버전
|
||||
changePassword.button.change = 비밀번호 변경
|
||||
changePassword.errorMessage.wrongPassword = 틀린 비밀번호
|
||||
changePassword.errorMessage.decryptionFailed = 복호화 실패
|
||||
changePassword.errorMessage.unsupportedKeyLengthInstallJCE = 복호화 실패. Oracle JCE Unlimited Strength Policy Files을 설치하세요.
|
||||
changePassword.errorMessage.unsupportedVersion.vaultOlderThanSoftware = 지원되지 않는 보관함. 이 보관함은 이전 버전의 Cryptomator에서 생성되었습니다.
|
||||
changePassword.errorMessage.unsupportedVersion.softwareOlderThanVault = 지원되지 않는 보관함. 이 보관함은 최신 버전의 Cryptomator에서 생성되었습니다.
|
||||
changePassword.infoMessage.success = 비밀번호 변경
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = 보관함 잠그기
|
||||
unlocked.moreOptions.reveal = 드라이브 표시
|
||||
unlocked.moreOptions.copyUrl = WebDAV 주소 복사
|
||||
unlocked.label.revealFailed = 명령 실패
|
||||
unlocked.label.unmountFailed = 드라이브 추출 실패
|
||||
unlocked.label.statsEncrypted = 암호화
|
||||
unlocked.label.statsDecrypted = 복호화
|
||||
unlocked.ioGraph.yAxis.label = 처리량 (MiB/s)
|
||||
# mac_warnings.fxml
|
||||
macWarnings.windowTitle = 위험 - %s에 손상된 파일
|
||||
macWarnings.message = Cryptomator가 다음 파일들에서 잠재적인 손상 위험을 감지했습니다.
|
||||
macWarnings.moreInformationButton = 더 알아보기
|
||||
macWarnings.whitelistButton = 선택 항목 강제 복호화
|
||||
# settings.fxml
|
||||
settings.version.label = 버전 %s
|
||||
settings.checkForUpdates.label = 업데이트 확인
|
||||
settings.port.label = WebDAV 포트 *
|
||||
settings.port.prompt = 0 \= 자동으로 선택
|
||||
settings.useipv6.label = IPv6 사용
|
||||
settings.requiresRestartLabel = * Cryptomator 재시작 필요
|
||||
# tray icon
|
||||
tray.menu.open = 열기
|
||||
tray.menu.quit = 종료
|
||||
tray.infoMsg.title = 계속 실행 중입니다.
|
||||
tray.infoMsg.msg = Cryptomator가 계속 실행 중입니다. 종료하실려면 트레이 아이콘에서 해주세요.
|
||||
tray.infoMsg.msg.osx = Cryptomator가 계속 실행중입니다. 종료하실려면 메뉴 바 아이콘에서 해주세요.
|
||||
34
main/ui/src/main/resources/localization/pt.txt
Normal file
34
main/ui/src/main/resources/localization/pt.txt
Normal file
@@ -0,0 +1,34 @@
|
||||
# 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:
|
||||
# Will
|
||||
# André Di Biasi
|
||||
|
||||
app.name = Cryptomator
|
||||
main.directoryList.contextMenu.remove = Remover da lista
|
||||
main.directoryList.contextMenu.changePassword = Alterar senha
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Procurando atualizações...
|
||||
# initialize.fxml
|
||||
initialize.label.password = Senha
|
||||
initialize.label.retypePassword = Digite a senha novamente
|
||||
# unlock.fxml
|
||||
unlock.label.password = Senha
|
||||
unlock.label.advancedHeading = Opções avançadas
|
||||
unlock.button.advancedOptions.hide = Menos opções
|
||||
unlock.choicebox.winDriveLetter.auto = Atribuir automaticamente
|
||||
unlock.errorMessage.wrongPassword = Senha incorreta
|
||||
unlock.errorMessage.mountingFailed = Montagem falhou. Veja o arquivo de log para detalhes
|
||||
unlock.messageLabel.startServerFailed = Inicialização do servidor WEBDAV falhou
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Senha antiga
|
||||
changePassword.label.newPassword = Nova senha
|
||||
changePassword.label.retypePassword = Digite a senha novamente
|
||||
changePassword.button.change = Alterar senha
|
||||
changePassword.infoMessage.success = Senha alterada
|
||||
unlocked.label.revealFailed = Falha no comando
|
||||
unlocked.label.unmountFailed = Falha ao ejetar o drive
|
||||
unlocked.label.statsEncrypted = encriptado
|
||||
macWarnings.moreInformationButton = Saiba mais
|
||||
55
main/ui/src/main/resources/localization/ru.txt
Normal file
55
main/ui/src/main/resources/localization/ru.txt
Normal file
@@ -0,0 +1,55 @@
|
||||
# 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:
|
||||
# Garik
|
||||
# Konstantine
|
||||
|
||||
app.name = Cryptomator
|
||||
# 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 = Версия может быть скачена. Это.
|
||||
# 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" will be renamed to "%2$s".\nPlease make sure synchronization has finished before proceeding.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = Автоматическая миграция не удалась.\n"%" уже существует.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Пароль
|
||||
unlock.label.mountName = Имя носителя
|
||||
changePassword.errorMessage.wrongPassword = Неправильный пароль
|
||||
changePassword.errorMessage.decryptionFailed = Расшифровка провалилась
|
||||
changePassword.errorMessage.unsupportedKeyLengthInstallJCE = Расшифровка не удалась. Пожалуйста установите Oracle JCE Unlimited Strength Policy.
|
||||
changePassword.infoMessage.success = Пароль изменился
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Заблокировать хранилище
|
||||
unlocked.moreOptions.copyUrl = Скопировать WebDAV URL
|
||||
unlocked.label.revealFailed = Команда не удалась
|
||||
unlocked.label.unmountFailed = Извлечение диска не удалось
|
||||
unlocked.label.statsEncrypted = зашифровано
|
||||
unlocked.label.statsDecrypted = расшифровано
|
||||
macWarnings.moreInformationButton = Изучить больше
|
||||
# settings.fxml
|
||||
settings.version.label = Версия %s
|
||||
settings.checkForUpdates.label = Проверка обновлений
|
||||
settings.requiresRestartLabel = * Cryptomator должен перезагрузится
|
||||
# tray icon
|
||||
tray.menu.open = Открыть
|
||||
tray.menu.quit = Выйти
|
||||
tray.infoMsg.title = Всё ещё работает
|
||||
tray.infoMsg.msg = Cryptomator работает. Выйдите c помощью иконки в трее.
|
||||
tray.infoMsg.msg.osx = Cryptomator всё ещё работает.Выйдите с помощью иконки в меню баре.
|
||||
88
main/ui/src/main/resources/localization/sk.txt
Normal file
88
main/ui/src/main/resources/localization/sk.txt
Normal file
@@ -0,0 +1,88 @@
|
||||
# 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:
|
||||
# Filip Havrlent
|
||||
# Tatiana Chovancová
|
||||
|
||||
# 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.
|
||||
app.name = Cryptomator
|
||||
# main.fxml
|
||||
main.emptyListInstructions = Pridať trezor
|
||||
main.directoryList.contextMenu.remove = Odstrániť zo zoznamu
|
||||
main.directoryList.contextMenu.changePassword = Zmeniť heslo
|
||||
main.addDirectory.contextMenu.new = Vytvoriť nový trezor
|
||||
main.addDirectory.contextMenu.open = Otvoriť existujúci trezor
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking = Kontrolujú sa aktualizácie...
|
||||
welcome.newVersionMessage = Verzia %s je pripravená na stiahnutie. Toto je verzia %s.
|
||||
# initialize.fxml
|
||||
initialize.label.password = Heslo
|
||||
initialize.label.retypePassword = Zadajte heslo znova
|
||||
initialize.button.ok = Vytvoriť trezor
|
||||
initialize.messageLabel.alreadyInitialized = Trezor je už inicializovaný
|
||||
initialize.messageLabel.initializationFailed = Nepodarilo sa inicializovať trezor. Pozrite súbor záznamov pre viac detailov.
|
||||
# notfound.fxml
|
||||
notfound.label = Trezor nemohol byť nenájdený. Bol presunutý?
|
||||
# upgrade.fxml
|
||||
upgrade.button = Upgradnúť trezor
|
||||
upgrade.version3dropBundleExtension.msg = Tento trezor musí byť premigrovaný na nový formát. "%1$s" bude premenovaný na "%2$s". Prosím, uistite sa že je dokončená synchronizácia skôr než budete pokračovať.
|
||||
upgrade.version3dropBundleExtension.err.alreadyExists = Automatická migrácia zlyhala. "%s" už existuje.
|
||||
# unlock.fxml
|
||||
unlock.label.password = Heslo
|
||||
unlock.label.mountName = Názov jednotky
|
||||
unlock.label.winDriveLetter = Označenie jednotky
|
||||
unlock.label.downloadsPageLink = Všetky verzie Cryptomatoru
|
||||
unlock.label.advancedHeading = Pokročilé nastavenia
|
||||
unlock.button.unlock = Odomknúť trezor
|
||||
unlock.button.advancedOptions.show = Viac nastavení
|
||||
unlock.button.advancedOptions.hide = Menej nastavení
|
||||
unlock.choicebox.winDriveLetter.auto = Priradiť automaticky
|
||||
unlock.errorMessage.wrongPassword = Nesprávne heslo
|
||||
unlock.errorMessage.mountingFailed = Pripájanie zlyhalo. Viac informácii v logu.
|
||||
unlock.errorMessage.unsupportedKeyLengthInstallJCE = Dešifrovanie zlyhalo. Prosím nainštalujte Oracle JCE Unlimited Strength Policy Files.
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Nepodporovaný trezor. Tento trezor bol vytvorený staršou verziou Cryptromatoru.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Nepodporovaný trezor. Bol vytvorený z novšou verziou Cryptomatoru.
|
||||
unlock.messageLabel.startServerFailed = Spustenie WebDAv servera zlyhalo.
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword = Staré heslo
|
||||
changePassword.label.newPassword = Nové heslo
|
||||
changePassword.label.retypePassword = Znova zadajte heslo
|
||||
changePassword.label.downloadsPageLink = Všetky verzie Cryptomatoru.
|
||||
changePassword.button.change = Zmeniť heslo
|
||||
changePassword.errorMessage.wrongPassword = Nesprávne heslo
|
||||
changePassword.errorMessage.decryptionFailed = Dešifrovanie zlyhalo.
|
||||
changePassword.errorMessage.unsupportedKeyLengthInstallJCE = Dešifrovanie zlyhalo. Prosím nainštalujte Oracle JCE Unlimited Strength Policy.
|
||||
changePassword.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Nepodporovaný trezor. Bol vytvorený staršou verziou Cryptomatoru.
|
||||
changePassword.errorMessage.unsupportedVersion.softwareOlderThanVault = Nepodporovaný trezor. Bol vytvorený novšou verziou Cryptomatoru.
|
||||
changePassword.infoMessage.success = Heslo zmenené
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock = Zamknúť trezor
|
||||
unlocked.moreOptions.reveal = Odhaliť jednotku
|
||||
unlocked.moreOptions.copyUrl = Kopírovať WebDAV URL
|
||||
unlocked.label.revealFailed = Príkaz zlyhal
|
||||
unlocked.label.unmountFailed = Odpájanie jednotky zlyhalo
|
||||
unlocked.label.statsEncrypted = zašifrované
|
||||
unlocked.label.statsDecrypted = dešifrované
|
||||
unlocked.ioGraph.yAxis.label = Priepustnosť (MiB/s)
|
||||
# mac_warnings.fxml
|
||||
macWarnings.windowTitle = Upozornenie - Poškodený súbor v %s
|
||||
macWarnings.message = Cryptomator odhalil potencionálne škodlivé poškodenie v nasledujúcich súboroch\:
|
||||
macWarnings.moreInformationButton = Zistiť viac
|
||||
macWarnings.whitelistButton = Napriek tomu dešifrovať vybrané
|
||||
# settings.fxml
|
||||
settings.version.label = Verzia %s
|
||||
settings.checkForUpdates.label = Skontrolovať aktualizácie
|
||||
settings.port.label = WebDAV Port *
|
||||
settings.port.prompt = 0 \= Vybrať automaticky
|
||||
settings.useipv6.label = Použiť IPv6
|
||||
settings.requiresRestartLabel = * Cryptomator vyžaduje reštart
|
||||
# tray icon
|
||||
tray.menu.open = Otvoriť
|
||||
tray.menu.quit = Vypnúť
|
||||
tray.infoMsg.title = Stále beží
|
||||
tray.infoMsg.msg = Cryptomator je stále spustený. Vypnite ho pomocou ikony v systémovej lište.
|
||||
tray.infoMsg.msg.osx = Cryptomator je stále sputený. Ukončite ho pomocou ikony v menu.
|
||||
@@ -1,5 +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.
|
||||
|
||||
app.name=Cryptomator
|
||||
@@ -1,96 +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:
|
||||
# Jean-Noël Charon - initial translation
|
||||
|
||||
app.name=Cryptomator
|
||||
|
||||
# main.fxml
|
||||
main.emptyListInstructions=Cliquez ici pour ajouter un coffre
|
||||
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
|
||||
main.addDirectory.contextMenu.open=Ouvrir un coffre existant
|
||||
|
||||
# welcome.fxml
|
||||
welcome.checkForUpdates.label.currentlyChecking=Recherche de mise à jour...
|
||||
welcome.newVersionMessage=La version %s peut-être téléchargée. Il s'agit de %s.
|
||||
|
||||
# initialize.fxml
|
||||
initialize.label.password=Mot de passe
|
||||
initialize.label.retypePassword=Confirmation
|
||||
initialize.button.ok=Créer le coffre
|
||||
initialize.messageLabel.alreadyInitialized=Coffre déjà initialisé
|
||||
initialize.messageLabel.initializationFailed=Impossible d'initialiser le coffre. Voir le fichier de log pour plus de détails.
|
||||
|
||||
# notfound.fxml
|
||||
notfound.label=Coffre introuvable. A t'il été déplacé?
|
||||
|
||||
# upgrade.fxml
|
||||
upgrade.button=Mettre à niveau
|
||||
|
||||
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=Mot de passe
|
||||
unlock.label.mountName=Nom du lecteur
|
||||
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
|
||||
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.mountingFailed=Echec du montage. Voir le fichier de log pour plus de détails.
|
||||
unlock.errorMessage.unsupportedKeyLengthInstallJCE=Echec du décryptage. Veuillez installer la Policy Oracle "JCE Unlimited Strength Policy".
|
||||
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware=Coffre non supporté. Ce coffre a été créé avec une ancienne version de Cryptomator.
|
||||
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault=Coffre non supporté. Ce coffre a été créé avec une version de Cryptomator plus récente.
|
||||
unlock.messageLabel.startServerFailed=Le serveur WebDAV n'a pas pu démarrer.
|
||||
|
||||
# change_password.fxml
|
||||
changePassword.label.oldPassword=Ancien mot de passe
|
||||
changePassword.label.newPassword=Nouveau mot de passe
|
||||
changePassword.label.retypePassword=Resaisissez votre mot de passe
|
||||
changePassword.label.downloadsPageLink=Toutes les versions de Cryptomator
|
||||
changePassword.button.change=Modification du mot de masse
|
||||
changePassword.errorMessage.wrongPassword=Mot de passe incorrect
|
||||
changePassword.errorMessage.decryptionFailed=Echec du décryptage
|
||||
changePassword.errorMessage.unsupportedKeyLengthInstallJCE=Echec du décryptage. Veuillez installer la Policy Oracle "JCE Unlimited Strength Policy".
|
||||
changePassword.errorMessage.unsupportedVersion.vaultOlderThanSoftware=Coffre non supporté. Ce coffre a été créé avec une ancienne version de Cryptomator.
|
||||
changePassword.errorMessage.unsupportedVersion.softwareOlderThanVault=Coffre non supporté. Ce coffre a été créé avec une version de Cryptomator plus récente.
|
||||
changePassword.infoMessage.success=Password changed
|
||||
|
||||
# unlocked.fxml
|
||||
unlocked.button.lock=Verrouiller le coffre
|
||||
unlocked.moreOptions.reveal=Voir le lecteur
|
||||
unlocked.moreOptions.copyUrl=Copier l'URL WebDAV
|
||||
unlocked.label.revealFailed=Echec de la commande
|
||||
unlocked.label.unmountFailed=Echec de l'éjection du lecteur
|
||||
unlocked.label.statsEncrypted=cryptage
|
||||
unlocked.label.statsDecrypted=décryptage
|
||||
unlocked.ioGraph.yAxis.label=Débit (MiB/s)
|
||||
|
||||
# mac_warnings.fxml
|
||||
macWarnings.windowTitle=Attention - Fichier corrompu dans %s
|
||||
macWarnings.message=Cryptomator a détecté des corruptions de données dans les fichiers suivants:
|
||||
macWarnings.moreInformationButton=En savoir plus
|
||||
macWarnings.whitelistButton=Décrypter tout de même
|
||||
|
||||
# settings.fxml
|
||||
settings.version.label=Version %s
|
||||
settings.checkForUpdates.label=Vérif. des mises à jour
|
||||
settings.port.label=Port WebDAV *
|
||||
settings.port.prompt=0 = Choix automatique
|
||||
settings.useipv6.label=Utiliser un litéral IPv6
|
||||
settings.requiresRestartLabel=* Redémarrage requis
|
||||
|
||||
# tray icon
|
||||
tray.menu.open=Ouvrir
|
||||
tray.menu.quit=Quitter
|
||||
tray.infoMsg.title=Toujours en fonctionnement
|
||||
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.
|
||||
Reference in New Issue
Block a user