~exprez135/cryptomator-libre

ac2dc06bd6f780c94c7adb1644a3d7471e004b8b — Sebastian Stenzel 2 months ago 570286c + 80b83ad 1.5.6
Merge branch 'release/1.5.6'
M main/buildkit/pom.xml => main/buildkit/pom.xml +1 -1
@@ 4,7 4,7 @@
	<parent>
		<groupId>org.cryptomator</groupId>
		<artifactId>main</artifactId>
		<version>1.5.5</version>
		<version>1.5.6</version>
	</parent>
	<artifactId>buildkit</artifactId>
	<packaging>pom</packaging>

M main/commons/pom.xml => main/commons/pom.xml +1 -1
@@ 4,7 4,7 @@
	<parent>
		<groupId>org.cryptomator</groupId>
		<artifactId>main</artifactId>
		<version>1.5.5</version>
		<version>1.5.6</version>
	</parent>
	<artifactId>commons</artifactId>
	<name>Cryptomator Commons</name>

M main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java => main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java +10 -5
@@ 34,9 34,10 @@ public class VaultSettings {
	public static final boolean DEFAULT_USES_INDIVIDUAL_MOUNTPATH = false;
	public static final boolean DEFAULT_USES_READONLY_MODE = false;
	public static final String DEFAULT_MOUNT_FLAGS = "";
	public static final String DEFAULT_MOUNT_NAME = "Vault";
	public static final int DEFAULT_FILENAME_LENGTH_LIMIT = -1;
	public static final WhenUnlocked DEFAULT_ACTION_AFTER_UNLOCK = WhenUnlocked.ASK;
	

	private static final Random RNG = new Random(); 

	private final String id;


@@ 55,16 56,20 @@ public class VaultSettings {
	public VaultSettings(String id) {
		this.id = Objects.requireNonNull(id);

		EasyBind.subscribe(path, this::deriveMountNameFromPath);
		EasyBind.subscribe(path, this::deriveMountNameFromPathOrUseDefault);
	}

	Observable[] observables() {
		return new Observable[]{path, mountName, winDriveLetter, unlockAfterStartup, revealAfterMount, useCustomMountPath, customMountPath, usesReadOnlyMode, mountFlags, filenameLengthLimit, actionAfterUnlock};
	}

	private void deriveMountNameFromPath(Path path) {
		if (path != null && StringUtils.isBlank(mountName.get())) {
			mountName.set(normalizeMountName(path.getFileName().toString()));
	private void deriveMountNameFromPathOrUseDefault(Path path) {
		if (StringUtils.isBlank(mountName.get())) {
			if (path != null && path.getFileName() != null) {
				mountName.set(normalizeMountName(path.getFileName().toString()));
			} else {
				mountName.set(DEFAULT_MOUNT_NAME);
			}
		}
	}


M main/keychain/pom.xml => main/keychain/pom.xml +1 -1
@@ 4,7 4,7 @@
	<parent>
		<groupId>org.cryptomator</groupId>
		<artifactId>main</artifactId>
		<version>1.5.5</version>
		<version>1.5.6</version>
	</parent>
	<artifactId>keychain</artifactId>
	<name>System Keychain Access</name>

M main/launcher/pom.xml => main/launcher/pom.xml +1 -1
@@ 4,7 4,7 @@
	<parent>
		<groupId>org.cryptomator</groupId>
		<artifactId>main</artifactId>
		<version>1.5.5</version>
		<version>1.5.6</version>
	</parent>
	<artifactId>launcher</artifactId>
	<name>Cryptomator Launcher</name>

A main/launcher/src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggerinPolicy.java => main/launcher/src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggerinPolicy.java +30 -0
@@ 0,0 1,30 @@
package org.cryptomator.logging;

import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
import ch.qos.logback.core.rolling.TriggeringPolicyBase;
import ch.qos.logback.core.util.FileSize;

import java.io.File;

/**
 * Triggers a roll-over either on the first log event or if watched log file reaches a certain size
 *
 * @param <E> Event type the policy possibly reacts to
 */
public class LaunchAndSizeBasedTriggerinPolicy<E> extends TriggeringPolicyBase<E> {

	LaunchBasedTriggeringPolicy<E> launchBasedTriggeringPolicy;
	SizeBasedTriggeringPolicy<E> sizeBasedTriggeringPolicy;

	public LaunchAndSizeBasedTriggerinPolicy(FileSize threshold) {
		this.launchBasedTriggeringPolicy = new LaunchBasedTriggeringPolicy<>();
		this.sizeBasedTriggeringPolicy = new SizeBasedTriggeringPolicy<>();
		sizeBasedTriggeringPolicy.setMaxFileSize(threshold);
	}

	@Override
	public boolean isTriggeringEvent(File activeFile, E event) {
		return launchBasedTriggeringPolicy.isTriggeringEvent(activeFile, event) || sizeBasedTriggeringPolicy.isTriggeringEvent(activeFile, event);
	}

}

M main/launcher/src/main/java/org/cryptomator/logging/LoggerModule.java => main/launcher/src/main/java/org/cryptomator/logging/LoggerModule.java +4 -3
@@ 9,10 9,9 @@ import ch.qos.logback.core.Appender;
import ch.qos.logback.core.ConsoleAppender;
import ch.qos.logback.core.FileAppender;
import ch.qos.logback.core.helpers.NOPAppender;
import ch.qos.logback.core.hook.DelayingShutdownHook;
import ch.qos.logback.core.rolling.FixedWindowRollingPolicy;
import ch.qos.logback.core.rolling.RollingFileAppender;
import ch.qos.logback.core.util.Duration;
import ch.qos.logback.core.util.FileSize;
import dagger.Module;
import dagger.Provides;
import org.cryptomator.common.Environment;


@@ 33,6 32,8 @@ public class LoggerModule {
	private static final int LOGFILE_ROLLING_MIN = 1;
	private static final int LOGFILE_ROLLING_MAX = 9;
	private static final String LOG_PATTERN = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n";
	private static final String LOG_MAX_SIZE = "100mb";

	static final Map<String, Level> DEFAULT_LOG_LEVELS = Map.of( //
			Logger.ROOT_LOGGER_NAME, Level.INFO, //
			"org.cryptomator", Level.INFO //


@@ 84,7 85,7 @@ public class LoggerModule {
			appender.setContext(context);
			appender.setFile(logDir.resolve(LOGFILE_NAME).toString());
			appender.setEncoder(encoder);
			LaunchBasedTriggeringPolicy triggeringPolicy = new LaunchBasedTriggeringPolicy();
			LaunchAndSizeBasedTriggerinPolicy triggeringPolicy = new LaunchAndSizeBasedTriggerinPolicy(FileSize.valueOf(LOG_MAX_SIZE));
			triggeringPolicy.setContext(context);
			triggeringPolicy.start();
			appender.setTriggeringPolicy(triggeringPolicy);

M main/pom.xml => main/pom.xml +7 -7
@@ 3,7 3,7 @@
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.cryptomator</groupId>
	<artifactId>main</artifactId>
	<version>1.5.5</version>
	<version>1.5.6</version>
	<packaging>pom</packaging>
	<name>Cryptomator</name>



@@ 24,7 24,7 @@
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

		<!-- cryptomator dependencies -->
		<cryptomator.cryptofs.version>1.9.11</cryptomator.cryptofs.version>
		<cryptomator.cryptofs.version>1.9.12</cryptomator.cryptofs.version>
		<cryptomator.jni.version>2.2.2</cryptomator.jni.version>
		<cryptomator.fuse.version>1.2.3</cryptomator.fuse.version>
		<cryptomator.dokany.version>1.1.15</cryptomator.dokany.version>


@@ 32,18 32,18 @@

		<!-- 3rd party dependencies -->
		<javafx.version>14</javafx.version>
		<commons-lang3.version>3.9</commons-lang3.version>
		<commons-lang3.version>3.10</commons-lang3.version>
		<secret-service.version>1.0.0</secret-service.version>
		<jwt.version>3.10.2</jwt.version>
		<jwt.version>3.10.3</jwt.version>
		<easybind.version>1.0.3</easybind.version>
		<guava.version>28.2-jre</guava.version>
		<dagger.version>2.27</dagger.version>
		<guava.version>29.0-jre</guava.version>
		<dagger.version>2.22</dagger.version>
		<gson.version>2.8.6</gson.version>
		<slf4j.version>1.7.30</slf4j.version>
		<logback.version>1.2.3</logback.version>

		<!-- test dependencies -->
		<junit.jupiter.version>5.6.1</junit.jupiter.version>
		<junit.jupiter.version>5.6.2</junit.jupiter.version>
		<mockito.version>3.3.3</mockito.version>
		<hamcrest.version>2.2</hamcrest.version>
	</properties>

M main/ui/pom.xml => main/ui/pom.xml +1 -1
@@ 4,7 4,7 @@
	<parent>
		<groupId>org.cryptomator</groupId>
		<artifactId>main</artifactId>
		<version>1.5.5</version>
		<version>1.5.6</version>
	</parent>
	<artifactId>ui</artifactId>
	<name>Cryptomator GUI</name>

A main/ui/src/main/java/org/cryptomator/ui/common/WeakBindings.java => main/ui/src/main/java/org/cryptomator/ui/common/WeakBindings.java +32 -0
@@ 0,0 1,32 @@
package org.cryptomator.ui.common;

import javafx.beans.binding.StringBinding;
import javafx.beans.value.ObservableObjectValue;


/**
 * Contains a variety of method to create {@link java.util.function.Function#identity() identity}-bindings
 * to facilitate the Weak References used internally in JavaFX's Bindings.
 */
public final class WeakBindings {

	/**
	 * Create a new StringBinding that listens to changes from the given observable without being strongly referenced by it.
	 *
	 * @param observable The observable
	 * @return a StringBinding weakly referenced from the given observable
	 */
	public static StringBinding bindString(ObservableObjectValue<String> observable) {
		return new StringBinding() {
			{
				bind(observable);
			}

			@Override
			protected String computeValue() {
				return observable.get();
			}
		};
	}

}

M main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockController.java => main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockController.java +11 -3
@@ 8,6 8,7 @@ import javafx.animation.Timeline;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
import javafx.beans.binding.ObjectBinding;
import javafx.beans.binding.StringBinding;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ReadOnlyBooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;


@@ 23,6 24,7 @@ import org.cryptomator.common.vaults.Vault;
import org.cryptomator.keychain.KeychainManager;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.UserInteractionLock;
import org.cryptomator.ui.common.WeakBindings;
import org.cryptomator.ui.controls.NiceSecurePasswordField;
import org.cryptomator.ui.forgetPassword.ForgetPasswordComponent;
import org.slf4j.Logger;


@@ 51,7 53,8 @@ public class UnlockController implements FxController {
	private final ObjectBinding<ContentDisplay> unlockButtonContentDisplay;
	private final BooleanBinding userInteractionDisabled;
	private final BooleanProperty unlockButtonDisabled;
	
	private final StringBinding vaultName;

	public NiceSecurePasswordField passwordField;
	public CheckBox savePasswordCheckbox;
	public ImageView face;


@@ 74,6 77,7 @@ public class UnlockController implements FxController {
		this.unlockButtonContentDisplay = Bindings.createObjectBinding(this::getUnlockButtonContentDisplay, passwordEntryLock.awaitingInteraction());
		this.userInteractionDisabled = passwordEntryLock.awaitingInteraction().not();
		this.unlockButtonDisabled = new SimpleBooleanProperty();
		this.vaultName = WeakBindings.bindString(vault.displayableNameProperty());
		this.window.setOnCloseRequest(windowEvent -> cancel());
	}



@@ 177,8 181,12 @@ public class UnlockController implements FxController {

	/* Getter/Setter */

	public Vault getVault() {
		return vault;
	public String getVaultName() {
		return vaultName.get();
	}
	
	public StringBinding vaultNameProperty() {
		return vaultName;
	}

	public ObjectBinding<ContentDisplay> unlockButtonContentDisplayProperty() {

M main/ui/src/main/resources/fxml/unlock.fxml => main/ui/src/main/resources/fxml/unlock.fxml +1 -1
@@ 46,7 46,7 @@
				</ImageView>
			</StackPane>
			<VBox spacing="6" HBox.hgrow="ALWAYS">
				<FormattedLabel format="%unlock.passwordPrompt" arg1="${controller.vault.displayableName}" wrapText="true"/>
				<FormattedLabel format="%unlock.passwordPrompt" arg1="${controller.vaultName}" wrapText="true"/>
				<NiceSecurePasswordField fx:id="passwordField" disable="${controller.userInteractionDisabled}"/>
				<CheckBox fx:id="savePasswordCheckbox" text="%unlock.savePassword" onAction="#didClickSavePasswordCheckbox" disable="${controller.userInteractionDisabled}" visible="${controller.keychainAccessAvailable}"/>
			</VBox>

M main/ui/src/main/resources/i18n/strings_el.properties => main/ui/src/main/resources/i18n/strings_el.properties +196 -0
@@ 2,63 2,259 @@

# Generics
## Button
generic.button.apply=Εφαρμογή
generic.button.back=Πίσω
generic.button.cancel=Ακύρωση
generic.button.change=Αλλαγή
generic.button.close=Κλείσιμο
generic.button.copy=Αντιγραφή
generic.button.copied=Αντιγράφηκε!
generic.button.done=Κλείσιμο
generic.button.next=Επόμενο
generic.button.print=Εκτύπωση
## Error
generic.error.title=Παρουσιάστηκε ένα απροσδόκητο σφάλμα
generic.error.instruction=Αυτό δεν έπρεπε να συμβεί. Παρακαλώ αντιγράψτε το κείμενο του σφάλματος και επισυνάψτε μια περιγραφή των βημάτων που οδήγησαν σε αυτό το σφάλμα.

# Tray Menu
traymenu.showMainWindow=Εμφάνιση
traymenu.showPreferencesWindow=Προτιμήσεις
traymenu.lockAllVaults=Κλείδωμα όλων
traymenu.quitApplication=Έξοδος
traymenu.vault.unlock=Ξεκλείδωμα
traymenu.vault.lock=Κλείδωμα
traymenu.vault.reveal=Αποκάλυψη

# Add Vault Wizard
addvaultwizard.title=Προσθήκη Vault
## Welcome
addvaultwizard.welcome.newButton=Δημιουργία νέου Vault
addvaultwizard.welcome.existingButton=Άνοιγμα υπάρχοντος Vault
## New
### Name
addvaultwizard.new.nameInstruction=Διαλέξτε ένα όνομα για το vault
addvaultwizard.new.namePrompt=Όνομα Vault
### Location
addvaultwizard.new.locationInstruction=Που θα αποθηκεύσει το Cryptomator τα κωδικοποιημένα αρχεία του vault σου;
addvaultwizard.new.locationLabel=Θέση αποθήκευσης
addvaultwizard.new.locationPrompt=…
addvaultwizard.new.directoryPickerLabel=Προσαρμοσμένη τοποθεσία
addvaultwizard.new.directoryPickerButton=Επιλογή
addvaultwizard.new.directoryPickerTitle=Επιλογή φακέλου
addvaultwizard.new.fileAlreadyExists=Το vault δεν μπορεί να δημιουργηθεί σε αυτό το μονοπάτι καθώς κάποια αντικείμενα υπάρχουν ήδη.
addvaultwizard.new.locationDoesNotExist=Το vault δεν μπορεί να δημιουργηθεί σε αυτό το μονοπάτι καθώς τουλάχιστον ένα στοιχείο του μονοπατιού δεν υπάρχει.
addvaultwizard.new.invalidName=Λάθος όνομα vault. Παρακαλώ χρησιμοποιείστε ένα κανονικό όνομα φακέλου.
### Password
addvaultwizard.new.createVaultBtn=Δημιουργία Vault
addvaultwizard.new.generateRecoveryKeyChoice=Δεν θα μπορείτε να έχετε πρόσβαση στα δεδομένα σας χωρίς τον κωδικό σας. Θέλετε να δημιουργηθεί ένα κλειδί ανάκτησης στην περίπτωση που χάσετε τον κωδικό σας;
addvaultwizard.new.generateRecoveryKeyChoice.yes=Ναι παρακαλώ, καλύτερα ασφαλής παρά λυπημένος
addvaultwizard.new.generateRecoveryKeyChoice.no=Όχι ευχαριστώ, δεν θα χάσω τον κωδικό μου
### Information
addvault.new.readme.storageLocation.fileName=ΣΗΜΑΝΤΙΚΟ.rtf
addvault.new.readme.storageLocation.1=ΑΡΧΕΙΑ VAULT
addvault.new.readme.storageLocation.2=Αυτή είναι η τοποθεσία του vault σας.
addvault.new.readme.storageLocation.3=ΜΗΝ
addvault.new.readme.storageLocation.4=αλλάξετε οποιοδήποτε αρχείο σε αυτό το φάκελο ή
addvault.new.readme.storageLocation.5=επικολλήσετε οποιοδήποτε αρχείο για κωδικοποίηση σε αυτό το φάκελο.
addvault.new.readme.storageLocation.6=Αν επιθυμείτε να κωδικοποιήσετε αρχεία και να δείτε το περιεχόμενο του vault, κάντε τα παρακάτω:
addvault.new.readme.storageLocation.7=1. Προσθέστε αυτό το vault στο Cryptomator.
addvault.new.readme.storageLocation.8=2. Ξεκλειδώστε το vault στο Cryptomator.
addvault.new.readme.storageLocation.9=3. Ανοίξτε την τοποθεσία κάνοντας κλικ στο κουμπί "Αποκάλυψη".
addvault.new.readme.storageLocation.10=Αν χρειάζεστε βοήθεια, συμβουλευτείτε το εγχειρίδιο: %s
addvault.new.readme.accessLocation.fileName=ΚΑΛΩΣΗΡΘΑΤΕ.rtf
addvault.new.readme.accessLocation.1=ΚΩΔΙΚΟΠΟΙΗΜΕΝΟΣ ΤΟΜΟΣ
addvault.new.readme.accessLocation.2=Αυτή είναι η τοποθεσία του vault σας.
addvault.new.readme.accessLocation.3=Κάθε αρχείο που θα προστεθεί σε αυτό τον τόμο θα κωδικοποιηθεί από το Cryptomator. Μπορείτε να το επεξεργαστείτε όπως θα κάνατε σε κάθε δίσκο/φάκελο. Αυτή είναι μόνο για αποκρυπτογραφημένη μορφή των περιεχομένων του, τα αρχεία σας μένουν κωδικοποιημένα στον σκληρό σας δίσκο συνέχεια.
addvault.new.readme.accessLocation.4=Μπορείτε ελεύθερα να αφαιρέσετε το αρχείο.
## Existing
addvaultwizard.existing.instruction=Επιλέξτε το αρχείο "masterkey.cryptomator" του υπάρχοντος vault σας.
addvaultwizard.existing.chooseBtn=Επιλογή
addvaultwizard.existing.filePickerTitle=Επιλέξτε το αρχείο Masterkey
## Success
addvaultwizard.success.nextStepsInstructions=Προστέθηκε το vault "%s".\nΠρέπει να ξεκλειδώσετε αυτό το vault για να έχετε πρόσβαση ή να προσθέσετε περιεχόμενο. Εναλλακτικά μπορείτε να το ξεκλειδώσετε κάποια άλλη στιγμή.
addvaultwizard.success.unlockNow=Ξεκλείδωμα τώρα

# Remove Vault
removeVault.title=Διαγραφή Vault
removeVault.information=Το Cryptomator θα ξεχάσει αυτό το vault. Μπορείτε να το προσθέσετε ξανά αργότερα. Δεν θα διαγραφούν τα κωδικοποιημένα αρχεία σας από τον σκληρό σας δίσκο.
removeVault.confirmBtn=Διαγραφή Vault

# Change Password
changepassword.title=Αλλαγή κωδικού πρόσβασης
changepassword.enterOldPassword=Εισάγετε τον τωρινό κωδικό για "%s"
changepassword.finalConfirmation=Κατανοώ πως δεν θα μπορώ να έχω πρόσβαση στα δεδομένα μου αν ξεχάσω τον κωδικό μου

# Forget Password
forgetPassword.title=Ξέχασα τον κωδικό πρόσβασης
forgetPassword.information=Ο αποθηκευμένος κωδικός αυτού του vault θα διαγραφεί από το σύστημα σας.
forgetPassword.confirmBtn=Ξέχασα τον κωδικό πρόσβασης

# Unlock
unlock.title=Ξεκλείδωμα Vault
unlock.passwordPrompt=Εισάγετε τον κωδικό για "%s":
unlock.savePassword=Αποθήκευση κωδικού
unlock.unlockBtn=Ξεκλείδωμα
## Success
unlock.success.message="%s" ξεκλειδώθηκε επιτυχώς! Το vault σας είναι διαθέσιμο.
unlock.success.rememberChoice=Απομνημόνευση επιλογής, μην ρωτήσεις ξανά
unlock.success.revealBtn=Αποκάλυψη Vault
## Invalid Mount Point
unlock.error.invalidMountPoint=Το σημείο προσάρτησης δεν είναι κενός φάκελος: %s

# Migration
migration.title=Αναβάθμιση Vault
## Start
migration.start.prompt=Το vault "%s" πρέπει να αναβαθμιστεί σε νεότερο format. Προτού προχωρήσετε, σιγουρευτείτε πως δεν εκτελούνται εργασίες συγχρονισμού που μπορεί να επηρεάσουν το vault.
migration.start.confirm=Ναι, το vault μου είναι πλήρως συγχρονισμένο
## Run
migration.run.enterPassword=Εισάγετε τον κωδικό για "%s"
migration.run.startMigrationBtn=Ενσωμάτωση Vault
migration.run.progressHint=Αυτό θα πάρει αρκετό χρόνο…
## Sucess
migration.success.nextStepsInstructions="%s" συγχωνεύτηκε επιτυχώς.\nΜπορείτε να ξεκλειδώσετε το vault σας.
migration.success.unlockNow=Ξεκλείδωμα τώρα
## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Μη υποστηριζόμενο σύστημα αρχείων
migration.error.missingFileSystemCapabilities.description=Η ενσωμάτωση δεν ξεκίνησε, γιατί το vault σας βρίσκετε σε σύστημα αρχείων που δεν υποστηρίζεται.
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=Το σύστημα αρχείων δεν υποστηρίζει μεγάλα ονόματα αρχείων.
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Το σύστημα αρχείων δεν υποστηρίζει μεγάλες διαδρομές φακέλων.
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Το σύστημα αρχείων δεν δίνει πρόσβαση ανάγνωσης.
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Το σύστημα αρχείων δεν δίνει πρόσβαση εγγραφής.
## Impossible
migration.impossible.heading=Αδυναμία συγχώνευσης vault
migration.impossible.reason=Το vault δεν μπορεί να συγχωνευθεί αυτόματα επειδή η τοποθεσία που είναι αποθηκευμένο ή το σημείο προσάρτησης δεν είναι συμβατό.
migration.impossible.moreInfo=Το vault μπορεί να ανοιχθεί με παλαιότερη έκδοση. Για οδηγίες χειροκίνητης συγχώνευσης του vault, επισκεφτείτε

# Preferences
preferences.title=Προτιμήσεις
## General
preferences.general=Γενικά
preferences.general.theme=Εμφάνιση
preferences.general.theme.light=Ανοιχτό
preferences.general.theme.dark=Σκούρο
preferences.general.unlockThemes=Ξεκλείδωσε το σκούρο θέμα
preferences.general.startHidden=Απόκρυψη παραθύρου όταν ξεκινά το Cryptomator
preferences.general.debugLogging=Ενεργοποίηση καταγραφής σφαλμάτων
preferences.general.debugDirectory=Αποκάλυψη αρχείων καταγραφής
preferences.general.autoStart=Εκκίνηση Cryptomator στην εκκίνηση του συστήματος
preferences.general.interfaceOrientation=Προσανατολισμός εφαρμογής
preferences.general.interfaceOrientation.ltr=Αριστερά προς δεξιά
preferences.general.interfaceOrientation.rtl=Δεξιά προς αριστερά
## Volume
preferences.volume=Εικονικός δίσκος
preferences.volume.type=Τύπος τόμου
preferences.volume.webdav.port=Θύρα WebDAV
preferences.volume.webdav.scheme=Σχήμα WebDAV
## Updates
preferences.updates=Ενημερώσεις
preferences.updates.currentVersion=Τρέχουσα έκδοση: %s
preferences.updates.autoUpdateCheck=Αυτόματος έλεγχος για ενημερώσεις
preferences.updates.checkNowBtn=Έλεγχος τώρα
preferences.updates.updateAvailable=Η ενημέρωση για την έκδοση %s είναι διαθέσιμη.
## Donation Key
preferences.donationKey=Δωρεά
preferences.donationKey.registeredFor=Καταχωρημένο σε %s
preferences.donationKey.noDonationKey=Δεν βρέθηκε ενεργό κλειδί δωρεάς. Είναι σαν κλειδί αγοράς αλλά για απίθανους ανθρώπους που χρησιμοποιούν δωρεάν λογισμικό. ;-)
preferences.donationKey.getDonationKey=Πάρε ένα κλειδί δωρεάς
## About
preferences.about=Σχετικά με

# Main Window
main.closeBtn.tooltip=Κλείσιμο
main.minimizeBtn.tooltip=Ελαχιστοποίηση
main.preferencesBtn.tooltip=Προτιμήσεις
main.donationKeyMissing.tooltip=Παρακαλώ σκεφτείτε τη δωρεά
## Drag 'n' Drop
main.dropZone.dropVault=Προσθήκη vault
main.dropZone.unknownDragboardContent=Αν θέλετε να προσθέσετε ένα vault, σύρτε το σε αυτό το παράθυρο
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Κάντε κλικ εδώ για να προσθέσετε ένα vault
main.vaultlist.contextMenu.remove=Διαγραφή Vault
main.vaultlist.addVaultBtn=Προσθήκη Vault
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Ευχαριστούμε που επιλέξατε το Cryptomator για να προστατεύσετε τα αρχεία σας. Αν χρειάζεστε οποιαδήποτε βοήθεια, ελέγξτε τους οδηγούς για αρχάριους:
### Locked
main.vaultDetail.lockedStatus=ΚΛΕΙΔΩΜΕΝΟ
main.vaultDetail.unlockBtn=Ξεκλείδωμα…
main.vaultDetail.unlockNowBtn=Ξεκλείδωμα τώρα
main.vaultDetail.optionsBtn=Επιλογές vault
main.vaultDetail.passwordSavedInKeychain=Ο κωδικός αποθηκεύτηκε
### Unlocked
main.vaultDetail.unlockedStatus=ΞΕΚΛΕΙΔΩΜΕΝΟ
main.vaultDetail.accessLocation=Τα δεδομένα του vault σας είναι διαθέσιμα εδώ:
main.vaultDetail.revealBtn=Αποκάλυψη εικονικού δίσκου
main.vaultDetail.lockBtn=Κλείδωμα
main.vaultDetail.bytesPerSecondRead=ανάγνωση:
main.vaultDetail.bytesPerSecondWritten=εγγραφή:
main.vaultDetail.throughput.idle=σε αδράνεια
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Missing
main.vaultDetail.missing.info=Cryptomator δεν βρήκε vault σε αυτόν τον κατάλογο.
### Needs Migration
main.vaultDetail.migrateButton=Αναβάθμιση Vault
main.vaultDetail.migratePrompt=Το vault σας πρέπει να αναβαθμιστεί σε νέα μορφή, προτού να έχετε πρόσβαση σε αυτό

# Wrong File Alert
wrongFileAlert.title=Πως να κωδικοποιήσετε αρχεία
wrongFileAlert.header.title=Προσπαθήσατε να κωδικοποιήσετε αυτά τα αρχεία;
wrongFileAlert.header.lead=Για αυτό τον λόγο, το Cryptomator παρέχει ένα εικονικό δίσκο στην εξερεύνηση των αρχείων σας.
wrongFileAlert.instruction.0=Για να κωδικοποιήσετε τα αρχεία, ακολουθείστε αυτά τα βήματα:
wrongFileAlert.instruction.1=1. Ξεκλειδώστε το vault σας.
wrongFileAlert.instruction.2=2. Κάντε κλικ στο "Αποκάλυψη" για να ανοίξετε τον εικονικό δίσκο στην εξερεύνηση αρχείων.
wrongFileAlert.instruction.3=3. Προσθέστε τα αρχεία σας σε αυτό τον δίσκο.
wrongFileAlert.link=Για παραπάνω βοήθεια, επισκεφτείτε

# Vault Options
## General
vaultOptions.general=Γενικά
vaultOptions.general.unlockAfterStartup=Ξεκλείδωμα vault όταν ξεκινά το Cryptomator
vaultOptions.general.actionAfterUnlock=Μετά το επιτυχές ξεκλείδωμα
vaultOptions.general.actionAfterUnlock.ignore=Να μην γίνει τίποτα
vaultOptions.general.actionAfterUnlock.reveal=Αποκάλυψη Εικονικού Δίσκου
vaultOptions.general.actionAfterUnlock.ask=Ρώτα
## Mount
vaultOptions.mount=Προσάρτηση
vaultOptions.mount.readonly=Μόνο για ανάγνωση
vaultOptions.mount.driveName=Όνομα Δίσκου
vaultOptions.mount.customMountFlags=Προσαρμοσμένες ετικέτες προσάρτησης
vaultOptions.mount.winDriveLetterOccupied=κατειλημμένο
vaultOptions.mount.mountPoint=Σημείο προσάρτησης
vaultOptions.mount.mountPoint.auto=Επιλογή κατάλληλης τοποθεσίας αυτόματα
vaultOptions.mount.mountPoint.driveLetter=Χρήση επιλεγμένου γράμματος δίσκου
vaultOptions.mount.mountPoint.custom=Προσαρμοσμένη διαδρομή
vaultOptions.mount.mountPoint.directoryPickerButton=Επιλογή
vaultOptions.mount.mountPoint.directoryPickerTitle=Επιλέξτε ένα άδειο φάκελο
## Master Key
vaultOptions.masterkey=Κωδικός πρόσβασης
vaultOptions.masterkey.changePasswordBtn=Αλλαγή κωδικού πρόσβασης
vaultOptions.masterkey.forgetSavedPasswordBtn=Διαγραφή αποθηκευμένου κωδικού
vaultOptions.masterkey.recoveryKeyExpanation=Το κλειδί ασφαλείας είναι ο μόνος τρόπος ανάκτησης πρόσβασης στο vault αν χάσετε τον κωδικό σας.
vaultOptions.masterkey.showRecoveryKeyBtn=Προβολή κλειδιού ανάκτησης
vaultOptions.masterkey.recoverPasswordBtn=Ανάκτηση κωδικού

# Recovery Key
recoveryKey.title=Κλειδί Ανάκτησης
recoveryKey.enterPassword.prompt=Εισάγετε τον κωδικό σας για να δείτε το κλειδί ανάκτησης για "%s":
recoveryKey.display.message=Το παρακάτω κλειδί ανάκτησης μπορεί να χρησιμοποιηθεί για επαναφορά πρόσβασης στο "%s":
recoveryKey.display.StorageHints=Φυλάξτε κάπου που θα είναι ασφαλές, π.χ.:\nΑποθήκευση σε πρόγραμμα διαχείρισης κωδικών\nΑποθήκευση σε USB δίσκο\nΤυπώστε το σε χαρτί
recoveryKey.recover.prompt=Εισάγετε το κλειδί ανάκτησης για "%s":
recoveryKey.recover.validKey=Αυτό είναι ένα έγκυρο κλειδί ανάκτησης
recoveryKey.printout.heading=Κλειδί ανάκτησης Cryptomator\n"%s"\n

# New Password
newPassword.promptText=Εισάγετε ένα νέο κωδικό
newPassword.reenterPassword=Επιβεβαιώστε το νέο κωδικό
newPassword.passwordsMatch=Οι κωδικοί ταιριάζουν!
newPassword.passwordsDoNotMatch=Οι κωδικοί δεν ταιριάζουν
passwordStrength.messageLabel.tooShort=Χρησιμοποιείστε τουλάχιστον %d χαρακτήρες
passwordStrength.messageLabel.0=Πολύ αδύναμος
passwordStrength.messageLabel.1=Αδύναμος
passwordStrength.messageLabel.2=Μέτριος
passwordStrength.messageLabel.3=Δυνατός
passwordStrength.messageLabel.4=Πολύ δυνατός

# Quit
quit.prompt=Κλείσιμο εφαρμογής; Υπάρχουν ξεκλείδωτα vault.
quit.lockAndQuit=Κλείδωμα και Έξοδος

M main/ui/src/main/resources/i18n/strings_hi.properties => main/ui/src/main/resources/i18n/strings_hi.properties +5 -0
@@ 14,6 14,7 @@ generic.button.next=अगला
generic.button.print=प्रिंट करें
## Error
generic.error.title=कोई अनपेक्षित त्रुटि हो गई है
generic.error.instruction=ऐसा नहीं होना चाहिए था। कृपया नीचे त्रुटि पाठ की रिपोर्ट करें और इस त्रुटि के लिए क्या कदम उठाए, इसका विवरण शामिल करें।

# Tray Menu
traymenu.showMainWindow=दिखाएँ


@@ 49,6 50,7 @@ addvaultwizard.existing.chooseBtn=चुनें…
# Remove Vault

# Change Password
changepassword.title=पासवर्ड बदलें

# Forget Password



@@ 107,10 109,13 @@ vaultOptions.mount.mountPoint.directoryPickerButton=चुनें…
vaultOptions.mount.mountPoint.directoryPickerTitle=कोई खाली जगह चुने
## Master Key
vaultOptions.masterkey=पासवर्ड
vaultOptions.masterkey.changePasswordBtn=पासवर्ड बदलें

# Recovery Key

# New Password
newPassword.promptText=नया पासवर्ड दर्ज करें
newPassword.reenterPassword=नए पासवर्ड की पुष्टि करें
passwordStrength.messageLabel.0=बहुत कमज़ोर
passwordStrength.messageLabel.1=कमजोर
passwordStrength.messageLabel.2=बढ़िया

M main/ui/src/main/resources/i18n/strings_ko.properties => main/ui/src/main/resources/i18n/strings_ko.properties +2 -0
@@ 42,6 42,7 @@ addvaultwizard.new.directoryPickerLabel=사용자 지정 위치
addvaultwizard.new.directoryPickerButton=선택
addvaultwizard.new.directoryPickerTitle=디렉터리 선택
addvaultwizard.new.fileAlreadyExists=이미 다른 객체가 존재하고 있어 해당 경로에 Vault를 생성할 수 없습니다.
addvaultwizard.new.locationDoesNotExist=하나 이상의 경로 구성 요소가 없기 때문에 이 경로에 Vault가 생성 될 수 없습니다.
addvaultwizard.new.invalidName=유효하지 않은 Vault 이름입니다. 일반적인 디렉터리 이름으로 지정해주십시요.
### Password
addvaultwizard.new.createVaultBtn=Vault 생성


@@ 228,6 229,7 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=빈 디렉터리를 선택
## Master Key
vaultOptions.masterkey=비밀번호
vaultOptions.masterkey.changePasswordBtn=비밀번호 변경
vaultOptions.masterkey.forgetSavedPasswordBtn=저장된 비밀번호 삭제
vaultOptions.masterkey.recoveryKeyExpanation=복구 키는 비밀번호를 잊어버렸을 때, Vault의 접근을 복원 할 수 있는 유일한 방법입니다.
vaultOptions.masterkey.showRecoveryKeyBtn=복구 키 표시
vaultOptions.masterkey.recoverPasswordBtn=비밀번호 복구

M main/ui/src/main/resources/i18n/strings_nb.properties => main/ui/src/main/resources/i18n/strings_nb.properties +4 -0
@@ 42,6 42,7 @@ addvaultwizard.new.directoryPickerLabel=Tilpasset lagringssted
addvaultwizard.new.directoryPickerButton=Velg…
addvaultwizard.new.directoryPickerTitle=Velg mappe
addvaultwizard.new.fileAlreadyExists=Hvelvet kan ikke opprettes på denne søkestien fordi et objekt allerede eksisterer.
addvaultwizard.new.locationDoesNotExist=Hvelvet kan ikke opprettes på denne søkestien fordi minst én søkestikomponent ikke finnes.
addvaultwizard.new.invalidName=Ugyldig navn på hvelvet. Vennligst vurder et vanlig mappenavn.
### Password
addvaultwizard.new.createVaultBtn=Opprett hvelv


@@ 175,8 176,10 @@ main.vaultlist.addVaultBtn=Legg til hvelv
main.vaultDetail.welcomeOnboarding=Takk for at du valgte Cryptomator for å beskytte filene dine. Hvis du trenger hjelp, sjekk ut våre guider for å komme i gang:
### Locked
main.vaultDetail.lockedStatus=LÅST
main.vaultDetail.unlockBtn=Lås opp…
main.vaultDetail.unlockNowBtn=Lås opp nå
main.vaultDetail.optionsBtn=Alternativer for hvelvet
main.vaultDetail.passwordSavedInKeychain=Passordet er lagret
### Unlocked
main.vaultDetail.unlockedStatus=ULÅST
main.vaultDetail.accessLocation=Innholdet i hvelvet ditt er tilgjengelig her:


@@ 226,6 229,7 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Velg en tom mappe
## Master Key
vaultOptions.masterkey=Passord
vaultOptions.masterkey.changePasswordBtn=Endre passord
vaultOptions.masterkey.forgetSavedPasswordBtn=Glem passord
vaultOptions.masterkey.recoveryKeyExpanation=En gjenopprettingsnøkkel er den eneste måten å gjenopprette tilgangen til et hvelv på hvis du mister passordet.
vaultOptions.masterkey.showRecoveryKeyBtn=Vis gjenopprettingsnøkkelen
vaultOptions.masterkey.recoverPasswordBtn=Gjenopprett passord

M main/ui/src/main/resources/i18n/strings_nn.properties => main/ui/src/main/resources/i18n/strings_nn.properties +4 -0
@@ 42,6 42,7 @@ addvaultwizard.new.directoryPickerLabel=Tilpassa lagringsstad
addvaultwizard.new.directoryPickerButton=Vel…
addvaultwizard.new.directoryPickerTitle=Vel mappe
addvaultwizard.new.fileAlreadyExists=Kvelven kan ikkje opprettast på denne søkestien fordi eit objekt allereie eksisterer her.
addvaultwizard.new.locationDoesNotExist=Kvelven kan ikkje opprettast på denne søkjestien fordi minst éin søkjestikomponent ikkje finst.
addvaultwizard.new.invalidName=Ugyldig namn på kvelven. Ver vennleg og vurder eit vanleg mappenamn.
### Password
addvaultwizard.new.createVaultBtn=Opprett kvelven


@@ 175,8 176,10 @@ main.vaultlist.addVaultBtn=Legg til kvelv
main.vaultDetail.welcomeOnboarding=Takk for at du valde Cryptomator for å verna filene dine. Viss du treng hjelp, sjekk ut guidane våre for å komma i gang:
### Locked
main.vaultDetail.lockedStatus=LÅST
main.vaultDetail.unlockBtn=Lås opp…
main.vaultDetail.unlockNowBtn=Lås opp no
main.vaultDetail.optionsBtn=Alternativ for kvelven
main.vaultDetail.passwordSavedInKeychain=Passordet er lagra
### Unlocked
main.vaultDetail.unlockedStatus=ULÅST
main.vaultDetail.accessLocation=Innhaldet i kvelven din er tilgjengeleg her:


@@ 226,6 229,7 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Vel ei tom mappe
## Master Key
vaultOptions.masterkey=Passord
vaultOptions.masterkey.changePasswordBtn=Byt passord
vaultOptions.masterkey.forgetSavedPasswordBtn=Gløym passord
vaultOptions.masterkey.recoveryKeyExpanation=Ein "retta opp igjen"-nøkkel er den einaste måten å retta opp igjen tilgangen til ein kvelv på viss du mistar passordet.
vaultOptions.masterkey.showRecoveryKeyBtn=Vis 'Retta opp igjen'-nøkkelen
vaultOptions.masterkey.recoverPasswordBtn=Rett opp igjen passord

M main/ui/src/main/resources/i18n/strings_pl.properties => main/ui/src/main/resources/i18n/strings_pl.properties +88 -2
@@ 62,7 62,7 @@ addvault.new.readme.storageLocation.8=2. Odblokuj sejf w programie Cryptomator.
addvault.new.readme.storageLocation.9=3. Otwórz miejsce z odszyfrowanymi plikami, klikając przycisk "Pokaż".
addvault.new.readme.storageLocation.10=Jeśli potrzebujesz pomocy, sprawdź dokumentację: %s
addvault.new.readme.accessLocation.fileName=WELCOME.rtf
addvault.new.readme.accessLocation.1=🔐 ZASZYFROWANY DYSK 🔐
addvault.new.readme.accessLocation.1=🔐 ZASZYFROWANY UDZIAŁ 🔐
addvault.new.readme.accessLocation.2=Tu są przechowywane pliki Twojego sejfu.
addvault.new.readme.accessLocation.3=Wszystkie pliki dodane tutaj zostaną zaszyfrowane przez Cryptomator. Możesz tu wykonywać operacje jak na każdym innym dysku czy katalogu. To jest jedynie odszyfrowany podgląd Twoich plików, wszystkie pozostają cały czas zaszyfrowane na Twoim dysku twardym.
addvault.new.readme.accessLocation.4=Jeśli chcesz możesz spokojnie usunąć ten plik.


@@ 96,7 96,7 @@ unlock.savePassword=Zapamiętaj hasło
unlock.unlockBtn=Odblokuj
## Success
unlock.success.message="%s" został odblokowany! Twój sejf jest teraz dostępny.
unlock.success.rememberChoice=Zapamiętaj wybór i nie pokazuj ponownie tego okna
unlock.success.rememberChoice=Zapamiętaj wybór, nie pokazuj tego ponownie
unlock.success.revealBtn=Otwórz sejf
## Invalid Mount Point
unlock.error.invalidMountPoint=Punkt montowania nie jest pustym katalogiem: %s


@@ 135,40 135,126 @@ preferences.general.theme.dark=Ciemny
preferences.general.unlockThemes=Odblokuj tryb ciemny
preferences.general.startHidden=Ukryj okno podczas uruchamiania programu Cryptomator
preferences.general.debugLogging=Włącz logowanie w trybie debug
preferences.general.debugDirectory=Pokaż pliki logowania
preferences.general.autoStart=Uruchom Cryptomator po uruchomieniu systemu
preferences.general.interfaceOrientation=Układ interfejsu
preferences.general.interfaceOrientation.ltr=Od lewej do prawej
preferences.general.interfaceOrientation.rtl=Od prawej do lewej
## Volume
preferences.volume=Dysk wirtualny
preferences.volume.type=Typ udziału
preferences.volume.webdav.port=WebDAV Port
preferences.volume.webdav.scheme=WebDAV Scheme
## Updates
preferences.updates=Aktualizacje
preferences.updates.currentVersion=Obecna wersja: %s
preferences.updates.autoUpdateCheck=Automatycznie sprawdzaj aktualizacje
preferences.updates.checkNowBtn=Sprawdź teraz
preferences.updates.updateAvailable=Dostępna jest aktualizacja do wersji %s.
## Donation Key
preferences.donationKey=Dotacja
preferences.donationKey.registeredFor=Zarejestrowano dla %s
preferences.donationKey.noDonationKey=Nie znaleziono aktualnego klucza dotacji. To taki klucz licencyjny, ale dla niesamowitych ludzi używających darmowego oprogramowania. ;-)
preferences.donationKey.getDonationKey=Zdobądź klucz dotacji
## About
preferences.about=O programie

# Main Window
main.closeBtn.tooltip=Zamknij
main.minimizeBtn.tooltip=Minimalizuj
main.preferencesBtn.tooltip=Ustawienia
main.donationKeyMissing.tooltip=Rozważ przekazanie dotacji
## Drag 'n' Drop
main.dropZone.dropVault=Dodaj ten sejf
main.dropZone.unknownDragboardContent=Jeśli chcesz dodać sejf, przeciągnij go do tego okna
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Kliknij tutaj, aby dodać sejf
main.vaultlist.contextMenu.remove=Usuń sejf
main.vaultlist.addVaultBtn=Dodaj sejf
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Dziękujemy za wybranie programu Cryptomator do ochrony plików. Jeśli potrzebujesz pomocy, sprawdź nasze przewodniki:
### Locked
main.vaultDetail.lockedStatus=ZABLOKOWANY
main.vaultDetail.unlockBtn=Odblokuj…
main.vaultDetail.unlockNowBtn=Odblokuj teraz
main.vaultDetail.optionsBtn=Ustawienia sejfu
main.vaultDetail.passwordSavedInKeychain=Hasło zapisane
### Unlocked
main.vaultDetail.unlockedStatus=ODBLOKOWANE
main.vaultDetail.accessLocation=Zawartość Twojego sejfu dostępna jest tutaj:
main.vaultDetail.revealBtn=Otwórz lokalizację
main.vaultDetail.lockBtn=Blokuj
main.vaultDetail.bytesPerSecondRead=odczyt:
main.vaultDetail.bytesPerSecondWritten=zapis:
main.vaultDetail.throughput.idle=bezczynny
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Missing
main.vaultDetail.missing.info=Cryptomator nie mógł znaleźć sejfu w tej lokalizacji.
### Needs Migration
main.vaultDetail.migrateButton=Aktualizuj sejf
main.vaultDetail.migratePrompt=Twój sejf musi zostać zaktualizowany do nowego formatu, zanim będziesz mógł go używać

# Wrong File Alert
wrongFileAlert.title=Jak szyfrować pliki
wrongFileAlert.header.title=Czy chciałeś zaszyfrować te pliki?
wrongFileAlert.header.lead=W tym celu Cryptomator zapewnia udział dostępny w menedżerze plików.
wrongFileAlert.instruction.0=Aby zaszyfrować pliki, wykonaj następujące kroki:
wrongFileAlert.instruction.1=1. Odblokuj swój sejf.
wrongFileAlert.instruction.2=2. Kliknij na "Otwórz lokalizację", aby otworzyć udział w menedżerze plików.
wrongFileAlert.instruction.3=3. Dodaj pliki do tego udziału.
wrongFileAlert.link=Aby uzyskać pomoc, wejdź na

# Vault Options
## General
vaultOptions.general=Ogólne
vaultOptions.general.unlockAfterStartup=Odblokuj sejf podczas uruchamiania programu Cryptomator
vaultOptions.general.actionAfterUnlock=Po udanym odblokowaniu
vaultOptions.general.actionAfterUnlock.ignore=Nic nie rób
vaultOptions.general.actionAfterUnlock.reveal=Otwórz lokalizację
vaultOptions.general.actionAfterUnlock.ask=Zapytaj
## Mount
vaultOptions.mount=Montowanie
vaultOptions.mount.readonly=Tylko do odczytu
vaultOptions.mount.driveName=Nazwa udziału
vaultOptions.mount.customMountFlags=Własne flagi montowania udziału
vaultOptions.mount.winDriveLetterOccupied=zajęty
vaultOptions.mount.mountPoint=Punkt montowania
vaultOptions.mount.mountPoint.auto=Automatycznie wybierz odpowiednią lokalizację
vaultOptions.mount.mountPoint.driveLetter=Użyj przypisanej litery dysku
vaultOptions.mount.mountPoint.custom=Własna ścieżka
vaultOptions.mount.mountPoint.directoryPickerButton=Wybierz…
vaultOptions.mount.mountPoint.directoryPickerTitle=Wybierz pusty katalog
## Master Key
vaultOptions.masterkey=Hasło
vaultOptions.masterkey.changePasswordBtn=Zmiana Hasła
vaultOptions.masterkey.forgetSavedPasswordBtn=Zapomnij zapamiętane hasło
vaultOptions.masterkey.recoveryKeyExpanation=Klucz odzyskiwania jest twoim jedynym sposobem przywrócenia dostępu do sejfu w przypadku utraty hasła.
vaultOptions.masterkey.showRecoveryKeyBtn=Wyświetl klucz odzyskiwania
vaultOptions.masterkey.recoverPasswordBtn=Odzyskaj hasło

# Recovery Key
recoveryKey.title=Klucz odzyskiwania
recoveryKey.enterPassword.prompt=Wprowadź hasło, aby pokazać klucz odzyskiwania dla "%s":
recoveryKey.display.message=Poniższy klucz odzyskiwania służy do przywrócenia dostępu do "%s":
recoveryKey.display.StorageHints=Trzymaj go w bezpiecznym miejscu, np.\n • Przechowuj go za pomocą menedżera haseł\n • Zapisz go na przenośnej pamięci USB\n • Wydrukuj na papierze
recoveryKey.recover.prompt=Wprowadź swój klucz odzyskiwania dla "%s":
recoveryKey.recover.validKey=To jest prawidłowy klucz odzyskiwania
recoveryKey.printout.heading=Cryptomator - Klucz odzyskiwania "%s"\n

# New Password
newPassword.promptText=Wprowadź nowe hasło
newPassword.reenterPassword=Potwierdź nowe hasło
newPassword.passwordsMatch=Hasła identyczne!
newPassword.passwordsDoNotMatch=Różne hasła
passwordStrength.messageLabel.tooShort=Użyj co najmniej %d znaków
passwordStrength.messageLabel.0=Bardzo słabe
passwordStrength.messageLabel.1=Słabe
passwordStrength.messageLabel.2=Średnie
passwordStrength.messageLabel.3=Silne
passwordStrength.messageLabel.4=Bardzo silne

# Quit
quit.prompt=Zamknąć aplikację? Niektore sejfy są odblokowane.
quit.lockAndQuit=Zablokuj i wyjdź

M main/ui/src/main/resources/i18n/strings_pt.properties => main/ui/src/main/resources/i18n/strings_pt.properties +115 -0
@@ 2,62 2,177 @@

# Generics
## Button
generic.button.apply=Aplicar
generic.button.back=Anterior
generic.button.cancel=Cancelar
generic.button.change=Alterar
generic.button.close=Fechar
generic.button.copy=Copiar
generic.button.copied=Copiado!
generic.button.done=Ok
generic.button.next=Seguinte
generic.button.print=Imprimir
## Error
generic.error.title=Ocorreu um erro inesperado
generic.error.instruction=Isto não devia ter acontecido. Por favor reporte o texto do erro abaixo e descreva os passos que levaram a este problema.

# Tray Menu
traymenu.showMainWindow=Mostrar
traymenu.showPreferencesWindow=Preferências
traymenu.lockAllVaults=Bloquear Todos
traymenu.quitApplication=Fechar
traymenu.vault.unlock=Destrancar
traymenu.vault.lock=Trancar
traymenu.vault.reveal=Revelar

# Add Vault Wizard
addvaultwizard.title=Adicionar Cofre
## Welcome
addvaultwizard.welcome.newButton=Criar Novo Cofre
addvaultwizard.welcome.existingButton=Abrir Cofre Existente
## New
### Name
addvaultwizard.new.nameInstruction=Escolha um nome para o cofre
addvaultwizard.new.namePrompt=Nome do Cofre
### Location
addvaultwizard.new.locationInstruction=Onde deve o Cryptomator armazenar os arquivos criptografados do cofre?
addvaultwizard.new.locationLabel=Local de armazenamento
addvaultwizard.new.locationPrompt=…
addvaultwizard.new.directoryPickerLabel=Outro Local
addvaultwizard.new.directoryPickerButton=Escolher…
addvaultwizard.new.directoryPickerTitle=Selecionar diretório
addvaultwizard.new.fileAlreadyExists=O cofre não pode ser criado neste diretório porque algum objeto já existe.
addvaultwizard.new.locationDoesNotExist=O cofre não pode ser criado neste diretório porque pelo menos um componente de diretório não existe.
addvaultwizard.new.invalidName=Nome de cofre inválido. Por favor considere um nome de diretório regular.
### Password
addvaultwizard.new.createVaultBtn=Criar Cofre
addvaultwizard.new.generateRecoveryKeyChoice=Não será capaz de aceder aos seus dados sem a sua senha. Você quer uma chave de recuperação para caso perca a sua senha?
addvaultwizard.new.generateRecoveryKeyChoice.yes=Sim por favor, melhor prevenir do que remediar
addvaultwizard.new.generateRecoveryKeyChoice.no=Não obrigado, não vou perder a minha senha
### Information
addvault.new.readme.storageLocation.fileName=IMPORTANTE.rtf
addvault.new.readme.storageLocation.1=⚠ ARQUIVOS DO COFRE ⚠
addvault.new.readme.storageLocation.2=Este é o local de armazenamento do seu cofre.
addvault.new.readme.storageLocation.6=Se deseja criptografar arquivos e visualizar o conteúdo do cofre, faça o seguinte:
addvault.new.readme.storageLocation.7=1. Adicione este cofre ao Cryptomator.
addvault.new.readme.storageLocation.8=2. Desbloqueie o cofre no Cryptomator.
addvault.new.readme.storageLocation.9=3. Abra o local de acesso clicando no botão "Revelar".
addvault.new.readme.storageLocation.10=Se precisar de ajuda, visite a documentação: %s
addvault.new.readme.accessLocation.fileName=BEM-VINDO.rtf
addvault.new.readme.accessLocation.1=🔐 VOLUME CRIPTOGRAFADO 🔐
addvault.new.readme.accessLocation.4=Sinta-se livre para remover este ficheiro.
## Existing
addvaultwizard.existing.chooseBtn=Escolher…
addvaultwizard.existing.filePickerTitle=Selecionar ficheiro MasterKey
## 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.confirmBtn=Remover Cofre

# Change Password
changepassword.title=Alterar Senha
changepassword.enterOldPassword=Digite a senha atual para "%s"
changepassword.finalConfirmation=Eu entendo que não poderei aceder aos meus dados se esquecer a minha senha

# Forget Password
forgetPassword.title=Esqueci a Senha
forgetPassword.confirmBtn=Esqueci a Senha

# Unlock
unlock.title=Destrancar Cofre
unlock.passwordPrompt=Insira a senha para "%s":
unlock.savePassword=Lembrar Senha
unlock.unlockBtn=Destrancar
## Success
unlock.success.message=Desbloqueado "%s" com sucesso! O seu cofre está agora acessível.
unlock.success.rememberChoice=Lembrar escolha, não mostrar isto novamente
unlock.success.revealBtn=Revelar Cofre
## Invalid Mount Point

# Migration
migration.title=Atualizar Cofre
## Start
## Run
migration.run.startMigrationBtn=Migrar Cofre
migration.run.progressHint=Isso pode levar algum tempo…
## Sucess
migration.success.unlockNow=Destrancar agora
## Missing file system capabilities
## Impossible

# Preferences
preferences.title=Preferências
## General
preferences.general=Geral
## Volume
preferences.volume.webdav.port=Porta WebDAV
preferences.volume.webdav.scheme=WebDAV Scheme
## Updates
preferences.updates=Atualizações
preferences.updates.currentVersion=Versão atual: %s
preferences.updates.autoUpdateCheck=Verificar automaticamente por atualizações
preferences.updates.checkNowBtn=Verificar Agora
preferences.updates.updateAvailable=Atualização para a versão %s disponível.
## Donation Key
preferences.donationKey=Doação
preferences.donationKey.registeredFor=Registado para %s
preferences.donationKey.noDonationKey=Não foi encontrada uma chave de doação válida. É como uma chave de licença, mas para pessoas incríveis que usam software livre. ;-)
preferences.donationKey.getDonationKey=Obter chave de doação
## About
preferences.about=Sobre

# Main Window
main.closeBtn.tooltip=Fechar
main.minimizeBtn.tooltip=Minimizar
main.preferencesBtn.tooltip=Preferências
## Drag 'n' Drop
## Vault List
main.vaultlist.addVaultBtn=Adicionar Cofre
## Vault Detail
### Welcome
### Locked
main.vaultDetail.unlockNowBtn=Destrancar agora
### Unlocked
main.vaultDetail.lockBtn=Trancar
main.vaultDetail.bytesPerSecondWritten=escrito:
main.vaultDetail.throughput.idle=inativo
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Missing
main.vaultDetail.missing.info=O Cryptomator não conseguiu encontrar um cofre neste diretório.
### Needs Migration
main.vaultDetail.migrateButton=Atualizar Cofre
main.vaultDetail.migratePrompt=O cofre precisa de ser atualizado para um novo formato, antes que possa acessá-lo

# Wrong File Alert
wrongFileAlert.title=Como criptografar arquivos
wrongFileAlert.header.title=Você tentou criptografar esses arquivos?
wrongFileAlert.instruction.1=1. Desbloqueie o seu cofre.
wrongFileAlert.instruction.3=3. Adicione ficheiros a este volume.
wrongFileAlert.link=Para obter assistência, visite

# Vault Options
## General
vaultOptions.general=Geral
vaultOptions.general.unlockAfterStartup=Destrancar o cofre ao iniciar o Cryptomator
vaultOptions.general.actionAfterUnlock=Após destrancar com sucesso
vaultOptions.general.actionAfterUnlock.ask=Perguntar
## Mount
vaultOptions.mount.readonly=Somente leitura
vaultOptions.mount.driveName=Nome da unidade
vaultOptions.mount.mountPoint.directoryPickerButton=Escolher…
## Master Key
vaultOptions.masterkey=Senha
vaultOptions.masterkey.changePasswordBtn=Alterar Senha
vaultOptions.masterkey.forgetSavedPasswordBtn=Esqueça a senha salva
vaultOptions.masterkey.recoveryKeyExpanation=Uma chave de recuperação é a única forma de restaurar o acesso a um cofre se perder a senha.
vaultOptions.masterkey.showRecoveryKeyBtn=Exibir Chave de Recuperação
vaultOptions.masterkey.recoverPasswordBtn=Recuperar Senha

# Recovery Key
recoveryKey.title=Chave de Recuperação

# New Password