diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java index e0379e9db..a33dbd5ee 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java @@ -52,10 +52,11 @@ public class DokanyVolume extends AbstractVolume { } @Override - public void reveal() throws VolumeException { - boolean success = mount.reveal(); - if (!success) { - throw new VolumeException("Reveal failed."); + public void reveal(Revealer revealer) throws VolumeException { + try { + mount.reveal(revealer::reveal); + } catch (Exception e) { + throw new VolumeException(e); } } @@ -79,6 +80,7 @@ public class DokanyVolume extends AbstractVolume { public boolean supportsForcedUnmount() { return true; } + @Override public boolean isSupported() { return DokanyVolume.isSupportedStatic(); diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java index e5c49d025..5400f8ff2 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java @@ -20,7 +20,6 @@ import javax.inject.Named; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -import java.util.SortedSet; import java.util.regex.Pattern; public class FuseVolume extends AbstractVolume { @@ -73,11 +72,10 @@ public class FuseVolume extends AbstractVolume { } @Override - public void reveal() throws VolumeException { + public void reveal(Revealer revealer) throws VolumeException { try { - mount.revealInFileManager(); - } catch (CommandFailedException e) { - LOG.debug("Revealing the vault in file manger failed: " + e.getMessage()); + mount.reveal(revealer::reveal); + } catch (Exception e) { throw new VolumeException(e); } } diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java b/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java index e30360e09..44c6897e4 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java @@ -162,8 +162,8 @@ public class Vault { destroyCryptoFileSystem(); } - public void reveal() throws VolumeException { - volume.reveal(); + public void reveal(Volume.Revealer vaultRevealer) throws VolumeException { + volume.reveal(vaultRevealer); } // ****************************************************************************** diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java index 624efea13..74a307d5a 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java @@ -34,7 +34,15 @@ public interface Volume { */ void mount(CryptoFileSystem fs, String mountFlags) throws IOException, VolumeException, InvalidMountPointException; - void reveal() throws VolumeException; + /** + * Reveals the mounted volume. + *

+ * The given {@code revealer} might be used to do it, but not necessarily. + * + * @param revealer An object capable of revealing the location of the mounted vault to view the content (e.g. in the default file browser). + * @throws VolumeException + */ + void reveal(Revealer revealer) throws VolumeException; void unmount() throws VolumeException; @@ -79,4 +87,14 @@ public interface Volume { } + /** + * Hides and unifies the different Revealer implementations in the different nio-adapters. + */ + @FunctionalInterface + interface Revealer { + + void reveal(Path p) throws VolumeException; + + } + } diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java index fe9246085..8b4f27fdb 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java @@ -17,6 +17,7 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.file.Path; import java.util.Optional; +import java.util.function.Supplier; public class WebDavVolume implements Volume { @@ -25,21 +26,27 @@ public class WebDavVolume implements Volume { private final Provider serverProvider; private final VaultSettings vaultSettings; private final Settings settings; + private final WindowsDriveLetters windowsDriveLetters; private WebDavServer server; private WebDavServletController servlet; private Mounter.Mount mount; - private Path mountPoint; @Inject - public WebDavVolume(Provider serverProvider, VaultSettings vaultSettings, Settings settings) { + public WebDavVolume(Provider serverProvider, VaultSettings vaultSettings, Settings settings, WindowsDriveLetters windowsDriveLetters) { this.serverProvider = serverProvider; this.vaultSettings = vaultSettings; this.settings = settings; + this.windowsDriveLetters = windowsDriveLetters; } @Override public void mount(CryptoFileSystem fs, String mountFlags) throws VolumeException { + startServlet(fs); + mountServlet(); + } + + private void startServlet(CryptoFileSystem fs){ if (server == null) { server = serverProvider.get(); } @@ -50,32 +57,38 @@ public class WebDavVolume implements Volume { String urlConformMountName = acceptable.negate().collapseFrom(vaultSettings.mountName().get(), '_'); servlet = server.createWebDavServlet(fs.getPath("/"), vaultSettings.getId() + "/" + urlConformMountName); servlet.start(); - mount(); } - private void mount() throws VolumeException { + private void mountServlet() throws VolumeException { if (servlet == null) { throw new IllegalStateException("Mounting requires unlocked WebDAV servlet."); } + + //on windows, prevent an automatic drive letter selection in the upstream library. Either we choose already a specifc one or there is no free. + Supplier driveLetterSupplier; + if(System.getProperty("os.name").toLowerCase().contains("windows") && vaultSettings.winDriveLetter().isEmpty().get()) { + driveLetterSupplier = () -> windowsDriveLetters.getAvailableDriveLetter().orElse(null); + } else { + driveLetterSupplier = () -> vaultSettings.winDriveLetter().get(); + } + MountParams mountParams = MountParams.create() // - .withWindowsDriveLetter(vaultSettings.winDriveLetter().get()) // + .withWindowsDriveLetter(driveLetterSupplier.get()) // .withPreferredGvfsScheme(settings.preferredGvfsScheme().get().getPrefix())// .withWebdavHostname(getLocalhostAliasOrNull()) // .build(); try { this.mount = servlet.mount(mountParams); // might block this thread for a while } catch (Mounter.CommandFailedException e) { - e.printStackTrace(); throw new VolumeException(e); } } @Override - public void reveal() throws VolumeException { + public void reveal(Revealer revealer) throws VolumeException { try { - mount.reveal(); - } catch (Mounter.CommandFailedException e) { - e.printStackTrace(); + mount.reveal(revealer::reveal); + } catch (Exception e) { throw new VolumeException(e); } } @@ -102,7 +115,7 @@ public class WebDavVolume implements Volume { @Override public Optional getMountPoint() { - return Optional.ofNullable(mountPoint); //TODO + return mount.getMountPoint(); } @Override diff --git a/main/pom.xml b/main/pom.xml index f99c65e01..26a093185 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -29,9 +29,9 @@ 0.2.1 0.1.0-beta3 0.1.0-beta2 - 1.2.6 - 1.2.1 - 1.0.14 + 1.2.8 + 1.2.3 + 1.1.1 15 diff --git a/main/ui/src/main/java/org/cryptomator/ui/common/HostServiceRevealer.java b/main/ui/src/main/java/org/cryptomator/ui/common/HostServiceRevealer.java new file mode 100644 index 000000000..829480592 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/common/HostServiceRevealer.java @@ -0,0 +1,25 @@ +package org.cryptomator.ui.common; + +import dagger.Lazy; +import org.cryptomator.common.vaults.Volume; +import org.cryptomator.ui.fxapp.FxApplicationScoped; + +import javax.inject.Inject; +import javafx.application.Application; +import java.nio.file.Path; + +@FxApplicationScoped +public class HostServiceRevealer implements Volume.Revealer { + + private final Lazy application; + + @Inject + public HostServiceRevealer(Lazy application) { + this.application = application; + } + + @Override + public void reveal(Path p) throws Volume.VolumeException { + application.get().getHostServices().showDocument(p.toUri().toString()); + } +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/common/VaultService.java b/main/ui/src/main/java/org/cryptomator/ui/common/VaultService.java index 1f4ffc3fd..57393b858 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/common/VaultService.java +++ b/main/ui/src/main/java/org/cryptomator/ui/common/VaultService.java @@ -23,10 +23,12 @@ public class VaultService { private static final Logger LOG = LoggerFactory.getLogger(VaultService.class); private final ExecutorService executorService; + private final HostServiceRevealer vaultRevealer; @Inject - public VaultService(ExecutorService executorService) { + public VaultService(ExecutorService executorService, HostServiceRevealer vaultRevealer) { this.executorService = executorService; + this.vaultRevealer = vaultRevealer; } public void reveal(Vault vault) { @@ -39,7 +41,7 @@ public class VaultService { * @param vault The vault to reveal */ public Task createRevealTask(Vault vault) { - Task task = new RevealVaultTask(vault); + Task task = new RevealVaultTask(vault, vaultRevealer); task.setOnSucceeded(evt -> LOG.info("Revealed {}", vault.getDisplayName())); task.setOnFailed(evt -> LOG.error("Failed to reveal " + vault.getDisplayName(), evt.getSource().getException())); return task; @@ -99,19 +101,22 @@ public class VaultService { private static class RevealVaultTask extends Task { private final Vault vault; + private final Volume.Revealer revealer; /** * @param vault The vault to lock + * @param revealer The object to use to show the vault content to the user. */ - public RevealVaultTask(Vault vault) { + public RevealVaultTask(Vault vault, Volume.Revealer revealer) { this.vault = vault; + this.revealer = revealer; setOnFailed(evt -> LOG.error("Failed to reveal " + vault.getDisplayName(), getException())); } @Override protected Vault call() throws Volume.VolumeException { - vault.reveal(); + vault.reveal(revealer); return vault; } } diff --git a/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuComponent.java b/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuComponent.java index a4e068f8d..c4cbfd456 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuComponent.java +++ b/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuComponent.java @@ -7,7 +7,6 @@ package org.cryptomator.ui.traymenu; import dagger.Lazy; import dagger.Subcomponent; - import java.awt.SystemTray; @TrayMenuScoped diff --git a/main/ui/src/main/resources/i18n/strings_de.properties b/main/ui/src/main/resources/i18n/strings_de.properties index 275235776..9e78da0f0 100644 --- a/main/ui/src/main/resources/i18n/strings_de.properties +++ b/main/ui/src/main/resources/i18n/strings_de.properties @@ -286,7 +286,7 @@ vaultOptions.mount.mountPoint.directoryPickerButton=Durchsuchen … vaultOptions.mount.mountPoint.directoryPickerTitle=Wähle ein leeres Verzeichnis ## Master Key vaultOptions.masterkey=Passwort -vaultOptions.masterkey.changePasswordBtn=Password ändern +vaultOptions.masterkey.changePasswordBtn=Passwort ändern vaultOptions.masterkey.forgetSavedPasswordBtn=Gespeichertes Passwort vergessen vaultOptions.masterkey.recoveryKeyExpanation=Bei Verlust deines Passworts ist ein Wiederherstellungsschlüssel deine einzige Möglichkeit, den Zugriff auf einen Tresor wiederherzustellen. vaultOptions.masterkey.showRecoveryKeyBtn=Wiederherstellungsschlüssel anzeigen diff --git a/main/ui/src/main/resources/i18n/strings_hu.properties b/main/ui/src/main/resources/i18n/strings_hu.properties new file mode 100644 index 000000000..02db56bf8 --- /dev/null +++ b/main/ui/src/main/resources/i18n/strings_hu.properties @@ -0,0 +1,308 @@ +# Locale Specific CSS files such as CJK, RTL,... +additionalStyleSheets= + +# Generics +## Button +generic.button.apply=Alkalmaz +generic.button.back=Vissza +generic.button.cancel=Mégse +generic.button.change=Változtat +generic.button.close=Bezár +generic.button.copy=Másolás +generic.button.copied=Másolva! +generic.button.done=Kész +generic.button.next=Következő +generic.button.print=Nyomtatás +## Error +generic.error.title=Egy váratlan hiba történt +generic.error.instruction=Ennek nem lett volna szabad megtörténnie. Kérjük jelezze a hibát az alábbi szöveggel valamint a hiba reprodukálásához szükséges lépésekkel. + +# Defaults +defaults.vault.vaultName=Széf + +# Tray Menu +traymenu.showMainWindow=Megmutatás +traymenu.showPreferencesWindow=Beállítások +traymenu.lockAllVaults=Az összes zárolása +traymenu.quitApplication=Kilépés +traymenu.vault.unlock=Feloldás +traymenu.vault.lock=Zárolás +traymenu.vault.reveal=Megmutatás + +# Add Vault Wizard +addvaultwizard.title=Széf hozzáadása +## Welcome +addvaultwizard.welcome.newButton=Új széf létrehozása +addvaultwizard.welcome.existingButton=Meglévő széf megnyitása +## New +### Name +addvaultwizard.new.nameInstruction=Válasszon egy nevet az új széf számára +addvaultwizard.new.namePrompt=A széf neve +### Location +addvaultwizard.new.locationInstruction=Hova mentse a Cryptomator a széf titkosított fájljait? +addvaultwizard.new.locationLabel=Tárolási hely +addvaultwizard.new.locationPrompt=… +addvaultwizard.new.directoryPickerLabel=Egyedi hely +addvaultwizard.new.directoryPickerButton=Választás… +addvaultwizard.new.directoryPickerTitle=Könyvtár kiválasztása +addvaultwizard.new.fileAlreadyExists=Nem lehet a széfet létrehozni ezen a helyen, mert egy fájl már létezik itt. +addvaultwizard.new.locationDoesNotExist=Nem lehet a széfet létrehozni ezen a helyen, mert az útvonal legalább egy darabja nem létezik. +addvaultwizard.new.invalidName=Érvénytelen széf elnevezés. Kérjük vegye figyelembe a szabályos könyvtárelnevezésre vonatkozó szabályokat. +### Password +addvaultwizard.new.createVaultBtn=Széf létrehozása +addvaultwizard.new.generateRecoveryKeyChoice=Nem fog tudni hozzáférni az adataihoz a jelszó nélkül. Akar egy visszaállítási kulcsot arra az esetre, ha elveszíti a jelszavát? +addvaultwizard.new.generateRecoveryKeyChoice.yes=Igen kérem, jobb félni, mint megijedni. +addvaultwizard.new.generateRecoveryKeyChoice.no=Nem köszönöm, nem fogom elveszíteni a jelszavam. +### Information +addvault.new.readme.storageLocation.fileName=FONTOS.rtf +addvault.new.readme.storageLocation.1=⚠️ SZÉF FÁJLOK ⚠️ +addvault.new.readme.storageLocation.2=Ez a széfjének a tárolási helye. +addvault.new.readme.storageLocation.3=NE +addvault.new.readme.storageLocation.4=• ne módosítson semmilyen fájlt ebbe a könyvtárba +addvault.new.readme.storageLocation.5=• ne tegyen titkosítani való fájlokat ebbe a könyvtárba +addvault.new.readme.storageLocation.6=Ha fájlokat akr titkosítani és a széf tartalmát akarja szerkeszteni akkor tegye a következőt: +addvault.new.readme.storageLocation.7=1. Adja hozzá a széfet a Cryptomator-hoz. +addvault.new.readme.storageLocation.8=2. Nyissa meg a széfet a Cryptomator-ban. +addvault.new.readme.storageLocation.9=3. Nyissa meg a hozzáférési helyet a "Megjelenítés" gombra való kattintással. +addvault.new.readme.storageLocation.10=Ha segítségre van szüksége, akkor látogasson el a dokumentáció oldalára: %s +addvault.new.readme.accessLocation.fileName=ÜDVÖZÖLJÜK.rtf +addvault.new.readme.accessLocation.1=🔐️ TITKOSÍTOTT KÖTET 🔐️ +addvault.new.readme.accessLocation.2=Ez a széf hozzáférési helye. +addvault.new.readme.accessLocation.3=Bármilyen, a kötethez hozzáadott fájl titkosításra kerül a Cryptomator által. Úgy dolgozhat vele, mint minden más meghajtóval/mappával. Ez az egyetlen dekódolt tartalmi nézet. A fájlai folyamatosan titkosítva maradnak a merevlemezén. +addvault.new.readme.accessLocation.4=Bátran eltávolíthatja ezt a fájlt. +## Existing +addvaultwizard.existing.instruction=Válassza ki a már létező széfjéhez tartozó "masterkey.cryptomator" fájlt. +addvaultwizard.existing.chooseBtn=Kiválaszt… +addvaultwizard.existing.filePickerTitle=Mesterkulcs fájl kiválasztása +## Success +addvaultwizard.success.nextStepsInstructions=Széf létrehozva "%s".\nA tartalom eléréséhez, vagy hozzáadásához fel kell oldania a széfet. Alternatív megoldásként később bármikor feloldhatja. +addvaultwizard.success.unlockNow=Azonnali feloldás + +# Remove Vault +removeVault.title=Széf eltávolitása +removeVault.information=Ez kizárolag a Cryptomator-ból távolitja el ezt a széfet. Később hozzáadhatja újra. A titkosított fájlokat nem törli a merevlemezről. +removeVault.confirmBtn=Széf eltávolitása + +# Change Password +changepassword.title=Jelszó megváltoztatása +changepassword.enterOldPassword=Írja be a jelenlegi jelszavat a következő széfhez "%s" +changepassword.finalConfirmation=Megértettem, hogy nem fogok hozzáférni az adataimhoz amennyiben elfelejtem a jelszavam + +# Forget Password +forgetPassword.title=Jelszó elfelejtése +forgetPassword.information=Eltávolítja a széf mentett jelszavát a rendszere kulcstartójából. +forgetPassword.confirmBtn=Jelszó elfelejtése + +# Unlock +unlock.title=Széf feloldása +unlock.passwordPrompt=Írja be a jelszavát a következő széfhez "%s": +unlock.savePassword=Jelszó mentése +unlock.unlockBtn=Feloldás +## Success +unlock.success.message="%s" sikreresen feloldásra került! Mostmár hozzáférhet a széféhez. +unlock.success.rememberChoice=Jegyezze meg a választást és ne mutassa többet +unlock.success.revealBtn=Széf megjelenítése +## Failure +unlock.error.heading=Nem lehet feloldani a széfet +### Invalid Mount Point +unlock.error.invalidMountPoint.notExisting=A csatolási pont "%s" nem egy könyvtár, nem üres vagy nem létezik. +unlock.error.invalidMountPoint.existing=A csatolási pont "%s" már létezik vagy a already exists or szülőmappa hiányzik. + +# Migration +migration.title=Széf frissítése +## Start +migration.start.prompt=A "%s" széf formátuma frissítésre szorul. A folytatás előtt győződjön meg arról, hogy nincs függőben lévő szinkronizálás, amely befolyásolja ezt a széfet. +migration.start.confirm=Igen, a széfem teljes mértékben szinkronizálva van +## Run +migration.run.enterPassword=Írja be a jelszót a következőhöz Enter the password for "%s" +migration.run.startMigrationBtn=Széf migrációja +migration.run.progressHint=Ez eltarthat egy darabig… +## Sucess +migration.success.nextStepsInstructions=A "%s" sikeresen migrálva. \nMost már feloldhatja a széfet. +migration.success.unlockNow=Azonnali feloldás +## Missing file system capabilities +migration.error.missingFileSystemCapabilities.title=Nem támogatott fájlrendszer +migration.error.missingFileSystemCapabilities.description=A migráció nem kezdődött el, mert a széf nem megfelelő fájlrendszeren található. +migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=A fájlrendszer nem támogatja a hosszú fájlneveket. +migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=A fájlrendszer nem támogatja a hosszú útvonalakat. +migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=A fájlrendszer nem teszi lehetővé az olvasást. +migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=A fájlrendszer nem teszi lehetővé az írást. +## Impossible +migration.impossible.heading=A széf frissítése sikertelen +migration.impossible.reason=A széfet nem lehet automatikusan frissíteni, mert a tárolási helye vagy a hozzáférési pontja nem kompatibilis. +migration.impossible.moreInfo=A széf továbbra is megnyitható marad egy régebbi verzióval. A széf kézi frissítésével kapcsolatos utasításokért keresse fel a következő címet: + +# Preferences +preferences.title=Beállítások +## General +preferences.general=Általános +preferences.general.theme=Megjelenés +preferences.general.theme.automatic=Autómatikus +preferences.general.theme.light=Világos +preferences.general.theme.dark=Sötét +preferences.general.unlockThemes=Sötét mód feloldása +preferences.general.startHidden=Az ablak elrejtése a Cryptomator indítása után +preferences.general.debugLogging=Hibakeresési naplózás engedélyezése +preferences.general.debugDirectory=Naplófájlok megjelenítése +preferences.general.autoStart=Cryptomator indítása a rendszerrel együtt +preferences.general.keychainBackend=Itt tárolja a jelszavakat +preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome Keyring +preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE Wallet +preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS Keychain Access +preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Windows Data Protection +preferences.general.interfaceOrientation=Felhasználói felület orientációja +preferences.general.interfaceOrientation.ltr=Balról jobbra +preferences.general.interfaceOrientation.rtl=Jobbról balra +## Volume +preferences.volume=Virtuális meghajtó +preferences.volume.type=Kötet tipusa +preferences.volume.webdav.port=WebDAV Port +preferences.volume.webdav.scheme=WebDAV Scheme +## Updates +preferences.updates=Frissítések +preferences.updates.currentVersion=Jelenlegi verzió: %s +preferences.updates.autoUpdateCheck=Frissítések autómatikus keresése +preferences.updates.checkNowBtn=Ellenőrzés most +preferences.updates.updateAvailable=Frissítés a %s verzióra elérhető. +## Donation Key +preferences.donationKey=Adomány +preferences.donationKey.registeredFor=Regisztrálva %s számára +preferences.donationKey.noDonationKey=Nem található érvényes adománykulcs. Mint egy licenckulcs, csak olyan nagyszerű emberek számára, akik ingyenes szofvereket használnak. ;-) +preferences.donationKey.getDonationKey=Adománykulcs beszerzése +## About +preferences.about=Rólunk + +# Vault Statistics +stats.title=Statisztika ehhez %s +stats.cacheHitRate=Gyorsítótár találati arány +## Read +stats.read.throughput.idle=Olvasás: tétlen +stats.read.throughput.kibs=Olvasás: %.2f kiB/s +stats.read.throughput.mibs=Olvasás: %.2f MiB/s +stats.read.total.data.none=Olvasott adat: - +stats.read.total.data.kib=Olvasott adat: %.1f kiB +stats.read.total.data.mib=Olvasott adat: %.1f MiB +stats.read.total.data.gib=Olvasott adat: %.1f GiB +stats.decr.total.data.none=Dekódolt adat: - +stats.decr.total.data.kib=Dekódolt adat: %.1f kiB +stats.decr.total.data.mib=Dekódolt adat: %.1f MiB +stats.decr.total.data.gib=Dekódolt adat: %.1f GiB +stats.read.accessCount=Összes olvasás: %d +## Write +stats.write.throughput.idle=Írás: tétlen +stats.write.throughput.kibs=Írás: %.2f kiB/s +stats.write.throughput.mibs=Írás: %.2f MiB/s +stats.write.total.data.none=Írott adat: - +stats.write.total.data.kib=Írott adat: %.1f kiB +stats.write.total.data.mib=Írott adat: %.1f MiB +stats.write.total.data.gib=Írott adat: %.1f GiB +stats.encr.total.data.none=Titkosított adat: - +stats.encr.total.data.kib=Titkosított adat: %.1f kiB +stats.encr.total.data.mib=Titkosított adat: %.1f MiB +stats.encr.total.data.gib=Titkosított adat: %.1f GiB +stats.write.accessCount=Összes írás: %d + +# Main Window +main.closeBtn.tooltip=Bezárás +main.minimizeBtn.tooltip=Minimalizálás +main.preferencesBtn.tooltip=Beállítások +main.debugModeEnabled.tooltip=A hibakeresési mód aktiválva van +main.donationKeyMissing.tooltip=Kérjük, fontolja meg az adományozást +## Drag 'n' Drop +main.dropZone.dropVault=Adja hozzá ezt a széfet +main.dropZone.unknownDragboardContent=Ha egy széfet szeretne hozzáadni, akkor húzza át erre az ablakra. +## Vault List +main.vaultlist.emptyList.onboardingInstruction=Kattintson ide egy széf hozzáadásához +main.vaultlist.contextMenu.remove=Széf eltávolítása… +main.vaultlist.addVaultBtn=Széf hozzáadása +## Vault Detail +### Welcome +main.vaultDetail.welcomeOnboarding=Köszönjük, hogy a Cryptomator programot választotta a fájlai védelmére. Ha segítségre van szüksége, akkor olvassa el a kezdő útmutatónk lépéseit: +### Locked +main.vaultDetail.lockedStatus=ZÁROLVA +main.vaultDetail.unlockBtn=Feloldás… +main.vaultDetail.unlockNowBtn=Azonnali feloldás +main.vaultDetail.optionsBtn=Széf beállítások +main.vaultDetail.passwordSavedInKeychain=Jelszó mentve +### Unlocked +main.vaultDetail.unlockedStatus=FELOLDVA +main.vaultDetail.accessLocation=A széf tartalma itt érhető el: +main.vaultDetail.revealBtn=Széf megjelenítése +main.vaultDetail.lockBtn=Zárolás +main.vaultDetail.bytesPerSecondRead=Olvasás: +main.vaultDetail.bytesPerSecondWritten=Írás: +main.vaultDetail.throughput.idle=tétlen +main.vaultDetail.throughput.kbps=%.1f kiB/s +main.vaultDetail.throughput.mbps=%.1f MiB/s +main.vaultDetail.stats=Széf statisztika +### Missing +main.vaultDetail.missing.info=A Cryptomator nem talált széfet ezen az útvonalon. +main.vaultDetail.missing.recheck=Ellenőrizze újra +main.vaultDetail.missing.remove=A széf eltávolítása a listából… +main.vaultDetail.missing.changeLocation=A széf helyének megváltoztatása… +### Needs Migration +main.vaultDetail.migrateButton=Széf frissítése +main.vaultDetail.migratePrompt=A széfet új formátumra kell frissíteni, mielőtt hozzáférhet + +# Wrong File Alert +wrongFileAlert.title=Hogyan lehet fájlokat titkosítani +wrongFileAlert.header.title=Próbálta ezeket a fájlokat titkosítani? +wrongFileAlert.header.lead=Erre a célra a Cryptomator egy kötetet biztosít a rendszer fájlkezelőjében. +wrongFileAlert.instruction.0=Hogy titkosítsa a fájlokat kövesse a következő lépéseket: +wrongFileAlert.instruction.1=1. Oldja fel a széfet. +wrongFileAlert.instruction.2=2. Kattintson a "Megjelenítés" gombra, hogy megnyissa a kötetet a fájlkezelőjében. +wrongFileAlert.instruction.3=3. Adjon hozzá fájlokat a kötethez. +wrongFileAlert.link=További segítségért látogasson el ide + +# Vault Options +## General +vaultOptions.general=Általános +vaultOptions.general.vaultName=A széf neve +vaultOptions.general.unlockAfterStartup=A széf feloldása a Cryptomator indításakor +vaultOptions.general.actionAfterUnlock=Sikeres feloldás után +vaultOptions.general.actionAfterUnlock.ignore=Ne tegyen semmit +vaultOptions.general.actionAfterUnlock.reveal=Jelenítse meg a kötetet +vaultOptions.general.actionAfterUnlock.ask=Kérdezzen +## Mount +vaultOptions.mount=Csatolás +vaultOptions.mount.readonly=Csak olvasható +vaultOptions.mount.customMountFlags=Egyedi csatolási paraméterek +vaultOptions.mount.winDriveLetterOccupied=foglalt +vaultOptions.mount.mountPoint=Csatolási pont +vaultOptions.mount.mountPoint.auto=Válasszon egy megfelelő helyet autómatikusan +vaultOptions.mount.mountPoint.driveLetter=Használja a kiválasztott meghajtó betűjelét +vaultOptions.mount.mountPoint.custom=Egyedi útvonal +vaultOptions.mount.mountPoint.directoryPickerButton=Kiválasztás… +vaultOptions.mount.mountPoint.directoryPickerTitle=Válasszon egy üres könyvtárat +## Master Key +vaultOptions.masterkey=Jelszó +vaultOptions.masterkey.changePasswordBtn=Jelszó megváltoztatása +vaultOptions.masterkey.forgetSavedPasswordBtn=Elmentett jelszó elfelejtése +vaultOptions.masterkey.recoveryKeyExpanation=A helyreállítási kulcs az egyetlen módja annak, hogy visszaállítsa a széfhez való hozzáférést, ha elveíti a jelszavát. +vaultOptions.masterkey.showRecoveryKeyBtn=Visszaállítási kulcs megjelenítése +vaultOptions.masterkey.recoverPasswordBtn=Jelszó visszaállítása + +# Recovery Key +recoveryKey.title=Visszaállítási kulcs +recoveryKey.enterPassword.prompt=Írja be a jelszavát a "%s" visszaállítási kulcsának megjelenítéséhez: +recoveryKey.display.message=A következő helyreállítási kulcs használható a "%s" hozzáférésének visszaállítására: +recoveryKey.display.StorageHints=Tartsa nagyon biztonságos helyen. pl.:\n •Tárolja egy jelszókezelővel\n •Mentse el egy USB meghajtóra\n •Nyomtassa egy papírra +recoveryKey.recover.prompt=Írja be a visszaállítási kulcsát a következőhöz "%s": +recoveryKey.recover.validKey=Ez egy érvényes visszaállítási kulcs +recoveryKey.printout.heading=Cryptomator visszaállítási kulcs\n"%s"\n + +# New Password +newPassword.promptText=Írja be az új jelszavát +newPassword.reenterPassword=Erősítse meg az új jelszavát +newPassword.passwordsMatch=A jelszavak megegyeznek! +newPassword.passwordsDoNotMatch=A jelszavak nem egyeznek meg +passwordStrength.messageLabel.tooShort=Használjon legalább %d karaktert +passwordStrength.messageLabel.0=Nagyon gyenge +passwordStrength.messageLabel.1=Gyenge +passwordStrength.messageLabel.2=Átlagos +passwordStrength.messageLabel.3=Erős +passwordStrength.messageLabel.4=Nagyon erős + +# Quit +quit.prompt=Kilép az alkalmazásból? Vannak még lezáratlan széfek. +quit.lockAndQuit=Zárolás és kilépés diff --git a/main/ui/src/main/resources/i18n/strings_ja.properties b/main/ui/src/main/resources/i18n/strings_ja.properties index 696a18616..867112a56 100644 --- a/main/ui/src/main/resources/i18n/strings_ja.properties +++ b/main/ui/src/main/resources/i18n/strings_ja.properties @@ -105,6 +105,7 @@ unlock.success.revealBtn=金庫を表示 unlock.error.heading=金庫の解錠に失敗 ### Invalid Mount Point unlock.error.invalidMountPoint.notExisting=マウントポイントが空のディレクトリか存在していません: %s +unlock.error.invalidMountPoint.existing=マウント ポイント "%s" が既に存在するか、親フォルダーがありません。 # Lock ## Force diff --git a/main/ui/src/main/resources/i18n/strings_nb.properties b/main/ui/src/main/resources/i18n/strings_nb.properties index bd97b4d00..ad6e8f8cf 100644 --- a/main/ui/src/main/resources/i18n/strings_nb.properties +++ b/main/ui/src/main/resources/i18n/strings_nb.properties @@ -109,9 +109,12 @@ unlock.error.invalidMountPoint.existing=Monteringspunktet "%s" finnes enten alle # Lock ## Force +lock.forced.heading=Låsingen mislyktes +lock.forced.message=Låsing "%s" ble blokkert av ventende operasjoner eller åpne filer. Du kan tvinge låsing av dette hvelvet, men avbrytelse av I/O kan føre til tap av ulagrede data. lock.forced.confirmBtn=Tving låsing ## Failure lock.fail.heading=Låsing av hvelvet mislyktes. +lock.fail.message=Hvelvet "%s" kunne ikke låses. Forsikre deg om at ulagrede arbeider lagres andre steder, og at viktige lese/skrive-operasjoner er fullført. For å lukke hvelvet må du avbryte Cryptomatorprosessen. # Migration migration.title=Oppgrader hvelv @@ -146,11 +149,17 @@ preferences.general.theme.automatic=Automatisk preferences.general.theme.light=Lys preferences.general.theme.dark=Mørk preferences.general.unlockThemes=Lås opp mørk modus +preferences.general.showMinimizeButton=Vis minimerknapp +preferences.general.showTrayIcon=Vis verktøykasseikon (krever omstart) preferences.general.startHidden=Skjul vinduet når du starter Cryptomator preferences.general.debugLogging=Aktiver loggføring av feilsøk preferences.general.debugDirectory=Vis loggfiler preferences.general.autoStart=Start Cryptomator ved systemstart preferences.general.keychainBackend=Lagre passord med +preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome Keyring +preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE Wallet +preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS nøkkelringtilgang +preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Windows Data Protection preferences.general.interfaceOrientation=Grensesnittorientering preferences.general.interfaceOrientation.ltr=Fra venstre til høyre preferences.general.interfaceOrientation.rtl=Fra høyre til venstre diff --git a/main/ui/src/main/resources/license/THIRD-PARTY.txt b/main/ui/src/main/resources/license/THIRD-PARTY.txt index b4f3ee28e..30a364776 100644 --- a/main/ui/src/main/resources/license/THIRD-PARTY.txt +++ b/main/ui/src/main/resources/license/THIRD-PARTY.txt @@ -11,7 +11,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. -Cryptomator uses 47 third-party dependencies under the following licenses: +Cryptomator uses 46 third-party dependencies under the following licenses: Apache License v2.0: - jffi (com.github.jnr:jffi:1.2.23 - http://github.com/jnr/jffi) - jnr-a64asm (com.github.jnr:jnr-a64asm:1.0.0 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-a64asm) @@ -26,7 +26,6 @@ Cryptomator uses 47 third-party dependencies under the following licenses: - Guava ListenableFuture only (com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava - https://github.com/google/guava/listenablefuture) - J2ObjC Annotations (com.google.j2objc:j2objc-annotations:1.3 - https://github.com/google/j2objc/) - Apache Commons CLI (commons-cli:commons-cli:1.4 - http://commons.apache.org/proper/commons-cli/) - - Apache Commons IO (commons-io:commons-io:2.6 - http://commons.apache.org/proper/commons-io/) - javax.inject (javax.inject:javax.inject:1 - http://code.google.com/p/atinject/) - Java Native Access (net.java.dev.jna:jna:5.6.0 - https://github.com/java-native-access/jna) - Java Native Access Platform (net.java.dev.jna:jna-platform:5.5.0 - https://github.com/java-native-access/jna)