Merge branch 'develop' into feature/hub

# Conflicts:
#	dist/mac/dmg/build.sh
#	dist/win/build.ps1
#	pom.xml
This commit is contained in:
Armin Schrenk
2022-06-22 09:55:02 +02:00
70 changed files with 1156 additions and 344 deletions
@@ -0,0 +1,92 @@
package org.cryptomator.common;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javafx.application.Platform;
import javafx.concurrent.Task;
import java.util.Objects;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
//Inspired by: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ThreadPoolExecutor.html#afterExecute(java.lang.Runnable,java.lang.Throwable)
public final class CatchingExecutors {
private static final Logger LOG = LoggerFactory.getLogger(CatchingExecutors.class);
private CatchingExecutors() { /* NO-OP */ }
public static class CatchingScheduledThreadPoolExecutor extends ScheduledThreadPoolExecutor {
public CatchingScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory) {
super(corePoolSize, threadFactory);
}
@Override
protected void afterExecute(Runnable runnable, Throwable throwable) {
super.afterExecute(runnable, throwable);
afterExecuteInternal(runnable, throwable);
}
}
public static class CatchingThreadPoolExecutor extends ThreadPoolExecutor {
public CatchingThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory);
}
@Override
protected void afterExecute(Runnable runnable, Throwable throwable) {
super.afterExecute(runnable, throwable);
afterExecuteInternal(runnable, throwable);
}
}
private static void afterExecuteInternal(Runnable runnable, Throwable throwable) {
if (throwable != null) {
callHandler(Thread.currentThread(), throwable);
} else if (runnable instanceof Task<?> t) {
afterExecuteTask(t);
} else if (runnable instanceof Future<?> f) {
afterExecuteFuture(f);
}
//Errors in this method are delegated to the UncaughtExceptionHandler of the current thread
}
private static void callHandler(Thread thread, Throwable throwable) {
Objects.requireNonNullElseGet(thread.getUncaughtExceptionHandler(), CatchingExecutors::fallbackHandler).uncaughtException(thread, throwable);
}
private static Thread.UncaughtExceptionHandler fallbackHandler() {
return (thread, throwable) -> LOG.error("FALLBACK: Uncaught exception in " + thread.getName(), throwable);
}
private static void afterExecuteTask(Task<?> task) {
var caller = Thread.currentThread();
Platform.runLater(() -> {
if (task.getOnFailed() == null) {
callHandler(caller, task.getException());
}
});
}
private static void afterExecuteFuture(Future<?> future) {
assert future.isDone();
try {
future.get();
} catch (CancellationException ce) {
callHandler(Thread.currentThread(), ce);
} catch (ExecutionException ee) {
callHandler(Thread.currentThread(), ee.getCause());
} catch (InterruptedException ie) {
//Ignore/Reset
Thread.currentThread().interrupt();
}
}
}
@@ -12,9 +12,7 @@ import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.keychain.KeychainModule;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.common.settings.SettingsProvider;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.common.vaults.VaultComponent;
import org.cryptomator.common.vaults.VaultListManager;
import org.cryptomator.common.vaults.VaultListModule;
import org.cryptomator.cryptolib.common.MasterkeyFileAccess;
import org.cryptomator.frontend.webdav.WebDavServer;
@@ -25,16 +23,13 @@ import javax.inject.Named;
import javax.inject.Singleton;
import javafx.beans.binding.Binding;
import javafx.beans.binding.Bindings;
import javafx.collections.ObservableList;
import java.net.InetSocketAddress;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Comparator;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
@@ -93,7 +88,7 @@ public abstract class CommonsModule {
@Singleton
static ScheduledExecutorService provideScheduledExecutorService(ShutdownHook shutdownHook) {
final AtomicInteger threadNumber = new AtomicInteger(1);
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(NUM_SCHEDULER_THREADS, r -> {
ScheduledExecutorService executorService = new CatchingExecutors.CatchingScheduledThreadPoolExecutor(NUM_SCHEDULER_THREADS, r -> {
String name = String.format("App Scheduled Executor %02d", threadNumber.getAndIncrement());
Thread t = new Thread(r);
t.setName(name);
@@ -110,7 +105,7 @@ public abstract class CommonsModule {
@Singleton
static ExecutorService provideExecutorService(ShutdownHook shutdownHook) {
final AtomicInteger threadNumber = new AtomicInteger(1);
ExecutorService executorService = new ThreadPoolExecutor(NUM_CORE_BG_THREADS, Integer.MAX_VALUE, BG_THREAD_KEEPALIVE_SECONDS, TimeUnit.SECONDS, new SynchronousQueue<>(), r -> {
ExecutorService executorService = new CatchingExecutors.CatchingThreadPoolExecutor(NUM_CORE_BG_THREADS, Integer.MAX_VALUE, BG_THREAD_KEEPALIVE_SECONDS, TimeUnit.SECONDS, new SynchronousQueue<>(), r -> {
String name = String.format("App Background Thread %03d", threadNumber.getAndIncrement());
Thread t = new Thread(r);
t.setName(name);
@@ -6,6 +6,7 @@ public interface Constants {
String MASTERKEY_BACKUP_SUFFIX = ".bkup";
String VAULTCONFIG_FILENAME = "vault.cryptomator";
String CRYPTOMATOR_FILENAME_EXT = ".cryptomator";
String CRYPTOMATOR_FILENAME_GLOB = "*.cryptomator";
byte[] PEPPER = new byte[0];
}
@@ -0,0 +1,64 @@
package org.cryptomator.common;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;
/**
* Enum of common cloud providers and their default local storage location path.
*/
public enum LocationPreset {
DROPBOX("Dropbox", "~/Dropbox"),
ICLOUDDRIVE("iCloud Drive", "~/Library/Mobile Documents/com~apple~CloudDocs", "~/iCloudDrive"),
GDRIVE("Google Drive", "~/Google Drive/My Drive", "~/Google Drive"),
MEGA("MEGA", "~/MEGA"),
ONEDRIVE("OneDrive", "~/OneDrive"),
PCLOUD("pCloud", "~/pCloudDrive"),
LOCAL("local");
private final String name;
private final List<Path> candidates;
LocationPreset(String name, String... candidates) {
this.name = name;
this.candidates = Arrays.stream(candidates).map(UserHome::resolve).map(Path::of).toList();
}
/**
* Checks for this LocationPreset if any of the associated paths exist.
*
* @return the first existing path or null, if none exists.
*/
public Path existingPath() {
return candidates.stream().filter(Files::isDirectory).findFirst().orElse(null);
}
public String getDisplayName() {
return name;
}
@Override
public String toString() {
return getDisplayName();
}
//this contruct is needed, since static members are initialized after every enum member is initialized
//TODO: refactor this to normal class and use this also in different parts of the project
private static class UserHome {
private static final String USER_HOME = System.getProperty("user.home");
private static String resolve(String path) {
if (path.startsWith("~/")) {
return UserHome.USER_HOME + path.substring(1);
} else {
return path;
}
}
}
}
@@ -36,7 +36,7 @@ public class Settings {
public static final int DEFAULT_NUM_TRAY_NOTIFICATIONS = 3;
public static final WebDavUrlScheme DEFAULT_GVFS_SCHEME = WebDavUrlScheme.DAV;
public static final boolean DEFAULT_DEBUG_MODE = false;
public static final VolumeImpl DEFAULT_PREFERRED_VOLUME_IMPL = SystemUtils.IS_OS_WINDOWS ? VolumeImpl.DOKANY : VolumeImpl.FUSE;
public static final VolumeImpl DEFAULT_PREFERRED_VOLUME_IMPL = VolumeImpl.FUSE;
public static final UiTheme DEFAULT_THEME = UiTheme.LIGHT;
@Deprecated // to be changed to "whatever is available" eventually
public static final String DEFAULT_KEYCHAIN_PROVIDER = SystemUtils.IS_OS_WINDOWS ? "org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess" : SystemUtils.IS_OS_MAC ? "org.cryptomator.macos.keychain.MacSystemKeychainAccess" : "org.cryptomator.linux.keychain.SecretServiceKeychainAccess";
@@ -10,6 +10,7 @@ package org.cryptomator.common.vaults;
import com.google.common.base.Strings;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.Constants;
import org.cryptomator.common.mountpoint.InvalidMountPointException;
import org.cryptomator.common.settings.VaultSettings;
import org.cryptomator.common.vaults.Volume.VolumeException;
@@ -125,6 +126,7 @@ public class Vault {
.withKeyLoader(keyLoader) //
.withFlags(flags) //
.withMaxCleartextNameLength(vaultSettings.maxCleartextFilenameLength().get()) //
.withVaultConfigFilename(Constants.VAULTCONFIG_FILENAME) //
.build();
return CryptoFileSystemProvider.newFileSystem(getPath(), fsProps);
}
@@ -19,22 +19,13 @@ public interface VaultComponent {
Vault vault();
@Subcomponent.Builder
interface Builder {
@Subcomponent.Factory
interface Factory {
@BindsInstance
Builder vaultSettings(VaultSettings vaultSettings);
VaultComponent create(@BindsInstance VaultSettings vaultSettings, //
@BindsInstance VaultConfigCache configCache, //
@BindsInstance VaultState.Value vaultState, //
@BindsInstance @Nullable @Named("lastKnownException") Exception initialErrorCause);
@BindsInstance
Builder vaultConfigCache(VaultConfigCache configCache);
@BindsInstance
Builder initialVaultState(VaultState.Value vaultState);
@BindsInstance
Builder initialErrorCause(@Nullable @Named("lastKnownException") Exception initialErrorCause);
VaultComponent build();
}
}
}
@@ -38,15 +38,15 @@ public class VaultListManager {
private static final Logger LOG = LoggerFactory.getLogger(VaultListManager.class);
private final AutoLocker autoLocker;
private final VaultComponent.Builder vaultComponentBuilder;
private final VaultComponent.Factory vaultComponentFactory;
private final ObservableList<Vault> vaultList;
private final String defaultVaultName;
@Inject
public VaultListManager(ObservableList<Vault> vaultList, AutoLocker autoLocker, VaultComponent.Builder vaultComponentBuilder, ResourceBundle resourceBundle, Settings settings) {
public VaultListManager(ObservableList<Vault> vaultList, AutoLocker autoLocker, VaultComponent.Factory vaultComponentFactory, ResourceBundle resourceBundle, Settings settings) {
this.vaultList = vaultList;
this.autoLocker = autoLocker;
this.vaultComponentBuilder = vaultComponentBuilder;
this.vaultComponentFactory = vaultComponentFactory;
this.defaultVaultName = resourceBundle.getString("defaults.vault.vaultName");
addAll(settings.getDirectories());
@@ -93,21 +93,17 @@ public class VaultListManager {
}
private Vault create(VaultSettings vaultSettings) {
VaultComponent.Builder compBuilder = vaultComponentBuilder.vaultSettings(vaultSettings);
var wrapper = new VaultConfigCache(vaultSettings);
try {
VaultState.Value vaultState = determineVaultState(vaultSettings.path().get());
VaultConfigCache wrapper = new VaultConfigCache(vaultSettings);
compBuilder.vaultConfigCache(wrapper); //first set the wrapper in the builder, THEN try to load config
var vaultState = determineVaultState(vaultSettings.path().get());
if (vaultState == LOCKED) { //for legacy reasons: pre v8 vault do not have a config, but they are in the NEEDS_MIGRATION state
wrapper.reloadConfig();
}
compBuilder.initialVaultState(vaultState);
return vaultComponentFactory.create(vaultSettings, wrapper, vaultState, null).vault();
} catch (IOException e) {
LOG.warn("Failed to determine vault state for " + vaultSettings.path().get(), e);
compBuilder.initialVaultState(ERROR);
compBuilder.initialErrorCause(e);
return vaultComponentFactory.create(vaultSettings, wrapper, ERROR, e).vault();
}
return compBuilder.build().vault();
}
public static VaultState.Value redetermineVaultState(Vault vault) {
@@ -83,7 +83,7 @@ public class VaultState extends ObservableValueBase<VaultState.Value> implements
if (success) {
fireValueChangedEvent();
} else {
LOG.debug("Failed transiting into state {}: Expected state was not{}.", fromState, toState);
LOG.debug("Failed transiting into state {}: Expected state was not {}.", fromState, toState);
}
return success;
}
@@ -17,7 +17,7 @@ public class SupportedLanguages {
// these are BCP 47 language codes, not ISO. Note the "-" instead of the "_":
public static final List<String> LANGUAGAE_TAGS = List.of("en", "ar", "bn", "bs", "ca", "cs", "de", "el", "es", "fil", "fr", "gl", "he", //
"hi", "hr", "hu", "id", "it", "ja", "ko", "lv", "mk", "nb", "nl", "nn", "no", "pa", "pl", "pt", "pt-BR", "ro", "ru", "sk", "sr", //
"sr-Latn", "sv", "ta", "te", "th", "tr", "uk", "zh", "zh-HK", "zh-TW");
"sr-Latn", "sv", "sw", "ta", "te", "th", "tr", "uk", "zh", "zh-HK", "zh-TW");
@Nullable
private final String preferredLanguage;
@@ -25,6 +25,8 @@ import java.io.IOException;
import java.nio.file.Path;
import java.util.ResourceBundle;
import static org.cryptomator.common.Constants.CRYPTOMATOR_FILENAME_GLOB;
@AddVaultWizardScoped
public class ChooseExistingVaultController implements FxController {
@@ -73,7 +75,7 @@ public class ChooseExistingVaultController implements FxController {
public void chooseFileAndNext() {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle(resourceBundle.getString("addvaultwizard.existing.filePickerTitle"));
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Cryptomator Vault", "*.cryptomator"));
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(resourceBundle.getString("addvaultwizard.existing.filePickerMimeDesc"), CRYPTOMATOR_FILENAME_GLOB));
File masterkeyFile = fileChooser.showOpenDialog(window);
if (masterkeyFile != null) {
vaultPath.setValue(masterkeyFile.toPath().toAbsolutePath().getParent());
@@ -46,7 +46,7 @@ public class CreateNewVaultLocationController implements FxController {
private final Stage window;
private final Lazy<Scene> chooseNameScene;
private final Lazy<Scene> choosePasswordScene;
private final LocationPresets locationPresets;
private final ObservedLocationPresets locationPresets;
private final ObjectProperty<Path> vaultPath;
private final StringProperty vaultName;
private final ResourceBundle resourceBundle;
@@ -71,7 +71,7 @@ public class CreateNewVaultLocationController implements FxController {
public FontAwesome5IconView badLocation;
@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, @Named("vaultName") StringProperty vaultName, ResourceBundle resourceBundle) {
CreateNewVaultLocationController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_NAME) Lazy<Scene> chooseNameScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_PASSWORD) Lazy<Scene> choosePasswordScene, ObservedLocationPresets locationPresets, ObjectProperty<Path> vaultPath, @Named("vaultName") StringProperty vaultName, ResourceBundle resourceBundle) {
this.window = window;
this.chooseNameScene = chooseNameScene;
this.choosePasswordScene = choosePasswordScene;
@@ -197,7 +197,7 @@ public class CreateNewVaultLocationController implements FxController {
return validVaultPath.get();
}
public LocationPresets getLocationPresets() {
public ObservedLocationPresets getObservedLocationPresets() {
return locationPresets;
}
@@ -1,23 +1,15 @@
package org.cryptomator.ui.addvaultwizard;
import org.cryptomator.common.LocationPreset;
import javax.inject.Inject;
import javafx.beans.binding.BooleanBinding;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@AddVaultWizardScoped
public class LocationPresets {
private static final String USER_HOME = System.getProperty("user.home");
private static final String[] ICLOUDDRIVE_LOCATIONS = {"~/Library/Mobile Documents/iCloud~com~setolabs~Cryptomator/Documents", "~/iCloudDrive/iCloud~com~setolabs~Cryptomator"};
private static final String[] DROPBOX_LOCATIONS = {"~/Dropbox"};
private static final String[] GDRIVE_LOCATIONS = {"~/Google Drive/My Drive", "~/Google Drive"};
private static final String[] ONEDRIVE_LOCATIONS = {"~/OneDrive"};
private static final String[] MEGA_LOCATIONS = {"~/MEGA"};
private static final String[] PCLOUD_LOCATIONS = {"~/pCloudDrive"};
public class ObservedLocationPresets {
private final ReadOnlyObjectProperty<Path> iclouddriveLocation;
private final ReadOnlyObjectProperty<Path> dropboxLocation;
@@ -33,13 +25,13 @@ public class LocationPresets {
private final BooleanBinding foundPcloud;
@Inject
public LocationPresets() {
this.iclouddriveLocation = new SimpleObjectProperty<>(existingWritablePath(ICLOUDDRIVE_LOCATIONS));
this.dropboxLocation = new SimpleObjectProperty<>(existingWritablePath(DROPBOX_LOCATIONS));
this.gdriveLocation = new SimpleObjectProperty<>(existingWritablePath(GDRIVE_LOCATIONS));
this.onedriveLocation = new SimpleObjectProperty<>(existingWritablePath(ONEDRIVE_LOCATIONS));
this.megaLocation = new SimpleObjectProperty<>(existingWritablePath(MEGA_LOCATIONS));
this.pcloudLocation = new SimpleObjectProperty<>(existingWritablePath(PCLOUD_LOCATIONS));
public ObservedLocationPresets() {
this.iclouddriveLocation = new SimpleObjectProperty<>(LocationPreset.ICLOUDDRIVE.existingPath());
this.dropboxLocation = new SimpleObjectProperty<>(LocationPreset.DROPBOX.existingPath());
this.gdriveLocation = new SimpleObjectProperty<>(LocationPreset.GDRIVE.existingPath());
this.onedriveLocation = new SimpleObjectProperty<>(LocationPreset.ONEDRIVE.existingPath());
this.megaLocation = new SimpleObjectProperty<>(LocationPreset.MEGA.existingPath());
this.pcloudLocation = new SimpleObjectProperty<>(LocationPreset.PCLOUD.existingPath());
this.foundIclouddrive = iclouddriveLocation.isNotNull();
this.foundDropbox = dropboxLocation.isNotNull();
this.foundGdrive = gdriveLocation.isNotNull();
@@ -48,24 +40,6 @@ public class LocationPresets {
this.foundPcloud = pcloudLocation.isNotNull();
}
private static Path existingWritablePath(String... candidates) {
for (String candidate : candidates) {
Path path = Paths.get(resolveHomePath(candidate));
if (Files.isDirectory(path)) {
return path;
}
}
return null;
}
private static String resolveHomePath(String path) {
if (path.startsWith("~/")) {
return USER_HOME + path.substring(1);
} else {
return path;
}
}
/* Observables */
public ReadOnlyObjectProperty<Path> iclouddriveLocationProperty() {
@@ -43,7 +43,9 @@ public abstract class UpdateCheckerModule {
@FxApplicationScoped
static Optional<HttpClient> provideHttpClient() {
try {
return Optional.of(HttpClient.newHttpClient());
return Optional.of(HttpClient.newBuilder() //
.followRedirects(HttpClient.Redirect.NORMAL) // from version 1.6.11 onwards, Cryptomator can follow redirects, in case this URL ever changes
.build());
} catch (UncheckedIOException e) {
LOG.error("HttpClient for update check cannot be created.", e);
return Optional.empty();
@@ -15,6 +15,8 @@ import java.nio.file.Path;
import java.util.ResourceBundle;
import java.util.concurrent.CompletableFuture;
import static org.cryptomator.common.Constants.CRYPTOMATOR_FILENAME_GLOB;
@ChooseMasterkeyFileScoped
public class ChooseMasterkeyFileController implements FxController {
@@ -46,7 +48,7 @@ public class ChooseMasterkeyFileController implements FxController {
LOG.trace("proceed()");
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle(resourceBundle.getString("unlock.chooseMasterkey.filePickerTitle"));
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Cryptomator Masterkey", "*.cryptomator"));
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(resourceBundle.getString("unlock.chooseMasterkey.filePickerMimeDesc"), CRYPTOMATOR_FILENAME_GLOB));
File masterkeyFile = fileChooser.showOpenDialog(window);
if (masterkeyFile != null) {
LOG.debug("Chose masterkey file: {}", masterkeyFile);
@@ -21,13 +21,13 @@ public class VaultDetailLockedController implements FxController {
private final ReadOnlyObjectProperty<Vault> vault;
private final FxApplicationWindows appWindows;
private final VaultOptionsComponent.Builder vaultOptionsWindow;
private final VaultOptionsComponent.Factory vaultOptionsWindow;
private final KeychainManager keychain;
private final Stage mainWindow;
private final BooleanExpression passwordSaved;
@Inject
VaultDetailLockedController(ObjectProperty<Vault> vault, FxApplicationWindows appWindows, VaultOptionsComponent.Builder vaultOptionsWindow, KeychainManager keychain, @MainWindow Stage mainWindow) {
VaultDetailLockedController(ObjectProperty<Vault> vault, FxApplicationWindows appWindows, VaultOptionsComponent.Factory vaultOptionsWindow, KeychainManager keychain, @MainWindow Stage mainWindow) {
this.vault = vault;
this.appWindows = appWindows;
this.vaultOptionsWindow = vaultOptionsWindow;
@@ -47,12 +47,12 @@ public class VaultDetailLockedController implements FxController {
@FXML
public void showVaultOptions() {
vaultOptionsWindow.vault(vault.get()).build().showVaultOptionsWindow(SelectedVaultOptionsTab.ANY);
vaultOptionsWindow.create(vault.get()).showVaultOptionsWindow(SelectedVaultOptionsTab.ANY);
}
@FXML
public void showKeyVaultOptions() {
vaultOptionsWindow.vault(vault.get()).build().showVaultOptionsWindow(SelectedVaultOptionsTab.KEY);
vaultOptionsWindow.create(vault.get()).showVaultOptionsWindow(SelectedVaultOptionsTab.KEY);
}
/* Getter/Setter */
@@ -13,6 +13,8 @@ import javafx.stage.Stage;
import java.io.File;
import java.util.ResourceBundle;
import static org.cryptomator.common.Constants.CRYPTOMATOR_FILENAME_GLOB;
@MainWindowScoped
public class VaultDetailMissingVaultController implements FxController {
@@ -45,7 +47,7 @@ public class VaultDetailMissingVaultController implements FxController {
// copied from ChooseExistingVaultController class
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle(resourceBundle.getString("addvaultwizard.existing.filePickerTitle"));
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Cryptomator Masterkey", "*.cryptomator"));
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(resourceBundle.getString("addvaultwizard.existing.filePickerMimeDesc"), CRYPTOMATOR_FILENAME_GLOB));
File masterkeyFile = fileChooser.showOpenDialog(window);
if (masterkeyFile != null) {
vault.get().getVaultSettings().path().setValue(masterkeyFile.toPath().toAbsolutePath().getParent());
@@ -31,7 +31,7 @@ public class VaultListContextMenuController implements FxController {
private final VaultService vaultService;
private final KeychainManager keychain;
private final RemoveVaultComponent.Builder removeVault;
private final VaultOptionsComponent.Builder vaultOptionsWindow;
private final VaultOptionsComponent.Factory vaultOptionsWindow;
private final OptionalBinding<VaultState.Value> selectedVaultState;
private final Binding<Boolean> selectedVaultPassphraseStored;
private final Binding<Boolean> selectedVaultRemovable;
@@ -39,7 +39,7 @@ public class VaultListContextMenuController implements FxController {
private final Binding<Boolean> selectedVaultLockable;
@Inject
VaultListContextMenuController(ObjectProperty<Vault> selectedVault, @MainWindow Stage mainWindow, FxApplicationWindows appWindows, VaultService vaultService, KeychainManager keychain, RemoveVaultComponent.Builder removeVault, VaultOptionsComponent.Builder vaultOptionsWindow) {
VaultListContextMenuController(ObjectProperty<Vault> selectedVault, @MainWindow Stage mainWindow, FxApplicationWindows appWindows, VaultService vaultService, KeychainManager keychain, RemoveVaultComponent.Builder removeVault, VaultOptionsComponent.Factory vaultOptionsWindow) {
this.selectedVault = EasyBind.wrapNullable(selectedVault);
this.mainWindow = mainWindow;
this.appWindows = appWindows;
@@ -69,7 +69,7 @@ public class VaultListContextMenuController implements FxController {
@FXML
public void didClickShowVaultOptions() {
selectedVault.ifValuePresent(v -> {
vaultOptionsWindow.vault(v).build().showVaultOptionsWindow(SelectedVaultOptionsTab.ANY);
vaultOptionsWindow.create(v).showVaultOptionsWindow(SelectedVaultOptionsTab.ANY);
});
}
@@ -48,11 +48,6 @@ public class VolumePreferencesController implements FxController {
webDavPortField.setText(String.valueOf(settings.port().get()));
changeWebDavPortButton.visibleProperty().bind(settings.port().asString().isNotEqualTo(webDavPortField.textProperty()));
changeWebDavPortButton.disableProperty().bind(Bindings.createBooleanBinding(this::validateWebDavPort, webDavPortField.textProperty()).not());
webDavPortField.focusedProperty().addListener((observableValue, wasFocused, isFocused) -> {
if(!isFocused) {
webDavPortField.setText(String.valueOf(settings.port().get()));
}
});
webDavUrlSchemeChoiceBox.getItems().addAll(WebDavUrlScheme.values());
webDavUrlSchemeChoiceBox.valueProperty().bindBidirectional(settings.preferredGvfsScheme());
@@ -36,13 +36,10 @@ public interface VaultOptionsComponent {
stage.requestFocus();
}
@Subcomponent.Builder
interface Builder {
@Subcomponent.Factory
interface Factory {
@BindsInstance
Builder vault(@VaultOptionsWindow Vault vault);
VaultOptionsComponent build();
VaultOptionsComponent create(@BindsInstance @VaultOptionsWindow Vault vault);
}
}
+6 -15
View File
@@ -16,10 +16,6 @@
src: url('opensans-bold.ttf');
}
@font-face {
src: url('quicksand-bold.ttf');
}
/*******************************************************************************
* *
* Root Styling & Colors *
@@ -46,6 +42,8 @@
GRAY_8: #D3DCE1;
GRAY_9: #EDF3F7;
GREEN_3: PRIMARY_D1;
GREEN_5: PRIMARY;
RED_5: #E74C3C;
ORANGE_5: #E67E22;
YELLOW_5: #F1C40F;
@@ -179,14 +177,6 @@
-fx-background-insets: 0, 0 0 1px 0;
}
.main-window .title .label {
-fx-font-family: 'Quicksand';
-fx-font-size: 16px;
-fx-font-style: normal;
-fx-font-weight: 700;
-fx-text-fill: TITLE_TEXT_FILL;
}
.main-window .title .button {
-fx-pref-height: 30px;
-fx-pref-width: 30px;
@@ -405,7 +395,6 @@
-fx-background-color: MUTED_BG;
}
/* Note: These values below are kinda random such that it looks ok. I'm pretty sure there is room for improvement. Additionally, fx-text-fill does not work*/
.badge-debug {
-fx-font-family: 'Open Sans Bold';
@@ -439,11 +428,11 @@
}
.password-strength-indicator.strength-3 .segment.active {
-fx-background-color: PRIMARY;
-fx-background-color: GREEN_5;
}
.password-strength-indicator.strength-4 .segment.active {
-fx-background-color: PRIMARY_D1;
-fx-background-color: GREEN_3;
}
/*******************************************************************************
@@ -834,6 +823,7 @@
-fx-background-color: PROGRESS_BAR_BG;
-fx-background-radius: 4px;
}
/*******************************************************************************
* *
* I/O Statistics *
@@ -884,6 +874,7 @@
.default-color0.chart-series-area-line {
-fx-stroke: PRIMARY;
}
.default-color0.chart-series-area-fill {
-fx-fill: linear-gradient(to bottom, PRIMARY, transparent);
-fx-stroke: transparent;
+6 -25
View File
@@ -16,10 +16,6 @@
src: url('opensans-bold.ttf');
}
@font-face {
src: url('quicksand-bold.ttf');
}
/*******************************************************************************
* *
* Root Styling & Colors *
@@ -46,6 +42,8 @@
GRAY_8: #E1E1E1;
GRAY_9: #F7F7F7;
GREEN_3: PRIMARY_D1;
GREEN_5: PRIMARY;
RED_5: #E74C3C;
ORANGE_5: #E67E22;
YELLOW_5: #F1C40F;
@@ -178,14 +176,6 @@
-fx-background-color: TITLE_BG;
}
.main-window .title .label {
-fx-font-family: 'Quicksand';
-fx-font-size: 16px;
-fx-font-style: normal;
-fx-font-weight: 700;
-fx-text-fill: TITLE_TEXT_FILL;
}
.main-window .title .button {
-fx-pref-height: 30px;
-fx-pref-width: 30px;
@@ -437,11 +427,11 @@
}
.password-strength-indicator.strength-3 .segment.active {
-fx-background-color: PRIMARY;
-fx-background-color: GREEN_5;
}
.password-strength-indicator.strength-4 .segment.active {
-fx-background-color: PRIMARY_D1;
-fx-background-color: GREEN_3;
}
/*******************************************************************************
@@ -832,22 +822,12 @@
-fx-background-color: PROGRESS_BAR_BG;
-fx-background-radius: 4px;
}
/*******************************************************************************
* *
* I/O Statistics *
* *
******************************************************************************/
.chart {
-fx-padding: 10px;
}
.chart-plot-background {
-fx-background-color: MAIN_BG;
-fx-padding: 20px;
}
/* content */
.cache-arc-background {
-fx-fill: transparent;
@@ -893,6 +873,7 @@
.default-color0.chart-series-area-line {
-fx-stroke: PRIMARY;
}
.default-color0.chart-series-area-fill {
-fx-fill: linear-gradient(to bottom, PRIMARY, transparent);
-fx-stroke: transparent;
@@ -31,12 +31,12 @@
<VBox spacing="6">
<Label wrapText="true" text="%addvaultwizard.new.locationInstruction"/>
<RadioButton fx:id="iclouddriveRadioButton" toggleGroup="${predefinedLocationToggler}" text="iCloud Drive" visible="${controller.locationPresets.foundIclouddrive}" managed="${controller.locationPresets.foundIclouddrive}"/>
<RadioButton fx:id="dropboxRadioButton" toggleGroup="${predefinedLocationToggler}" text="Dropbox" visible="${controller.locationPresets.foundDropbox}" managed="${controller.locationPresets.foundDropbox}"/>
<RadioButton fx:id="gdriveRadioButton" toggleGroup="${predefinedLocationToggler}" text="Google Drive" visible="${controller.locationPresets.foundGdrive}" managed="${controller.locationPresets.foundGdrive}"/>
<RadioButton fx:id="onedriveRadioButton" toggleGroup="${predefinedLocationToggler}" text="OneDrive" visible="${controller.locationPresets.foundOnedrive}" managed="${controller.locationPresets.foundOnedrive}"/>
<RadioButton fx:id="megaRadioButton" toggleGroup="${predefinedLocationToggler}" text="MEGA" visible="${controller.locationPresets.foundMega}" managed="${controller.locationPresets.foundMega}"/>
<RadioButton fx:id="pcloudRadioButton" toggleGroup="${predefinedLocationToggler}" text="pCloud" visible="${controller.locationPresets.foundPcloud}" managed="${controller.locationPresets.foundPcloud}"/>
<RadioButton fx:id="iclouddriveRadioButton" toggleGroup="${predefinedLocationToggler}" text="iCloud Drive" visible="${controller.observedLocationPresets.foundIclouddrive}" managed="${controller.observedLocationPresets.foundIclouddrive}"/>
<RadioButton fx:id="dropboxRadioButton" toggleGroup="${predefinedLocationToggler}" text="Dropbox" visible="${controller.observedLocationPresets.foundDropbox}" managed="${controller.observedLocationPresets.foundDropbox}"/>
<RadioButton fx:id="gdriveRadioButton" toggleGroup="${predefinedLocationToggler}" text="Google Drive" visible="${controller.observedLocationPresets.foundGdrive}" managed="${controller.observedLocationPresets.foundGdrive}"/>
<RadioButton fx:id="onedriveRadioButton" toggleGroup="${predefinedLocationToggler}" text="OneDrive" visible="${controller.observedLocationPresets.foundOnedrive}" managed="${controller.observedLocationPresets.foundOnedrive}"/>
<RadioButton fx:id="megaRadioButton" toggleGroup="${predefinedLocationToggler}" text="MEGA" visible="${controller.observedLocationPresets.foundMega}" managed="${controller.observedLocationPresets.foundMega}"/>
<RadioButton fx:id="pcloudRadioButton" toggleGroup="${predefinedLocationToggler}" text="pCloud" visible="${controller.observedLocationPresets.foundPcloud}" managed="${controller.observedLocationPresets.foundPcloud}"/>
<HBox spacing="12" alignment="CENTER_LEFT">
<RadioButton fx:id="customRadioButton" toggleGroup="${predefinedLocationToggler}" text="%addvaultwizard.new.directoryPickerLabel"/>
<Button contentDisplay="LEFT" text="%addvaultwizard.new.directoryPickerButton" onAction="#chooseCustomVaultPath" disable="${controller.usePresetPath}">
@@ -21,7 +21,7 @@
<Region VBox.vgrow="ALWAYS"/>
<ImageView VBox.vgrow="ALWAYS" fitHeight="128" preserveRatio="true" smooth="true" cache="true">
<Image url="@../img/bot/bot.png"/>
<Image url="@../img/logo.png"/>
</ImageView>
<Region VBox.vgrow="ALWAYS"/>
+1 -1
View File
@@ -26,7 +26,7 @@
<HBox VBox.vgrow="ALWAYS">
<VBox alignment="CENTER" minWidth="175" maxWidth="175">
<ImageView VBox.vgrow="ALWAYS" fitHeight="128" preserveRatio="true" smooth="true" cache="true">
<Image url="@../img/bot/bot.png"/>
<Image url="@../img/logo.png"/>
</ImageView>
</VBox>
<VBox HBox.hgrow="ALWAYS" alignment="CENTER">
@@ -7,6 +7,8 @@
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Region?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<HBox xmlns:fx="http://javafx.com/fxml"
xmlns="http://javafx.com/javafx"
fx:id="titleBar"
@@ -20,7 +22,9 @@
<Insets bottom="6" left="12" right="12" top="6"/>
</padding>
<children>
<Label text="CRYPTOMATOR"/>
<ImageView HBox.hgrow="ALWAYS" fitHeight="14" preserveRatio="true" cache="true">
<Image url="@../img/title-logo.png"/>
</ImageView>
<Region HBox.hgrow="ALWAYS"/>
@@ -18,7 +18,7 @@
<children>
<HBox spacing="12" VBox.vgrow="NEVER">
<ImageView VBox.vgrow="ALWAYS" fitHeight="64" preserveRatio="true" smooth="true" cache="true">
<Image url="@../img/bot/bot.png"/>
<Image url="@../img/logo.png"/>
</ImageView>
<VBox spacing="3" HBox.hgrow="ALWAYS" alignment="CENTER_LEFT">
<FormattedLabel styleClass="label-large" format="Cryptomator %s" arg1="${controller.applicationVersion}"/>
@@ -11,7 +11,7 @@
spacing="24">
<children>
<ImageView VBox.vgrow="ALWAYS" fitHeight="128" preserveRatio="true" smooth="true" cache="true">
<Image url="@../img/bot/bot.png"/>
<Image url="@../img/logo.png"/>
</ImageView>
<TextFlow styleClass="text-flow" prefWidth="-Infinity" visible="${controller.noVaultPresent}" managed="${controller.noVaultPresent}">
@@ -79,6 +79,7 @@ addvault.new.readme.accessLocation.4=Feel free to remove this file.
addvaultwizard.existing.instruction=Choose the "vault.cryptomator" file of your existing vault. If only a file named "masterkey.cryptomator" exists, select that instead.
addvaultwizard.existing.chooseBtn=Choose…
addvaultwizard.existing.filePickerTitle=Select Vault File
addvaultwizard.existing.filePickerMimeDesc=Cryptomator Vault
## 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
@@ -108,6 +109,7 @@ unlock.chooseMasterkey.title=Select Masterkey of "%s"
unlock.chooseMasterkey.prompt=Could not find the masterkey file for this vault at its expected location. Please choose the key file manually.
unlock.chooseMasterkey.chooseBtn=Choose…
unlock.chooseMasterkey.filePickerTitle=Select Masterkey File
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Masterkey
## Success
unlock.success.message=Unlocked "%s" successfully! Your vault is now accessible via its virtual drive.
unlock.success.rememberChoice=Remember choice, don't show this again
@@ -44,7 +44,7 @@ addvaultwizard.new.namePrompt=Tresorname
addvaultwizard.new.locationInstruction=Wo soll Cryptomator die verschlüsselten Dateien deines Tresors ablegen?
addvaultwizard.new.locationLabel=Speicherort
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Benutzerdefinierter Ort
addvaultwizard.new.directoryPickerLabel=Eigener Ort
addvaultwizard.new.directoryPickerButton=Durchsuchen …
addvaultwizard.new.directoryPickerTitle=Verzeichnis auswählen
addvaultwizard.new.fileAlreadyExists=Eine Datei oder ein Ordner dieses Namens besteht bereits
@@ -78,6 +78,7 @@ addvault.new.readme.accessLocation.4=Du kannst diese Datei löschen.
addvaultwizard.existing.instruction=Wähle die Datei „vault.cryptomator“ deines bestehenden Tresors aus. Falls nur eine Datei mit der Bezeichnung „masterkey.cryptomator“ vorhanden ist, nutze stattdessen diese.
addvaultwizard.existing.chooseBtn=Durchsuchen …
addvaultwizard.existing.filePickerTitle=Tresordatei auswählen
addvaultwizard.existing.filePickerMimeDesc=Cryptomator-Tresor
## Success
addvaultwizard.success.nextStepsInstructions=Tresor „%s“ wurde 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
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title=Masterkey von „%s“ auswählen
unlock.chooseMasterkey.prompt=Die Masterkey-Datei dieses Tresors konnte nicht gefunden werden. Bitte wähle die Masterkey-Datei manuell aus.
unlock.chooseMasterkey.chooseBtn=Durchsuchen …
unlock.chooseMasterkey.filePickerTitle=Masterkey-Datei auswählen
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator-Masterkey
## Success
unlock.success.message=„%s“ erfolgreich entsperrt! Du kannst nun über das virtuelle Laufwerk auf deinen Tresor zugreifen.
unlock.success.rememberChoice=Auswahl speichern und nicht mehr anzeigen
@@ -357,8 +359,8 @@ vaultOptions.masterkey.recoverPasswordBtn=Passwort wiederherstellen
# Recovery Key
recoveryKey.title=Wiederherstellungsschlüssel
recoveryKey.enterPassword.prompt=Geben Sie Ihr Passwort ein, um den Wiederherstellungsschlüssel für "%s" anzuzeigen:
recoveryKey.display.message=Der folgende Wiederherstellungsschlüssel kann verwendet werden, um den Zugriff auf "%s" wiederherzustellen:
recoveryKey.enterPassword.prompt=Gib dein Passwort ein, um den Wiederherstellungsschlüssel für %s anzuzeigen:
recoveryKey.display.message=Mit dem folgenden Wiederherstellungsschlüssel kannst du den Zugriff auf %s wiederherstellen:
recoveryKey.display.StorageHints=Bewahre ihn möglichst sicher auf, z. B.\n • in einem Passwortmanager\n • auf einem USB-Speicherstick\n • auf Papier ausgedruckt
recoveryKey.recover.prompt=Gib deinen Wiederherstellungsschlüssel für „%s“ ein:
recoveryKey.recover.validKey=Dies ist ein gültiger Wiederherstellungsschlüssel
@@ -78,6 +78,7 @@ addvault.new.readme.accessLocation.4=Μπορείτε ελεύθερα να αφ
addvaultwizard.existing.instruction=Επιλέξτε το αρχείο "vault.cryptomator" της υπάρχοντος κρύπτης. Αν υπάρχει μόνο ένα αρχείο με όνομα "masterkey.cryptomator", επιλέξτε αυτό.
addvaultwizard.existing.chooseBtn=Επιλογή…
addvaultwizard.existing.filePickerTitle=Επιλέξτε Αρχείο Κρύπτης
addvaultwizard.existing.filePickerMimeDesc=Κρύπτη Cryptomator
## Success
addvaultwizard.success.nextStepsInstructions=Προστέθηκε το vault "%s".\nΠρέπει να ξεκλειδώσετε αυτό το vault για να έχετε πρόσβαση ή να προσθέσετε περιεχόμενο. Εναλλακτικά μπορείτε να το ξεκλειδώσετε κάποια άλλη στιγμή.
addvaultwizard.success.unlockNow=Ξεκλείδωμα τώρα
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title=Επιλέξτε το Masterkey του "%s"
unlock.chooseMasterkey.prompt=Αδυναμία εύρεσης του αρχείου masterkey για αυτό το vault στην αναμενόμενη τοποθεσία. Παρακαλώ επιλέξτε το αρχείο χειροκίνητα.
unlock.chooseMasterkey.chooseBtn=Επιλογή…
unlock.chooseMasterkey.filePickerTitle=Επιλέξτε το αρχείο Masterkey
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Masterkey
## Success
unlock.success.message=Ξεκλειδώθηκε "%s" επιτυχώς! Το vault σας είναι διαθέσιμο μέσω του εικονικού δίσκου του.
unlock.success.rememberChoice=Απομνημόνευση επιλογής, μην ρωτήσεις ξανά
@@ -266,7 +268,7 @@ main.closeBtn.tooltip=Κλείσιμο
main.minimizeBtn.tooltip=Ελαχιστοποίηση
main.preferencesBtn.tooltip=Προτιμήσεις
main.debugModeEnabled.tooltip=Έχει ενεργοποιηθεί η λειτουργία αποσφαλμάτωσης
main.supporterCertificateMissing.tooltip=Παρακαλώ σκεφτείτε τη δωρεά
main.supporterCertificateMissing.tooltip=Παρακαλούμε σκεφτείτε να κάνετε δωρεά
## Drag 'n' Drop
main.dropZone.dropVault=Προσθήκη vault
main.dropZone.unknownDragboardContent=Αν θέλετε να προσθέσετε ένα vault, σύρετε το σε αυτό το παράθυρο
@@ -78,6 +78,7 @@ addvault.new.readme.accessLocation.4=No dude en eliminar este archivo.
addvaultwizard.existing.instruction=Elija el archivo "vault.cryptomator" de su bóveda existente. Si solo existe un archivo llamado "masterkey.cryptomator", selecciónelo en su lugar.
addvaultwizard.existing.chooseBtn=Elegir…
addvaultwizard.existing.filePickerTitle=Seleccionar archivo de bóveda
addvaultwizard.existing.filePickerMimeDesc=Bóveda de Cryptomator
## 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
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title=Seleccionar clave maestra de "%s"
unlock.chooseMasterkey.prompt=No se pudo encontrar el archivo de la clave maestra de esta bóveda en la ubicación esperada. Por favor, elija manualmente el archivo de la clave.
unlock.chooseMasterkey.chooseBtn=Elegir…
unlock.chooseMasterkey.filePickerTitle=Seleccione el archivo de la clave maestra
unlock.chooseMasterkey.filePickerMimeDesc=Clave maestra de Cryptomator
## Success
unlock.success.message=¡Desbloqueo de "%s" exitoso! Su bóveda ahora es accesible a través de su unidad virtual.
unlock.success.rememberChoice=Recordar opción y no mostrar de nuevo
@@ -76,6 +76,7 @@ unlock.unlockBtn=بازکردن قفل
## Write
# Main Window
main.supporterCertificateMissing.tooltip=لطفا کمک مالی در نظر بگیرند
## Drag 'n' Drop
## Vault List
main.vaultlist.contextMenu.lock=قفل
+49 -47
View File
@@ -9,7 +9,7 @@ generic.button.change=Modifier
generic.button.close=Fermer
generic.button.copy=Copier
generic.button.copied=Copié !
generic.button.done=Ok
generic.button.done=OK
generic.button.next=Suivant
generic.button.print=Imprimer
## Error
@@ -62,7 +62,7 @@ addvault.new.readme.storageLocation.fileName=IMPORTANT.rtf
addvault.new.readme.storageLocation.1=Fichiers de coffre-fort
addvault.new.readme.storageLocation.2=Ceci est le chemin de votre coffre-fort.
addvault.new.readme.storageLocation.3=NE PAS
addvault.new.readme.storageLocation.4=Modifier n'importe quel fichier dans ce répertoire ou
addvault.new.readme.storageLocation.4=• modifier les fichiers dans ce répertoire ni
addvault.new.readme.storageLocation.5=• coller de fichier à chiffrer dans ce répertoire.
addvault.new.readme.storageLocation.6=Si vous voulez chiffrer les fichiers et afficher le contenu du coffre, faites ce qui suit :
addvault.new.readme.storageLocation.7=1. Ajouter ce coffre à Cryptomator.
@@ -75,9 +75,10 @@ addvault.new.readme.accessLocation.2=Ceci est le chemin d'accès de votre coffre
addvault.new.readme.accessLocation.3=Tous les fichiers ajoutés à ce volume seront chiffrés par Cryptomator. Vous pouvez l'utiliser comme n'importe quel lecteur/répertoire. Ceci est seulement une vue déchiffrée de son contenu, vos fichiers restent chiffrés dans votre disque dur en permanence.
addvault.new.readme.accessLocation.4=Vous pouvez supprimer ce fichier.
## Existing
addvaultwizard.existing.instruction=Choisissez le fichier "vault.cryptomator" de votre coffre existant. S'il existe seulement un fichier "masterkey.cryptomator", sélectionnez celui-ci.
addvaultwizard.existing.instruction=Choisissez le fichier "vault.cryptomator" de votre volume existant. Si seul le fichier "masterkey.cryptomator" est présent, sélectionnez celui-.
addvaultwizard.existing.chooseBtn=Choisir...
addvaultwizard.existing.filePickerTitle=Sélectionnez le fichier du coffre
addvaultwizard.existing.filePickerTitle=Sélectionnez le fichier correspondant au volume chiffré
addvaultwizard.existing.filePickerMimeDesc=Coffre-fort Cryptomator
## Success
addvaultwizard.success.nextStepsInstructions=Coffre “%s” ajouté.\nIl faudra déverrouiller ce coffre afin dy accéder ou dy ajouter du contenu. Cette action peut être réalisée ultérieurement.
addvaultwizard.success.unlockNow=Déverrouiller
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title=Sélectionner la clé principale de "%s"
unlock.chooseMasterkey.prompt=Impossible de trouver le fichier clef à l'adresse attendue pour ce coffre. Veuillez sélectionner le fichier clef manuellement.
unlock.chooseMasterkey.chooseBtn=Choisir...
unlock.chooseMasterkey.filePickerTitle=Sélectionner le fichier clef
unlock.chooseMasterkey.filePickerMimeDesc=\ clé principale Cryptomator
## Success
unlock.success.message=“%s” déverrouillé ! Le contenu de votre coffre est maintenant accessible par son lecteur virtuel.
unlock.success.rememberChoice=Se souvenir de mon choix et ne plus me demander
@@ -116,7 +118,7 @@ unlock.error.heading=Impossible de déverrouiller le coffre
### Invalid Mount Point
unlock.error.invalidMountPoint.notExisting=Le point de montage «%s» n'est pas un répertoire, n'est pas vide ou n'existe pas.
unlock.error.invalidMountPoint.existing=Le point de montage/le répertoire existe déjà ou le répertoire parent est manquant: %s
unlock.error.invalidMountPoint.driveLetterOccupied=Le lecteur "%s" est en déjà utilisé.
unlock.error.invalidMountPoint.driveLetterOccupied=Le lecteur "%s" est déjà utilisé.
# Lock
## Force
@@ -156,35 +158,35 @@ migration.impossible.moreInfo=Le coffre-fort peut encore être ouvert avec une v
## Start
health.title=Vérifier l'état de "%s"
health.intro.header=Vérifier l'état
health.intro.text=Le bilan de santé est une série de vérifications pour détecter et corriger d'éventuels problèmes de structure interne au coffre. Rappelez-vous :
health.intro.text=La vérification de l'état est une série de tests pour détecter et corriger d'éventuels problèmes de structure interne au volume. Rappelez-vous :
health.intro.remarkSync=S'assurer que tous les appareils sont complètement synchronisés résout la plupart des problèmes.
health.intro.remarkFix=Certains problèmes ne peuvent pas être corrigés.
health.intro.remarkBackup=Si des données sont corrompues, la seule solution est une sauvegarde.
health.intro.affirmation=J'ai lu et compris les informations ci-dessus
## Start Failure
health.fail.header=Erreur lors du chargement de la configuration du coffre
health.fail.header=Erreur lors du chargement de la configuration du volume chiffré
health.fail.ioError=Une erreur s'est produite lors de l'accès et de la lecture du fichier de configuration.
health.fail.parseError=Une erreur est survenue pendant la lecture de la configuration du coffre.
health.fail.parseError=Une erreur est survenue pendant la lecture de la configuration du volume.
health.fail.moreInfo=Plus d'informations
## Check Selection
health.checkList.description=Sélectionnez les contrôles dans la liste de gauche ou utilisez les boutons ci-dessous.
health.checkList.selectAllButton=Sélectionner toutes les vérifications
health.checkList.deselectAllButton=Désélectionner toutes les vérifications
health.check.runBatchBtn=Exécuter les vérifications sélectionnées
health.checkList.description=Sélectionnez les tests dans la liste de gauche ou utilisez les boutons ci-dessous.
health.checkList.selectAllButton=Sélectionner tous les tests
health.checkList.deselectAllButton=Désélectionner tous les tests
health.check.runBatchBtn=Exécuter les tests sélectionnés
## Detail view
health.check.detail.noSelectedCheck=Pour les résultats, sélectionnez un bilan de santé terminé dans la liste de gauche.
health.check.detail.checkScheduled=La vérification est programmée.
health.check.detail.checkRunning=Vérification en cours d'exécution…
health.check.detail.checkSkipped=La vérification n'a pas été sélectionnée pour être exécutée.
health.check.detail.checkSkipped=Le test n'a pas été sélectionné pour être exécuté.
health.check.detail.checkFinished=La vérification s'est terminée avec succès.
health.check.detail.checkFinishedAndFound=La vérification s'est terminée. Veuillez vérifier les résultats.
health.check.detail.checkFinishedAndFound=Le test est terminé. Veuillez vérifier les résultats.
health.check.detail.checkFailed=La vérification s'est arrêtée en raison d'une erreur.
health.check.detail.checkCancelled=Vérification annulée.
health.check.exportBtn=Exporter le rapport
## Fix Application
health.fix.fixBtn=Réparer
health.fix.successTip=Réparation réussie
health.fix.failTip=Correction échouée, voir le journal pour plus de détails
health.fix.failTip=Réparation ratée, voir le journal pour plus de détails
# Preferences
preferences.title=Préférences
@@ -207,7 +209,7 @@ preferences.interface.language.auto=Valeur du système
preferences.interface.interfaceOrientation=Orientation de l'interface
preferences.interface.interfaceOrientation.ltr=De gauche à droite
preferences.interface.interfaceOrientation.rtl=De droite à gauche
preferences.interface.showMinimizeButton=Afficher le bouton de réduction
preferences.interface.showMinimizeButton=Afficher le bouton Réduire
preferences.interface.showTrayIcon=Montrer l'icône de service (redémarrage nécessaire)
## Volume
preferences.volume=Disque virtuel
@@ -217,7 +219,7 @@ preferences.volume.webdav.scheme=Schéma WebDAV
## Updates
preferences.updates=Mises à jour
preferences.updates.currentVersion=Version actuelle : “%s”
preferences.updates.autoUpdateCheck=Vérifier automatiquement si des formations sont disponibles
preferences.updates.autoUpdateCheck=Vérifier automatiquement lexistence de mise à jour
preferences.updates.checkNowBtn=Vérifier maintenant
preferences.updates.updateAvailable=Mise à jour “%s” disponible.
## Contribution
@@ -268,72 +270,72 @@ main.preferencesBtn.tooltip=Préférences
main.debugModeEnabled.tooltip=Le mode débogage est activé
main.supporterCertificateMissing.tooltip=Merci d'envisager un don
## Drag 'n' Drop
main.dropZone.dropVault=Ajouter ce coffre
main.dropZone.unknownDragboardContent=Si vous voulez ajouter un coffre, faites-le glisser dans cette fenêtre
main.dropZone.dropVault=Ajouter ce volume chiffré
main.dropZone.unknownDragboardContent=Si vous voulez ajouter un volume chiffré, faites-le glisser dans cette fenêtre
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Cliquez ici pour ajouter un coffre
main.vaultlist.emptyList.onboardingInstruction=Cliquez ici pour ajouter un volume chiffré
main.vaultlist.contextMenu.remove=Retirer…
main.vaultlist.contextMenu.lock=Verrouiller
main.vaultlist.contextMenu.unlock=Déverrouiller…
main.vaultlist.contextMenu.unlockNow=Déverrouiller maintenant
main.vaultlist.contextMenu.vaultoptions=Afficher les options du coffre
main.vaultlist.contextMenu.reveal=Révéler le lecteur
main.vaultlist.addVaultBtn=Ajouter un coffre
main.vaultlist.contextMenu.vaultoptions=Afficher les options du volume chiffré
main.vaultlist.contextMenu.reveal=Afficher le lecteur
main.vaultlist.addVaultBtn=Ajouter un volume chiffré
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Merci d'avoir choisi Cryptomateur pour protéger vos fichiers. Si vous avez besoin d'aide, consultez nos guides de démarrage :
### Locked
main.vaultDetail.lockedStatus=VERROUILLÉ
main.vaultDetail.unlockBtn=Déverrouiller…
main.vaultDetail.unlockNowBtn=Déverouiller
main.vaultDetail.optionsBtn=Option du coffre
main.vaultDetail.unlockNowBtn=Déverrouiller maintenant
main.vaultDetail.optionsBtn=Options du volume chiffré
main.vaultDetail.passwordSavedInKeychain=Mot de passe enregistré
### 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.revealBtn=Afficher 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
main.vaultDetail.stats=Statistiques du coffre
main.vaultDetail.throughput.kbps=%.1f Ko/s
main.vaultDetail.throughput.mbps=%.1f Mo/s
main.vaultDetail.stats=Statistiques du volume chiffré
### Missing
main.vaultDetail.missing.info=Cryptomateur n'a pas pu trouver de coffre-fort dans ce chemin d'accès.
main.vaultDetail.missing.info=Cryptomator n'a pas pu trouver de volume chiffré dans ce chemin d'accès.
main.vaultDetail.missing.recheck=Revérifier
main.vaultDetail.missing.remove=Retirer de la liste des coffres…
main.vaultDetail.missing.changeLocation=Changer l'Emplacement du Coffre…
main.vaultDetail.missing.remove=Retirer de la liste des volumes…
main.vaultDetail.missing.changeLocation=Changer l'emplacement du volume…
### Needs Migration
main.vaultDetail.migrateButton=Mettre à jour le coffre
main.vaultDetail.migrateButton=Mettre le volume à jour
main.vaultDetail.migratePrompt=Votre coffre doit être converti dans un nouveau format avant d'y accéder
### Error
main.vaultDetail.error.info=Une erreur s'est produite lors du chargement du coffre depuis le disque.
main.vaultDetail.error.info=Une erreur s'est produite lors du chargement du volume depuis le disque.
main.vaultDetail.error.reload=Actualiser
main.vaultDetail.error.windowTitle=Erreur lors du chargement du coffre
main.vaultDetail.error.windowTitle=Erreur lors du chargement du volume
# Wrong File Alert
wrongFileAlert.title=Comment chiffrer ses données
wrongFileAlert.header.title=Avez-vous tenté de chiffrer ces fichiers ?
wrongFileAlert.header.lead=Pour faire cela, Cryptomateur fournit un volume dans votre gestionnaire système de fichiers.
wrongFileAlert.header.lead=Pour faire cela, Cryptomator fournit un volume dans le Finder.
wrongFileAlert.instruction.0=Pour chiffrer des fichiers, suivez ces étapes :
wrongFileAlert.instruction.1=1. Déverrouillez votre coffre.
wrongFileAlert.instruction.2=2. Cliquez sur "Révéler" pour ouvrir le volume dans votre gestionnaire de fichiers.
wrongFileAlert.instruction.1=1. Déverrouillez votre volume chiffré.
wrongFileAlert.instruction.2=2. Cliquez sur "Montrer" pour ouvrir le volume dans le Finder.
wrongFileAlert.instruction.3=3. Ajoutez vos fichiers à ce volume.
wrongFileAlert.link=Pour toute aide supplémentaire, visitez
# Vault Options
## General
vaultOptions.general=Général
vaultOptions.general.vaultName=Nom du coffre-fort
vaultOptions.general.vaultName=Nom du volume chiffré
vaultOptions.general.autoLock.lockAfterTimePart1=Verrouiler en cas d'inactivité pendant
vaultOptions.general.autoLock.lockAfterTimePart2=minutes
vaultOptions.general.unlockAfterStartup=Déverrouiller le coffre au démarrage
vaultOptions.general.unlockAfterStartup=Déverrouiller le volume chiffré au démarrage
vaultOptions.general.actionAfterUnlock=Après un déverrouillage réussi
vaultOptions.general.actionAfterUnlock.ignore=Ne rien faire
vaultOptions.general.actionAfterUnlock.reveal=Afficher le disque
vaultOptions.general.actionAfterUnlock.reveal=Afficher le volume
vaultOptions.general.actionAfterUnlock.ask=Demander
vaultOptions.general.startHealthCheckBtn=Commencer le contrôle de santé
vaultOptions.general.startHealthCheckBtn=Commencer la vérification de l'état
## Mount
vaultOptions.mount=Montage
@@ -350,19 +352,19 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Choisir un répertoire vide
vaultOptions.masterkey=Mot de passe
vaultOptions.masterkey.changePasswordBtn=Modifier le mot de passe
vaultOptions.masterkey.forgetSavedPasswordBtn=Oublier le mot de passe enregistré
vaultOptions.masterkey.recoveryKeyExplanation=Une clé de récupération est votre seul moyen de rétablir l'accès à un coffre-fort, si vous perdez votre mot de passe.
vaultOptions.masterkey.recoveryKeyExplanation=Une clé de récupération est votre seul moyen de rétablir l'accès à un volume chiffré, si vous perdez votre mot de passe.
vaultOptions.masterkey.showRecoveryKeyBtn=Afficher la clé de récupération
vaultOptions.masterkey.recoverPasswordBtn=Récupération du mot de passe
# 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.enterPassword.prompt=Entrez votre mot de passe pour afficher la clé de récupération de "%s" :
recoveryKey.display.message=La clé de récupération suivante peut être utilisée pour restaurer l'accès à "%s " :
recoveryKey.display.StorageHints=Gardez-le quelque part de façon très sûr, par ex. :\n • Stockez le en utilisant un gestionnaire de mot de passe\n • Enregistrez-le sur une clé USB\n • Imprimez-le sur papier
recoveryKey.display.StorageHints=Gardez-la dans un endroit sûr, par ex. :\n • Stockez-la en utilisant un gestionnaire de mot de passe\n • Enregistrez-la sur une clé USB\n • Imprimez-la
recoveryKey.recover.prompt=Entrez votre clé de récupération pour "%s":
recoveryKey.recover.validKey=Cette clé de récupération est valide
recoveryKey.printout.heading=Clé de récupération Cryptomateur\n"%s"\n
recoveryKey.printout.heading=Clé de récupération Cryptomator "%s"\n
# New Password
newPassword.promptText=Entrer un nouveau mot de passe
@@ -377,5 +379,5 @@ 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.prompt=Quitter l'application ? Il y a des volumes chiffrés déverrouillés.
quit.lockAndQuit=Verrouiller et quitter
@@ -78,6 +78,7 @@ addvault.new.readme.accessLocation.4=תרגיש/י בנוח להסיר את הק
addvaultwizard.existing.instruction=בחר את קובץ "vault.cryptomator" של כספת קיימת. אם קיים קובץ בשם "masterkey.cryptomator" בלבד, בחר/י אותו במקום.
addvaultwizard.existing.chooseBtn=בחר...
addvaultwizard.existing.filePickerTitle=בחר קובץ כספת
addvaultwizard.existing.filePickerMimeDesc=Cryptomator Vault
## Success
addvaultwizard.success.nextStepsInstructions=נוספה כספת "%s".\nהנך צריך/ה לבטל נעילת כספת זו בכדי לקבל גישה או להוסיף קבצים. לחילופין תוכל/י לבטל נעילה בכל נקודת זמן מאוחרת יותר.
addvaultwizard.success.unlockNow=בטל נעילה כעת
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title=בחר/י מפתח מאסטר של "%s"
unlock.chooseMasterkey.prompt=מפתח מאסטר של כספת זו לא נמצא במיקום הצפוי. בחר/י בבקשה את המפתח באופן ידני.
unlock.chooseMasterkey.chooseBtn=בחר...
unlock.chooseMasterkey.filePickerTitle=בחר/י קובץ מפתח מאסטר
unlock.chooseMasterkey.filePickerMimeDesc=מפתח ראשי של Cryptomator
## Success
unlock.success.message=הנעילה ל-"%s" בוטלה בהצלחה! הכספת שלך נגישה כעת דרך כונן ווירטואלי.
unlock.success.rememberChoice=זכור בחירה, אל תראה שוב
@@ -174,6 +176,7 @@ preferences.updates=עדכונים
# Main Window
main.closeBtn.tooltip=סגור
main.preferencesBtn.tooltip=העדפות
main.supporterCertificateMissing.tooltip=תרומתך תתקבל בברכה
## Drag 'n' Drop
## Vault List
main.vaultlist.contextMenu.lock=נעילה
@@ -115,6 +115,7 @@ preferences.general=सामान्य
# Main Window
main.closeBtn.tooltip=बंद करें
main.preferencesBtn.tooltip=प्राथमिकताएं
main.supporterCertificateMissing.tooltip=कृपया दान पर विचार करें।
## Drag 'n' Drop
## Vault List
main.vaultlist.contextMenu.lock=लॉक करें
@@ -54,7 +54,7 @@ addvaultwizard.new.locationIsOk=Prikladna lokacija za Vaš trezor
addvaultwizard.new.invalidName=Neispravan naziv trezora. Razmislite o uobičajenom nazivu mape.
### Password
addvaultwizard.new.createVaultBtn=Stvori trezor
addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći pristupiti svojim podacima bez lozinke. Želite li ključ za oporavak za slučaj da izgubite lozinku?
addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći pristupiti svojim podacima bez lozinke. Želite li ključ za oporavak za slučaj gubitka lozinke?
addvaultwizard.new.generateRecoveryKeyChoice.yes=Da molim, bolje spriječiti nego liječiti
addvaultwizard.new.generateRecoveryKeyChoice.no=Ne hvala, neću izgubiti lozinku
### Information
@@ -78,6 +78,7 @@ addvault.new.readme.accessLocation.4=Slobodno uklonite ovu datoteku.
addvaultwizard.existing.instruction=Odaberite "vault.cryptomator" datoteku postojećeg trezora. Ako postoji samo datoteka "masterkey.cryptomator", odaberite nju umjesto toga.
addvaultwizard.existing.chooseBtn=Odaberite…
addvaultwizard.existing.filePickerTitle=Odaberite datoteku trezora
addvaultwizard.existing.filePickerMimeDesc=Cryptomator trezor
## Success
addvaultwizard.success.nextStepsInstructions=Dodajte trezor "%s".\nMorate otključati ovaj trezor kako biste pristupili ili dodavali sadržaje. Alternativno, možete ga otključati u bilo koje drugo vrijeme.
addvaultwizard.success.unlockNow=Otključaj sada
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title=Odaberi glavni ključ za "%s"
unlock.chooseMasterkey.prompt=Nije moguće pronaći datoteku glavnog ključa za ovaj trezor na njegovoj očekivanoj lokaciji. Molimo da ručno odaberete datoteku ključa.
unlock.chooseMasterkey.chooseBtn=Odaberite…
unlock.chooseMasterkey.filePickerTitle=Odaberi datoteku glavnog ključa
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator glavni ključ
## Success
unlock.success.message=Uspješno otključan "%s"! Vaš trezor je sada dostupan kroz svoj virtualni pogon.
unlock.success.rememberChoice=Zapamti izbor, ne prikazuj ovo više
@@ -194,7 +196,7 @@ preferences.general.startHidden=Sakrij prozor kod pokretanja Cryptomator-a
preferences.general.debugLogging=Omogući zapisivanje otklanjanja pogrešaka
preferences.general.debugDirectory=Prikaži datoteke zapisa
preferences.general.autoStart=Pokreni Cryptomator kod pokretanja sustava
preferences.general.keychainBackend=Pohrani lozinka s
preferences.general.keychainBackend=Pohrani lozinke s
## Interface
preferences.interface=Sučelje
preferences.interface.theme=Izgled i Osjećaj
@@ -350,7 +352,7 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Odaberi praznu mapu
vaultOptions.masterkey=Lozinka
vaultOptions.masterkey.changePasswordBtn=Promijeni lozinku
vaultOptions.masterkey.forgetSavedPasswordBtn=Zaboravi pohranjenu lozinku
vaultOptions.masterkey.recoveryKeyExplanation=Ključ za oporavak je jedini način povrata pristupa trezoru u slučaju da izgubite lozinku.
vaultOptions.masterkey.recoveryKeyExplanation=Ključ za oporavak je jedini način povrata pristupa trezoru u slučaju gubitka lozinke.
vaultOptions.masterkey.showRecoveryKeyBtn=Prikaži ključ za oporavak
vaultOptions.masterkey.recoverPasswordBtn=Obnovi lozinku
+14 -12
View File
@@ -5,7 +5,7 @@
generic.button.apply=Applica
generic.button.back=Indietro
generic.button.cancel=Annulla
generic.button.change=Modifica
generic.button.change=Aggiorna
generic.button.close=Chiudi
generic.button.copy=Copia
generic.button.copied=Copiato!
@@ -14,7 +14,7 @@ generic.button.next=Avanti
generic.button.print=Stampa
## Error
generic.error.title=Errore %s
generic.error.instruction=Ops! Cryptomator non si aspettava che ciò succedesse. Puoi cercare le soluzioni esistenti per questo errore. O se non è stato ancora segnalato, sentiti libero di farlo.
generic.error.instruction=Oops! Cryptomator non si aspettava che ciò accadesse. Puoi cercare soluzioni esistenti per questo errore. Oppure se non è ancora stato segnalato, sentitevi liberi di farlo.
generic.error.hyperlink.lookup=Cerca questo errore
generic.error.hyperlink.report=Segnala questo errore
generic.error.technicalDetails=Dettagli:
@@ -23,13 +23,13 @@ generic.error.technicalDetails=Dettagli:
defaults.vault.vaultName=Cassaforte
# Tray Menu
traymenu.showMainWindow=Mostra
traymenu.showMainWindow=Visualizza
traymenu.showPreferencesWindow=Preferenze
traymenu.lockAllVaults=Blocca Tutto
traymenu.quitApplication=Esci
traymenu.vault.unlock=Sblocca
traymenu.vault.lock=Blocca
traymenu.vault.reveal=Rivela
traymenu.vault.reveal=Mostra
# Add Vault Wizard
addvaultwizard.title=Aggiungi Cassaforte
@@ -41,17 +41,17 @@ addvaultwizard.welcome.existingButton=Apri Cassaforte Esistente
addvaultwizard.new.nameInstruction=Scegli un nome per la cassaforte
addvaultwizard.new.namePrompt=Nome della Cassaforte
### Location
addvaultwizard.new.locationInstruction=Dove Cryptomator dovrebbe memorizzare i file crittografati della tua cassaforte?
addvaultwizard.new.locationLabel=Posizione d'archiviazione
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 la Cartella
addvaultwizard.new.directoryPickerTitle=Seleziona Cartella
addvaultwizard.new.fileAlreadyExists=Un file o una cartella con il nome della cassaforte esiste già
addvaultwizard.new.locationDoesNotExist=Una cartella nel percorso specificato non esiste o non è accessibile
addvaultwizard.new.locationIsNotWritable=Nessun accesso di scrittura al percorso specificato
addvaultwizard.new.locationIsNotWritable=Nessun accesso in scrittura nel percorso specificato
addvaultwizard.new.locationIsOk=Posizione idonea per la tua cassaforte
addvaultwizard.new.invalidName=Nome della cassaforte non valido. Sei pregato di considerare un nome della cartella regolare.
addvaultwizard.new.invalidName=Nome della cassaforte non valido. Sei pregato di considerare un nome valido per la cartella.
### Password
addvaultwizard.new.createVaultBtn=Crea Cassaforte
addvaultwizard.new.generateRecoveryKeyChoice=Non potrai accedere ai tuoi dati senza la tua password. Desideri una chiave di recupero nel caso dovessi perdere la password?
@@ -62,9 +62,9 @@ addvault.new.readme.storageLocation.fileName=IMPORTANTE.rtf
addvault.new.readme.storageLocation.1=⚠️ FILE DELLA CASSAFORTE ⚠️
addvault.new.readme.storageLocation.2=Questa è la posizione d'archiviazione della tua cassaforte.
addvault.new.readme.storageLocation.3=NON
addvault.new.readme.storageLocation.4=• alterare alcun file in questa cartella o
addvault.new.readme.storageLocation.4=• alterare nessun file in questa cartella o
addvault.new.readme.storageLocation.5=• incollare alcun file per la crittografia in questa cartella.
addvault.new.readme.storageLocation.6=Se vuoi crittografare i file e visualizzare il contenuto della cassaforte, fa quanto segue:
addvault.new.readme.storageLocation.6=Se si desidera crittografare i file e visualizzare il contenuto della cassaforte, effettuare le seguenti operazioni:
addvault.new.readme.storageLocation.7=1. Aggiungi questa cassaforte a Cryptomator.
addvault.new.readme.storageLocation.8=2. Sblocca la cassaforte su Cryptomator.
addvault.new.readme.storageLocation.9=3. Apri la posizione d'accesso cliccando sul pulsante "Rivela".
@@ -78,6 +78,7 @@ addvault.new.readme.accessLocation.4=Sentiti libero di rimuovere questo file.
addvaultwizard.existing.instruction=Scegliere il file "vault.cryptomator" della tua cassaforte. Se esiste solo un file chiamato "masterkey.cryptomator", allora scegli quello.
addvaultwizard.existing.chooseBtn=Scegli…
addvaultwizard.existing.filePickerTitle=Seleziona file cassaforte
addvaultwizard.existing.filePickerMimeDesc=Cassaforte di Cryptomator
## Success
addvaultwizard.success.nextStepsInstructions=Cassaforte "%s" aggiunta.\nDevi sbloccare questa cassaforte per accedere o aggiungere contenuti. Altrimenti, puoi sbloccarla in qualsiasi momento successivo.
addvaultwizard.success.unlockNow=Sblocca Ora
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title=Seleziona Masterkey di "%s"
unlock.chooseMasterkey.prompt=Impossibile trovare il file Masterkey per questa cassaforte alla sua posizione prevista. Sei pregato di sceglierlo manualmente.
unlock.chooseMasterkey.chooseBtn=Scegli…
unlock.chooseMasterkey.filePickerTitle=Seleziona il File Masterkey
unlock.chooseMasterkey.filePickerMimeDesc=Chiave principale di Cryptomator
## Success
unlock.success.message="%s" sbloccato correttamente! La tua cassaforte è ora accessibile tramite la sua unità virtuale.
unlock.success.rememberChoice=Ricorda la scelta, non mostrarmelo più
@@ -266,7 +268,7 @@ main.closeBtn.tooltip=Chiudi
main.minimizeBtn.tooltip=Minimizza
main.preferencesBtn.tooltip=Preferenze
main.debugModeEnabled.tooltip=La modalità di debug è abilitata
main.supporterCertificateMissing.tooltip=Sei pregato di considerare di donare
main.supporterCertificateMissing.tooltip=Per favore, considera le donazioni
## Drag 'n' Drop
main.dropZone.dropVault=Aggiungi questa cassaforte
main.dropZone.unknownDragboardContent=Se desideri aggiungere una cassaforte, trascinala a questa finestra
@@ -103,9 +103,12 @@ unlock.passwordPrompt=Skriv inn passordet for "%s":
unlock.savePassword=Husk passord
unlock.unlockBtn=Lås opp
## Select
unlock.chooseMasterkey.title=Velg Hovednøkkel for "%s"
unlock.chooseMasterkey.prompt=Kunne ikke finne hovednøkkelfilen for dette hvelvet på forventet sted. Venligst velg nøkkelfilen manuelt.
unlock.chooseMasterkey.chooseBtn=Velg…
unlock.chooseMasterkey.filePickerTitle=Velg hovednøkkelfil
## Success
unlock.success.message=Vellykket opplåsing av "%s"! Hvelvet ditt er nå tilgjengelig via sin virtuelle stasjon.
unlock.success.rememberChoice=Husk valget - ikke vis dette igjen
unlock.success.revealBtn=Gjør enheten synlig
## Failure
@@ -113,6 +116,7 @@ unlock.error.heading=Klarer ikke å låse opp hvelvet
### Invalid Mount Point
unlock.error.invalidMountPoint.notExisting=Monteringspunktet "%s" er enten ikke en mappe, ikke tom eller eksisterer ikke.
unlock.error.invalidMountPoint.existing=Monteringspunktet "%s" finnes enten allerede eller at overordnet mappe mangler.
unlock.error.invalidMountPoint.driveLetterOccupied=Stasjonsbokstav "%s" er allerede i bruk.
# Lock
## Force
@@ -150,11 +154,32 @@ migration.impossible.moreInfo=Hvelvet kan fortsatt åpnes hvis du bruker en eldr
# Health Check
## Start
health.title=Helsesjekk av "%s"
health.intro.header=Helsesjekk
health.intro.text=Helsesjekk er en samling av kontroller for å detektere og muligens fikse problemer i den interne strukturen av hvelvet ditt. Vennligst husk:
health.intro.remarkSync=Sørg for at alle enheter er helt synkronisert, dette løser de fleste problemer.
health.intro.remarkFix=Ikke alle problemer kan løses.
health.intro.remarkBackup=Hvis data er korrupt, kan bare en sikkerhetskopi hjelpe.
health.intro.affirmation=Jeg har lest og forstått informasjonen ovenfor
## Start Failure
health.fail.header=Feil ved lasting av konfigurasjon til hvelvet
health.fail.ioError=En feil oppstod ved tilgang og lesing av konfigurasjonsfilen.
health.fail.parseError=En feil oppstod ved analysering av konfigurasjonen til hvelvet.
health.fail.moreInfo=Mer informasjon
## Check Selection
health.checkList.description=Velg sjekker i listen til venstre eller bruk knappene nedenfor.
health.checkList.selectAllButton=Velg Alle Sjekkene
health.checkList.deselectAllButton=Fjern valget av alle sjekkene
health.check.runBatchBtn=Kjør de valgte sjekkene
## Detail view
health.check.detail.noSelectedCheck=For å se resultater, velg en fullført helsesjekk i listen til venstre.
health.check.detail.checkScheduled=Helsesjekken er planlagt.
health.check.detail.checkRunning=Helsesjekken kjører for øyeblikket…
health.check.detail.checkSkipped=Helsesjekken ble ikke valgt for å kjøre.
health.check.detail.checkFinished=Helsesjekken ble fullført vellyket.
health.check.detail.checkFinishedAndFound=Helsesjekken er ferdig å kjøre. Vennligst se resultatene.
health.check.detail.checkFailed=Helsesjekken avsluttet på grunn av en feil.
health.check.detail.checkCancelled=Helsesjekken ble avbrutt.
health.check.exportBtn=Eksporter rapport
## Fix Application
health.fix.fixBtn=Reparer
@@ -171,8 +196,19 @@ preferences.general.debugDirectory=Vis loggfiler
preferences.general.autoStart=Start Cryptomator ved systemstart
preferences.general.keychainBackend=Lagre passord med
## Interface
preferences.interface=Grensesnitt
preferences.interface.theme=Utseende og preg
preferences.interface.theme.automatic=Automatisk
preferences.interface.theme.dark=Mørk
preferences.interface.theme.light=Lys
preferences.interface.unlockThemes=Lås opp mørk modus
preferences.interface.language=Språk (krever omstart)
preferences.interface.language.auto=Systemstandard
preferences.interface.interfaceOrientation=Grensesnittorientering
preferences.interface.interfaceOrientation.ltr=Fra venstre til høyre
preferences.interface.interfaceOrientation.rtl=Fra høyre til venstre
preferences.interface.showMinimizeButton=Vis minimer knapp
preferences.interface.showTrayIcon=Vis verktøykasseikon (krever omstart)
## Volume
preferences.volume=Virtuell enhet
preferences.volume.type=Volumtype
@@ -186,6 +222,10 @@ preferences.updates.checkNowBtn=Sjekk nå
preferences.updates.updateAvailable=Oppdatering til versjon %s er tilgjengelig.
## Contribution
preferences.contribute=Støtt oss
preferences.contribute.registeredFor=Supporter sertifikat registrert for %s
preferences.contribute.noCertificate=Støtt Cryptomator og motta et supporter sertifikat. Det er som en lisensnøkkel, men for fantastiske mennesker som bruker fri programvare. ;-)
preferences.contribute.getCertificate=Har du ikke en allerede? Lær hvordan du kan skaffe den.
preferences.contribute.promptText=Lim inn supporter sertifikatkoden her
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -236,6 +276,7 @@ main.vaultlist.contextMenu.remove=Fjern…
main.vaultlist.contextMenu.lock=Lås
main.vaultlist.contextMenu.unlock=Lås opp…
main.vaultlist.contextMenu.unlockNow=Lås opp nå
main.vaultlist.contextMenu.vaultoptions=Alternativer for hvelvet
main.vaultlist.contextMenu.reveal=Gjør enheten synlig
main.vaultlist.addVaultBtn=Legg til hvelv
## Vault Detail
@@ -267,6 +308,9 @@ main.vaultDetail.missing.changeLocation=Endre hvelvplassering…
main.vaultDetail.migrateButton=Oppgrader hvelv
main.vaultDetail.migratePrompt=Hvelvet ditt må oppgraderes til et nytt format før du kan få tilgang til det
### Error
main.vaultDetail.error.info=Det oppstod en feil under lasting av hvelvet fra stasjonen.
main.vaultDetail.error.reload=Last på nytt
main.vaultDetail.error.windowTitle=Feil ved lasting av hvelvet
# Wrong File Alert
wrongFileAlert.title=Slik krypterer du filer
@@ -282,12 +326,14 @@ wrongFileAlert.link=For ytterligere hjelp, besøk
## General
vaultOptions.general=Generelt
vaultOptions.general.vaultName=Navn på hvelvet
vaultOptions.general.autoLock.lockAfterTimePart1=Lås når inaktiv i
vaultOptions.general.autoLock.lockAfterTimePart2=minutter
vaultOptions.general.unlockAfterStartup=Lås opp hvelvet når du starter Cryptomator
vaultOptions.general.actionAfterUnlock=Etter vellykket opplåsing
vaultOptions.general.actionAfterUnlock.ignore=Ikke gjør noe
vaultOptions.general.actionAfterUnlock.reveal=Gjør enheten synlig
vaultOptions.general.actionAfterUnlock.ask=Spør
vaultOptions.general.startHealthCheckBtn=Start helsesjekk
## Mount
vaultOptions.mount=Montering
@@ -266,7 +266,7 @@ main.closeBtn.tooltip=Sluiten
main.minimizeBtn.tooltip=Minimaliseer
main.preferencesBtn.tooltip=Voorkeuren
main.debugModeEnabled.tooltip=Foutopsporingsmodus is ingeschakeld
main.supporterCertificateMissing.tooltip=Overweeg alstublieft om een donatie te doen
main.supporterCertificateMissing.tooltip=Overweeg alstublieft om te doneren
## Drag 'n' Drop
main.dropZone.dropVault=Voeg deze kluis toe
main.dropZone.unknownDragboardContent=Als u een kluis wilt toevoegen, sleep deze dan naar dit venster
@@ -78,6 +78,7 @@ addvault.new.readme.accessLocation.4=Jeśli chcesz możesz spokojnie usunąć te
addvaultwizard.existing.instruction=Wybierz plik "vault.cryptomator" w istniejącym sejfie. Jeśli istnieje tylko plik "masterkey.cryptomator", wybierz ten plik.
addvaultwizard.existing.chooseBtn=Wybierz…
addvaultwizard.existing.filePickerTitle=Wybierz plik sejfu
addvaultwizard.existing.filePickerMimeDesc=Sejf Cryptomator-a
## Success
addvaultwizard.success.nextStepsInstructions=Dodano sejf "%s".\nMusisz odblokować ten sejf, aby uzyskać dostęp lub dodać zawartość. Możesz go również odblokować kiedy indziej.
addvaultwizard.success.unlockNow=Odblokuj teraz
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title=Wybierz Masterkey z "%s"
unlock.chooseMasterkey.prompt=Brak pliku Masterkey dla tego sejfu w oczekiwanej lokalizacji. Proszę wybrać plik klucza ręcznie.
unlock.chooseMasterkey.chooseBtn=Wybierz…
unlock.chooseMasterkey.filePickerTitle=Wybierz plik Masterkey
unlock.chooseMasterkey.filePickerMimeDesc=Klucz główny Cryptomator-a
## Success
unlock.success.message=Odblokowano "%s" pomyślnie! Twój sejf jest teraz dostępny za pomocą dysku wirtualnego.
unlock.success.rememberChoice=Zapamiętaj wybór, nie pokazuj tego ponownie
@@ -196,8 +198,19 @@ preferences.general.debugDirectory=Pokaż pliki logowania
preferences.general.autoStart=Uruchom Cryptomator po uruchomieniu systemu
preferences.general.keychainBackend=Przechowuj hasła za pomocą
## Interface
preferences.interface=Interfejs
preferences.interface.theme=Wygląd
preferences.interface.theme.automatic=Automatyczny
preferences.interface.theme.dark=Ciemny
preferences.interface.theme.light=Jasny
preferences.interface.unlockThemes=Odblokuj ciemny tryb
preferences.interface.language=Język (wymaga restartu)
preferences.interface.language.auto=Domyślny z systemu
preferences.interface.interfaceOrientation=Układ interfejsu
preferences.interface.interfaceOrientation.ltr=Od lewej do prawej
preferences.interface.interfaceOrientation.rtl=Od prawej do lewej
preferences.interface.showMinimizeButton=Pokaż przycisk minimalizacji
preferences.interface.showTrayIcon=Pokaż ikonę zasobnika (wymaga restartu)
## Volume
preferences.volume=Dysk wirtualny
preferences.volume.type=Typ udziału
@@ -72,15 +72,19 @@ addvault.new.readme.storageLocation.10=Se precisar de ajuda, visite a documenta
addvault.new.readme.accessLocation.fileName=BEM-VINDO.rtf
addvault.new.readme.accessLocation.1=🔐 VOLUME CRIPTOGRAFADO 🔐
addvault.new.readme.accessLocation.2=Este é o local de acesso do seu cofre.
addvault.new.readme.accessLocation.3=Qualquer ficheiro adicionado a este volume será encriptado pelo Cryptomator. Poderá trabalhar nestes normalmente como em qualquer outra unidade/pasta. Esta é apenas uma visualização desencriptada do seu conteúdo, os seus ficheiros continuam encriptados no seu disco rígido.
addvault.new.readme.accessLocation.4=Sinta-se livre para remover este ficheiro.
## Existing
addvaultwizard.existing.instruction=Escolha o ficheiro "vault.cryptomator" do seu cofre. Se encontrar unicamente o ficheiro "masterkey.cryptomator", selecione-o.
addvaultwizard.existing.chooseBtn=Escolher…
addvaultwizard.existing.filePickerTitle=Selecionar o ficheiro do cofre
## Success
addvaultwizard.success.nextStepsInstructions=Adicionado cofre "%s".\nPrecisa de destrancar este cofre para aceder ou adicionar conteúdo. Como alternativa, pode destrancá-lo a qualquer momento mais tarde.
addvaultwizard.success.unlockNow=Destrancar agora
# Remove Vault
removeVault.title=Remover Cofre
removeVault.information=Isto fará unicamente com que o Cryptomator esqueça este cofre. Poderá adicioná-lo novamente mais tarde. Nenhum ficheiro encriptado será apagado do seu disco rígido.
removeVault.confirmBtn=Remover Cofre
# Change Password
@@ -90,44 +94,90 @@ changepassword.finalConfirmation=Eu entendo que não poderei aceder aos meus dad
# Forget Password
forgetPassword.title=Esqueci a Senha
forgetPassword.information=Isto irá apagar a palavra-passe deste cofre guardada no porta-chaves do seu sistema.
forgetPassword.confirmBtn=Esqueci a Senha
# Unlock
unlock.title=Desbloquear "%s"
unlock.passwordPrompt=Insira a senha para "%s":
unlock.savePassword=Recordar a palavra-passe
unlock.unlockBtn=Destrancar
## Select
unlock.chooseMasterkey.title=Selecione a Masterkey de "%s"
unlock.chooseMasterkey.prompt=Não foi possível encontrar o ficheiro masterkey no local predefinido para este cofre. Por favor, escolha o ficheiro chave manualmente.
unlock.chooseMasterkey.chooseBtn=Escolher…
unlock.chooseMasterkey.filePickerTitle=Selecionar ficheiro MasterKey
## Success
unlock.success.message="%s" desbloqueado com sucesso! O seu cofre está agora acessível na correspondente unidade virtual.
unlock.success.rememberChoice=Lembrar escolha, não mostrar isto novamente
unlock.success.revealBtn=Revelar unidade
## Failure
unlock.error.heading=Não foi possível desbloquear o cofre
### Invalid Mount Point
unlock.error.invalidMountPoint.notExisting=O ponto de montagem "%s" não é um diretório, não está vazio ou não existe.
unlock.error.invalidMountPoint.existing=O ponto de montagem "%s" já existe ou a pasta antecedente está em falta.
unlock.error.invalidMountPoint.driveLetterOccupied=A letra de unidade "%s" já está sendo usada.
# Lock
## Force
lock.forced.heading=Cadeado falhou\nOr\nBloqueio falhou
lock.forced.message=Bloquear "%s" foi impossibilitado por operações pendentes ou ficheiros abertos. Poderá forçar o bloqueio deste cofre, sob a possiblidade da perda de dados não guardados.
lock.forced.retryBtn=Tente novamente
lock.forced.forceBtn=Forçar bloqueio
## Failure
lock.fail.heading=O bloqueio do cofre falhou.
lock.fail.message=O cofre "%s" não pode ser bloqueado. Certifique-se de que o trabalho não guardado está a salvo noutro lugar e operações importantes de leitura/escrita finalizaram. Para fechar o cofre, termine o processo do Cryptomator.
# Migration
migration.title=Atualizar Cofre
## Start
migration.start.prompt=O seu cofre "%s" precisa de ser atualizado para um formato mais recente. Antes de prosseguir, certifique-se de que não existe nenhuma sincronização pendente neste cofre.
migration.start.confirm=Sim, o meu cofre está completamente sincronizado
## Run
migration.run.enterPassword=Introduza a palavra-passe de "%s"
migration.run.startMigrationBtn=Migrar Cofre
migration.run.progressHint=Isso pode levar algum tempo…
## Success
migration.success.nextStepsInstructions="%s" foi migrado com sucesso.\nPoderá desbloquear o seu cofre agora.
migration.success.unlockNow=Destrancar agora
## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Sistema de ficheiros não suportado
migration.error.missingFileSystemCapabilities.description=O processo de migração não foi iniciado, porque o seu cofre está localizado num sistema de ficheiros inadequado.
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=O sistema de ficheiros não suporta nomes de ficheiro longos.
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=O sistema de ficheiros não suporta nomes de caminho longos.
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=O sistema de ficheiros não permite a sua leitura.
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=O sistema de ficheiros não permite ser guardado.
## Impossible
migration.impossible.heading=Não foi possível migrar o cofre
migration.impossible.reason=Não foi possível migrar o cofre automaticamente porque a sua localização de armazenamento ou o ponto de acesso não é compatível.
migration.impossible.moreInfo=O cofre poderá ser aberto com uma versão mais antiga. Para instruções sobre como migrar um cofre manualmente, visite
# Health Check
## Start
health.title=Análise da saúde de "%s"
health.intro.header=Análise de saúde
health.intro.text=A análise de saúde é uma coleção de verificações para detetar e potencialmente corrigir problemas na estrutura interna do seu cofre. Lembre-se de:
health.intro.remarkSync=Certifique-se de que todos os dispositivos estejam completamente sincronizados, pois isto resolve a maioria dos problemas.
health.intro.remarkFix=Nem todos os problemas podem ser corrigidos.
health.intro.remarkBackup=Se os dados estiverem corrompidos, apenas um backup prévio poderá ajudar.
health.intro.affirmation=Li e entendi as informações acima
## Start Failure
health.fail.header=Erro ao carregar a configuração do cofre
health.fail.ioError=Ocorreu um erro ao aceder e ler o arquivo de configuração.
health.fail.parseError=Ocorreu um erro ao analisar a configuração do cofre.
health.fail.moreInfo=Mais informações
## Check Selection
health.checkList.description=Selecione as verificações na lista esquerda ou use os botões abaixo.
health.checkList.selectAllButton=Selecionar Todas as Verificações
health.checkList.deselectAllButton=Desmarcar Todas as Verificações
health.check.runBatchBtn=Executar as Verificações Selecionadas
## Detail view
health.check.detail.noSelectedCheck=Para resultados, selecione uma análise de saúde terminada na lista à esquerda.
health.check.detail.checkScheduled=A verificação está programada.
health.check.detail.checkRunning=A verificação está atualmente a decorrer…
health.check.detail.checkSkipped=A verificação não foi selecionada para ser executada.
health.check.detail.checkFinished=A verificação foi concluída com sucesso.
health.check.detail.checkFinishedAndFound=A verificação concluiu. Por favor, reveja os resultados.
## Fix Application
# Preferences
@@ -158,16 +208,19 @@ preferences.about=Sobre
main.closeBtn.tooltip=Fechar
main.minimizeBtn.tooltip=Minimizar
main.preferencesBtn.tooltip=Preferências
main.supporterCertificateMissing.tooltip=Por favor, considere doar
## Drag 'n' Drop
## Vault List
main.vaultlist.contextMenu.lock=Trancar
main.vaultlist.contextMenu.unlockNow=Destrancar agora
main.vaultlist.contextMenu.reveal=Revelar unidade
main.vaultlist.addVaultBtn=Adicionar Cofre
## Vault Detail
### Welcome
### Locked
main.vaultDetail.unlockNowBtn=Destrancar agora
### Unlocked
main.vaultDetail.revealBtn=Revelar unidade
main.vaultDetail.lockBtn=Trancar
main.vaultDetail.throughput.idle=inativo
main.vaultDetail.throughput.kbps=%.1f kiB/s
@@ -192,6 +245,7 @@ vaultOptions.general=Geral
vaultOptions.general.vaultName=Nome do Cofre
vaultOptions.general.unlockAfterStartup=Destrancar o cofre ao iniciar o Cryptomator
vaultOptions.general.actionAfterUnlock=Após destrancar com sucesso
vaultOptions.general.actionAfterUnlock.reveal=Revelar unidade
vaultOptions.general.actionAfterUnlock.ask=Perguntar
## Mount
@@ -78,6 +78,7 @@ addvault.new.readme.accessLocation.4=Sinta-se livre para apagar este arquivo.
addvaultwizard.existing.instruction=Escolha o arquivo "vault.cryptomator" do seu cofre existente. Se existir apenas um arquivo chamado "masterkey.cryptomator", selecione outro.
addvaultwizard.existing.chooseBtn=Selecionar…
addvaultwizard.existing.filePickerTitle=Selecionar arquivo do Cofre
addvaultwizard.existing.filePickerMimeDesc=Cofre Cryptomator
## 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
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title=Selecione o Masterkey de "%s"
unlock.chooseMasterkey.prompt=Não foi possível encontrar o arquivo Masterkey deste cofre no local esperado. Por favor selecione o arquivo chave manualmente.
unlock.chooseMasterkey.chooseBtn=Escolher…
unlock.chooseMasterkey.filePickerTitle=Selecionar Arquivo Masterkey
unlock.chooseMasterkey.filePickerMimeDesc=Chave mestra do Cryptomator
## Success
unlock.success.message="%s" desbloqueado com êxito! Seu cofre agora está acessível na unidade virtual.
unlock.success.rememberChoice=Lembrar opção escolhida, não mostrar isto novamente
@@ -266,7 +268,7 @@ main.closeBtn.tooltip=Fechar
main.minimizeBtn.tooltip=Minimizar
main.preferencesBtn.tooltip=Preferências
main.debugModeEnabled.tooltip=Modo de depuração ativado
main.supporterCertificateMissing.tooltip=Por favor, considere uma doação
main.supporterCertificateMissing.tooltip=Por favor, considere doar para esse projeto
## Drag 'n' Drop
main.dropZone.dropVault=Adicionar este cofre
main.dropZone.unknownDragboardContent=Se você quer adicionar um cofre, arraste-o para esta janela
@@ -78,6 +78,7 @@ addvault.new.readme.accessLocation.4=Этот файл можно удалить
addvaultwizard.existing.instruction=Выберите файл "vault.cryptomator" существующего хранилища. Если имеется только файл "masterkey.cryptomator", выберите его.
addvaultwizard.existing.chooseBtn=Выбрать…
addvaultwizard.existing.filePickerTitle=Выберите файл хранилища
addvaultwizard.existing.filePickerMimeDesc=Хранилище Cryptomator
## Success
addvaultwizard.success.nextStepsInstructions=Добавлено хранилище "%s".\nДля добавления данных или доступа к содержимому нужно разблокировать хранилище. Его можно разблокировать и позже.
addvaultwizard.success.unlockNow=Разблокировать
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title=Выберите файл MasterKey для "%s"
unlock.chooseMasterkey.prompt=Не удалось найти файл MasterKey для этого хранилища в ожидаемом месте. Выберите ключевой файл вручную.
unlock.chooseMasterkey.chooseBtn=Выбрать…
unlock.chooseMasterkey.filePickerTitle=Выберите файл MasterKey
unlock.chooseMasterkey.filePickerMimeDesc=Мастер-ключ Cryptomator
## Success
unlock.success.message=Разблокировка "%s" успешно выполнена! Доступ в хранилище открыт через его виртуальный диск.
unlock.success.rememberChoice=Запомнить выбор и больше не спрашивать
@@ -78,6 +78,7 @@ addvault.new.readme.accessLocation.4=Tento súbor môžete kedykoľvek odstráni
addvaultwizard.existing.instruction=Zvoľte "vault.cryptomator" súbor Vášho existujúceho trezora. Ak existuje iba súbor s menom "masterkey.cryptomator", vyberte ho namiesto.
addvaultwizard.existing.chooseBtn=Vybrať…
addvaultwizard.existing.filePickerTitle=Zvoľte súbor trezora
addvaultwizard.existing.filePickerMimeDesc=Trezor Cryptomátora
## Success
addvaultwizard.success.nextStepsInstructions=Pridaný trezor "%s".\nAk chcete získať prístup alebo pridať obsah, musíte tento trezor odomknúť. Prípadne ju môžete odomknúť kedykoľvek neskôr.
addvaultwizard.success.unlockNow=Odomknúť teraz
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title=Vyberte súbor s hlavným kľúčom "%s"
unlock.chooseMasterkey.prompt=Nemožno nájsť hlavný kľúčový súbor pre tento trezor na jeho očakávanom mieste. Prosím zvoľte kľúčový súbor manuálne.
unlock.chooseMasterkey.chooseBtn=Vybrať…
unlock.chooseMasterkey.filePickerTitle=Zvoľte hlavný kľúčový súbor
unlock.chooseMasterkey.filePickerMimeDesc=Hlavný kľúč Cryptomátora
## Success
unlock.success.message=Odomknutie "%s" úspešné! Váš trezor je už prístupný cez jeho virtuálny disk.
unlock.success.rememberChoice=Zapamätať voľbu, už viac nezobrazovať
@@ -0,0 +1,378 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=Tekeleza
generic.button.back=Rudi
generic.button.cancel=Katisha
generic.button.change=Badilisha
generic.button.close=Futa
generic.button.copy=Nakili
generic.button.copied=Nakiliwa!
generic.button.done=Tayari
generic.button.next=Nyingine
generic.button.print=Chapisha
## Error
generic.error.title=Kosa %s
generic.error.instruction=Lo! Cryptomator haikutarajia hii kutokea. Unaweza kutafuta suluhu zilizopo za kosa hili. Au ikiwa haijaripotiwa bado, jisikie huru kufanya hivyo.
generic.error.hyperlink.lookup=Angalia kosa hili
generic.error.hyperlink.report=Ripoti kosa hili
generic.error.technicalDetails=Maelezo:
# Defaults
defaults.vault.vaultName=Kuba
# Tray Menu
traymenu.showMainWindow=Onyesha
traymenu.showPreferencesWindow=Mapendeleo
traymenu.lockAllVaults=Funga yote
traymenu.quitApplication=Aga
traymenu.vault.unlock=Fungua
traymenu.vault.lock=Funga
traymenu.vault.reveal=Kufunua
# Add Vault Wizard
addvaultwizard.title=Ongeza Kuba
## Welcome
addvaultwizard.welcome.newButton=Unda kuba mpya
addvaultwizard.welcome.existingButton=Fungua Kuba iliyopo
## New
### Name
addvaultwizard.new.nameInstruction=Chagua jina la kuba
addvaultwizard.new.namePrompt=Jina la kuba
### Location
addvaultwizard.new.locationInstruction=Cryptomator inapaswa kuhifadhi wapi mafaili yaliyosimbwa kwa njia fiche za kuba yako?
addvaultwizard.new.locationLabel=Mahali pa kuhifadhi
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Mahali Maalum
addvaultwizard.new.directoryPickerButton=Chagua…
addvaultwizard.new.directoryPickerTitle=Teua Mpangilio orodha
addvaultwizard.new.fileAlreadyExists=Faili au saraka iliyo na jina la kuba tayari ipo
addvaultwizard.new.locationDoesNotExist=Faili au saraka iliyo na jina la kuba tayari ipo
addvaultwizard.new.locationIsNotWritable=Hakuna ufikivu wa kuandika katika njia iliyobainishwa
addvaultwizard.new.locationIsOk=Mahali panapofaa kwa kuba yako
addvaultwizard.new.invalidName=Jina batili la kuba. Tafadhali fikiria jina la kawaida la saraka.
### Password
addvaultwizard.new.createVaultBtn=Unda Kuba
addvaultwizard.new.generateRecoveryKeyChoice=Hutaweza kufikia data yako bila neno la siri lako. Unataka ufunguo wa kurejesha kwa kesi unayopoteza neno lako la siri?
addvaultwizard.new.generateRecoveryKeyChoice.yes=Ndio, tafadhali, salama zaidi kuliko kujuta
addvaultwizard.new.generateRecoveryKeyChoice.no=Hapana asante, sitapoteza neno langu la siri
### Information
addvault.new.readme.storageLocation.fileName=MUHIMU.rtf
addvault.new.readme.storageLocation.1=⚠️ MAFAILI YA KUBA ⚠️
addvault.new.readme.storageLocation.2=Hii ni mahali pa kuhifadhi kuba yako.
addvault.new.readme.storageLocation.3=LA
addvault.new.readme.storageLocation.4=• kubadilisha faili zozote ndani ya saraka hii au
addvault.new.readme.storageLocation.5=• ubandike faili zozote za usimbaji fiche kwenye saraka hii.
addvault.new.readme.storageLocation.6=Ikiwa unataka kusimba faili na kuona maudhui ya kuba, fanya yafuatayo:
addvault.new.readme.storageLocation.7=1. Ongeza kuba hii kwenye Cryptomator.
addvault.new.readme.storageLocation.8=2. Fungua kuba katika Cryptomator.
addvault.new.readme.storageLocation.9=Fungua eneo la ufikiaji kwa kubofya kitufe cha "Reveal".
addvault.new.readme.storageLocation.10=Ikiwa unahitaji msaada, tembelea nyaraka: %s
addvault.new.readme.accessLocation.fileName=KARIBU.rtf
addvault.new.readme.accessLocation.1=🔐️ SAUTI ILIYOSIMBWA KWA NJE FICHE 🔐️
addvault.new.readme.accessLocation.2=Hii ni eneo la ufikiaji wa kuba yako.
addvault.new.readme.accessLocation.3=Faili zozote zilizoongezwa kwenye sauti hii zitasimbwa kwa njia fiche na Cryptomator. Unaweza kufanya kazi juu yake kama kwenye kiendeshi/folda nyingine yoyote. Huu ni mwonekano uliosimbwa tu wa maudhui yake, faili zako zinabaki zimesimbwa kwa njia fiche kwenye diski yako kuu wakati wote.
addvault.new.readme.accessLocation.4=Jisikie huru kuondoa faili hii.
## Existing
addvaultwizard.existing.instruction=Chagua faili ya "vault.cryptomator" ya kuba yako iliyopo. Ikiwa faili tu inayoitwa "masterkey.cryptomator" ipo, chagua hiyo badala yake.
addvaultwizard.existing.chooseBtn=Chagua…
addvaultwizard.existing.filePickerTitle=Teua Faili ya Kuba
## Success
addvaultwizard.success.nextStepsInstructions=Kuba iliyoongezwa "%s".\n Unahitaji kufungua kuba hii ili kufikia au kuongeza yaliyomo. Vinginevyo unaweza kuifungua wakati wowote wa baadaye kwa wakati.
addvaultwizard.success.unlockNow=Fungua Sasa
# Remove Vault
removeVault.title=Ondoa Kuba
removeVault.information=Hii itafanya tu Cryptomator kusahau kuhusu kuba hii. Unaweza kuiongeza tena baadaye. Hakuna faili zilizosimbwa kwa njia fiche zitafutwa kutoka kwenye diski yako kuu.
removeVault.confirmBtn=Ondoa Kuba
# Change Password
changepassword.title=Badilisha Neno la siri
changepassword.enterOldPassword=Ingiza neno la siri la sasa ya "%s"
changepassword.finalConfirmation=Ninaelewa kuwa sitaweza kufikia data yangu ikiwa nitasahau nenosiri langu
# Forget Password
forgetPassword.title=Sahau Neno la siri
forgetPassword.information=Hii itafuta neno la siri iliyohifadhiwa ya kuba hii kutoka kwa kitufe cha mfumo wako.
forgetPassword.confirmBtn=Sahau Neno la siri
# Unlock
unlock.title=Fungua "%s"
unlock.passwordPrompt=Weka neno la siri ya "%s":
unlock.savePassword=Kumbuka neno la siri
unlock.unlockBtn=Fungua
## Select
unlock.chooseMasterkey.title=Chagua Masterkey ya "%s"
unlock.chooseMasterkey.prompt=Haikuweza kupata faili kuu ya kuba hii katika mahali pake palipotarajiwa. Tafadhali chagua faili muhimu kwa mikono.
unlock.chooseMasterkey.chooseBtn=Chagua…
unlock.chooseMasterkey.filePickerTitle=Teua Faili ya Masterkey
## Success
unlock.success.message=Imefunguliwa "%s" kwa mafanikio! Kuba yako sasa inapatikana kupitia kiendeshi chake cha kawaida.
unlock.success.rememberChoice=Kumbuka chaguo, usionyeshe hii tena
unlock.success.revealBtn=Fichua Kiendeshaji
## Failure
unlock.error.heading=Haiwezi kufungua kuba
### Invalid Mount Point
unlock.error.invalidMountPoint.notExisting=Sehemu ya mlima "%s" sio saraka, sio tupu au haipo.
unlock.error.invalidMountPoint.existing=Sehemu ya mlima "%s" tayari ipo au folda kuu haipo.
unlock.error.invalidMountPoint.driveLetterOccupied=Barua ya Hifadhi "%s" tayari inatumika.
# Lock
## Force
lock.forced.heading=Funga imeshindikana
lock.forced.message=Kufunga "%s" kulizuiwa na shughuli zinazosubiri au kufungua mafaili. Unaweza kulazimisha kufunga kuba hii, hata hivyo kukatiza I/O kunaweza kusababisha upotezaji wa data isiyohifadhiwa.
lock.forced.retryBtn=Jaribu tena
lock.forced.forceBtn=Lazimisha Kufunga
## Failure
lock.fail.heading=Kufunga kuba kumeshindikana.
lock.fail.message=Kuba "%s" haikuweza kufungwa. Hakikisha kazi isiyohifadhiwa imehifadhiwa mahali pengine na shughuli muhimu za Kusoma/Kuandika zimekamilika. Ili kufunga kuba, kuua mchakato wa Cryptomator.
# Migration
migration.title=Pandisha daraja Kuba
## Start
migration.start.prompt=Kuba yako "%s" inahitaji kusasishwa hadi umbizo jipya zaidi. Kabla ya kuendelea, hakikisha hakuna ulandanishi unaosubiri unaoathiri kuba hii.
migration.start.confirm=Ndio, kuba yangu imesawazishwa kikamilifu
## Run
migration.run.enterPassword=Ingiza neno la siri ya "%s"
migration.run.startMigrationBtn=Hamisha Kuba
migration.run.progressHint=Hii inaweza kuchukua muda…
## Success
migration.success.nextStepsInstructions=Kuhamia "%s" kwa mafanikio.\nSasa unaweza kufungua kuba yako.
migration.success.unlockNow=Fungua Sasa
## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Mfumo wa Faili Usiotegemezwa
migration.error.missingFileSystemCapabilities.description=Uhamiaji haukuanzishwa, kwa sababu kuba yako iko kwenye mfumo duni wa faili.
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=Mfumo wa faili hautegemezi majina marefu ya faili.
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Mfumo wa faili hautegemezi njia ndefu.
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Mfumo wa faili hauruhusu kusomwa.
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Mfumo wa faili hauruhusu kuandikwa.
## Impossible
migration.impossible.heading=Haiwezi kuhamisha kuba
migration.impossible.reason=Kuba haiwezi kuhamishwa kiotomatiki kwa sababu mahali pake pa kuhifadhi au mahali pa ufikivu havioani.
migration.impossible.moreInfo=Kuba bado inaweza kufunguliwa na toleo la zamani. Kwa maagizo juu ya jinsi ya kuhamisha kuba kwa mikono, tembelea
# Health Check
## Start
health.title=Uchunguzi wa afya wa "%s"
health.intro.header=Uchunguzi wa afya
health.intro.text=Ukaguzi wa afya ni mkusanyiko wa hundi ili kugundua na uwezekano wa kurekebisha matatizo katika muundo wa ndani wa vault yako. Tafadhali kumbuka:
health.intro.remarkSync=Hakikisha vifaa vyote vimesawazishwa kabisa, hii inatatua matatizo mengi.
health.intro.remarkFix=Sio matatizo yote yanaweza kutatuliwa.
health.intro.remarkBackup=Ikiwa data imeharibika, chelezo tu inaweza kusaidia.
health.intro.affirmation=Nimesoma na kuelewa habari hapo juu
## Start Failure
health.fail.header=Kosa la kupakia Usanidi wa Kuba
health.fail.ioError=Kosa limetokea wakati wa kufikia na kusoma faili ya usanidi.
health.fail.parseError=Kosa limetokea wakati wa kupambanua usanidi wa kuba.
health.fail.moreInfo=Maelezo Zaidi
## Check Selection
health.checkList.description=Chagua hundi katika orodha ya kushoto au tumia vitufe hapa chini.
health.checkList.selectAllButton=Teua Ukaguzi Wote
health.checkList.deselectAllButton=Ondoa Ukaguzi Wote
health.check.runBatchBtn=Endesha Ukaguzi Ulioteuliwa
## Detail view
health.check.detail.noSelectedCheck=Kwa matokeo chagua ukaguzi wa afya uliomalizika katika orodha ya kushoto.
health.check.detail.checkScheduled=Ukaguzi umepangwa.
health.check.detail.checkRunning=Ukaguzi unaendelea kwa sasa…
health.check.detail.checkSkipped=Ukaguzi haukuteuliwa kuendesha.
health.check.detail.checkFinished=Ukaguzi umekamilika kwa ufanisi.
health.check.detail.checkFinishedAndFound=Ukaguzi ulimaliza kukimbia. Tafadhali angalia matokeo.
health.check.detail.checkFailed=Ukaguzi ulitoka kwa sababu ya kosa.
health.check.detail.checkCancelled=Ukaguzi ulikatishwa.
health.check.exportBtn=Hamisha Ripoti
## Fix Application
health.fix.fixBtn=Kurekebisha
health.fix.successTip=Rekebisha imefanikiwa
health.fix.failTip=Rekebisha imeshindwa, angalia logi kwa maelezo
# Preferences
preferences.title=Mapendeleo
## General
preferences.general=Jumla
preferences.general.startHidden=Ficha dirisha wakati wa kuanza Cryptomator
preferences.general.debugLogging=Wezesha utatuzi wa ufunguaji
preferences.general.debugDirectory=Fichua faili za logi
preferences.general.autoStart=Zindua Cryptomator kwenye kuanza kwa mfumo
preferences.general.keychainBackend=Hifadhi neno la siri na
## Interface
preferences.interface.theme=Angalia & Jisikie
preferences.interface.theme.automatic=Otomatiki
preferences.interface.theme.dark=Giza
preferences.interface.theme.light=Mwanga
preferences.interface.unlockThemes=Fungua hali ya giza
preferences.interface.language=Lugha (inahitaji kuanzisha upya)
preferences.interface.language.auto=Chaguo-msingi la Mfumo
preferences.interface.interfaceOrientation=Mwelekeo wa Kiolesura
preferences.interface.interfaceOrientation.ltr=Kushoto kwenda Kulia
preferences.interface.interfaceOrientation.rtl=Kulia hadi Kushoto
preferences.interface.showMinimizeButton=Onyesha kitufe cha kupunguza
preferences.interface.showTrayIcon=Onyesha ikoni ya trei (inahitaji kuanzisha upya)
## Volume
preferences.volume=Kiendeshi pepe
preferences.volume.type=Aina ya Sauti
preferences.volume.webdav.port=Kituo tarishi cha WebDAV
preferences.volume.webdav.scheme=Mpango wa WebDAV
## Updates
preferences.updates=Sasishi
preferences.updates.currentVersion=Toleo la Sasa: %s
preferences.updates.autoUpdateCheck=Kagua sasishi otomatiki
preferences.updates.checkNowBtn=Angalia Sasa
preferences.updates.updateAvailable=Sasisha hadi toleo %s inapatikana.
## Contribution
preferences.contribute=Tusaidie
preferences.contribute.registeredFor=Cheti cha kiungaji mkono kimesajiliwa kwa %s
preferences.contribute.noCertificate=Msaada Cryptomator na kupokea cheti cha msaidizi. Ni kama ufunguo wa leseni lakini kwa watu wa kushangaza wanaotumia programu ya bure. ;-)
preferences.contribute.getCertificate=Je, si kuwa na moja tayari? Jifunze jinsi unaweza kupata.
preferences.contribute.promptText=Bandika msimbo wa cheti cha msaidizi hapa
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
preferences.about=Kuhusu
# Vault Statistics
stats.title=Takwimu za %s
stats.cacheHitRate=Kiwango cha Hit ya Akiba
## Read
stats.read.throughput.idle=Soma: bila kazi
stats.read.throughput.kibs=Soma:%.2f kiB/s
stats.read.throughput.mibs=Soma:%.2fMiB/s
stats.read.total.data.none=Data soma: -
stats.read.total.data.kib=Data soma:%.1f kiB
stats.read.total.data.mib=Data soma: %.1f MiB
stats.read.total.data.gib=Data soma: %.1f GiB
stats.decr.total.data.none=Data iliyosimbwa kwa njia fiche: -
stats.decr.total.data.kib=Data iliyosimbwa kwa njia fiche: %.1f kiB
stats.decr.total.data.mib=Data iliyosimbwa kwa njia fiche: %.1fMiB
stats.decr.total.data.gib=Data iliyosimbwa kwa njia fiche: %.1f GiB
stats.read.accessCount=Jumla ya kusoma: %d
## Write
stats.write.throughput.idle=Andika: bila kazi
stats.write.throughput.kibs=Andika:%.2f kiB/s
stats.write.throughput.mibs=Andika: %.2f MiB/s
stats.write.total.data.none=Data iliyoandikwa: -
stats.write.total.data.kib=Data iliyoandikwa: %.1f kiB
stats.write.total.data.mib=Data iliyoandikwa: %.1f MiB
stats.write.total.data.gib=Data iliyoandikwa: %.1f GiB
stats.encr.total.data.none=Data iliyosimbwa kwa njia fiche: -
stats.encr.total.data.kib=Data iliyosimbwa kwa njia fiche: %.1f kiB
stats.encr.total.data.mib=Data iliyosimbwa kwa njia fiche: %.1f MiB
stats.encr.total.data.gib=Data iliyosimbwa kwa njia fiche: %.1f GiB
stats.write.accessCount=Jumla ya maandishi anaandika: %d
# Main Window
main.closeBtn.tooltip=Futa
main.minimizeBtn.tooltip=Kupunguza
main.preferencesBtn.tooltip=Mapendeleo
main.debugModeEnabled.tooltip=Hali ya utatuzi imewezeshwa
main.supporterCertificateMissing.tooltip=Tafadhali fikiria kuchangia
## Drag 'n' Drop
main.dropZone.dropVault=Ongeza kuba hii
main.dropZone.unknownDragboardContent=Ikiwa unataka kuongeza kuba, iburute kwenye dirisha hili
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Bofya hapa ili kuongeza kuba
main.vaultlist.contextMenu.remove=Ondoa…
main.vaultlist.contextMenu.lock=Funga
main.vaultlist.contextMenu.unlock=Fungua…
main.vaultlist.contextMenu.unlockNow=Fungua Sasa
main.vaultlist.contextMenu.vaultoptions=Onyesha Machaguo ya Kuba
main.vaultlist.contextMenu.reveal=Fichua Kiendeshaji
main.vaultlist.addVaultBtn=Ongeza Kuba
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Shukrani kwa kuchagua Cryptomator kulinda faili zako. Ikiwa unahitaji msaada wowote, angalia miongozo yetu ya kuanza:
### Locked
main.vaultDetail.lockedStatus=IMEFUNGWA
main.vaultDetail.unlockBtn=Fungua…
main.vaultDetail.unlockNowBtn=Fungua Sasa
main.vaultDetail.optionsBtn=Machaguo ya Kuba
main.vaultDetail.passwordSavedInKeychain=Neno la siri limehifadhiwa
### Unlocked
main.vaultDetail.unlockedStatus=IMEFUNGULIWA
main.vaultDetail.accessLocation=Yaliyomo kwenye kuba yako yanapatikana hapa:
main.vaultDetail.revealBtn=Fichua Kiendeshaji
main.vaultDetail.lockBtn=Funga
main.vaultDetail.bytesPerSecondRead=Soma:
main.vaultDetail.bytesPerSecondWritten=Andika:
main.vaultDetail.throughput.idle=imezubaa
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Takwimu za Kuba
### Missing
main.vaultDetail.missing.info=Cryptomator haikuweza kupata kuba katika njia hii.
main.vaultDetail.missing.recheck=Kagua upya
main.vaultDetail.missing.remove=Ondoa kutoka kwenye Orodha ya Kuba…
main.vaultDetail.missing.changeLocation=Badilisha Mahali pa Kuba…
### Needs Migration
main.vaultDetail.migrateButton=Pandisha daraja Kuba
main.vaultDetail.migratePrompt=Kuba yako inahitaji kuboreshwa hadi umbizo jipya, kabla ya kuipata
### Error
main.vaultDetail.error.info=Kosa limetokea kupakia kuba kutoka kwenye diski.
main.vaultDetail.error.reload=Upya
main.vaultDetail.error.windowTitle=Kosa la kupakia kuba
# Wrong File Alert
wrongFileAlert.title=Jinsi ya Kusimba Faili
wrongFileAlert.header.title=Ulijaribu kusimba faili hizi?
wrongFileAlert.header.lead=Kwa kusudi hili, Cryptomator hutoa sauti katika meneja wako wa faili ya mfumo.
wrongFileAlert.instruction.0=Ili kusimba faili, fuata hatua hizi:
wrongFileAlert.instruction.1=1. Fungua kuba yako.
wrongFileAlert.instruction.2=2. Bonyeza "Reveal" ili kufungua sauti katika kidhibiti faili chako.
wrongFileAlert.instruction.3=3. Ongeza faili zako kwenye sauti hii.
wrongFileAlert.link=Kwa msaada zaidi, tembelea
# Vault Options
## General
vaultOptions.general=Jumla
vaultOptions.general.vaultName=Jina la kuba
vaultOptions.general.autoLock.lockAfterTimePart1=Funga wakati haina kazi kwa
vaultOptions.general.autoLock.lockAfterTimePart2=dakika
vaultOptions.general.unlockAfterStartup=Fungua kuba wakati wa kuanza Cryptomator
vaultOptions.general.actionAfterUnlock=Baada ya kufungua mafanikio
vaultOptions.general.actionAfterUnlock.ignore=Usifanye chochote
vaultOptions.general.actionAfterUnlock.reveal=Fichua Kiendeshaji
vaultOptions.general.actionAfterUnlock.ask=Uliza
vaultOptions.general.startHealthCheckBtn=Anza Ukaguzi wa Afya
## Mount
vaultOptions.mount.readonly=Soma-Tu
vaultOptions.mount.customMountFlags=Vipepea Vya Mlima Maalum
vaultOptions.mount.winDriveLetterOccupied=ulichukua
vaultOptions.mount.mountPoint.auto=Chagua otomatiki mahali panapofaa
vaultOptions.mount.mountPoint.driveLetter=Tumia barua kiendeshi kilichopangiwa
vaultOptions.mount.mountPoint.custom=Kijia maalum
vaultOptions.mount.mountPoint.directoryPickerButton=Chagua…
vaultOptions.mount.mountPoint.directoryPickerTitle=Chagua mpangilio orodha tupu
## Master Key
vaultOptions.masterkey=Neno la siri
vaultOptions.masterkey.changePasswordBtn=Badilisha Neno la siri
vaultOptions.masterkey.forgetSavedPasswordBtn=Kusahau Neno la siri Iliyohifadhiwa
vaultOptions.masterkey.recoveryKeyExplanation=Ufunguo wa kurejesha ni njia yako pekee ya kurejesha ufikiaji wa kuba ikiwa utapoteza nenosiri lako.
vaultOptions.masterkey.showRecoveryKeyBtn=Onyesha Ufunguo wa Ufufuzi
vaultOptions.masterkey.recoverPasswordBtn=Fufua Neno la siri
# Recovery Key
recoveryKey.title=Ufunguo wa Ufufuzi
recoveryKey.enterPassword.prompt=Ingiza neno la siri lako ili kuonyesha ufunguo wa kurejesha kwa "%s":
recoveryKey.display.message=Ufunguo ufuatao wa kurejesha unaweza kutumika kurejesha ufikiaji wa "%s":
recoveryKey.display.StorageHints=Weka mahali salama sana, kwa mfano:\n • Hifadhi kwa kutumia msimamizi wa nywila\n • Hifadhi kwenye kiendeshi cha USB flash\n • Chapisha kwenye karatasi
recoveryKey.recover.prompt=Ingiza ufunguo wako wa kurejesha kwa "%s":
recoveryKey.recover.validKey=Hii ni ufunguo halali wa kurejesha
recoveryKey.printout.heading=Ufunguo wa Urejeshaji wa Cryptomator\n"%s"\n
# New Password
newPassword.promptText=Ingiza neno jipya la siri
newPassword.reenterPassword=Thibitisha neno la siri jipya
newPassword.passwordsMatch=Maneno ya siri yanaoana!
newPassword.passwordsDoNotMatch=Maneno ya siri hayaoani
passwordStrength.messageLabel.tooShort=Tumia angalau %d vibambo
passwordStrength.messageLabel.0=Dhaifu sana
passwordStrength.messageLabel.1=Dhaifu
passwordStrength.messageLabel.2=Haki
passwordStrength.messageLabel.3=Imara
passwordStrength.messageLabel.4=Imara sana
# Quit
quit.prompt=Acha maombi? Kuna kuba zilizofunguliwa.
quit.lockAndQuit=Funga na Acha
@@ -126,6 +126,7 @@ preferences.title=การตั้งค่า
# Main Window
main.closeBtn.tooltip=ปิด
main.preferencesBtn.tooltip=การตั้งค่า
main.supporterCertificateMissing.tooltip=โปรดพิจารณาเงินบริจาค
## Drag 'n' Drop
## Vault List
main.vaultlist.contextMenu.lock=ล็อก
@@ -78,6 +78,7 @@ addvault.new.readme.accessLocation.4=Bu dosyayı silmeye çekinmeyin.
addvaultwizard.existing.instruction=Mevcut kasanızın "vault.cryptomator" dosyasını seçin. Yalnızca "masterkey.cryptomator" adlı bir dosya varsa, bunun yerine onu seçin.
addvaultwizard.existing.chooseBtn=Seç…
addvaultwizard.existing.filePickerTitle=Kasa Dosyasını Seçin
addvaultwizard.existing.filePickerMimeDesc=Cryptomator Kasası
## 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ç
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title="%s" ait Ana anahtarı seçin
unlock.chooseMasterkey.prompt=Bu kasa için masterkey dosyası beklenen konumda bulunamadı. Lütfen anahtar dosyasını manuel olarak seçin.
unlock.chooseMasterkey.chooseBtn=Seç…
unlock.chooseMasterkey.filePickerTitle=Masterkey Dosyasını Seç
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Ana anahtarı
## Success
unlock.success.message="%s" 'nin kilidi başarıyla açıldı! Kasanız şimdi sanal sürücüsü ile erişilebilir durumda.
unlock.success.rememberChoice=Seçimi hatırla, bunu bir daha gösterme
@@ -78,6 +78,7 @@ addvault.new.readme.accessLocation.4=您可以随时删除此文件。
addvaultwizard.existing.instruction=请选择现有保险库中的“vault.cryptomator”文件。如果只有一个名为“masterkey.cryptomator”的文件,则改为选择该文件。
addvaultwizard.existing.chooseBtn=选择...
addvaultwizard.existing.filePickerTitle=请选择保险库对应文件
addvaultwizard.existing.filePickerMimeDesc=Cryptomator 保险库
## Success
addvaultwizard.success.nextStepsInstructions=已添加保险库 "%s"\n您需要先解锁此保险库才能访问或添加内容。或者您可以在稍后任何时候再解锁它
addvaultwizard.success.unlockNow=立即解锁
@@ -107,6 +108,7 @@ unlock.chooseMasterkey.title=选择 %s 的 Masterkey 文件
unlock.chooseMasterkey.prompt=在指定路径找不到该保险库的 masterkey 文件,请手动选择密钥文件
unlock.chooseMasterkey.chooseBtn=选择...
unlock.chooseMasterkey.filePickerTitle=选择 Masterkey 文件
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator 主密钥
## Success
unlock.success.message=已成功解锁 "%s"! 您现在可以通过其虚拟驱动器访问它
unlock.success.rememberChoice=记住选项且不再显示
@@ -196,8 +196,19 @@ preferences.general.debugDirectory=顯示日誌檔
preferences.general.autoStart=系統啟動時同時啟動 Cryptomator
preferences.general.keychainBackend=儲存密碼使用
## Interface
preferences.interface=介面
preferences.interface.theme=配色與設計
preferences.interface.theme.automatic=自動
preferences.interface.theme.dark=暗色
preferences.interface.theme.light=亮色
preferences.interface.unlockThemes=解鎖暗色模式
preferences.interface.language=語言 (需要重新啟動)
preferences.interface.language.auto=系統指定的
preferences.interface.interfaceOrientation=界面排版方向
preferences.interface.interfaceOrientation.ltr=由左至右
preferences.interface.interfaceOrientation.rtl=由右至左
preferences.interface.showMinimizeButton=顯示最小化按鈕
preferences.interface.showTrayIcon=顯示系統工作列圖示 (需要重新啟動)
## Volume
preferences.volume=虛擬磁碟
preferences.volume.type=磁區類型

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 623 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB