浏览代码

Merge branch 'release/1.2.0' into develop

# Conflicts:
#	main/ant-kit/pom.xml
#	main/commons-test/pom.xml
#	main/commons/pom.xml
#	main/filesystem-api/pom.xml
#	main/filesystem-charsets/pom.xml
#	main/filesystem-crypto-integration-tests/pom.xml
#	main/filesystem-crypto/pom.xml
#	main/filesystem-inmemory/pom.xml
#	main/filesystem-invariants-tests/pom.xml
#	main/filesystem-nameshortening/pom.xml
#	main/filesystem-nio/pom.xml
#	main/filesystem-stats/pom.xml
#	main/frontend-api/pom.xml
#	main/frontend-webdav/pom.xml
#	main/jacoco-report/pom.xml
#	main/keychain/pom.xml
#	main/pom.xml
#	main/uber-jar/pom.xml
#	main/ui/pom.xml
Sebastian Stenzel 8 年之前
父节点
当前提交
2bb87dfa96
共有 24 个文件被更改,包括 483 次插入50 次删除
  1. 1 1
      main/filesystem-crypto/src/main/java/org/cryptomator/crypto/engine/impl/CryptorImpl.java
  2. 5 0
      main/filesystem-crypto/src/main/java/org/cryptomator/crypto/engine/impl/FileContentDecryptorImpl.java
  3. 5 5
      main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/FileContentDecryptorImplTest.java
  4. 14 1
      main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/FileHeaderTest.java
  5. 2 1
      main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java
  6. 6 2
      main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java
  7. 9 1
      main/ui/src/main/java/org/cryptomator/ui/model/UpgradeStrategy.java
  8. 2 2
      main/ui/src/main/java/org/cryptomator/ui/model/Vault.java
  9. 7 1
      main/ui/src/main/resources/localization/de.txt
  10. 1 1
      main/ui/src/main/resources/localization/en.txt
  11. 8 2
      main/ui/src/main/resources/localization/es.txt
  12. 8 2
      main/ui/src/main/resources/localization/fr.txt
  13. 9 1
      main/ui/src/main/resources/localization/hu.txt
  14. 14 6
      main/ui/src/main/resources/localization/it.txt
  15. 7 1
      main/ui/src/main/resources/localization/kr.txt
  16. 91 0
      main/ui/src/main/resources/localization/lv.txt
  17. 7 1
      main/ui/src/main/resources/localization/nl.txt
  18. 90 0
      main/ui/src/main/resources/localization/pl.txt
  19. 73 17
      main/ui/src/main/resources/localization/pt.txt
  20. 7 1
      main/ui/src/main/resources/localization/ru.txt
  21. 19 2
      main/ui/src/main/resources/localization/sk.txt
  22. 7 1
      main/ui/src/main/resources/localization/tr.txt
  23. 90 0
      main/ui/src/main/resources/localization/uk.txt
  24. 1 1
      main/ui/src/test/java/org/cryptomator/ui/LocalizationTest.java

+ 1 - 1
main/filesystem-crypto/src/main/java/org/cryptomator/crypto/engine/impl/CryptorImpl.java

@@ -109,7 +109,7 @@ class CryptorImpl implements Cryptor {
 		assert keyFile != null;
 
 		// check version
-		if (CURRENT_VAULT_VERSION != keyFile.getVersion()) {
+		if (!CURRENT_VAULT_VERSION.equals(keyFile.getVersion())) {
 			throw new UnsupportedVaultFormatException(keyFile.getVersion(), CURRENT_VAULT_VERSION);
 		}
 

+ 5 - 0
main/filesystem-crypto/src/main/java/org/cryptomator/crypto/engine/impl/FileContentDecryptorImpl.java

@@ -54,6 +54,11 @@ class FileContentDecryptorImpl implements FileContentDecryptor {
 		this.header = FileHeader.decrypt(headerKey, hmacSha256, header);
 		this.authenticate = authenticate;
 		this.chunkNumber = firstCiphertextByte / CHUNK_SIZE; // floor() by int-truncation
+		
+		// vault version 5 and onwards should have filesize: -1
+		if (this.header.getPayload().getFilesize() != -1l) {
+			throw new UncheckedIOException(new IOException("Attempted to decrypt file with invalid header (probably from previous vault version)"));
+		}
 	}
 
 	@Override

+ 5 - 5
main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/FileContentDecryptorImplTest.java

@@ -45,7 +45,7 @@ public class FileContentDecryptorImplTest {
 		final byte[] keyBytes = new byte[32];
 		final SecretKey headerKey = new SecretKeySpec(keyBytes, "AES");
 		final SecretKey macKey = new SecretKeySpec(keyBytes, "HmacSHA256");
-		final byte[] header = Base64.decode("AAAAAAAAAAAAAAAAAAAAANyVwHiiQImjrUiiFJKEIIdTD4r7x0U2ualjtPHEy3OLzqdAPU1ga26lJzstK9RUv1hj5zDC4wC9FgMfoVE1mD0HnuENuYXkJA==");
+		final byte[] header = Base64.decode("AAAAAAAAAAAAAAAAAAAAACNqP4ddv3Z2rUiiFJKEIIdTD4r7x0U2ualjtPHEy3OLzqdAPU1ga24VjC86+zlHN49BfMdzvHF3f9EE0LSnRLSsu6ps3IRcJg==");
 		final byte[] content = Base64.decode("AAAAAAAAAAAAAAAAAAAAALTwrBTNYP7m3yTGKlhka9WPvX1Lpn5EYfVxlyX1ISgRXtdRnivM7r6F3Og=");
 
 		try (FileContentDecryptor decryptor = new FileContentDecryptorImpl(headerKey, macKey, ByteBuffer.wrap(header), 0, true)) {
@@ -68,7 +68,7 @@ public class FileContentDecryptorImplTest {
 		final byte[] keyBytes = new byte[32];
 		final SecretKey headerKey = new SecretKeySpec(keyBytes, "AES");
 		final SecretKey macKey = new SecretKeySpec(keyBytes, "HmacSHA256");
-		final byte[] header = Base64.decode("AAAAAAAAAAAAAAAAAAAAANyVwHiiQImjrUiiFJKEIIdTD4r7x0U2ualjtPHEy3OLzqdAPU1ga26lJzstK9RUv1hj5zDC4wC9FgMfoVE1mD0HnuENuYXkJa==");
+		final byte[] header = Base64.decode("AAAAAAAAAAAAAAAAAAAAACNqP4ddv3Z2rUiiFJKEIIdTD4r7x0U2ualjtPHEy3OLzqdAPU1ga24VjC86+zlHN49BfMdzvHF3f9EE0LSnRLSsu6ps3IRcJG==");
 
 		try (FileContentDecryptor decryptor = new FileContentDecryptorImpl(headerKey, macKey, ByteBuffer.wrap(header), 0, true)) {
 
@@ -80,7 +80,7 @@ public class FileContentDecryptorImplTest {
 		final byte[] keyBytes = new byte[32];
 		final SecretKey headerKey = new SecretKeySpec(keyBytes, "AES");
 		final SecretKey macKey = new SecretKeySpec(keyBytes, "HmacSHA256");
-		final byte[] header = Base64.decode("AAAAAAAAAAAAAAAAAAAAANyVwHiiQImjrUiiFJKEIIdTD4r7x0U2ualjtPHEy3OLzqdAPU1ga26lJzstK9RUv1hj5zDC4wC9FgMfoVE1mD0HnuENuYXkJA==");
+		final byte[] header = Base64.decode("AAAAAAAAAAAAAAAAAAAAACNqP4ddv3Z2rUiiFJKEIIdTD4r7x0U2ualjtPHEy3OLzqdAPU1ga24VjC86+zlHN49BfMdzvHF3f9EE0LSnRLSsu6ps3IRcJg==");
 		final byte[] content = Base64.decode("aAAAAAAAAAAAAAAAAAAAALTwrBTNYP7m3yTGKlhka9WPvX1Lpn5EYfVxlyX1ISgRXtdRnivM7r6F3Og=");
 
 		try (FileContentDecryptor decryptor = new FileContentDecryptorImpl(headerKey, macKey, ByteBuffer.wrap(header), 0, true)) {
@@ -101,7 +101,7 @@ public class FileContentDecryptorImplTest {
 		final byte[] keyBytes = new byte[32];
 		final SecretKey headerKey = new SecretKeySpec(keyBytes, "AES");
 		final SecretKey macKey = new SecretKeySpec(keyBytes, "HmacSHA256");
-		final byte[] header = Base64.decode("AAAAAAAAAAAAAAAAAAAAANyVwHiiQImjrUiiFJKEIIdTD4r7x0U2ualjtPHEy3OLzqdAPU1ga26lJzstK9RUv1hj5zDC4wC9FgMfoVE1mD0HnuENuYXkJA==");
+		final byte[] header = Base64.decode("AAAAAAAAAAAAAAAAAAAAACNqP4ddv3Z2rUiiFJKEIIdTD4r7x0U2ualjtPHEy3OLzqdAPU1ga24VjC86+zlHN49BfMdzvHF3f9EE0LSnRLSsu6ps3IRcJg==");
 		final byte[] content = Base64.decode("AAAAAAAAAAAAAAAAAAAAALTwrBTNYP7m3yTGKlhka9WPvX1Lpn5EYfVxlyX1ISgRXtdRnivM7r6F3OG=");
 
 		try (FileContentDecryptor decryptor = new FileContentDecryptorImpl(headerKey, macKey, ByteBuffer.wrap(header), 0, false)) {
@@ -124,7 +124,7 @@ public class FileContentDecryptorImplTest {
 		final byte[] keyBytes = new byte[32];
 		final SecretKey headerKey = new SecretKeySpec(keyBytes, "AES");
 		final SecretKey macKey = new SecretKeySpec(keyBytes, "AES");
-		final byte[] header = Base64.decode("AAAAAAAAAAAAAAAAAAAAANyVwHiiQImjrUiiFJKEIIdTD4r7x0U2ualjtPHEy3OLzqdAPU1ga26lJzstK9RUv1hj5zDC4wC9FgMfoVE1mD0HnuENuYXkJA==");
+		final byte[] header = Base64.decode("AAAAAAAAAAAAAAAAAAAAACNqP4ddv3Z2rUiiFJKEIIdTD4r7x0U2ualjtPHEy3OLzqdAPU1ga24VjC86+zlHN49BfMdzvHF3f9EE0LSnRLSsu6ps3IRcJg==");
 
 		try (FileContentDecryptor decryptor = new FileContentDecryptorImpl(headerKey, macKey, ByteBuffer.wrap(header), 0, true)) {
 			decryptor.cancelWithException(new IOException("can not do"));

+ 14 - 1
main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/FileHeaderTest.java

@@ -53,13 +53,26 @@ public class FileHeaderTest {
 
 	@Test
 	public void testDecryption() {
+		final byte[] keyBytes = new byte[32];
+		final SecretKey headerKey = new SecretKeySpec(keyBytes, "AES");
+		final SecretKey macKey = new SecretKeySpec(keyBytes, "HmacSHA256");
+		final ByteBuffer headerBuf = ByteBuffer.wrap(Base64.decode("AAAAAAAAAAAAAAAAAAAAACNqP4ddv3Z2rUiiFJKEIIdTD4r7x0U2ualjtPHEy3OLzqdAPU1ga24VjC86+zlHN49BfMdzvHF3f9EE0LSnRLSsu6ps3IRcJg=="));
+		final FileHeader header = FileHeader.decrypt(headerKey, new ThreadLocalMac(macKey, "HmacSHA256"), headerBuf);
+
+		Assert.assertEquals(-1l, header.getPayload().getFilesize());
+		Assert.assertArrayEquals(new byte[16], header.getIv());
+		Assert.assertArrayEquals(new byte[32], header.getPayload().getContentKey().getEncoded());
+	}
+
+	@Test
+	public void testDecryptionOfOldHeader() {
 		final byte[] keyBytes = new byte[32];
 		final SecretKey headerKey = new SecretKeySpec(keyBytes, "AES");
 		final SecretKey macKey = new SecretKeySpec(keyBytes, "HmacSHA256");
 		final ByteBuffer headerBuf = ByteBuffer.wrap(Base64.decode("AAAAAAAAAAAAAAAAAAAAANyVwHiiQImjrUiiFJKEIIdTD4r7x0U2ualjtPHEy3OLzqdAPU1ga26lJzstK9RUv1hj5zDC4wC9FgMfoVE1mD0HnuENuYXkJA=="));
 		final FileHeader header = FileHeader.decrypt(headerKey, new ThreadLocalMac(macKey, "HmacSHA256"), headerBuf);
 
-		Assert.assertEquals(42, header.getPayload().getFilesize());
+		Assert.assertEquals(42l, header.getPayload().getFilesize());
 		Assert.assertArrayEquals(new byte[16], header.getIv());
 		Assert.assertArrayEquals(new byte[32], header.getPayload().getContentKey().getEncoded());
 	}

+ 2 - 1
main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java

@@ -124,6 +124,7 @@ public class ChangePasswordController extends LocalizedFXMLViewController {
 		// trigger "default" change to refresh key bindings:
 		changePasswordButton.setDefaultButton(false);
 		changePasswordButton.setDefaultButton(true);
+		messageText.setText(null);
 	}
 
 	// ****************************************
@@ -144,7 +145,7 @@ public class ChangePasswordController extends LocalizedFXMLViewController {
 		downloadsPageLink.setVisible(false);
 		try {
 			vault.changePassphrase(oldPasswordField.getCharacters(), newPasswordField.getCharacters());
-			messageText.setText(localization.getString("changePassword.infoMessage.success"));
+			messageText.setText(null);
 			listener.ifPresent(this::invokeListenerLater);
 		} catch (InvalidPassphraseException e) {
 			messageText.setText(localization.getString("changePassword.errorMessage.wrongPassword"));

+ 6 - 2
main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java

@@ -178,7 +178,7 @@ public class UnlockController extends LocalizedFXMLViewController {
 
 	@FXML
 	public void didClickDownloadsLink(ActionEvent event) {
-		app.getHostServices().showDocument("https://cryptomator.org/downloads/");
+		app.getHostServices().showDocument("https://cryptomator.org/downloads/#allVersions");
 	}
 
 	// ****************************************
@@ -311,11 +311,15 @@ public class UnlockController extends LocalizedFXMLViewController {
 			});
 		} catch (UnsupportedVaultFormatException e) {
 			Platform.runLater(() -> {
-				downloadsPageLink.setVisible(true);
 				if (e.isVaultOlderThanSoftware()) {
+					// whitespace after localized text used as separator between text and hyperlink
 					messageText.setText(localization.getString("unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware") + " ");
+					downloadsPageLink.setVisible(true);
 				} else if (e.isSoftwareOlderThanVault()) {
 					messageText.setText(localization.getString("unlock.errorMessage.unsupportedVersion.softwareOlderThanVault") + " ");
+					downloadsPageLink.setVisible(true);
+				} else if (e.getDetectedVersion() == Integer.MAX_VALUE) {
+					messageText.setText(localization.getString("unlock.errorMessage.unauthenticVersionMac"));
 				}
 			});
 		} catch (FrontendCreationFailedException | CommandFailedException e) {

+ 9 - 1
main/ui/src/main/java/org/cryptomator/ui/model/UpgradeStrategy.java

@@ -57,7 +57,15 @@ public abstract class UpgradeStrategy {
 			Files.write(masterkeyFileAfterUpgrade, upgradedMasterkeyFileContents, StandardOpenOption.TRUNCATE_EXISTING);
 		} catch (InvalidPassphraseException e) {
 			throw new UpgradeFailedException(localization.getString("unlock.errorMessage.wrongPassword"));
-		} catch (IOException | UnsupportedVaultFormatException e) {
+		} catch (UnsupportedVaultFormatException e) {
+			if (e.getDetectedVersion() == Integer.MAX_VALUE) {
+				LOG.warn("Version MAC authentication error in vault {}", vault.path().get());
+				throw new UpgradeFailedException(localization.getString("unlock.errorMessage.unauthenticVersionMac"));
+			} else {
+				LOG.warn("Upgrade failed.", e);
+				throw new UpgradeFailedException("Upgrade failed. Details in log message.");
+			}
+		} catch (IOException e) {
 			LOG.warn("Upgrade failed.", e);
 			throw new UpgradeFailedException("Upgrade failed. Details in log message.");
 		} finally {

+ 2 - 2
main/ui/src/main/java/org/cryptomator/ui/model/Vault.java

@@ -168,7 +168,7 @@ public class Vault implements CryptoFileSystemDelegate {
 		);
 	}
 
-	public void reveal() throws CommandFailedException {
+	public synchronized void reveal() throws CommandFailedException {
 		Optionals.ifPresent(filesystemFrontend.get(), Frontend::reveal);
 	}
 
@@ -190,7 +190,7 @@ public class Vault implements CryptoFileSystemDelegate {
 	// Getter/Setter
 	// *******************************************************************************/
 
-	public String getWebDavUrl() {
+	public synchronized String getWebDavUrl() {
 		return filesystemFrontend.get().map(Frontend::getWebDavUrl).orElseThrow(IllegalStateException::new);
 	}
 

+ 7 - 1
main/ui/src/main/resources/localization/de.txt

@@ -82,4 +82,10 @@ main.directoryList.remove.confirmation.title = Tresor entfernen
 main.directoryList.remove.confirmation.header = Möchten Sie diesen Tresor wirklich entfernen?
 main.directoryList.remove.confirmation.content = Dieser Tresor wird nur aus der Liste entfernt. Um den Tresor unwiderruflich zu löschen, entfernen Sie bitte die Dateien aus Ihrem Dateisystem.
 upgrade.version3to4.msg = Dieser Tresor muss auf ein neueres Format aktualisiert werden.\nVerschlüsselte Ordnernamen werden dabei aktualisiert.\nStellen Sie bitte sicher, dass derzeit keine Synchronisation stattfindet.
-upgrade.version3to4.err.io = Migration aufgrund eines I/O-Fehlers fehlgeschlagen.\nWeitere Informationen in der Log-Datei.
+upgrade.version3to4.err.io = Migration aufgrund eines I/O-Fehlers fehlgeschlagen.\nWeitere Informationen in der Log-Datei.
+settings.prefGvfsScheme.label = WebDAV Schema
+# upgrade.fxml
+upgrade.confirmation.label = Ja, die Synchronisation ist abgeschlossen
+initialize.messageLabel.notEmpty = Tresor ist nicht leer
+unlock.label.savePassword = Passwort speichern
+unlock.errorMessage.unauthenticVersionMac = Versions-MAC konnte nicht authentifiziert werden.

+ 1 - 1
main/ui/src/main/resources/localization/en.txt

@@ -63,6 +63,7 @@ unlock.errorMessage.wrongPassword=Wrong password
 unlock.errorMessage.mountingFailed=Mounting failed. See log file for details.
 unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware=Unsupported vault. This vault has been created with an older version of Cryptomator.
 unlock.errorMessage.unsupportedVersion.softwareOlderThanVault=Unsupported vault. This vault has been created with a newer version of Cryptomator.
+unlock.errorMessage.unauthenticVersionMac=Could not authenticate version MAC.
 unlock.messageLabel.startServerFailed=Starting WebDAV server failed.
 
 # change_password.fxml
@@ -73,7 +74,6 @@ changePassword.label.downloadsPageLink=All Cryptomator versions
 changePassword.button.change=Change password
 changePassword.errorMessage.wrongPassword=Wrong password
 changePassword.errorMessage.decryptionFailed=Decryption failed
-changePassword.infoMessage.success=Password changed
 
 # unlocked.fxml
 unlocked.button.lock=Lock vault

+ 8 - 2
main/ui/src/main/resources/localization/es.txt

@@ -14,7 +14,7 @@ initialize.label.password = Contraseña
 initialize.label.retypePassword = Reintroduzca contraseña
 initialize.button.ok = Crear caja fuerte
 initialize.messageLabel.alreadyInitialized = Caja fuerte ya está inicializado
-initialize.messageLabel.initializationFailed = No se pudo inicializar la caja fuerte. Ver archivo de registro para detalles. 
+initialize.messageLabel.initializationFailed = No se pudo inicializar la caja fuerte. Ver archivo de registro para detalles.
 # notfound.fxml
 notfound.label = No se pudo encontrar la caja fuerte. Se movió a otro lugar?
 # upgrade.fxml
@@ -83,4 +83,10 @@ main.directoryList.remove.confirmation.title = Borrar caja fuerte
 main.directoryList.remove.confirmation.header = ¿Quieres de verdad borrar este caja fuerte?
 main.directoryList.remove.confirmation.content = La caja fuerte solo se borra de la lista. Para eliminarla permanente por favor elimina los datos de tú sistema de archivos.
 upgrade.version3to4.msg = Este caja fuerte se debe migrar a un formato más reciente.\nLos nombres de las carpetas cifradas se actualizan.\nPor favor asegurarse de que la sincronización ha terminado antes de seguir.
-upgrade.version3to4.err.io = Migración ha fallado por causa de una excepción I/O. Para detalles revisa el archivo de registro.
+upgrade.version3to4.err.io = Migración ha fallado por causa de una excepción I/O. Para detalles revisa el archivo de registro.
+settings.prefGvfsScheme.label = WebDAV scheme
+# upgrade.fxml
+upgrade.confirmation.label = Yes, I've made sure that synchronization has finished
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 8 - 2
main/ui/src/main/resources/localization/fr.txt

@@ -78,10 +78,16 @@ initialize.messageLabel.passwordStrength.0 = Très faible
 initialize.messageLabel.passwordStrength.1 = Faible
 initialize.messageLabel.passwordStrength.2 = Raisonnable
 initialize.messageLabel.passwordStrength.3 = Fort
-initialize.messageLabel.passwordStrength.4 = Très fort\n
+initialize.messageLabel.passwordStrength.4 = Très fort
 initialize.label.doNotForget = ATTENTION \: Si vous oubliez votre mot de passe, il n'y aura aucun moyen de récupérer vos données.
 main.directoryList.remove.confirmation.title = Retirer un coffre
 main.directoryList.remove.confirmation.header = Voulez-vous vraiment retirer ce coffre ?
 main.directoryList.remove.confirmation.content = Le coffre sera simplement retiré de la liste. Pour le supprimer complètement, supprimez les fichiers depuis votre système de fichiers.
 upgrade.version3to4.msg = Ce coffre doit être converti dans un nouveau format. Les noms de dossiers chiffrés seront mis à jour.\nMerci de vous assurer que la procédure de synchronisation est terminée avant de continuer.
-upgrade.version3to4.err.io = La migration a échoué à cause d'une erreur d'entrée/sortie. Référez-vous au fichier log pour plus de détails.
+upgrade.version3to4.err.io = La migration a échoué à cause d'une erreur d'entrée/sortie. Référez-vous au fichier log pour plus de détails.
+settings.prefGvfsScheme.label = Schéma d'URI WebDAV
+# upgrade.fxml
+upgrade.confirmation.label = Oui, je suis certain que la synchronisation est finie
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 9 - 1
main/ui/src/main/resources/localization/hu.txt

@@ -79,4 +79,12 @@ initialize.messageLabel.passwordStrength.4 = Nagyon erős
 initialize.label.doNotForget = FONTOS\: Ha elfelejted a jelszavadat, akkor nincs lehetőség az adataid visszaállítására.
 main.directoryList.remove.confirmation.title = Széf eltávolítása
 main.directoryList.remove.confirmation.header = Tényleg törölni akarod ezt a széfet?
-main.directoryList.remove.confirmation.content = A széf csak a listából lesz eltávolítva. Végleges törléshez kérlek töröld a merevlemezen tárolt fájlokat.
+main.directoryList.remove.confirmation.content = A széf csak a listából lesz eltávolítva. Végleges törléshez kérlek töröld a merevlemezen tárolt fájlokat.
+upgrade.version3to4.msg = Ennek a széfnek egy újabb formátumra való migrációja szükséges. A titkosított könyvtárnevek frissítve lesznek. Kérlek, győződj meg a szinkronizáció befejeztéről mielőtt továbblépnél.
+upgrade.version3to4.err.io = Migráció meghíusúlt egy I/O kivétel miatt. Kérlek nézd meg a naplófájlt a további részletekért.
+settings.prefGvfsScheme.label = WebDAV séma
+# upgrade.fxml
+upgrade.confirmation.label = Yes, I've made sure that synchronization has finished
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 14 - 6
main/ui/src/main/resources/localization/it.txt

@@ -18,7 +18,7 @@ initialize.messageLabel.initializationFailed = Non è possibile inizializzare il
 notfound.label = Il vault non può essere trovato. E' stato rimosso?
 # upgrade.fxml
 upgrade.button = Aggiorna vault
-upgrade.version3dropBundleExtension.msg = Questo vault deve essere migrato ad un nuovo formato.\n"%1$s" verrà rinominato in "%2$s".\nPer favore verifica che la sincronizzazione sia finita prima di procedere\n
+upgrade.version3dropBundleExtension.msg = Questo vault deve essere migrato ad un nuovo formato.\n"%1$s" verrà rinominato in "%2$s".\nPer favore verifica che la sincronizzazione sia finita prima di procedere
 upgrade.version3dropBundleExtension.err.alreadyExists = Migrazione automatica fallita.\n"%s" esiste già.
 # unlock.fxml
 unlock.label.password = Password
@@ -45,14 +45,14 @@ changePassword.errorMessage.wrongPassword = Password errata
 changePassword.errorMessage.decryptionFailed = Decriptaggio fallito
 changePassword.infoMessage.success = Password cambiata
 # unlocked.fxml
-unlocked.button.lock = Blocca vault 
+unlocked.button.lock = Blocca vault
 unlocked.moreOptions.reveal = Apri il disco
 unlocked.moreOptions.copyUrl = Copia url WebDAV
 unlocked.label.revealFailed = Comando fallito
 unlocked.label.unmountFailed = Espulsione disco fallita
 unlocked.label.statsEncrypted = criptato
 unlocked.label.statsDecrypted = decriptato
-unlocked.ioGraph.yAxis.label = Volume dati (MiB/s) 
+unlocked.ioGraph.yAxis.label = Volume dati (MiB/s)
 # mac_warnings.fxml
 macWarnings.windowTitle = Pericolo - File corroto in %s
 macWarnings.message = Cryptomator ha individuato potenziali pericolose corruzioni nei seguenti file\:
@@ -69,8 +69,8 @@ settings.requiresRestartLabel = * Cryptomator deve essere riavviato
 tray.menu.open = Apri
 tray.menu.quit = Chiudi
 tray.infoMsg.title = Ancora in esecuzione
-tray.infoMsg.msg = Cryptomator è ancora in esecuzione. Chiudilo utilizzando l'icona nel menù di stato. 
-tray.infoMsg.msg.osx = Cryptomator è ancora in esecuzione. Chiudilo utilizzando l'icona nella barra del menù. 
+tray.infoMsg.msg = Cryptomator è ancora in esecuzione. Chiudilo utilizzando l'icona nel menù di stato.
+tray.infoMsg.msg.osx = Cryptomator è ancora in esecuzione. Chiudilo utilizzando l'icona nella barra del menù.
 initialize.messageLabel.passwordStrength.0 = Molto debole
 initialize.messageLabel.passwordStrength.1 = Debole
 initialize.messageLabel.passwordStrength.2 = Buona
@@ -79,4 +79,12 @@ initialize.messageLabel.passwordStrength.4 = Molto sicura
 initialize.label.doNotForget = IMPORTANTE\: Se dimentichi la password, non c'è modo di recuperare i tuoi dati.
 main.directoryList.remove.confirmation.title = Rimuovi vault
 main.directoryList.remove.confirmation.header = Vuoi davvero rimuovere questo vault?
-main.directoryList.remove.confirmation.content = Il vault sarà rimosso solo dalla lista. Per eliminarlo definitivamente, elimina per favore i file dal tuo hard disk.
+main.directoryList.remove.confirmation.content = Il vault sarà rimosso solo dalla lista. Per eliminarlo definitivamente, elimina per favore i file dal tuo hard disk.
+upgrade.version3to4.msg = This vault needs to be migrated to a newer format.\nEncrypted folder names will be updated.\nPlease make sure synchronization has finished before proceeding.
+upgrade.version3to4.err.io = Migration failed due to an I/O Exception. See log file for details.
+settings.prefGvfsScheme.label = WebDAV scheme
+# upgrade.fxml
+upgrade.confirmation.label = Yes, I've made sure that synchronization has finished
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 7 - 1
main/ui/src/main/resources/localization/kr.txt

@@ -81,4 +81,10 @@ main.directoryList.remove.confirmation.title = 보관함 삭제
 main.directoryList.remove.confirmation.header = 정말 이 보관함을 삭제하시겠습니까?
 main.directoryList.remove.confirmation.content = 보관함이 목록에서만 제거되었습니다. 데이터를 완전히 제거하시려면, 여러분의 파일시스템이서 제거해 주시기 바랍니다.
 upgrade.version3to4.msg = 이 보관함은 새로운 형식으로 바뀔 필요가 있습니다. 암호화된 폴더 이름이 업데이트 될 것입니다. 진행하기 전에 동기화가 완료되었는지 확인하기 바랍니다.
-upgrade.version3to4.err.io = 입출력 예외 문제로 마이그레이션이 실패하였습니다. 자세한 사항은 로그 파일을 확인하세요.
+upgrade.version3to4.err.io = 입출력 예외 문제로 마이그레이션이 실패하였습니다. 자세한 사항은 로그 파일을 확인하세요.
+settings.prefGvfsScheme.label = WebDAV sceme
+# upgrade.fxml
+upgrade.confirmation.label = 네. 동기화가 완료되었음을 확인하였습니다.
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 91 - 0
main/ui/src/main/resources/localization/lv.txt

@@ -0,0 +1,91 @@
+app.name = Cryptomator
+# main.fxml
+main.emptyListInstructions = Noklikšķiniet šeit, lai pievienotu glabātuvi
+main.directoryList.contextMenu.remove = Noņemt no saraksta
+main.directoryList.contextMenu.changePassword = Mainīt paroli
+main.addDirectory.contextMenu.new = Izveidot jaunu glabātuvi
+main.addDirectory.contextMenu.open = Atvērt esošu glabātuvi
+# welcome.fxml
+welcome.checkForUpdates.label.currentlyChecking = Pārbauda atjauninājumus...
+welcome.newVersionMessage = Lejupielādei pieejama versija %1$s.\nŠī ir %2$s. 
+# initialize.fxml
+initialize.label.password = Parole
+initialize.label.retypePassword = Atkārto paroli
+initialize.button.ok = Izveidot glabātuvi
+initialize.messageLabel.alreadyInitialized = Glabātuve jau ir inicializēta
+initialize.messageLabel.initializationFailed = Nevarēja inicializēt glabātuvi. Sīkākai informācijai skati žurnālu.
+# notfound.fxml
+notfound.label = Nevar atrast glabātuvi. Vai tā ir pārvietota?
+# upgrade.fxml
+upgrade.button = Atjaunināt glabātuvi
+upgrade.version3dropBundleExtension.msg = Šī glabātuve ir jāmigrē uz jaunākas versijas formātu.\n"%1$s" tiks pārsaukta par "%2$s".\nPirms palaišanas pārliecinies, ka ir beigusies sinhronizācija.
+upgrade.version3dropBundleExtension.err.alreadyExists = Automātiskā migrācija neizdevās.\n"%s" jau eksistē.
+# unlock.fxml
+unlock.label.password = Parole
+unlock.label.mountName = Diska nosaukums
+unlock.label.winDriveLetter = Diska burts
+unlock.label.downloadsPageLink = Visas Cryptomator versijas
+unlock.label.advancedHeading = Papildus opcijas
+unlock.button.unlock = Atslēgt glabātuvi
+unlock.button.advancedOptions.show = Vairāk opcijas
+unlock.button.advancedOptions.hide = Mazāk opcijas
+unlock.choicebox.winDriveLetter.auto = Piešķirt automātiski
+unlock.errorMessage.wrongPassword = Nepareiza parole
+unlock.errorMessage.mountingFailed = Montēšana neizdevās. Sīkākai informācijai skati žurnālu.
+unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Neatbastīta glabātuve. Šī glabātuve ir veidota ar vecāku Cryptomator versiju.
+unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Neatbastīta glabātuve. Šī glabātuve ir veidota ar jaunāku Cryptomator versiju.
+unlock.messageLabel.startServerFailed = WebDAV servera palaišana neizdevās.
+# change_password.fxml
+changePassword.label.oldPassword = Vecā parole
+changePassword.label.newPassword = Jaunā parole
+changePassword.label.retypePassword = Atkārto paroli
+changePassword.label.downloadsPageLink = Visas Cryptomator versijas
+changePassword.button.change = Mainīt paroli
+changePassword.errorMessage.wrongPassword = Nepareiza parole
+changePassword.errorMessage.decryptionFailed = Atšifrēšana neizdevās
+changePassword.infoMessage.success = Parole nomainīta
+# unlocked.fxml
+unlocked.button.lock = Aizslēgt glabātuvi
+unlocked.moreOptions.reveal = Atklāt disku
+unlocked.moreOptions.copyUrl = Kopēt WebDAV saiti
+unlocked.label.revealFailed = Komunikācija neizdevās
+unlocked.label.unmountFailed = Diska izgrūšana neizdevās
+unlocked.label.statsEncrypted = šifrēts
+unlocked.label.statsDecrypted = atšifrēts
+unlocked.ioGraph.yAxis.label = Caurlaidība (MiB/s)
+# mac_warnings.fxml
+macWarnings.windowTitle = Bīstami - %s satur bojātu datni
+macWarnings.message = Cryptomator konstatēja potenciāli ļaunprātīgu bojājumu sekojošām datnēm\:
+macWarnings.moreInformationButton = Skatīt vairāk
+macWarnings.whitelistButton = Atšifrēt iezīmēto tāpat
+# settings.fxml
+settings.version.label = Versija %s
+settings.checkForUpdates.label = Meklēt atjauninājumus
+settings.port.label = WebDAV Ports *
+settings.port.prompt = 0 \= automātiski
+settings.useipv6.label = Izmantot IPv6
+settings.requiresRestartLabel = * Cryptomator nepieciešams restarts
+# tray icon
+tray.menu.open = Atvērt
+tray.menu.quit = Iziet
+tray.infoMsg.title = Joprojām darbojās
+# Fuzzy
+tray.infoMsg.msg = Cryptomator joprojām darbojās. Iziet var no ikonas.
+tray.infoMsg.msg.osx = Cryptomator is still alive. joprojām darbojās. Iziet var no izvēlnes ikonas.
+initialize.messageLabel.passwordStrength.0 = Ļoti vāja
+initialize.messageLabel.passwordStrength.1 = Vāja
+initialize.messageLabel.passwordStrength.2 = Vidēja
+initialize.messageLabel.passwordStrength.3 = Stipra
+initialize.messageLabel.passwordStrength.4 = Ļoti stipra
+initialize.label.doNotForget = SVARĪGI\: Ja tu aizmirsti paroli, nav ceļa datu atjaunošanai
+main.directoryList.remove.confirmation.title = Noņemt glabātuvi
+main.directoryList.remove.confirmation.header = Vai tiešām vēlie noņemt šo glabātuvi?
+main.directoryList.remove.confirmation.content = Glabātuve tiks noņemta tikai no saraksta. Lai to dzēstu pilnībā, lūdzu nodzēs to no datņu sistēmas.
+upgrade.version3to4.msg = Šī glabātuve ir jāmigrē uz jaunāku formāta versiju. Sifrētie mapju nosaukumi tiks atjaunināti. Pirms palaišanas lūdzu pārliecinies, ka ir pabeigusies sinhronizācija.
+upgrade.version3to4.err.io = Migrācija neizdevās dēļ I/O izņēmuma. Sīkākai informācijai skati žurnālu.
+settings.prefGvfsScheme.label = WebDAV shēma
+# upgrade.fxml
+upgrade.confirmation.label = Jā, esmu pārliecinājies, ka sinhronizācija ir pabeigta.
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 7 - 1
main/ui/src/main/resources/localization/nl.txt

@@ -81,4 +81,10 @@ main.directoryList.remove.confirmation.title = Verwijder Kluis
 main.directoryList.remove.confirmation.header = Weet je zeker dat je deze kluis wilt verwijderen?
 main.directoryList.remove.confirmation.content = De kluis zal alleen van de lijst worden verwijdert. Verwijder de bestanden van het bestandssysteem voor permanente verwijdering.
 upgrade.version3to4.msg = Deze kluis dient gemigreerd te worden naar een nieuwer type. \nVersleutelde mapnamen zullen worden geüpdatet. \nZorg ervoor dat de synchronisatie voltooid is alvorens door te gaan.
-upgrade.version3to4.err.io = Migratie mislukt door een I/O Exception. Zie logbestand voor details.
+upgrade.version3to4.err.io = Migratie mislukt door een I/O Exception. Zie logbestand voor details.
+settings.prefGvfsScheme.label = WebDAV scheme
+# upgrade.fxml
+upgrade.confirmation.label = Yes, I've made sure that synchronization has finished
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 90 - 0
main/ui/src/main/resources/localization/pl.txt

@@ -0,0 +1,90 @@
+app.name = Cryptomator
+# main.fxml
+main.emptyListInstructions = Kliknij tutaj aby dodać kryptę
+main.directoryList.contextMenu.remove = Usuń z listy
+main.directoryList.contextMenu.changePassword = Zmień hasło
+main.addDirectory.contextMenu.new = Stwórz nową kryptę
+main.addDirectory.contextMenu.open = Otwórz istniejącą kryptę
+# welcome.fxml
+welcome.checkForUpdates.label.currentlyChecking = Sprawdź aktualizację
+welcome.newVersionMessage = Wersja %1$s może być pobrana.\nObecna %2$s.
+# initialize.fxml
+initialize.label.password = Hasło
+initialize.label.retypePassword = Ponów hasło
+initialize.button.ok = Stwórz kryptę
+initialize.messageLabel.alreadyInitialized = Krypta aktualnie załadowana
+initialize.messageLabel.initializationFailed = Nie można załadować krypty. Sprawdź logi
+# notfound.fxml
+notfound.label = Krypta nie znaleziona. Przeniesiona? 
+# upgrade.fxml
+upgrade.button = Aktualizuj kryptę
+upgrade.version3dropBundleExtension.msg = Ta krypta musi zostać przeniesiona do nowego formatu\n"%1$s" zamienione na "%2$s".\nProszę synchronizować przed skończeniem procesu
+upgrade.version3dropBundleExtension.err.alreadyExists = Błąd automatycznej migracji.\n"%s" już istnieje
+# unlock.fxml
+unlock.label.password = Hasło
+unlock.label.mountName = Nazwa dysku
+unlock.label.winDriveLetter = Litera dysku
+unlock.label.downloadsPageLink = Wszystkie wersje Cryptomatora
+unlock.label.advancedHeading = Zaawansowane opcje
+unlock.button.unlock = Odblokuj kryptę
+unlock.button.advancedOptions.show = Więcej opcji
+unlock.button.advancedOptions.hide = Mniej opcji
+unlock.choicebox.winDriveLetter.auto = Przydzielone automatycznie
+unlock.errorMessage.wrongPassword = Złe hasło
+unlock.errorMessage.mountingFailed = Błąd zamontowania. Sprawdź logi 
+unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Niewspierana krypta, utworzona przez starszą wersje Cryptomatora
+unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Niewspierana krypta, utworzona przez nowszą wersje Cryptomatora
+unlock.messageLabel.startServerFailed = Błąd startu serwera WebDAV 
+# change_password.fxml
+changePassword.label.oldPassword = Stare hasło
+changePassword.label.newPassword = Nowe hasło
+changePassword.label.retypePassword = Powtórz hasło
+changePassword.label.downloadsPageLink = Wszystkie wersje Cryptomatora
+changePassword.button.change = Zmień hasło
+changePassword.errorMessage.wrongPassword = Złe hasło
+changePassword.errorMessage.decryptionFailed = Błąd deszyfracji
+changePassword.infoMessage.success = Hasło zmienione
+# unlocked.fxml
+unlocked.button.lock = Zablokuj kryptę
+unlocked.moreOptions.reveal = Zwolnij napęd
+unlocked.moreOptions.copyUrl = Skopiuj url WebDAV
+unlocked.label.revealFailed = Zła komenda
+unlocked.label.unmountFailed = Błąd wysuwania napędu
+unlocked.label.statsEncrypted = Zaszyfrowany
+unlocked.label.statsDecrypted = Odszyfrowany
+unlocked.ioGraph.yAxis.label = Wydajność (MiB/s) 
+# mac_warnings.fxml
+macWarnings.windowTitle = Uwaga - Plik uszkodzony %s
+macWarnings.message = Wykryto zagrożenie w plikach
+macWarnings.moreInformationButton = Czytaj więcej
+macWarnings.whitelistButton = Odszyfruj wszystko
+# settings.fxml
+settings.version.label = Wersja %s 
+settings.checkForUpdates.label = Sprawdź aktualizacje 
+settings.port.label = WebDAV port *
+settings.port.prompt = 0 \= Automatycznie
+settings.useipv6.label = Użyj IPv6
+settings.requiresRestartLabel = * Cryptomator wymaga restartu
+# tray icon
+tray.menu.open = Otwórz
+tray.menu.quit = Wyjdź
+tray.infoMsg.title = Nadal działa
+tray.infoMsg.msg = Cryptomator działa nadal. Wyjdź z ikony tray
+tray.infoMsg.msg.osx = Cryptomator działa nadal. Wyjdź z menu programu
+initialize.messageLabel.passwordStrength.0 = Bardzo słabe
+initialize.messageLabel.passwordStrength.1 = Słabe
+initialize.messageLabel.passwordStrength.2 = W porządku
+initialize.messageLabel.passwordStrength.3 = Mocne
+initialize.messageLabel.passwordStrength.4 = Bardzo mocne
+initialize.label.doNotForget = Ważne\! Jeśli zapomnisz hasło stracisz dostęp do danych
+main.directoryList.remove.confirmation.title = Usuń kryptę
+main.directoryList.remove.confirmation.header = Czy na pewno chcesz osunąć kryptę? 
+main.directoryList.remove.confirmation.content = Ta krypta zostanie usunięta z listy. Ostatecznie usuń dane z dysku.
+upgrade.version3to4.msg = Krypta wymaga migracji do nowszej wersji. Nazwa folderu zaszyfrowanego zostanie zaktualizowana. Synchronizuj dane przed procesem.
+upgrade.version3to4.err.io = Błąd migracji  I/O Exception. Sprawdź logi
+settings.prefGvfsScheme.label = Schemat WebDAV
+# upgrade.fxml
+upgrade.confirmation.label = Tak, jestem pewien, że zakończyłem synchronizacje
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 73 - 17
main/ui/src/main/resources/localization/pt.txt

@@ -1,34 +1,90 @@
-# Copyright (c) 2016 The Cryptomator Contributors
-# This file is licensed under the terms of the MIT license.
-# See the LICENSE.txt file for more info.
-#
-# Contributors:
-#     Will
-#     André Di Biasi
-
 app.name = Cryptomator
+# main.fxml
+main.emptyListInstructions = Clique aqui para adicionar uma caixa-forte
 main.directoryList.contextMenu.remove = Remover da lista
 main.directoryList.contextMenu.changePassword = Alterar senha
+main.addDirectory.contextMenu.new = Criar nova caixa-forte
+main.addDirectory.contextMenu.open = Abrir caixa-forte existente
 # welcome.fxml
-welcome.checkForUpdates.label.currentlyChecking = Procurando atualizações...
+welcome.checkForUpdates.label.currentlyChecking = Buscando por atualizações...
+welcome.newVersionMessage = Versão %1$s pode ser abaixada. Esta é a versão %2$s.
 # initialize.fxml
 initialize.label.password = Senha
-initialize.label.retypePassword = Digite a senha novamente
+initialize.label.retypePassword = Redigitar senha
+initialize.button.ok = Criar caixa-forte
+initialize.messageLabel.alreadyInitialized = Caixa-forte já inicializada
+initialize.messageLabel.initializationFailed = Não pôde inicializar a caixa-forte. Ver arquivo de log para mais detalhes.
+# notfound.fxml
+notfound.label = A caixa-forte não pode ser encontrada. Ela foi movida?
+# upgrade.fxml
+upgrade.button = Atualizar caixa-forte
+upgrade.version3dropBundleExtension.msg = Esta caixa-forte tem que ser a migrada a um novo formato. "%1$s" será renomeada para "%2$s". Por favor assegure-se de que a sincronização foi finalizada antes de proceder com a migração.
+upgrade.version3dropBundleExtension.err.alreadyExists = A migração automática falhou. "%s" já existe.
 # unlock.fxml
 unlock.label.password = Senha
+unlock.label.mountName = Nome do drive
+unlock.label.winDriveLetter = Letra do drive
+unlock.label.downloadsPageLink = Todas as versões do Cryptomator
 unlock.label.advancedHeading = Opções avançadas
+unlock.button.unlock = Abrir caixa-forte
+unlock.button.advancedOptions.show = Mais opções
 unlock.button.advancedOptions.hide = Menos opções
 unlock.choicebox.winDriveLetter.auto = Atribuir automaticamente
-unlock.errorMessage.wrongPassword = Senha incorreta
-unlock.errorMessage.mountingFailed = Montagem falhou. Veja o arquivo de log para detalhes
-unlock.messageLabel.startServerFailed = Inicialização do servidor WEBDAV falhou
+unlock.errorMessage.wrongPassword = Senha errada
+unlock.errorMessage.mountingFailed = Falha ao montar. Ver arquivo de log para mais detalhes.
+unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Caixa-forte não suportada. Esta caixa-forte foi criada por uma versão antiga do Cryptomator.
+unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Caixa-forte não suportada. Esta caixa-forte foi criada por uma versão mais nova do Cryptomator.
+unlock.messageLabel.startServerFailed = Falha ao iniciar servidor WebDAV.
 # change_password.fxml
-changePassword.label.oldPassword = Senha antiga
+changePassword.label.oldPassword = Senha anterior
 changePassword.label.newPassword = Nova senha
-changePassword.label.retypePassword = Digite a senha novamente
+changePassword.label.retypePassword = Re-digitar senha
+changePassword.label.downloadsPageLink = Todas as versões do Cryptomator
 changePassword.button.change = Alterar senha
+changePassword.errorMessage.wrongPassword = Senha incorreta
+changePassword.errorMessage.decryptionFailed = Falha ao desencriptar
 changePassword.infoMessage.success = Senha alterada
-unlocked.label.revealFailed = Falha no comando
-unlocked.label.unmountFailed = Falha ao ejetar o drive
+# unlocked.fxml
+unlocked.button.lock = Fechar caixa-forte
+unlocked.moreOptions.reveal = Mostrar drive
+unlocked.moreOptions.copyUrl = Copiar URL WebDAV
+unlocked.label.revealFailed = Falha ao mostrar drive
+unlocked.label.unmountFailed = Falha ao ejetar drive
 unlocked.label.statsEncrypted = encriptado
+unlocked.label.statsDecrypted = desencriptado
+unlocked.ioGraph.yAxis.label = Taxa de transferência (MiB/s)
+# mac_warnings.fxml
+macWarnings.windowTitle = Perigo - Arquivo corrompido na %s
+macWarnings.message = Cryptomator detectou potenciais corrupções maliciosas nos seguintes arquivos\:
 macWarnings.moreInformationButton = Saiba mais
+macWarnings.whitelistButton = Desencriptar selecionado de qualquer modo
+# settings.fxml
+settings.version.label = Versão %s
+settings.checkForUpdates.label = Verificar por atualizações
+settings.port.label = Port WebDAV *
+settings.port.prompt = 0 \= Escolher automaticamente
+settings.useipv6.label = Usar IPv6 literal
+settings.requiresRestartLabel = * Cryptomator necessita ser reiniciado
+# tray icon
+tray.menu.open = Abrir
+tray.menu.quit = Sair
+tray.infoMsg.title = Ainda em execução
+tray.infoMsg.msg = Cryptomator ainda está ativo. Finalize-o a partir do ícone da bandeja.
+tray.infoMsg.msg.osx = Cryptomator ainda está ativo. Finalize-o a partir do ícone da barra de menu.
+initialize.messageLabel.passwordStrength.0 = Muito fraca
+initialize.messageLabel.passwordStrength.1 = Fraca
+initialize.messageLabel.passwordStrength.2 = Razoável
+initialize.messageLabel.passwordStrength.3 = Forte
+initialize.messageLabel.passwordStrength.4 = Muito forte
+initialize.label.doNotForget = IMPORTANTE\: se você esquecer a sua senha, não haverá como recuperar os seus dados.
+main.directoryList.remove.confirmation.title = Remover caixa-forte
+main.directoryList.remove.confirmation.header = Você realmente quer remover esta caixa-forte?
+main.directoryList.remove.confirmation.content = A caixa-forte somente será removida da lista. Para apagá-la permanentemente, por favor apagar os arquivos do seu sistema de arquivos.
+upgrade.version3to4.msg = Esta caixa-forte tem que ser migrada a um novo formato. Os nomes das pastas encriptadas serão atualizados. Por favor assegure-se de que a sincronização foi finalizada antes de proceder com a migração.
+upgrade.version3to4.err.io = Falha na migração devido a um erro de E/S. Ver arquivo de log para mais detalhes.
+settings.prefGvfsScheme.label = WebDAV scheme
+# upgrade.fxml
+upgrade.confirmation.label = Yes, I've made sure that synchronization has finished
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 7 - 1
main/ui/src/main/resources/localization/ru.txt

@@ -83,4 +83,10 @@ main.directoryList.remove.confirmation.title = Удаление хранилищ
 main.directoryList.remove.confirmation.header = Вы действительно хотите удалить это хранилище?
 main.directoryList.remove.confirmation.content = Хранилище будет удалено только из списка. Чтобы стереть его окончательно, удалите файлы из файловой системы.
 upgrade.version3to4.msg = Это хранилище требуется преобразовать в новый формат. Зашифрованные имена папок будут обновлены. Прежде чем продолжить, выполните синхронизацию.
-upgrade.version3to4.err.io = Преобразование не выполнено из-за ошибки ввода-вывода. См. подробности в файле-отчёте.
+upgrade.version3to4.err.io = Преобразование не выполнено из-за ошибки ввода-вывода. См. подробности в файле-отчёте.
+settings.prefGvfsScheme.label = Схема WebDAV
+# upgrade.fxml
+upgrade.confirmation.label = Да, синхронизация точно завершена
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 19 - 2
main/ui/src/main/resources/localization/sk.txt

@@ -22,7 +22,7 @@ notfound.label = Trezor nemohol byť nenájdený. Bol presunutý?
 # upgrade.fxml
 upgrade.button = Upgradnúť trezor
 upgrade.version3dropBundleExtension.msg = Tento trezor musí byť premigrovaný na nový formát. "%1$s" bude premenovaný na "%2$s". Prosím, uistite sa že je dokončená synchronizácia skôr než budete pokračovať.
-upgrade.version3dropBundleExtension.err.alreadyExists = Automatická migrácia zlyhala. "%s" už existuje. 
+upgrade.version3dropBundleExtension.err.alreadyExists = Automatická migrácia zlyhala. "%s" už existuje.
 # unlock.fxml
 unlock.label.password = Heslo
 unlock.label.mountName = Názov jednotky
@@ -73,4 +73,21 @@ tray.menu.open = Otvoriť
 tray.menu.quit = Vypnúť
 tray.infoMsg.title = Stále beží
 tray.infoMsg.msg = Cryptomator je stále spustený. Vypnite ho pomocou ikony v systémovej lište.
-tray.infoMsg.msg.osx = Cryptomator je stále sputený. Ukončite ho pomocou ikony v menu.
+tray.infoMsg.msg.osx = Cryptomator je stále sputený. Ukončite ho pomocou ikony v menu.
+initialize.messageLabel.passwordStrength.0 = Very weak
+initialize.messageLabel.passwordStrength.1 = Weak
+initialize.messageLabel.passwordStrength.2 = Fair
+initialize.messageLabel.passwordStrength.3 = Strong
+initialize.messageLabel.passwordStrength.4 = Very strong
+initialize.label.doNotForget = IMPORTANT\: If you forget your password, there is no way to recover your data.
+main.directoryList.remove.confirmation.title = Remove Vault
+main.directoryList.remove.confirmation.header = Do you really want to remove this vault?
+main.directoryList.remove.confirmation.content = The vault will only be removed from the list. To permanently delete it, please delete the files from your filesystem.
+upgrade.version3to4.msg = This vault needs to be migrated to a newer format.\nEncrypted folder names will be updated.\nPlease make sure synchronization has finished before proceeding.
+upgrade.version3to4.err.io = Migration failed due to an I/O Exception. See log file for details.
+settings.prefGvfsScheme.label = WebDAV scheme
+# upgrade.fxml
+upgrade.confirmation.label = Yes, I've made sure that synchronization has finished
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 7 - 1
main/ui/src/main/resources/localization/tr.txt

@@ -81,4 +81,10 @@ main.directoryList.remove.confirmation.title = Kasayı Sil
 main.directoryList.remove.confirmation.header = Kasayı silmek istediğinize emin misiniz ?
 main.directoryList.remove.confirmation.content = Kasa yalnızca listeden silinecek. Tamamen silmek için dosya sisteminizden dosyaları elle siliniz.
 upgrade.version3to4.msg = Bu kasanın yeni formata geçirilmesi gerekmekte. Şifreli klasör isimleri güncellenecek. Devam etmeden önce senkronizasyonun bittiğine emin olun.
-upgrade.version3to4.err.io = Format değiştirme işlemi I/O Hatası dolayısı ile başarısız oldu. Detaylar için log dosyasına bakın
+upgrade.version3to4.err.io = Format değiştirme işlemi I/O Hatası dolayısı ile başarısız oldu. Detaylar için log dosyasına bakın
+settings.prefGvfsScheme.label = WebDAV scheme
+# upgrade.fxml
+upgrade.confirmation.label = Yes, I've made sure that synchronization has finished
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 90 - 0
main/ui/src/main/resources/localization/uk.txt

@@ -0,0 +1,90 @@
+app.name = Cryptomator
+# main.fxml
+main.emptyListInstructions = Натисніть тут, щоб додати сховище
+main.directoryList.contextMenu.remove = Видалити зі списку
+main.directoryList.contextMenu.changePassword = Змінити пароль
+main.addDirectory.contextMenu.new = Створити нове сховище
+main.addDirectory.contextMenu.open = Відкрити існуюче сховище
+# welcome.fxml
+welcome.checkForUpdates.label.currentlyChecking = Перевірка оновлень...
+welcome.newVersionMessage = Доступна версія %1$s.\nВаша версія %2$s.
+# initialize.fxml
+initialize.label.password = Пароль
+initialize.label.retypePassword = Повторіть пароль
+initialize.button.ok = Створити сховище
+initialize.messageLabel.alreadyInitialized = Сховище вже ініціалізовано
+initialize.messageLabel.initializationFailed = Неможливо ініціалізувати сховище. Дивіться деталі в файлі-звіті.
+# notfound.fxml
+notfound.label = Сховище не знайдене. Воно було переміщене?
+# upgrade.fxml
+upgrade.button = Оновити сховище
+upgrade.version3dropBundleExtension.msg = Це сховище необхідно перетворити в новіший формат.\n"%1$s" буде перейменовано в "%2$s".\nПереконайтеся, що синхронізація завершена, перш ніж продовжити.
+upgrade.version3dropBundleExtension.err.alreadyExists = Автоматичне перетворення не виконане.\n"%s" вже існує.
+# unlock.fxml
+unlock.label.password = Пароль
+unlock.label.mountName = Ім'я диска
+unlock.label.winDriveLetter = Літера диска
+unlock.label.downloadsPageLink = Всі версії Cryptomator
+unlock.label.advancedHeading = Додаткові налаштування
+unlock.button.unlock = Розблокувати сховище
+unlock.button.advancedOptions.show = Більше налаштувань
+unlock.button.advancedOptions.hide = Менше налаштувань
+unlock.choicebox.winDriveLetter.auto = Призначити автоматично
+unlock.errorMessage.wrongPassword = Пароль невірний
+unlock.errorMessage.mountingFailed = Монтування невдале. Дивіться деталі в файлі-звіті.
+unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Сховище не підтримується. Воно було створене в старішій версії Cryptomator.
+unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Сховище не підтримується. Воно було створене в новішій версії Cryptomator.
+unlock.messageLabel.startServerFailed = Помилка запуску сервера WebDAV.
+# change_password.fxml
+changePassword.label.oldPassword = Старий пароль
+changePassword.label.newPassword = Новий пароль
+changePassword.label.retypePassword = Повторіть пароль
+changePassword.label.downloadsPageLink = Всі версії Cryptomator
+changePassword.button.change = Змінити пароль
+changePassword.errorMessage.wrongPassword = Пароль невірний
+changePassword.errorMessage.decryptionFailed = Розшифрування невдале
+changePassword.infoMessage.success = Пароль змінений
+# unlocked.fxml
+unlocked.button.lock = Заблокувати сховище
+unlocked.moreOptions.reveal = Відкрити накопичувач
+unlocked.moreOptions.copyUrl = Копіювати URL-адресу WebDAV
+unlocked.label.revealFailed = Команда невдала
+unlocked.label.unmountFailed = Вилучення диска невдале
+unlocked.label.statsEncrypted = зашифровано
+unlocked.label.statsDecrypted = розшифровано
+unlocked.ioGraph.yAxis.label = Пропускна спроможність (МіБ/с)
+# mac_warnings.fxml
+macWarnings.windowTitle = Небезпека - Пошкоджений файл в %s
+macWarnings.message = Cryptomator виявив потенційно небезпечні пошкодження в наступних файлах\:
+macWarnings.moreInformationButton = Докладніше
+macWarnings.whitelistButton = Розшифрувати обрані все одно
+# settings.fxml
+settings.version.label = Версія %s
+settings.checkForUpdates.label = Перевірити оновлення
+settings.port.label = Порт WebDAV *
+settings.port.prompt = 0 \= Обрати автоматично
+settings.useipv6.label = Використовувати IPv6
+settings.requiresRestartLabel = * Необхідне перезавантаження Cryptomator
+# tray icon
+tray.menu.open = Відкрити
+tray.menu.quit = Вихід
+tray.infoMsg.title = Ще працює
+tray.infoMsg.msg = Cryptomator все ще працює. Вийдіть за допомогою значка в області сповіщень.
+tray.infoMsg.msg.osx = Cryptomator все ще працює. Вийдіть за допомогою значка в рядку меню.
+initialize.messageLabel.passwordStrength.0 = Дуже слабкий
+initialize.messageLabel.passwordStrength.1 = Слабкий
+initialize.messageLabel.passwordStrength.2 = Прийнятний
+initialize.messageLabel.passwordStrength.3 = Сильний
+initialize.messageLabel.passwordStrength.4 = Дуже сильний
+initialize.label.doNotForget = ВАЖЛИВО\: Якщо ви забудете свій пароль, відновити дані буде неможливо.
+main.directoryList.remove.confirmation.title = Видалити сховище
+main.directoryList.remove.confirmation.header = Ви дійсно хочете видалити це сховище?
+main.directoryList.remove.confirmation.content = Сховище буде видалене тільки зі списку. Щоб стерти його остаточно, видаліть файли із файлової системи.
+upgrade.version3to4.msg = Це сховище необхідно перетворити в новий формат. Зашифровані імена папок будуть оновлені. Перш ніж продовжити, виконайте синхронізацію.
+upgrade.version3to4.err.io = Перетворення невдале через помилку введення-виведення. Дивіться деталі в файлі-звіті.
+settings.prefGvfsScheme.label = WebDAV scheme
+# upgrade.fxml
+upgrade.confirmation.label = Yes, I've made sure that synchronization has finished
+initialize.messageLabel.notEmpty = Vault not empty
+unlock.label.savePassword = Save password
+unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.

+ 1 - 1
main/ui/src/test/java/org/cryptomator/ui/LocalizationTest.java

@@ -31,7 +31,7 @@ public class LocalizationTest {
 	private static final Logger LOG = LoggerFactory.getLogger(LocalizationTest.class);
 	private static final String RESOURCE_FOLDER_PATH = "/localization/";
 	private static final String REF_FILE_NAME = "en.txt";
-	private static final String[] LANG_FILE_NAMES = {"de.txt", "es.txt", "fr.txt", "hu.txt", "it.txt", "kr.txt", "nl.txt", "pt.txt", "ru.txt", "sk.txt", "tr.txt"};
+	private static final String[] LANG_FILE_NAMES = {"de.txt", "es.txt", "fr.txt", "hu.txt", "it.txt", "kr.txt", "lv.txt", "nl.txt", "pl.txt", "pt.txt", "ru.txt", "sk.txt", "tr.txt", "uk.txt"};
 
 	/*
 	 * @see Formatter