Merge branch 'release/1.6.4'

This commit is contained in:
Armin Schrenk
2021-12-02 12:24:47 +01:00
61 changed files with 952 additions and 122 deletions

View File

@@ -39,15 +39,11 @@ jobs:
profile: mac
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
- uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: ${{ env.JAVA_VERSION }}
- uses: actions/cache@v2
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
cache: 'maven'
- name: Ensure to use tagged version
run: mvn versions:set -DnewVersion=${GITHUB_REF##*/} # use shell parameter expansion to strip of 'refs/tags'
if: startsWith(github.ref, 'refs/tags/')
@@ -156,8 +152,9 @@ jobs:
--resource-dir dist/mac/resources
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
- uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: ${{ env.JAVA_VERSION }}
- name: Download ${{ matrix.profile }}-buildkit
uses: actions/download-artifact@v2
@@ -207,7 +204,7 @@ jobs:
ppa:
name: Upload source package to PPA
needs: [buildkit, metadata]
runs-on: ubuntu-latest
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: install build tools
@@ -502,8 +499,9 @@ jobs:
name: win-appdir
- name: Untar appdir.tar
run: tar -xvf appdir.tar
- uses: actions/setup-java@v1
- uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: ${{ env.JAVA_VERSION }}
- name: Patch Application Directory
run: |

View File

@@ -28,6 +28,14 @@ Cryptomator is provided free of charge as an open-source project despite the hig
### Silver Sponsors
<table>
<tbody>
<tr>
<td><a href="https://mowcapital.com/"><img src="https://cryptomator.org/img/sponsors/mowcapital.svg" alt="Mow Capital" height="40"></a></td>
</tr>
</tbody>
</table>
- [Jameson Lopp](https://www.lopp.net/)
---

View File

@@ -1,4 +1,4 @@
cryptomator (${PPA_VERSION}) focal; urgency=low
cryptomator (${PPA_VERSION}) bionic; urgency=low
* Full changelog can be found on https://github.com/cryptomator/cryptomator/releases

View File

@@ -1,3 +1,4 @@
# created during build
runtime/
*.app/
dmg/
*.dmg

28
dist/mac/dmg/build.sh vendored
View File

@@ -16,13 +16,14 @@ shift "$((OPTIND-1))"
# prepare working dir and variables
cd $(dirname $0)
rm -rf runtime *.app
rm -rf runtime dmg
REVISION_NO=`git rev-list --count HEAD`
VERSION_NO=`mvn -f../../../pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout | sed -rn 's/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/p'`
# check preconditions
if [ -z "${JAVA_HOME}" ]; then echo "JAVA_HOME not set. Run using JAVA_HOME=/path/to/jdk ./build.sh"; exit 1; fi
command -v mvn >/dev/null 2>&1 || { echo >&2 "mvn not found."; exit 1; }
command -v create-dmg >/dev/null 2>&1 || { echo >&2 "create-dmg not found."; exit 1; }
if [ -n "${CODESIGN_IDENTITY}" ]; then
command -v codesign >/dev/null 2>&1 || { echo >&2 "codesign not found. Fix by 'xcode-select --install'."; exit 1; }
if [[ ! `security find-identity -v -p codesigning | grep -w "${CODESIGN_IDENTITY}"` ]]; then echo "Given codesign identity is invalid."; exit 1; fi
@@ -59,6 +60,7 @@ ${JAVA_HOME}/bin/jpackage \
--java-options "-Dcryptomator.appVersion=\"${VERSION_NO}\"" \
--app-version "${VERSION_NO}" \
--java-options "-Dfile.encoding=\"utf-8\"" \
--java-options "-Dapple.awt.enableTemplateImages=true" \
--java-options "-Dcryptomator.logDir=\"~/Library/Logs/Cryptomator\"" \
--java-options "-Dcryptomator.pluginDir=\"~/Library/Application Support/Cryptomator/Plugins\"" \
--java-options "-Dcryptomator.settingsPath=\"~/Library/Application Support/Cryptomator/settings.json\"" \
@@ -94,3 +96,27 @@ if [ -n "${CODESIGN_IDENTITY}" ]; then
echo "Codesigning Cryptomator.app..."
codesign --force --deep --entitlements ../Cryptomator.entitlements -o runtime -s ${CODESIGN_IDENTITY} Cryptomator.app
fi
# prepare dmg contents
mkdir dmg
mv Cryptomator.app dmg
cp resources/macFUSE.webloc dmg
# create dmg
create-dmg \
--volname Cryptomator \
--volicon "resources/Cryptomator-Volume.icns" \
--background "resources/Cryptomator-background.tiff" \
--window-pos 400 100 \
--window-size 640 694 \
--icon-size 128 \
--icon "Cryptomator.app" 128 245 \
--hide-extension "Cryptomator.app" \
--icon "macFUSE.webloc" 320 501 \
--hide-extension "macFUSE.webloc" \
--app-drop-link 512 245 \
--eula "resources/license.rtf" \
--icon ".background" 128 758 \
--icon ".fseventsd" 320 758 \
--icon ".VolumeIcon.icns" 512 758 \
Cryptomator-${VERSION_NO}.dmg dmg

3
dist/win/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
runtime
Cryptomator
installer

2
dist/win/build.bat vendored Normal file
View File

@@ -0,0 +1,2 @@
@echo off
powershell -NoLogo -NoExit -ExecutionPolicy Unrestricted -Command .\build.ps1

90
dist/win/build.ps1 vendored Normal file
View File

@@ -0,0 +1,90 @@
# check preconditions
if ((Get-Command "git" -ErrorAction SilentlyContinue) -eq $null)
{
Write-Host "Unable to find git.exe in your PATH (try: choco install git)"
exit 1
}
if ((Get-Command "mvn" -ErrorAction SilentlyContinue) -eq $null)
{
Write-Host "Unable to find mvn.cmd in your PATH (try: choco install maven)"
exit 1
}
$buildDir = Split-Path -Parent $PSCommandPath
$version = $(mvn -f $buildDir/../../pom.xml help:evaluate -Dexpression="project.version" -q -DforceStdout)
$semVerNo = $version -replace '(\d\.\d\.\d).*','$1'
$revisionNo = $(git rev-list --count HEAD)
Write-Output "`$version=$version"
Write-Output "`$semVerNo=$semVerNo"
Write-Output "`$revisionNo=$revisionNo"
Write-Output "`$buildDir=$buildDir"
Write-Output "`$Env:JAVA_HOME=$Env:JAVA_HOME"
# compile
&mvn -B -f $buildDir/../../pom.xml clean package -DskipTests -Pwin
Copy-Item "$buildDir\..\..\target\cryptomator-*.jar" -Destination "$buildDir\..\..\target\mods"
# add runtime
& "$Env:JAVA_HOME\bin\jlink" `
--verbose `
--output runtime `
--module-path "$Env:JAVA_HOME/jmods" `
--add-modules java.base,java.desktop,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility `
--no-header-files `
--no-man-pages `
--strip-debug `
--compress=1
# create app dir
& "$Env:JAVA_HOME\bin\jpackage" `
--verbose `
--type app-image `
--runtime-image runtime `
--input ../../target/libs `
--module-path ../../target/mods `
--module org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator `
--dest . `
--name Cryptomator `
--vendor "Skymatic GmbH" `
--copyright "(C) 2016 - 2021 Skymatic GmbH" `
--java-options "-Xss5m" `
--java-options "-Xmx256m" `
--java-options "-Dcryptomator.appVersion=`"$semVerNo`"" `
--app-version "$semVerNo.$revisionNo" `
--java-options "-Dfile.encoding=`"utf-8`"" `
--java-options "-Dcryptomator.logDir=`"~/AppData/Roaming/Cryptomator`"" `
--java-options "-Dcryptomator.pluginDir=`"~/AppData/Roaming/Cryptomator/Plugins`"" `
--java-options "-Dcryptomator.settingsPath=`"~/AppData/Roaming/Cryptomator/settings.json`"" `
--java-options "-Dcryptomator.ipcSocketPath=`"~/AppData/Roaming/Cryptomator/ipc.socket`"" `
--java-options "-Dcryptomator.keychainPath=`"~/AppData/Roaming/Cryptomator/keychain.json`"" `
--java-options "-Dcryptomator.mountPointsDir=`"~/Cryptomator`"" `
--java-options "-Dcryptomator.showTrayIcon=true" `
--java-options "-Dcryptomator.buildNumber=`"msi-$revisionNo`"" `
--resource-dir resources `
--icon resources/Cryptomator.ico
# patch app dir
Copy-Item "contrib\*" -Destination "Cryptomator"
attrib -r "Cryptomator\Cryptomator.exe"
# create .msi bundle
$Env:JP_WIXWIZARD_RESOURCES = "$buildDir\resources"
& "$Env:JAVA_HOME\bin\jpackage" `
--verbose `
--type msi `
--win-upgrade-uuid bda45523-42b1-4cae-9354-a45475ed4775 `
--app-image Cryptomator `
--dest installer `
--name Cryptomator `
--vendor "Skymatic GmbH" `
--copyright "(C) 2016 - 2021 Skymatic GmbH" `
--app-version "$semVerNo" `
--win-menu `
--win-dir-chooser `
--win-shortcut-prompt `
--win-update-url "https:\\cryptomator.org" `
--win-menu-group Cryptomator `
--resource-dir resources `
--license-file resources/license.rtf `
--file-associations resources/FAvaultFile.properties

3
dist/win/contrib/patchWebDAV.bat vendored Normal file
View File

@@ -0,0 +1,3 @@
@echo off
cd %~dp0
powershell -NoLogo -NonInteractive -ExecutionPolicy Unrestricted -Command .\patchWebDAV.ps1

61
dist/win/contrib/patchWebDAV.ps1 vendored Normal file
View File

@@ -0,0 +1,61 @@
#Requires -RunAsAdministrator
# Adds for address 127.0.0.1 the 'cryptomator-vault' alias to the hosts file
function Add-AliasToHost {
$sysdir = [Environment]::SystemDirectory
$hostsFile = "$sysdir\drivers\etc\hosts"
$aliasLine = '127.0.0.1 cryptomator-vault'
foreach ($line in Get-Content $hostsFile) {
if ($line -eq $aliasLine){
return
}
}
Add-Content -Path $hostsFile -Encoding ascii -Value "`r`n$aliasLine"
}
# Sets in the registry the webclient file size limit to the maximum value
function Set-WebDAVFileSizeLimit {
# Set variables to indicate value and key to set
$RegistryPath = 'HKLM:\SYSTEM\CurrentControlSet\Services\WebClient\Parameters'
$Name = 'FileSizeLimitInBytes'
$Value = '0xffffffff'
# Create the key if it does not exist
If (-NOT (Test-Path $RegistryPath)) {
New-Item -Path $RegistryPath -Force | Out-Null
}
# Now set the value
New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force | Out-Null
}
# Changes the network provider order such that the builtin Windows webclient is always first
function Edit-ProviderOrder {
$RegistryPath = 'HKLM:\SYSTEM\CurrentControlSet\Control\NetworkProvider\HwOrder'
$Name = 'ProviderOrder'
$WebClientString = 'webclient'
$CurrentOrder = (Get-ItemProperty $RegistryPath $Name).$Name
$OrderWithoutWebclientArray = $CurrentOrder -split ',' | Where-Object {$_ -ne $WebClientString}
$WebClientArray = @($WebClientString)
$UpdatedOrder = ($WebClientArray + $OrderWithoutWebclientArray) -join ","
New-ItemProperty -Path $RegistryPath -Name $Name -Value $UpdatedOrder -PropertyType String -Force | Out-Null
}
Add-AliasToHost
Write-Output 'Ensured alias exists in hosts file'
Set-WebDAVFileSizeLimit
Write-Output 'Set WebDAV file size limit'
Edit-ProviderOrder
Write-Output 'Ensured correct provider order'
exit 0

View File

@@ -124,6 +124,9 @@
<CustomAction Id="JpSetARPURLUPDATEINFO" Property="ARPURLUPDATEINFO" Value="$(var.JpUpdateURL)" />
<?endif?>
<!-- WebDAV patches -->
<CustomAction Id="PatchWebDAV" Impersonate="no" ExeCommand="[INSTALLDIR]patchWebDAV.bat" Directory="INSTALLDIR" Execute="deferred" Return="asyncWait" />
<?ifdef JpIcon ?>
<Property Id="ARPPRODUCTICON" Value="JpARPPRODUCTICON"/>
<Icon Id="JpARPPRODUCTICON" SourceFile="$(var.JpIcon)"/>
@@ -153,6 +156,8 @@
<Custom Action="JpDisallowDowngrade" After="FindRelatedProducts">JP_DOWNGRADABLE_FOUND</Custom>
<?endif?>
<RemoveExistingProducts Before="CostInitialize"/>
<Custom Action="PatchWebDAV" After="InstallFiles">NOT Installed OR REINSTALL</Custom>
</InstallExecuteSequence>
<WixVariable Id="WixUIBannerBmp" Value="$(env.JP_WIXWIZARD_RESOURCES)\banner.bmp" />

14
pom.xml
View File

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.cryptomator</groupId>
<artifactId>cryptomator</artifactId>
<version>1.6.3</version>
<version>1.6.4</version>
<name>Cryptomator Desktop App</name>
<organization>
@@ -27,8 +27,8 @@
<nonModularGroupIds>com.github.serceman,com.github.jnr,org.ow2.asm,net.java.dev.jna,org.apache.jackrabbit,org.apache.httpcomponents,de.swiesend,org.purejava,com.github.hypfvieh</nonModularGroupIds>
<!-- cryptomator dependencies -->
<cryptomator.cryptofs.version>2.1.1</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.0.0</cryptomator.integrations.version>
<cryptomator.cryptofs.version>2.3.0</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.1.0-beta1</cryptomator.integrations.version>
<cryptomator.integrations.win.version>1.0.0</cryptomator.integrations.win.version>
<cryptomator.integrations.mac.version>1.0.0</cryptomator.integrations.mac.version>
<cryptomator.integrations.linux.version>1.0.1</cryptomator.integrations.linux.version>
@@ -37,16 +37,16 @@
<cryptomator.webdav.version>1.2.6</cryptomator.webdav.version>
<!-- 3rd party dependencies -->
<javafx.version>17.0.0.1</javafx.version>
<javafx.version>17.0.1</javafx.version>
<commons-lang3.version>3.12.0</commons-lang3.version>
<jwt.version>3.18.2</jwt.version>
<easybind.version>2.2</easybind.version>
<guava.version>31.0-jre</guava.version>
<dagger.version>2.39</dagger.version>
<gson.version>2.8.8</gson.version>
<dagger.version>2.40.3</dagger.version>
<gson.version>2.8.9</gson.version>
<zxcvbn.version>1.5.2</zxcvbn.version>
<slf4j.version>1.7.32</slf4j.version>
<logback.version>1.2.6</logback.version>
<logback.version>1.2.7</logback.version>
<!-- test dependencies -->
<junit.jupiter.version>5.8.1</junit.jupiter.version>

View File

@@ -49,6 +49,12 @@ public class KeychainManager implements KeychainAccessProvider {
setPassphraseStored(key, true);
}
@Override
public void storePassphrase(String key, String displayName, CharSequence passphrase) throws KeychainAccessException {
getKeychainOrFail().storePassphrase(key, displayName, passphrase);
setPassphraseStored(key, true);
}
@Override
public char[] loadPassphrase(String key) throws KeychainAccessException {
char[] passphrase = getKeychainOrFail().loadPassphrase(key);
@@ -70,6 +76,14 @@ public class KeychainManager implements KeychainAccessProvider {
}
}
@Override
public void changePassphrase(String key, String displayName, CharSequence passphrase) throws KeychainAccessException {
if (isPassphraseStored(key)) {
getKeychainOrFail().changePassphrase(key, displayName, passphrase);
setPassphraseStored(key, true);
}
}
@Override
public boolean isSupported() {
return keychain.getValue() != null;

View File

@@ -2,7 +2,7 @@ package org.cryptomator.ui.changepassword;
import org.cryptomator.common.keychain.KeychainManager;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.cryptofs.common.MasterkeyBackupHelper;
import org.cryptomator.cryptofs.common.BackupHelper;
import org.cryptomator.cryptolib.api.CryptoException;
import org.cryptomator.cryptolib.api.InvalidPassphraseException;
import org.cryptomator.cryptolib.common.MasterkeyFileAccess;
@@ -83,7 +83,7 @@ public class ChangePasswordController implements FxController {
Path masterkeyPath = vault.getPath().resolve(MASTERKEY_FILENAME);
byte[] oldMasterkeyBytes = Files.readAllBytes(masterkeyPath);
byte[] newMasterkeyBytes = masterkeyFileAccess.changePassphrase(oldMasterkeyBytes, oldPassphrase, newPassphrase);
Path backupKeyPath = vault.getPath().resolve(MASTERKEY_FILENAME + MasterkeyBackupHelper.generateFileIdSuffix(oldMasterkeyBytes) + MASTERKEY_BACKUP_SUFFIX);
Path backupKeyPath = vault.getPath().resolve(MASTERKEY_FILENAME + BackupHelper.generateFileIdSuffix(oldMasterkeyBytes) + MASTERKEY_BACKUP_SUFFIX);
Files.move(masterkeyPath, backupKeyPath, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE);
Files.write(masterkeyPath, newMasterkeyBytes, StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE);
LOG.info("Successfully changed password for {}", vault.getDisplayName());
@@ -102,7 +102,7 @@ public class ChangePasswordController implements FxController {
private void updatePasswordInSystemkeychain() {
if (keychain.isSupported() && !keychain.isLocked()) {
try {
keychain.changePassphrase(vault.getId(), newPasswordController.passwordField.getCharacters());
keychain.changePassphrase(vault.getId(), vault.getDisplayName(), newPasswordController.passwordField.getCharacters());
LOG.info("Successfully updated password in system keychain for {}", vault.getDisplayName());
} catch (KeychainAccessException e) {
LOG.error("Failed to update password in system keychain.", e);

View File

@@ -1,5 +1,6 @@
package org.cryptomator.ui.common;
import org.cryptomator.common.Environment;
import org.cryptomator.common.ErrorCode;
import org.cryptomator.common.Nullable;
@@ -25,7 +26,11 @@ public class ErrorController implements FxController {
private static final String REPORT_URL_FORMAT = "https://github.com/cryptomator/cryptomator/discussions/new?category=Errors&title=Error+%s&body=%s";
private static final String SEARCH_ERRORCODE_DELIM = " OR ";
private static final String REPORT_BODY_TEMPLATE = """
OS: %s / %s
App: %s / %s
<!-- ✏️ Please describe what happened as accurately as possible. -->
<!-- 📋 Please also copy and paste the detail text from the error window. -->
""";
@@ -34,16 +39,18 @@ public class ErrorController implements FxController {
private final ErrorCode errorCode;
private final Scene previousScene;
private final Stage window;
private final Environment environment;
private BooleanProperty copiedDetails = new SimpleBooleanProperty();
@Inject
ErrorController(Application application, @Named("stackTrace") String stackTrace, ErrorCode errorCode, @Nullable Scene previousScene, Stage window) {
ErrorController(Application application, @Named("stackTrace") String stackTrace, ErrorCode errorCode, @Nullable Scene previousScene, Stage window, Environment environment) {
this.application = application;
this.stackTrace = stackTrace;
this.errorCode = errorCode;
this.previousScene = previousScene;
this.window = window;
this.environment = environment;
}
@FXML
@@ -67,7 +74,12 @@ public class ErrorController implements FxController {
@FXML
public void reportError() {
var title = URLEncoder.encode(getErrorCode(), StandardCharsets.UTF_8);
var body = URLEncoder.encode(REPORT_BODY_TEMPLATE, StandardCharsets.UTF_8);
var enhancedTemplate = String.format(REPORT_BODY_TEMPLATE, //
System.getProperty("os.name"), //
System.getProperty("os.version"), //
environment.getAppVersion().orElse("undefined"), //
environment.getBuildNumber().orElse("undefined"));
var body = URLEncoder.encode(enhancedTemplate, StandardCharsets.UTF_8);
application.getHostServices().showDocument(REPORT_URL_FORMAT.formatted(title, body));
}

View File

@@ -16,7 +16,11 @@ public class UserInteractionLock<E extends Enum> {
private volatile E state;
public UserInteractionLock(E initialValue) {
state = initialValue;
this.state = initialValue;
}
public synchronized void reset(E value) {
this.state = value;
}
public void interacted(E result) {

View File

@@ -47,7 +47,7 @@ class MasterkeyFileLoadingFinisher {
private void savePasswordToSystemkeychain() {
if (keychain.isSupported()) {
try {
keychain.storePassphrase(vault.getId(), CharBuffer.wrap(enteredPassword.get()));
keychain.storePassphrase(vault.getId(), vault.getDisplayName(), CharBuffer.wrap(enteredPassword.get()));
} catch (KeychainAccessException e) {
LOG.error("Failed to store passphrase in system keychain.", e);
}

View File

@@ -3,6 +3,7 @@ package org.cryptomator.ui.keyloading.masterkeyfile;
import com.google.common.base.Preconditions;
import dagger.Lazy;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.cryptofs.common.BackupHelper;
import org.cryptomator.cryptolib.api.InvalidPassphraseException;
import org.cryptomator.cryptolib.api.Masterkey;
import org.cryptomator.cryptolib.api.MasterkeyLoadingFailedException;
@@ -20,6 +21,7 @@ import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.Window;
import java.io.IOException;
import java.net.URI;
import java.nio.CharBuffer;
import java.nio.file.Files;
@@ -61,14 +63,24 @@ public class MasterkeyFileLoadingStrategy implements KeyLoadingStrategy {
@Override
public Masterkey loadKey(URI keyId) throws MasterkeyLoadingFailedException {
Preconditions.checkArgument(SCHEME.equalsIgnoreCase(keyId.getScheme()), "Only supports keys with scheme " + SCHEME);
try {
Path filePath = vault.getPath().resolve(keyId.getSchemeSpecificPart());
if (!Files.exists(filePath)) {
filePath = getAlternateMasterkeyFilePath();
}
CharSequence passphrase = getPassphrase();
return masterkeyFileAccess.load(filePath, passphrase);
var masterkey = masterkeyFileAccess.load(filePath, passphrase);
//backup
if (filePath.startsWith(vault.getPath())) {
try {
BackupHelper.attemptBackup(filePath);
} catch (IOException e) {
LOG.warn("Unable to create backup for masterkey file.");
}
} else {
LOG.info("Masterkey file not stored inside vault. Not creating a backup.");
}
return masterkey;
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new UnlockCancelledException("Unlock interrupted", e);

View File

@@ -35,7 +35,13 @@ public class LockForcedController implements FxController {
}
@FXML
public void confirmForcedLock() {
public void retry() {
forceLockDecisionLock.interacted(LockModule.ForceLockDecision.RETRY);
window.close();
}
@FXML
public void force() {
forceLockDecisionLock.interacted(LockModule.ForceLockDecision.FORCE);
window.close();
}
@@ -54,4 +60,8 @@ public class LockForcedController implements FxController {
return vault.getDisplayName();
}
public boolean isForceSupported() {
return vault.supportsForcedUnmount();
}
}

View File

@@ -28,6 +28,7 @@ abstract class LockModule {
enum ForceLockDecision {
CANCEL,
RETRY,
FORCE;
}

View File

@@ -51,20 +51,26 @@ public class LockWorkflow extends Task<Void> {
@Override
protected Void call() throws Volume.VolumeException, InterruptedException, LockNotCompletedException {
try {
vault.lock(false);
} catch (Volume.VolumeException | LockNotCompletedException e) {
LOG.debug("Regular lock of {} failed.", vault.getDisplayName(), e);
var decision = askUserForAction();
switch (decision) {
case FORCE -> vault.lock(true);
case CANCEL -> cancel(false);
}
}
lock(false);
return null;
}
private void lock(boolean forced) throws InterruptedException {
try {
vault.lock(forced);
} catch (Volume.VolumeException | LockNotCompletedException e) {
LOG.info("Locking {} failed (forced: {}).", vault.getDisplayName(), forced, e);
var decision = askUserForAction();
switch (decision) {
case RETRY -> lock(false);
case FORCE -> lock(true);
case CANCEL -> cancel(false);
}
}
}
private LockModule.ForceLockDecision askUserForAction() throws InterruptedException {
forceLockDecisionLock.reset(null);
// show forcedLock dialogue ...
Platform.runLater(() -> {
lockWindow.setScene(lockForcedScene.get());

View File

@@ -34,10 +34,10 @@ public class SupporterCertificateController implements FxController {
public void initialize() {
supporterCertificateField.setText(licenseHolder.getLicenseKey().orElse(null));
supporterCertificateField.textProperty().addListener(this::registrationKeyChanged);
supporterCertificateField.setTextFormatter(new TextFormatter<>(this::checkVaultNameLength));
supporterCertificateField.setTextFormatter(new TextFormatter<>(this::removeWhitespaces));
}
private TextFormatter.Change checkVaultNameLength(TextFormatter.Change change) {
private TextFormatter.Change removeWhitespaces(TextFormatter.Change change) {
if (change.isContentChange()) {
var strippedText = CharMatcher.whitespace().removeFrom(change.getText());
change.setText(strippedText);

View File

@@ -2,7 +2,7 @@ package org.cryptomator.ui.recoverykey;
import com.google.common.base.Preconditions;
import com.google.common.hash.Hashing;
import org.cryptomator.cryptofs.common.MasterkeyBackupHelper;
import org.cryptomator.cryptofs.common.BackupHelper;
import org.cryptomator.cryptolib.api.CryptoException;
import org.cryptomator.cryptolib.api.InvalidPassphraseException;
import org.cryptomator.cryptolib.api.Masterkey;
@@ -86,7 +86,7 @@ public class RecoveryKeyFactory {
if (Files.exists(masterkeyPath)) {
byte[] oldMasterkeyBytes = Files.readAllBytes(masterkeyPath);
// TODO: deduplicate with ChangePasswordController:
Path backupKeyPath = vaultPath.resolve(MASTERKEY_FILENAME + MasterkeyBackupHelper.generateFileIdSuffix(oldMasterkeyBytes) + MASTERKEY_BACKUP_SUFFIX);
Path backupKeyPath = vaultPath.resolve(MASTERKEY_FILENAME + BackupHelper.generateFileIdSuffix(oldMasterkeyBytes) + MASTERKEY_BACKUP_SUFFIX);
Files.move(masterkeyPath, backupKeyPath, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE);
}
masterkeyFileAccess.persist(masterkey, masterkeyPath, newPassword);

View File

@@ -47,7 +47,7 @@ public class GeneralVaultOptionsController implements FxController {
public void initialize() {
vaultName.textProperty().set(vault.getVaultSettings().displayName().get());
vaultName.focusedProperty().addListener(this::trimVaultNameOnFocusLoss);
vaultName.setTextFormatter(new TextFormatter<>(this::removeWhitespaces));
vaultName.setTextFormatter(new TextFormatter<>(this::checkVaultNameLength));
unlockOnStartupCheckbox.selectedProperty().bindBidirectional(vault.getVaultSettings().unlockAfterStartup());
actionAfterUnlockChoiceBox.getItems().addAll(WhenUnlocked.values());
actionAfterUnlockChoiceBox.valueProperty().bindBidirectional(vault.getVaultSettings().actionAfterUnlock());
@@ -63,7 +63,7 @@ public class GeneralVaultOptionsController implements FxController {
}
}
private TextFormatter.Change removeWhitespaces(TextFormatter.Change change) {
private TextFormatter.Change checkVaultNameLength(TextFormatter.Change change) {
if (change.isContentChange() && change.getControlNewText().length() > VAULTNAME_TRUNCATE_THRESHOLD) {
return null; // reject any change that would lead to a text exceeding threshold
} else {

View File

@@ -33,11 +33,11 @@
</HBox>
<VBox alignment="BOTTOM_CENTER" VBox.vgrow="ALWAYS">
<ButtonBar buttonMinWidth="120" buttonOrder="+CI">
<ButtonBar buttonMinWidth="100" buttonOrder="+CIU">
<buttons>
<Button text="%generic.button.cancel" ButtonBar.buttonData="CANCEL_CLOSE" defaultButton="true" cancelButton="true" onAction="#cancel"/>
<!-- TODO: third button with retry? -->
<Button text="%lock.forced.confirmBtn" ButtonBar.buttonData="FINISH" onAction="#confirmForcedLock"/>
<Button text="%lock.forced.retryBtn" ButtonBar.buttonData="FINISH" onAction="#retry"/>
<Button text="%lock.forced.forceBtn" ButtonBar.buttonData="OTHER" onAction="#force" disable="${!controller.forceSupported}"/>
</buttons>
</ButtonBar>
</VBox>

View File

@@ -118,9 +118,10 @@ unlock.error.invalidMountPoint.existing=Mount point "%s" already exists or paren
# Lock
## Force
lock.forced.heading=Graceful lock failed
lock.forced.heading=Lock failed
lock.forced.message=Locking "%s" was blocked by pending operations or open files. You can force lock this vault, however interrupting I/O may result in the loss of unsaved data.
lock.forced.confirmBtn=Force Lock
lock.forced.retryBtn=Retry
lock.forced.forceBtn=Force Lock
## Failure
lock.fail.heading=Locking vault failed.
lock.fail.message=Vault "%s" could not be locked. Ensure unsaved work is saved elsewhere and important Read/Write operations are finished. In order to close the vault, kill the Cryptomator process.

View File

@@ -108,9 +108,8 @@ unlock.error.invalidMountPoint.existing=نقطة/مجلد التحميل موج
# Lock
## Force
lock.forced.heading=فشل عملية القفل
lock.forced.message=تم حظر قفل "%s" بواسطة العمليات المعلقة أو الملفات المفتوحة. يمكنك فرض قفل هذا المخزن، ولكن مقاطعة عمليات الادخال والاخراج I/O قد تؤدي لفقدان البيانات غير المحفوظة.
lock.forced.confirmBtn=فرض القفل
lock.forced.retryBtn=اعد المحاولة
## Failure
lock.fail.heading=فشلت عملية اقفال الخزنة.
lock.fail.message=فشل عملية قفل %s". تأكد من حفظ العمل غير المحفوظ في مكان آخر وأن العمليات الهامة للقراءة/الكتابة قد انتهت. من أجل إغلاق المخزن، اقتل تطبيق Cryptomator.

View File

@@ -108,9 +108,7 @@ unlock.error.invalidMountPoint.existing=Tačka povezivanja "%s" već postoji ili
# Lock
## Force
lock.forced.heading=Zaključavanje nije uspjelo
lock.forced.message=Zaključavanje "%s" blokirano je operacijama na čekanju ili otvorenim datotekama. Možete prisilno zaključati ovaj sef, međutim prekid U / I-a može rezultirati gubitkom nespremljenih podataka.
lock.forced.confirmBtn=Prisilno zaključaj
## Failure
lock.fail.heading=Zaključavanje sefa nije uspjelo.
lock.fail.message=Sef "%s" nije moguće zaključati. Osigurajte da je nespremljeni rad sačuvan negdje drugdje i da su važne operacije čitanja / pisanja završene. Da biste zatvorili sef, zaustavite Cryptomator proces.

View File

@@ -75,7 +75,9 @@ addvault.new.readme.accessLocation.2=Aquesta és la ubicació d'accès de la vos
addvault.new.readme.accessLocation.3=Cryptomator xifra tots els fitxers afegits a aquest volum. Podeu treballar en aquest volum com en qualsevol altra unitat o carpeta. La vista mostra el contingut desxifrat però els fitxers sempre estan xifrats en el vostre disc dur.
addvault.new.readme.accessLocation.4=Pots esborrar aquest fitxer si vols.
## Existing
addvaultwizard.existing.instruction=Selecciona el fitxer "vault.cryptomator" de la teva caixa forta. Si només existeix un fitxer anomenat "masterkey.cryptomator", selecciona aquest.
addvaultwizard.existing.chooseBtn=Trieu…
addvaultwizard.existing.filePickerTitle=Selecciona el fitxer de la Caixa forta
## Success
addvaultwizard.success.nextStepsInstructions=S'ha afegit la caixa forta "%s".\nHeu de desbloquejar-la si voleu accedir-hi o afegir nou contingut. També podeu desbloquejar-la en qualsevol altre moment.
addvaultwizard.success.unlockNow=Desbloqueja ara
@@ -115,9 +117,10 @@ unlock.error.invalidMountPoint.existing=El punt de muntatge o la carpeta ja exis
# Lock
## Force
lock.forced.heading=Ha fallat el blocatge
lock.forced.heading=El bloqueig ha fallat
lock.forced.message=No s'ha blocat "%s" perquè hi ha operacions pendents o fitxers oberts. Podeu forçar-ne el blocatge però heu de saber que interrompre l'entrada/sortida pot produir la pèrdua de dades.
lock.forced.confirmBtn=Força el blocatge
lock.forced.retryBtn=Reintenta
lock.forced.forceBtn=Forçar bloqueig
## Failure
lock.fail.heading=Ha fallat el blocatge de la caixa forta.
lock.fail.message=La caixa forta "%s" no s'ha pogut blocar. Assegureu-vos que el treball s'ha desat en algun altre lloc i que les operacions de lectura/escriptura han acabat. Per tal de tancar la caixa, mateu el procés Cryptomator.

View File

@@ -117,9 +117,10 @@ unlock.error.invalidMountPoint.existing=Připojovací bod %s již existuje nebo
# Lock
## Force
lock.forced.heading=Běžné uzamčení selhalo
lock.forced.heading=Zamknutí se nezdařilo
lock.forced.message=Uzamčení "%s" bylo zablokováno nevyřízenými operacemi nebo otevřenými soubory. Můžete vynutit uzamčení tohoto trezoru, ale přerušení I/O může mít za následek ztrátu neuložených dat.
lock.forced.confirmBtn=Přesto uzamknout
lock.forced.retryBtn=Opakovat
lock.forced.forceBtn=Přesto uzamknout
## Failure
lock.fail.heading=Uzamčení trezoru selhalo.
lock.fail.message=Trezor "%s" nelze uzamknout. Ujistěte se, že je neuložená práce uložena jinde a že jsou dokončeny důležité operace čtení/zápis. Za účelem uzavření trezoru ukončte proces Cryptomatoru.
@@ -301,6 +302,7 @@ main.vaultDetail.migrateButton=Upgrade trezoru
main.vaultDetail.migratePrompt=Váš trezor musí být aktualizován na nový formát, než k němu budete mít přístup
### Error
main.vaultDetail.error.reload=Obnovit
main.vaultDetail.error.windowTitle=Chyba při načítání trezoru
# Wrong File Alert
wrongFileAlert.title=Jak šifrovat soubory

View File

@@ -75,7 +75,7 @@ addvault.new.readme.accessLocation.2=Dies ist der Zugangsort deines Tresors.
addvault.new.readme.accessLocation.3=Alle zu diesem Laufwerk hinzugefügten Dateien werden von Cryptomator verschlüsselt. Du kannst mit diesem arbeiten wie mit jedem anderen Laufwerk bzw. Ordner. Dies ist lediglich eine unverschlüsselte Ansicht des Laufwerkinhalts; auf deiner Festplatte bleiben deine Dateien weiterhin verschlüsselt.
addvault.new.readme.accessLocation.4=Diese Datei kannst du löschen.
## Existing
addvaultwizard.existing.instruction=Wähle die Datei "vault.cryptomator" deines bestehenden Tresors aus. Falls nur eine Datei mit der Bezeichnung "masterkey.cryptomator" vorhanden sein sollte, nutze stattdessen diese.
addvaultwizard.existing.instruction=Wähle die Datei "vault.cryptomator" deines bestehenden Tresors aus. Falls nur eine Datei mit der Bezeichnung "masterkey.cryptomator" vorhanden ist, nutze stattdessen diese.
addvaultwizard.existing.chooseBtn=Durchsuchen…
addvaultwizard.existing.filePickerTitle=Tresor Datei auswählen
## Success
@@ -119,7 +119,8 @@ unlock.error.invalidMountPoint.existing=Einhängepunkt/Ordner bereits vorhanden
## Force
lock.forced.heading=Sperren fehlgeschlagen
lock.forced.message=Aufgrund von Zugriffen laufender Prozesse oder geöffneter Dateien konnte „%s“ nicht gesperrt werden. Du kannst das Sperren dieses Tresors erzwingen, allerdings kann dies zum Verlust ungespeicherter Daten führen.
lock.forced.confirmBtn=Sperren erzwingen
lock.forced.retryBtn=Wiederholen
lock.forced.forceBtn=Sperren erzwingen
## Failure
lock.fail.heading=Tresor konnte nicht gesperrt werden.
lock.fail.message=Der Tresor „%s“ konnte nicht gesperrt werden. Stelle sicher, dass du deine ungespeicherte Arbeit an anderer Stelle speicherst und wichtige Lese-/Schreibvorgänge abgeschlossen sind. Um den Tresor zu schließen, beende den Cryptomator-Prozess.
@@ -191,7 +192,7 @@ preferences.general.theme.automatic=Automatisch
preferences.general.theme.light=Hell
preferences.general.theme.dark=Dunkel
preferences.general.unlockThemes=Dunklen Modus freischalten
preferences.general.showMinimizeButton=Minimieren-Schaltfläche anzeigen
preferences.general.showMinimizeButton=Schaltfläche zum Minimieren anzeigen
preferences.general.showTrayIcon=Symbol im Infobereich anzeigen (Neustart erforderlich)
preferences.general.startHidden=Cryptomator im Hintergrund starten
preferences.general.debugLogging=Diagnoseprotokoll aktivieren

View File

@@ -117,9 +117,10 @@ unlock.error.invalidMountPoint.existing=Το σημείο/φάκελος προ
# Lock
## Force
lock.forced.heading=Το κανονικό κλείδωμα απέτυχε
lock.forced.heading=Το κλείδωμα απέτυχε
lock.forced.message=Το κλείδωμα "%s" μπλοκαρίστηκε από εκκρεμείς διεργασίες ή ανοιχτά αρχεία. Μπορείτε να εξαναγκάσετε το κλείδωμα του vault, αλλά η διακοπή Ι/Ο ενδέχεται να οδηγήσει σε απώλεια μη αποθηκευμένων δεδομένων.
lock.forced.confirmBtn=Εξαναγκασμένο κλείδωμα
lock.forced.retryBtn=Επανάληψη
lock.forced.forceBtn=Εξαναγκασμός Κλειδώματος
## Failure
lock.fail.heading=Το κλείδωμα του vault απέτυχε.
lock.fail.message=Το Vault "%s" δεν κλειδώθηκε. Εξασφαλίστε την αποθήκευση της εργασίας σε άλλο σημείο και πως οι σημαντικές διεργασίας Ανάγνωσης/Εγγραφής έχουν ολοκληρωθεί. Για να κλείσετε το vault, τερματίστε τη διεργασία του Cryptomator.

View File

@@ -117,17 +117,18 @@ unlock.error.invalidMountPoint.existing=El punto de montaje/carpeta ya existe o
# Lock
## Force
lock.forced.heading=Bloqueo automático fallido
lock.forced.heading=Error al bloquear
lock.forced.message=El bloqueo de "%s" fue bloqueado por operaciones pendientes o archivos abiertos. Puede forzar el bloqueo de esta bóveda, sin embargo, interrumpir la I/O puede provocar la pérdida de datos no guardados.
lock.forced.confirmBtn=Forzar bloqueo
lock.forced.retryBtn=Reintentar
lock.forced.forceBtn=Forzar bloqueo
## Failure
lock.fail.heading=Falló al bloquear la bóveda.
lock.fail.message=No se pudo bloquear la bóveda "%s". Asegúrese de que el trabajo no guardado se ha guardado en otro lugar y las operaciones de lectura/escritura importantes han finalizado. Para cerrar la bóveda termine el proceso de Cryptomator.
# Migration
migration.title=Mejorar bóveda
migration.title=Actualizar bóveda
## Start
migration.start.prompt=La bóveda "%s" necesita ser actualizada a un formato más nuevo. Antes de continuar, asegurarse de que no haya ninguna sincronización pendiente afectando esta bóveda.
migration.start.prompt=La bóveda "%s" necesita ser actualizada a un formato más nuevo. Antes de continuar, asegúrese de que no haya ninguna sincronización pendiente afectando esta bóveda.
migration.start.confirm=Sí, mi bóveda está sincronizada
## Run
migration.run.enterPassword=Ingresar la contraseña para "%s"

View File

@@ -68,6 +68,7 @@ unlock.unlockBtn=I-unlock
# Lock
## Force
lock.forced.retryBtn=Subukan muli
## Failure
# Migration

View File

@@ -72,7 +72,7 @@ addvault.new.readme.storageLocation.10=Si vous avez besoin d'aide, consultez la
addvault.new.readme.accessLocation.fileName=BIENVENUE.rtf
addvault.new.readme.accessLocation.1=🔐 VOLUME CHIFFRÉ 🔐
addvault.new.readme.accessLocation.2=Ceci est le chemin d'accès de votre coffre-fort.
addvault.new.readme.accessLocation.3=Tous les fichiers ajoutés à ce volume seront chiffrés par Cryptomator. Vous pouvez l'utiliser comme n'importe quel lecteur/répertoire. Ceci est seulement une vue déchiffrée de son contenu, vos fichiers restent chiffrés dans votre disque dur à tout le temps.
addvault.new.readme.accessLocation.3=Tous les fichiers ajoutés à ce volume seront chiffrés par Cryptomator. Vous pouvez l'utiliser comme n'importe quel lecteur/répertoire. Ceci est seulement une vue déchiffrée de son contenu, vos fichiers restent chiffrés dans votre disque dur en permanence.
addvault.new.readme.accessLocation.4=Vous pouvez supprimer ce fichier.
## Existing
addvaultwizard.existing.instruction=Choisissez le fichier "vault.cryptomator" de votre coffre existant. S'il existe seulement un fichier "masterkey.cryptomator", sélectionnez celui-ci.
@@ -93,7 +93,7 @@ changepassword.enterOldPassword=Entrez le mot de passe actuel pour "%s"
changepassword.finalConfirmation=Je comprends que je ne pourrai pas récupérer mes données si j'oublie mon mot de passe
# Forget Password
forgetPassword.title=Oublier le mot de passe
forgetPassword.title=Mot de passe oublié
forgetPassword.information=Ceci supprimera le mot de passe enregistré pour ce coffre de votre chaîne de clés système.
forgetPassword.confirmBtn=Oublier le mot de passe
@@ -117,9 +117,10 @@ unlock.error.invalidMountPoint.existing=Le point de montage/le répertoire exist
# Lock
## Force
lock.forced.heading=Le verrouillage normal a échoué
lock.forced.heading=Échec du verrouillage
lock.forced.message=Le verrouillage de «%s» a été bloqué par des opérations en attente ou des fichiers ouverts. Vous pouvez forcer le verrouillage de ce coffre, mais l'interruption d'E/S peut entraîner la perte de données non enregistrées.
lock.forced.confirmBtn=Forcer le verrouillage
lock.forced.retryBtn=Réessayer
lock.forced.forceBtn=Forcer le verrouillage
## Failure
lock.fail.heading=Le verrouillage du coffre a échoué.
lock.fail.message=Le coffre-fort "%s" n'a pas pu être verrouillé. Assurez-vous que le travail non sauvegardé est sauvegardé ailleurs et que les opérations importantes de lecture/écriture sont bien terminées. Pour fermer le coffre-fort, tuez le processus Cryptomator.

View File

@@ -0,0 +1,156 @@
# Locale Specific CSS files such as CJK, RTL,...
# 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=שגיאה %s
generic.error.instruction=אופס! Cryptomator לא ציפה שזה יקרה. את/ה יכול/ה לחפש פתרונות קיימים לשגיאה זו. או שבמקרה והשגיאה לא דווחה עדיין, תרגיש/י בנוח לעשות זאת.
generic.error.hyperlink.lookup=חפש שגיאה זו
generic.error.hyperlink.report=דווח על שגיאה זו
generic.error.technicalDetails=פרטים:
# Defaults
defaults.vault.vaultName=כספת
# Tray Menu
traymenu.showMainWindow=הצג
traymenu.showPreferencesWindow=העדפות
traymenu.lockAllVaults=נעל הכל
traymenu.quitApplication=צא
traymenu.vault.unlock=בטל נעילה
traymenu.vault.lock=נעילה
traymenu.vault.reveal=חשוף
# Add Vault Wizard
addvaultwizard.title=הוסף כספת
## Welcome
addvaultwizard.welcome.newButton=צור כספת חדשה
addvaultwizard.welcome.existingButton=פתח כספת קיימת
## New
### Name
addvaultwizard.new.nameInstruction=בחר שם עבור הכספת שלך
addvaultwizard.new.namePrompt=שם הכספת
### Location
addvaultwizard.new.locationInstruction=היכן Cryptomator צריך לשמור את הקבצים המוצפנים של הכספת שלך?
addvaultwizard.new.locationLabel=מיקום אחסון
addvaultwizard.new.directoryPickerLabel=מיקום מותאם אישית
addvaultwizard.new.directoryPickerButton=בחר...
addvaultwizard.new.directoryPickerTitle=בחירת ספרייה
addvaultwizard.new.fileAlreadyExists=שם הקובץ או שם התיקייה עם שם הכספת כבר קיים
addvaultwizard.new.locationDoesNotExist=מחיצה בנתיב הנקוב לא קיימת או אין אפשרות לקבל אליה גישה
addvaultwizard.new.locationIsNotWritable=אין הרשאת כתיבה בנתיב הנקוב
addvaultwizard.new.locationIsOk=מיקום מתאים לכספת שלך
addvaultwizard.new.invalidName=שם כספת שגוי. אנא שקול שם מחיצה רגיל.
### Password
addvaultwizard.new.createVaultBtn=צור כספת חדשה
addvaultwizard.new.generateRecoveryKeyChoice=לא תיהיה אפשרות לקבל גישה למידע שלך בלי הסיסמה שלך. האם תרצה/י מפתח שחזור למקרה ותאבד/י את הסיסמה שלך?
addvaultwizard.new.generateRecoveryKeyChoice.yes=כן בבקשה, עדיף ללכת על בטוח
addvaultwizard.new.generateRecoveryKeyChoice.no=לא תודה, אני לא אאבד את הסיסמה שלי
### Information
addvault.new.readme.storageLocation.fileName=חשוב.rtf
addvault.new.readme.storageLocation.1=⚠️ קבצי כספת ⚠️
addvault.new.readme.storageLocation.2=זהו מיקום אחסון לכספת שלך.
addvault.new.readme.storageLocation.3=אל
addvault.new.readme.storageLocation.4=תשנה קבצים במחיצה זו או
addvault.new.readme.storageLocation.5=תדביק קבצים כלשהם להצפנה במחיצה זו.
addvault.new.readme.storageLocation.6=אם תרצה להצפין קבצים ולצפות בתוכן של הכספת, עשה את הבא:
addvault.new.readme.storageLocation.7=1. הוסף כספת זו ל-Cryptomator.
addvault.new.readme.storageLocation.8=2. בטל נעילת כספת ב-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=זהו מיקום גישה לכספת שלך.
addvault.new.readme.accessLocation.3=כל קובץ אשר יצורף לספרייה זו יעבור הצפנה באמצעות Cryptomator. את/ה תוכל/י לעבוד עליו כמו עם כל קבוץ/מחיצה רגילים. זהו מצב הצגה מפוענח של התוכן, הקבצים שלך נשארים מוצפנים על הדיסק הקשיח שלך בכל רגע.
addvault.new.readme.accessLocation.4=תרגיש/י בנוח להסיר את הקובץ הזה.
## Existing
addvaultwizard.existing.chooseBtn=בחר...
## Success
# Remove Vault
# Change Password
# Forget Password
# Unlock
unlock.unlockBtn=בטל נעילה
##
## Success
## Failure
### Invalid Mount Point
# Lock
## Force
## Failure
# Migration
## Start
## Run
## Success
## Missing file system capabilities
## Impossible
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Fix Application
# Preferences
preferences.title=העדפות
## General
## Volume
## Updates
## Contribution
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
# Vault Statistics
## Read
## Write
# Main Window
main.closeBtn.tooltip=סגור
main.preferencesBtn.tooltip=העדפות
## Drag 'n' Drop
## Vault List
main.vaultlist.contextMenu.lock=נעילה
main.vaultlist.addVaultBtn=הוסף כספת
## Vault Detail
### Welcome
### Locked
### Unlocked
main.vaultDetail.lockBtn=נעילה
### Missing
### Needs Migration
### Error
# Wrong File Alert
# Vault Options
## General
vaultOptions.general.vaultName=שם הכספת
## Mount
vaultOptions.mount.mountPoint.directoryPickerButton=בחר...
## Master Key
# Recovery Key
# New Password
# Quit

View File

@@ -75,6 +75,7 @@ unlock.unlockBtn=अनलॉक करें
# Lock
## Force
lock.forced.retryBtn=पुन: प्रयास करें
## Failure
# Migration

View File

@@ -13,6 +13,11 @@ generic.button.done=Kész
generic.button.next=Következő
generic.button.print=Nyomtatás
## Error
generic.error.title=Hiba: %s
generic.error.instruction=Upsz! A Cryptomator nem számított rá, hogy ez megtörténik. Keressen meglévő megoldást erre a hibára. Vagy ha még nem jelentették, bátran tegye ezt meg.
generic.error.hyperlink.lookup=Hiba okának keresése
generic.error.hyperlink.report=Hiba jelentése
generic.error.technicalDetails=Részletek:
# Defaults
defaults.vault.vaultName=Széf
@@ -38,9 +43,14 @@ 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=Már létezik fájl/könyvtár ezzel a trezornévvel
addvaultwizard.new.locationDoesNotExist=A megadott elérési úton lévő könyvtár nem létezik, vagy nem érhető el
addvaultwizard.new.locationIsNotWritable=Nincs írási hozzáférés a megadott elérési úthoz
addvaultwizard.new.locationIsOk=Megfelelő hely a trezornak
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=Új széf létrehozása
@@ -65,7 +75,9 @@ 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 "vault.cryptomatotor" fájlt a meglévő tárolóhoz. Ha csak egy "masterkey.cryptomatotor" nevű fájl létezik, válassza azt.
addvaultwizard.existing.chooseBtn=Kiválaszt…
addvaultwizard.existing.filePickerTitle=Trezor 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
@@ -86,11 +98,15 @@ forgetPassword.information=Eltávolítja a széf mentett jelszavát a rendszere
forgetPassword.confirmBtn=Jelszó elfelejtése
# Unlock
unlock.title="%s" feloldása
unlock.passwordPrompt=Írja be a jelszavát a következő széfhez "%s":
unlock.savePassword=Jelszó megjegyzése
unlock.unlockBtn=Feloldás
##
unlock.chooseMasterkey.prompt=Nem található a tároló kulcsfájlja a várt helyen. Kérjük válassza ki a kulcsfájlt manuálisan.
unlock.chooseMasterkey.filePickerTitle=Mesterkulcs fájl kiválasztása
## Success
unlock.success.message="%s" sikreresen feloldásra került! Mostmár hozzáférhet a virtuális trezorhoz.
unlock.success.rememberChoice=Jegyezze meg a választást és ne mutassa többet
unlock.success.revealBtn=Széf megjelenítése
## Failure
@@ -101,7 +117,11 @@ unlock.error.invalidMountPoint.existing=A csatolási pont "%s" már létezik vag
# Lock
## Force
lock.forced.message=A „%s” zárolását függőben lévő műveletek vagy megnyitott fájlok blokkolták. Kényszerítheti a tároló zárolását, bár az I/O megszakítása a nem mentett adatok elvesztéséhez vezethet.
lock.forced.retryBtn=Újra
## Failure
lock.fail.heading=Zárolás sikertelen.
lock.fail.message=A "%s" tárolót nem lehetett zárolni. Győződjön meg arról, hogy a nem mentett munkát máshová menti, és a fontos olvasási/írási műveletek befejeződtek. A trezor bezárásához szakítsa meg a Cryptomator folyamatot.
# Migration
migration.title=Széf frissítése
@@ -129,7 +149,18 @@ migration.impossible.moreInfo=A széf továbbra is megnyitható marad egy régeb
# Health Check
## Start
health.title="%s" állapotellenőrzése
health.intro.header=Állapotfelmérés
health.intro.text=Az állapotfelmérés olyan ellenőrzéscsomag, amely felderíti és esetlegesen kijavítja a trezor belső szerkezetében fellépő problémákat. Kérjük, ne feledje:
health.intro.remarkSync=Győződjön meg arról, hogy minden eszköz teljesen szinkronizálva van, ez megoldja a legtöbb problémát.
health.intro.remarkFix=Nem minden probléma javítható.
health.intro.remarkBackup=Ha az adatok sérültek, csak a biztonsági mentés segíthet.
health.intro.affirmation=Elolvastam és megértettem a fenti információkat
## Start Failure
health.fail.header=Hiba a Trezor konfiguráció betöltésekor
health.fail.ioError=Hiba történt a konfigurációs fájl elérése és olvasása közben.
health.fail.parseError=Hiba történt a tároló konfigurációjának elemzése közben.
health.fail.moreInfo=További infó
## Check Selection
## Detail view
## Fix Application
@@ -238,6 +269,8 @@ main.vaultDetail.missing.changeLocation=A széf helyének megváltoztatása…
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
### Error
main.vaultDetail.error.reload=Újratöltés
main.vaultDetail.error.windowTitle=Hiba az adatok betöltése közben
# Wrong File Alert
wrongFileAlert.title=Hogyan lehet fájlokat titkosítani

View File

@@ -13,6 +13,11 @@ generic.button.done=Selesai
generic.button.next=Lanjut
generic.button.print=Cetak
## Error
generic.error.title=Kesalahan %s
generic.error.instruction=Ups! Cryptomator tidak mengharapkan ini terjadi. Anda dapat mencari solusi yang ada untuk kesalahan ini. Atau jika belum dilaporkan, jangan ragu untuk melakukannya.
generic.error.hyperlink.lookup=Cari kesalahan
generic.error.hyperlink.report=Laporkan kesalahan
generic.error.technicalDetails=Rincian:
# Defaults
defaults.vault.vaultName=Brankas
@@ -70,7 +75,9 @@ addvault.new.readme.accessLocation.2=Ini adalah lokasi akses brankas kamu.
addvault.new.readme.accessLocation.3=File yang ditambahkan ke volume ini akan dienkripsi oleh Cryptomator. Anda dapat mempergunakan isi vault seperti dalam folder lain. Saat ini Anda sedang mengakses tampilan versi dekripsi, file Anda selalu terenkripsi di dalam cakram keras Anda.
addvault.new.readme.accessLocation.4=Anda dapat menghapus file ini.
## Existing
addvaultwizard.existing.instruction=Pilih file "vault.cryptomator" Anda dari vault yang ada. Jika hanya ada file bernama "masterkey.cryptomator", pilih file tersebut.
addvaultwizard.existing.chooseBtn=Pilih…
addvaultwizard.existing.filePickerTitle=Pilih File Vault
## Success
addvaultwizard.success.nextStepsInstructions=Vault "%s" telah dibuat.\nAnda harus membuka kunci vault ini untuk mengakses atau menambahkan konten. Anda juga dapat membuka kunci vault ini kapan saja di kemudian hari.
addvaultwizard.success.unlockNow=Buka Kunci Sekarang
@@ -91,6 +98,7 @@ forgetPassword.information=Kata sandi vault yang tersimpan akan dihapus dari key
forgetPassword.confirmBtn=Lupa Kata Sandi
# Unlock
unlock.title=Membuka "%s"
unlock.passwordPrompt=Masukkan kata sandi untuk "%s":
unlock.savePassword=Simpan Kata Sandi
unlock.unlockBtn=Buka Gembok
@@ -109,9 +117,10 @@ unlock.error.invalidMountPoint.existing=Poin mount "%s" sudah ada atau folder in
# Lock
## Force
lock.forced.heading=Gagal mengunci secara normal
lock.forced.heading=Gagal mengunci
lock.forced.message=Penguncian "%s" terblokir oleh operasi yang sedang berjalan atau file yang masih terbuka. Anda dapat mengunci paksa vault ini, namun ada kemungkinan mengganggu I/O akan menghilangkan data yang belum disimpan.
lock.forced.confirmBtn=Kunci Paksa
lock.forced.retryBtn=Coba lagi
lock.forced.forceBtn=Kunci Paksa
## Failure
lock.fail.heading=Gagal mengunci vault.
lock.fail.message=Vault "%s" tidak dapat dikunci. Pastikan bahwa file yang belum tersimpan telah disimpan di lokasi lain, dan operasi Baca/Tulis yang penting telah selesai. Untuk menutup vault ini, matikan proses Cryptomator.
@@ -142,13 +151,37 @@ migration.impossible.moreInfo=Vault dapat dibuka dengan program versi lebih lama
# Health Check
## Start
health.title=Pemeriksaan Kesehatan "%s"
health.intro.header=Pemeriksaan Kesehatan
health.intro.text=Pemeriksaan Kesehatan adalah kumpulan pemeriksaan untuk mendeteksi dan mungkin memperbaiki masalah dalam struktur internal brankas Anda. Harap diingat:
health.intro.remarkSync=Pastikan semua perangkat disinkronkan sepenuhnya, ini menyelesaikan sebagian besar masalah.
health.intro.remarkFix=Tidak semua masalah bisa diperbaiki.
health.intro.remarkBackup=Jika data rusak, hanya cadangan yang dapat membantu.
health.intro.affirmation=Saya telah membaca dan memahami informasi di atas
## Start Failure
health.fail.header=Kesalahan saat memuat Konfigurasi Vault
health.fail.ioError=Terjadi kesalahan saat mengakses dan membaca file konfigurasi.
health.fail.parseError=Terjadi kesalahan saat mengurai konfigurasi vault.
health.fail.moreInfo=Info Selengkapnya
## Check Selection
health.checkList.description=Centang daftar di bagian kiri atau gunakan tombol di bawah.
health.checkList.selectAllButton=Centang Semua
health.checkList.deselectAllButton=Jangan Centang Semua
health.check.runBatchBtn=Cek Jalankan yang dipilih
## Detail view
health.check.detail.noSelectedCheck=Untuk hasil, pilih pemeriksaan kesehatan yang sudah selesai di sebelah kiri.
health.check.detail.checkScheduled=Pemeriksaan dijadwalkan.
health.check.detail.checkRunning=Saat ini pemeriksaan sedang berjalan…
health.check.detail.checkSkipped=Pemeriksaan tidak dipilih untuk dijalankan.
health.check.detail.checkFinished=Pemeriksaan berhasil diselesaikan.
health.check.detail.checkFinishedAndFound=Pemeriksaan selesai berjalan. Harap tinjau hasilnya.
health.check.detail.checkFailed=Pemeriksaan terhenti karena terjadi kesalahan.
health.check.detail.checkCancelled=Pemeriksaan dibatalkan.
health.check.exportBtn=Ekspor Laporan
## Fix Application
health.fix.fixBtn=Perbaiki
health.fix.successTip=Perbaikan berhasil
health.fix.failTip=Perbaikan gagal, lihat log untuk detailnya
# Preferences
preferences.title=Preferensi
@@ -183,54 +216,153 @@ preferences.updates.updateAvailable=Pembaharuan ke versi %s tersedia.
## Contribution
preferences.contribute=Dukung Kami
preferences.contribute.registeredFor=Sertifikat pendukung terdaftar untuk %s
preferences.contribute.noCertificate=Dukung Cryptomator dan terima sertifikat pendukung. Ini seperti kunci lisensi tetapi untuk orang-orang hebat yang menggunakan perangkat lunak gratis. ;-)
preferences.contribute.getCertificate=Belum punya? Pelajari bagaimana Anda bisa mendapatkannya.
preferences.contribute.promptText=Tempel kode sertifikat pendukung di sini
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
preferences.about=Tentang
# Vault Statistics
stats.title=Statistik untuk %s
stats.cacheHitRate=Tingkat Hit Cache
## Read
stats.read.throughput.idle=Read: idle
stats.read.throughput.kibs=Read: %.2f kiB/s
stats.read.throughput.mibs=Read: %.2f MiB/s
stats.read.total.data.none=Data read: -
stats.read.total.data.kib=Data read: %.1f kiB
stats.read.total.data.mib=Data read: %.1f MiB
stats.read.total.data.gib=Data read: %.1f GiB
stats.decr.total.data.none=Data decrypted: -
stats.decr.total.data.kib=Data decrypted: %.1f kiB
stats.decr.total.data.mib=Data decrypted: %.1f MiB
stats.decr.total.data.gib=Data decrypted: %.1f GiB
stats.read.accessCount=Total reads: %d
## Write
stats.write.throughput.idle=Write: idle
stats.write.throughput.kibs=Write: %.2f kiB/s
stats.write.throughput.mibs=Write: %.2f MiB/s
stats.write.total.data.none=Data tertulis: -
stats.write.total.data.kib=Data tertulis: %.1f kiB
stats.write.total.data.mib=Data tertulis: %.1f MiB
stats.write.total.data.gib=Data tertulis: %.1f GiB
stats.encr.total.data.none=Data terenkripsi: -
stats.encr.total.data.kib=Data terenkripsi: %.1f kiB
stats.encr.total.data.mib=Data terenkripsi: %.1f MiB
stats.encr.total.data.gib=Data terenkripsi: %.1f GiB
stats.write.accessCount=Total menulis: %d
# Main Window
main.closeBtn.tooltip=Tutup
main.minimizeBtn.tooltip=Minimalkan
main.preferencesBtn.tooltip=Preferensi
main.debugModeEnabled.tooltip=Mode Debug diaktifkan
main.donationKeyMissing.tooltip=Pertimbangjan untuk donasi
## Drag 'n' Drop
main.dropZone.dropVault=Tambah vault ini
main.dropZone.unknownDragboardContent=Jika Anda ingin menambahkan vault, seret ke jendela ini
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Klik untuk tambah vault
main.vaultlist.contextMenu.remove=Hapus…
main.vaultlist.contextMenu.lock=Gembok
main.vaultlist.contextMenu.unlock=Membuka…
main.vaultlist.contextMenu.unlockNow=Buka Kunci Sekarang
main.vaultlist.contextMenu.vaultoptions=Tampilkan Opsi Vault
main.vaultlist.contextMenu.reveal=Buka Drive
main.vaultlist.addVaultBtn=Tambah Brankas
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Terima kasih telah memilih Cryptomator untuk melindungi file Anda. Jika Anda memerlukan bantuan, lihat panduan awal kami:
### Locked
main.vaultDetail.lockedStatus=TERKUNCI
main.vaultDetail.unlockBtn=Membuka…
main.vaultDetail.unlockNowBtn=Buka Kunci Sekarang
main.vaultDetail.optionsBtn=Opsi Vault
main.vaultDetail.passwordSavedInKeychain=Kata Sandi tersimpan
### Unlocked
main.vaultDetail.unlockedStatus=TERBUKA
main.vaultDetail.accessLocation=Konten vault Anda dapat diakses di sini:
main.vaultDetail.revealBtn=Buka Drive
main.vaultDetail.lockBtn=Gembok
main.vaultDetail.bytesPerSecondRead=Read:
main.vaultDetail.bytesPerSecondWritten=Write:
main.vaultDetail.throughput.idle=idle
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/detik
main.vaultDetail.stats=Statistik Vault
### Missing
main.vaultDetail.missing.info=Cryptomator tidak dapat menemukan vault di path ini.
main.vaultDetail.missing.recheck=Periksa kembali
main.vaultDetail.missing.remove=Hapus dari Daftar Vault…
main.vaultDetail.missing.changeLocation=Ganti Lokasi Vault…
### Needs Migration
main.vaultDetail.migrateButton=Tingkatkan Vault
main.vaultDetail.migratePrompt=Vault Anda perlu ditingkatkan ke format baru, sebelum Anda dapat mengaksesnya
### Error
main.vaultDetail.error.info=Terjadi kesalahan saat memuat vault dari disk.
main.vaultDetail.error.reload=Muat Ulang
main.vaultDetail.error.windowTitle=Terjadi kesalahan saat memuat vault
# Wrong File Alert
wrongFileAlert.title=Cara Mengenkripsi File
wrongFileAlert.header.title=Apakah Anda mencoba mengenkripsi file-file ini?
wrongFileAlert.header.lead=Untuk itu, Cryptomator menyediakan volume di sistem file manager Anda.
wrongFileAlert.instruction.0=Untuk mengenkripsi file, ikuti langkah-langkah berikut:
wrongFileAlert.instruction.1=1. Membuka vault Anda.
wrongFileAlert.instruction.2=Klik "Reveal" untuk membuka volume di file manager Anda.
wrongFileAlert.instruction.3=3. Tambahkan file Anda ke volume ini.
wrongFileAlert.link=Untuk bantuan lebih lanjut, kunjungi
# Vault Options
## General
vaultOptions.general=Umum
vaultOptions.general.vaultName=Nama Brankas
vaultOptions.general.autoLock.lockAfterTimePart1=Kunci saat idle untuk
vaultOptions.general.autoLock.lockAfterTimePart2=menit
vaultOptions.general.unlockAfterStartup=Buka vault saat memulai Cryptomator
vaultOptions.general.actionAfterUnlock=Setelah berhasil membuka
vaultOptions.general.actionAfterUnlock.ignore=Biarkan
vaultOptions.general.actionAfterUnlock.reveal=Buka Drive
vaultOptions.general.actionAfterUnlock.ask=Tanya
vaultOptions.general.startHealthCheckBtn=Mulai Pemeriksaan Kesehatan
## Mount
vaultOptions.mount=Pemasangan
vaultOptions.mount.readonly=Read-Only
vaultOptions.mount.customMountFlags=Custom Mount Flags
vaultOptions.mount.winDriveLetterOccupied=terisi
vaultOptions.mount.mountPoint=Titik Pasang
vaultOptions.mount.mountPoint.auto=Secara otomatis memilih lokasi yang sesuai
vaultOptions.mount.mountPoint.driveLetter=Gunakan huruf drive yang ditetapkan
vaultOptions.mount.mountPoint.custom=Path khusus
vaultOptions.mount.mountPoint.directoryPickerButton=Pilih…
vaultOptions.mount.mountPoint.directoryPickerTitle=Pilih direktori kosong
## Master Key
vaultOptions.masterkey=Kata Sandi
vaultOptions.masterkey.changePasswordBtn=Ubah Kata Sandi
vaultOptions.masterkey.forgetSavedPasswordBtn=Lupa Kata Sandi
vaultOptions.masterkey.recoveryKeyExplanation=Kunci pemulihan adalah satu-satunya cara Anda untuk memulihkan akses ke vault jika Anda kehilangan kata sandi.
vaultOptions.masterkey.showRecoveryKeyBtn=Tampilkan Kunci Pemulihan
vaultOptions.masterkey.recoverPasswordBtn=Pemulihan Kata Sandi
# Recovery Key
recoveryKey.title=Kunci Pemulihan
recoveryKey.enterPassword.prompt=Masukkan kata sandi untuk menampilkan kunci pemulikan untuk "%s":
recoveryKey.display.message=Kunci pemulihan berikut dapat digunakan untuk memulihkan akses ke "%s":
recoveryKey.display.StorageHints=Simpan di tempat yang sangat aman, misal.:\n • Simpan menggunakan password manager\n • Simpan di USB\n • cetak di kertas
recoveryKey.recover.prompt=Masukkan kunci pemulihan untuk "%s":
recoveryKey.recover.validKey=Ini adalah kunci pemulihan yang valid
recoveryKey.printout.heading=Kunci Pemulihan Cryptomator\n"%s"\n
# New Password
newPassword.promptText=Masukkan kata sandi baru
newPassword.reenterPassword=Konfirmasi kata sandi baru
newPassword.passwordsMatch=Kasmta Sandi sesuai!
newPassword.passwordsDoNotMatch=Kata Sandi tidak sesuai
passwordStrength.messageLabel.tooShort=Gunakan minimal %d characters
passwordStrength.messageLabel.0=Sangat lemah
passwordStrength.messageLabel.1=Lemah
passwordStrength.messageLabel.2=Cukup

View File

@@ -75,7 +75,9 @@ addvault.new.readme.accessLocation.2=Questa è la posizione d'accesso della tua
addvault.new.readme.accessLocation.3=Ogni file aggiunto a questo volume sarà crittografato da Cryptomator. Puoi lavorarci come su ogni altra unità/cartella. Questa è solo una vista decrittografata del suo contenuto, i tuoi file restano sempre crittografati sul tuo disco rigido.
addvault.new.readme.accessLocation.4=Sentiti libero di rimuovere questo file.
## Existing
addvaultwizard.existing.instruction=Scegliere il file "vault.cryptomator" della tua cassaforte. Se esiste solo un file chiamato "masterkey.cryptomator", allora scegli quello.
addvaultwizard.existing.chooseBtn=Scegli…
addvaultwizard.existing.filePickerTitle=Seleziona file cassaforte
## Success
addvaultwizard.success.nextStepsInstructions=Cassaforte "%s" aggiunta.\nDevi sbloccare questa cassaforte per accedere o aggiungere contenuti. Altrimenti, puoi sbloccarla in qualsiasi momento successivo.
addvaultwizard.success.unlockNow=Sblocca Ora
@@ -115,9 +117,8 @@ unlock.error.invalidMountPoint.existing=Il punto di montaggio "%s" esiste già o
# Lock
## Force
lock.forced.heading=Blocco normale fallito
lock.forced.message=Il bloccaggio di "%s" è stato impedito dalle operazioni in sospeso o dai file aperti. Puoi forzare il blocco di questa cassaforte, tuttavia, interrompere I/O potrebbe risultare nella perdita dei dati non salvati.
lock.forced.confirmBtn=Forza Blocco
lock.forced.retryBtn=Riprova
## Failure
lock.fail.heading=Blocco della cassaforte fallito.
lock.fail.message=Impossibile bloccare la cassaforte "%s". Assicurati che il lavoro non salvato sia salvato altrove e che le importanti operazioni di Lettura/Scrittura siano terminate. Per chiudere la cassaforte, termina il processo di Cryptomator.

View File

@@ -75,7 +75,9 @@ addvault.new.readme.accessLocation.2=ここは金庫のアクセス先です。
addvault.new.readme.accessLocation.3=このボリュームに追加したファイルは Cryptomator によって暗号化されます。一般的なドライブ/フォルダー上のように作業することができます。ここでは復号したコンテンツのビューにすぎず、ファイルは常にハードドライブ上で暗号化されています。
addvault.new.readme.accessLocation.4=このファイルはいつでも削除できます。
## Existing
addvaultwizard.existing.instruction=すでにある金庫の "vault.cryptomator" ファイルを選択してください。"masterkey.cryptomator" という名前のファイルだけが存在する場合は、このファイルを代わりに選択してください。
addvaultwizard.existing.chooseBtn=選択...
addvaultwizard.existing.filePickerTitle=金庫のファイルを選択
## Success
addvaultwizard.success.nextStepsInstructions=金庫 "%s" を追加しました。\n金庫にアクセスしたり、コンテンツを追加したりするには、金庫を解錠する必要があります。あるいは、後で解錠することが可能です。
addvaultwizard.success.unlockNow=今すぐ解錠
@@ -115,9 +117,10 @@ unlock.error.invalidMountPoint.existing=マウント ポイント "%s" が既に
# Lock
## Force
lock.forced.heading=正常な施錠に失敗しました
lock.forced.heading=施錠に失敗
lock.forced.message=保留中の操作または、開かれたファイルによって、"%s" の施錠が中断されました。この金庫を強制的に施錠することはできますが、I/O を中断すると保存されていないデータを失う可能性があります。
lock.forced.confirmBtn=強制施錠
lock.forced.retryBtn=再試行
lock.forced.forceBtn=強制的に施錠
## Failure
lock.fail.heading=金庫の施錠に失敗しました。
lock.fail.message=金庫 "%s" を施錠できませんでした。保存されていないデータがほかの場所に保存され、重要な読み込み/書き込み操作が完了していることを確認してください。金庫を閉じるには、Cryptomator のプロセスを強制終了してください。

View File

@@ -113,9 +113,8 @@ unlock.error.invalidMountPoint.existing=구성지점/폴더가 이미 존재하
# Lock
## Force
lock.forced.heading=정상적인 잠금을 실패하였습니다.
lock.forced.message=대기 중인 작동이나 파일이 열려있어 "%s"를 잠그는데 실패하였습니다. 이 Vault를 강제로 잠글 수 있으나, 입/출력의 중단은 저장되지 않은 데이터의 유실을 초래할 수 있습니다.
lock.forced.confirmBtn=강제 잠금
lock.forced.retryBtn=재시도
## Failure
lock.fail.heading=Vault 잠금에 실패하였습니다.
lock.fail.message="%s" Vault를 잠글 수 없습니다. 저장되지 않은 작업이 다른 곳에 저장된 것과 중요한 읽기/쓰기 동작이 완료되었는지 확인 하십시요. Vault를 닫기 위해, Cryptomator 프로세스를 강제로 종료 하십시요.

View File

@@ -106,9 +106,8 @@ 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
lock.forced.retryBtn=Prøv igjen
## 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.

View File

@@ -117,9 +117,10 @@ unlock.error.invalidMountPoint.existing=Koppelpunt "%s" bestaat reeds of de bove
# Lock
## Force
lock.forced.heading=De kluis kon niet op een gecontroleerde manier vergrendeld worden
lock.forced.heading=Vergrendelen mislukt
lock.forced.message=Het vergrendelen van "%s" werd voorkomen door lopende processen of geopende bestanden. U kunt de vergrendeling op deze kluis forceren, maar dit kan leiden tot het verlies van niet-opgeslagen gegevens.
lock.forced.confirmBtn=Forceer vergrendeling
lock.forced.retryBtn=Opnieuw proberen
lock.forced.forceBtn=Forceer vergrendeling
## Failure
lock.fail.heading=Kluis kan niet vergrendeld worden.
lock.fail.message=Kluis "%s" kan niet vergrendeld worden. Zorg ervoor dat u uw niet-opgeslagen werk ergens anders opslaat en belangrijke lees-/schrijfbewerkingen hebt voltooid. Om de kluis te sluiten, beëindigt u het Cryptomator-proces.

View File

@@ -103,9 +103,7 @@ unlock.error.invalidMountPoint.existing="%s" ਮਾਊਂਟ ਪੁਆਇੰਟ
# Lock
## Force
lock.forced.heading=ਸਧਾਰਨ ਲਾਕ ਕਰਨਾ ਅਸਫ਼ਲ ਹੈ
lock.forced.message=ਬਾਕੀ ਰਹਿੰਦੀਆਂ ਕਾਰਵਾਈਆਂ ਜਾਂ ਫ਼ਾਈਲਾਂ ਖੁੱਲ੍ਹਣ ਕਰਕੇ "%s" ਲਾਕ ਕਰਨ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ। ਤੁਸੀਂ ਇਸ ਵਾਲਟ ਨੂੰ ਧੱਕੇ ਨਾਲ ਲਾਕ ਕਰ ਸਕਦੇ ਹੋ, ਪਰ I/O ਵਿੱਚ ਰੁਕਾਵਟ ਪਾਉਣ ਨਾਲ ਨਾ-ਸੰਭਾਲਿਆ ਡਾਟਾ ਖਤਮ ਹੋ ਜਾ ਸਕਦਾ ਹੈ।
lock.forced.confirmBtn=ਧੱਕੇ ਨਾਲ ਲਾਕ ਕਰੋ
## Failure
lock.fail.heading=ਵਾਲਟ ਲਾਕ ਕਰਨਾ ਅਸਫ਼ਲ ਹੈ।
lock.fail.message=ਵਾਲਟ "%s" ਨੂੰ ਲਾਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਨਾ-ਸੰਭਾਲੇ ਕੰਮ ਨੂੰ ਹੋਰ ਥਾਂ ਸੰਭਾਲ ਲਿਆ ਹੈ ਅਤੇ ਖਾਸ ਪੜ੍ਹਨ/ਲਿਖਣ ਕਾਰਵਾਈਆਂ ਪੂਰੀਆਂ ਹੋਈਆਂ ਹਨ। ਵਾਲਟ ਨੂੰ ਬੰਦ ਕਰਨ ਲਈ Cryptomator ਕਾਰਵਾਈ ਨੂੰ ਖਤਮ ਕਰੋ।

View File

@@ -117,9 +117,10 @@ unlock.error.invalidMountPoint.existing=Punkt montowania już istnieje lub braku
# Lock
## Force
lock.forced.heading=Blokada nie powiodła się
lock.forced.heading=Nieudana próba blokady
lock.forced.message=Zamknięcie "%s" zostało zablokowane przez oczekujące operacje lub otwarte pliki. Możesz wymusić zamknięcie tego sejfu, ale może to spowodować utratę niezapisanych danych.
lock.forced.confirmBtn=Wymuś zablokowanie
lock.forced.retryBtn=Ponów
lock.forced.forceBtn=Wymuś blokowanie
## Failure
lock.fail.heading=Błąd blokowania sejfu.
lock.fail.message=Nie można zablokować sejfu "%s". Zapisz wszelkie zmiany w bezpiecznym miejscu i upewnij się, że nie ma żadnych ważnych oczekujących operacji odczytu/zapisu. W celu zamknięcia sejfu ubij Cryptomator.

View File

@@ -13,6 +13,11 @@ generic.button.done=Ok
generic.button.next=Seguinte
generic.button.print=Imprimir
## Error
generic.error.title=Erro %s
generic.error.instruction=Opa! Cryptomator não esperava que isto acontecesse. Pode procurar as soluções existentes para este erro. Ou se ainda não tiver sido relatado, sinta-se à vontade para o fazer.
generic.error.hyperlink.lookup=Procure este erro
generic.error.hyperlink.report=Relatar este erro
generic.error.technicalDetails=Detalhes:
# Defaults
defaults.vault.vaultName=Cofre
@@ -43,6 +48,9 @@ addvaultwizard.new.directoryPickerLabel=Outro Local
addvaultwizard.new.directoryPickerButton=Escolher…
addvaultwizard.new.directoryPickerTitle=Selecionar diretório
addvaultwizard.new.fileAlreadyExists=Aviso: Já existe um Ficheiro ou Diretório com o mesmo nome
addvaultwizard.new.locationDoesNotExist=Um diretório no caminho especificado não existe ou não pode ser acessado
addvaultwizard.new.locationIsNotWritable=Sem acesso de escrita no caminho especificado
addvaultwizard.new.locationIsOk=Localização adequada para o seu cofre
addvaultwizard.new.invalidName=Nome de cofre inválido. Por favor considere um nome de diretório regular.
### Password
addvaultwizard.new.createVaultBtn=Criar Cofre
@@ -53,6 +61,9 @@ addvaultwizard.new.generateRecoveryKeyChoice.no=Não obrigado, não vou perder a
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.3=NÃO FAÇA
addvault.new.readme.storageLocation.4=- alterar quaisquer ficheiros dentro deste directório ou
addvault.new.readme.storageLocation.5=- colar quaisquer ficheiros para encriptação neste directório.
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.
@@ -60,6 +71,7 @@ addvault.new.readme.storageLocation.9=3. Abra o local de acesso clicando no bot
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.2=Este é o local de acesso do seu cofre.
addvault.new.readme.accessLocation.4=Sinta-se livre para remover este ficheiro.
## Existing
addvaultwizard.existing.chooseBtn=Escolher…
@@ -92,7 +104,9 @@ unlock.success.rememberChoice=Lembrar escolha, não mostrar isto novamente
# Lock
## Force
lock.forced.confirmBtn=Forçar Bloqueio
lock.forced.heading=Cadeado falhou\nOr\nBloqueio falhou
lock.forced.retryBtn=Tente novamente
lock.forced.forceBtn=Forçar bloqueio
## Failure
# Migration

View File

@@ -75,7 +75,9 @@ addvault.new.readme.accessLocation.2=Este é o local de acesso ao seu cofre.
addvault.new.readme.accessLocation.3=Todos os arquivos adicionados a este volume serão encriptados pelo Cryptomator. Você pode trabalhar nele tal como em qualquer outra unidade/pasta. Esta é apenas uma visão desencriptada do seu conteúdo, seus arquivos ficam encriptados em seu disco rígido o tempo todo.
addvault.new.readme.accessLocation.4=Sinta-se livre para apagar este arquivo.
## Existing
addvaultwizard.existing.instruction=Escolha o arquivo "vault.cryptomator" do seu cofre existente. Se existir apenas um arquivo chamado "masterkey.cryptomator", selecione outro.
addvaultwizard.existing.chooseBtn=Selecionar…
addvaultwizard.existing.filePickerTitle=Selecionar arquivo do Cofre
## Success
addvaultwizard.success.nextStepsInstructions=Cofre "%s" adicionado.\nVocê precisa desbloquear este cofre para acessar ou adicionar conteúdo. Você também pode desbloqueá-lo a qualquer momento.
addvaultwizard.success.unlockNow=Desbloquear Agora
@@ -115,9 +117,10 @@ unlock.error.invalidMountPoint.existing=Ponto de montagem/pasta já existe ou a
# Lock
## Force
lock.forced.heading=Bloqueio normal falhou
lock.forced.heading=Bloqueio falhou
lock.forced.message=Trancar "%s" foi bloqueado por operações pendentes ou arquivos abertos. Você pode forçar o bloqueio deste cofre, no entanto, a interrupção pode resultar em perda de dados não salvos.
lock.forced.confirmBtn=Forçar Bloqueio
lock.forced.retryBtn=Tentar Novamente
lock.forced.forceBtn=Forçar Bloqueio
## Failure
lock.fail.heading=O bloqueio do cofre falhou.
lock.fail.message=Cofre "%s" não pôde ser bloqueado. Certifique-se de que o trabalho não salvo está salvo em outro lugar e que operações de Leitura/Escrita importantes sejam concluídas. Para fechar o cofre, encerre o processo do Cryptomator.

View File

@@ -110,9 +110,8 @@ unlock.error.invalidMountPoint.existing=Punctul de montare "%s" există deja sau
# Lock
## Force
lock.forced.heading=Blocarea elegantă a eșuat
lock.forced.message=Blocarea "%s" a fost blocată de operațiile în așteptare sau de fișierele deschise. Puteți forța blocarea acestui seif, dar întreruperea I/O poate duce la pierderea datelor nesalvate.
lock.forced.confirmBtn=Forțați blocarea
lock.forced.retryBtn=Încercați din nou
## Failure
lock.fail.heading=Blocarea seifului a eșuat.
lock.fail.message=Seiful "%s" nu a putut fi blocat. Asigurați-vă că lucrările nesalvate sunt salvate altundeva și că operațiunile importante de citire/scriere sunt terminate. Pentru a închide seiful omoară procesul Cryptomator.

View File

@@ -14,8 +14,8 @@ generic.button.next=Далее
generic.button.print=Печать
## Error
generic.error.title=Ошибка: %s
generic.error.instruction=Произошла непредвиденная ситуация. Попробуйте найти уже имеющиеся решения этой ошибки. Если об этой ошибке ещё не сообщали, то сделайте это.
generic.error.hyperlink.lookup=Найти ошибку
generic.error.instruction=Ой! Криптоматор не ожидал, что так произойдет. Вы можете поискать существующие решения этой ошибки. Или если об этом еще не сообщалось, не стесняйтесь сделать это.
generic.error.hyperlink.lookup=Искать ошибку
generic.error.hyperlink.report=Сообщить об ошибке
generic.error.technicalDetails=Подробности:
@@ -95,7 +95,7 @@ changepassword.finalConfirmation=Я понимаю, что не смогу по
# Forget Password
forgetPassword.title=Не помню пароль
forgetPassword.information=Сохранённый пароль от этого хранилища будет удалён из вашей связки ключей.
forgetPassword.confirmBtn=Не помню пароль
forgetPassword.confirmBtn=Забыть сохранённый пароль
# Unlock
unlock.title=Разблокировать "%s"
@@ -117,9 +117,10 @@ unlock.error.invalidMountPoint.existing=Точка монтирования %s
# Lock
## Force
lock.forced.heading=Ошибка мягкой блокировки
lock.forced.heading=Не удалось заблокировать
lock.forced.message=Блокировка "%s" невозможна из-за незавершённых операций или открытых файлов. Вы можете заблокировать это хранилище принудительно, однако прерывание ввода-вывода может привести к потере несохранённых данных.
lock.forced.confirmBtn=Принудительная блокировка
lock.forced.retryBtn=Повторить
lock.forced.forceBtn=Принудительная блокировка
## Failure
lock.fail.heading=Не удалось заблокировать хранилище.
lock.fail.message=Хранилище "%s" не удалось заблокировать. Убедитесь, что несохранённые данные сохранены в другом месте и завершены важные операции чтения/записи. Чтобы закрыть хранилище, завершите процесс Cryptomator.

View File

@@ -117,9 +117,10 @@ unlock.error.invalidMountPoint.existing=Bod pripojenia "%s" už existuje alebo c
# Lock
## Force
lock.forced.heading=Bežné uzamknutie zlyhalo
lock.forced.heading=Uzamknutie zlyhalo
lock.forced.message=Zamknutie "%s" bolo zablokované prebiehajúcimi operáciami alebo otvorenými súbormi. Smiete vynútiť uzamknutie tohto trezoru, ale prerušením I/O môže viesť k strate alebo neuloženiu dát.
lock.forced.confirmBtn=Vynútené uzamknutie
lock.forced.retryBtn=Skúsiť znovu
lock.forced.forceBtn=Vynútené uzamknutie
## Failure
lock.fail.heading=Uzatváranie trezoru zlyhalo.
lock.fail.message=Trezor "%s" nie je možné uzamknúť. Uistite sa že neuložená páca je uložená inde a dôležité Read/Write operácie sú ukončené. Ináč uzavretím trezoru, ukončíte proces Cryptomator-a.

View File

@@ -108,9 +108,7 @@ unlock.error.invalidMountPoint.existing=Тачка везивања "%s" већ
# Lock
## Force
lock.forced.heading=Нормално закључавање није успело
lock.forced.message=Закључавање "%s" је блокирано операцијама на чекању или отвореним датотекама. Можете присилно закључати овај сеф, међутим прекид "I/O" операција може резултирати губитком несачуваних података.
lock.forced.confirmBtn=Присилно закључај
## Failure
lock.fail.heading=Закључавање сефа није успело.
lock.fail.message=Сеф "%s" није могуће закључати. Будите сигурни да је несачувани рад сачуван негде другде и да су важне операције читања/писања завршене. Како бисте затворили сеф, зауставите Cryptomator процес у систему.

View File

@@ -108,9 +108,7 @@ unlock.error.invalidMountPoint.existing=Tačka vezivanja "%s" već postoji ili j
# Lock
## Force
lock.forced.heading=Normalno zaključavanje nije uspelo
lock.forced.message=Zaključavanje "%s" je blokirano operacijama na čekanju ili otvorenim datotekama. Možete prisilno zaključati ovaj sef, međutim prekid "I/O" operacija može rezultirati gubitkom nesačuvanih podataka.
lock.forced.confirmBtn=Prisilno zaključaj
## Failure
lock.fail.heading=Zaključavanje sefa nije uspelo.
lock.fail.message=Sef "%s" nije moguće zaključati. Budite sigurni da je nesačuvani rad sačuvan negde drugde i da su važne operacije čitanja/pisanja završene. Kako biste zatvorili sef, zaustavite Cryptomator proces u sistemu.

View File

@@ -75,7 +75,9 @@ addvault.new.readme.accessLocation.2=Detta är ditt valvs åtkomstplats.
addvault.new.readme.accessLocation.3=Alla filer som läggs till denna volym kommer att krypteras av Cryptomator. Du kan arbeta med dem som i vilken annan enhet/mapp som helst. Detta är bara en dekrypterad vy av dess innehåll, dina filer förblir krypterade på din hårddisk hela tiden.
addvault.new.readme.accessLocation.4=Du kan ta bort denna fil.
## Existing
addvaultwizard.existing.instruction=Välj filen "vault.cryptomator" i ditt befintliga valv. Om det endast finns en fil som heter "masterkey.cryptomator", välj den istället.
addvaultwizard.existing.chooseBtn=Välj…
addvaultwizard.existing.filePickerTitle=Välj valvfil
## Success
addvaultwizard.success.nextStepsInstructions=Lade till valv "%s".\nDu måste låsa upp detta valv för att komma åt eller lägga till innehåll. Du kan även låsa upp det vid ett senare tillfälle.
addvaultwizard.success.unlockNow=Lås upp nu
@@ -115,9 +117,8 @@ unlock.error.invalidMountPoint.existing=Monteringspunkten "%s" finns redan eller
# Lock
## Force
lock.forced.heading=Normal låsning misslyckades
lock.forced.message=Låsning av "%s" förhindras av pågående operationer eller öppna filer. Du kan tvinga låsning av detta valv, men det kan resultera i förlust av osparade data.
lock.forced.confirmBtn=Tvinga låsning
lock.forced.retryBtn=Försök igen
## Failure
lock.fail.heading=Låsning av valv misslyckades.
lock.fail.message=Valvet "%s" kunde inte låsas. Se till att osparat arbete sparas någon annanstans och viktiga läs- och skrivfunktioner är klara. För att stänga valvet, avsluta Cryptomator-processen.

View File

@@ -0,0 +1,89 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
## Error
# Defaults
# Tray Menu
# Add Vault Wizard
## Welcome
## New
### Name
### Location
### Password
### Information
## Existing
## Success
# Remove Vault
# Change Password
# Forget Password
# Unlock
##
## Success
## Failure
### Invalid Mount Point
# Lock
## Force
lock.forced.retryBtn=மீண்டும் முயற்சிக்கவும்
## Failure
# Migration
## Start
## Run
## Success
## Missing file system capabilities
## Impossible
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Fix Application
# Preferences
## General
## Volume
## Updates
## Contribution
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
# Vault Statistics
## Read
## Write
# Main Window
## Drag 'n' Drop
## Vault List
## Vault Detail
### Welcome
### Locked
### Unlocked
### Missing
### Needs Migration
### Error
# Wrong File Alert
# Vault Options
## General
## Mount
## Master Key
# Recovery Key
# New Password
# Quit

View File

@@ -0,0 +1,89 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
## Error
# Defaults
# Tray Menu
# Add Vault Wizard
## Welcome
## New
### Name
### Location
### Password
### Information
## Existing
## Success
# Remove Vault
# Change Password
# Forget Password
# Unlock
##
## Success
## Failure
### Invalid Mount Point
# Lock
## Force
lock.forced.retryBtn=మళ్ళీ చేయండి
## Failure
# Migration
## Start
## Run
## Success
## Missing file system capabilities
## Impossible
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Fix Application
# Preferences
## General
## Volume
## Updates
## Contribution
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
# Vault Statistics
## Read
## Write
# Main Window
## Drag 'n' Drop
## Vault List
## Vault Detail
### Welcome
### Locked
### Unlocked
### Missing
### Needs Migration
### Error
# Wrong File Alert
# Vault Options
## General
## Mount
## Master Key
# Recovery Key
# New Password
# Quit

View File

@@ -117,9 +117,10 @@ unlock.error.invalidMountPoint.existing=Bağlama noktası / klasör zaten var ve
# Lock
## Force
lock.forced.heading=Normal kilitleme başarısız oldu
lock.forced.heading=Kilitleme başarısız
lock.forced.message="%s" nin kilitlenmesi, bekleyen işlemler veya açık dosyalar tarafından engellendi. Bu kasayı zorla kilitleyebilirsiniz, ancak G/Ç'nin kesilmesi kaydedilmemiş verilerin kaybına neden olabilir.
lock.forced.confirmBtn=Kilitlemeyi Zorla
lock.forced.retryBtn=Yeniden dene
lock.forced.forceBtn=Kilitlemeye zorla
## Failure
lock.fail.heading=Kasa kilitlenemedi.
lock.fail.message="%s" kasası kilitlenemedi. Kaydedilmemiş çalışmanın başka bir yere kaydedildiğinden ve önemli Okuma / Yazma işlemlerinin tamamlandığından emin olun. Kasayı kapatmak için Cryptomator işlemini sonlandırın.

View File

@@ -2,20 +2,56 @@
# 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=Помилка %s
generic.error.instruction=Ой! Cryptomator не очікував, що таке трапиться. Ви можете знайти існуючі рішення цієї помилки. Або, якщо про це ще не повідомили, то не соромтеся зробити це.
generic.error.hyperlink.lookup=Дізнатися більше про цю помилку
generic.error.hyperlink.report=Повідомити про помилку
generic.error.technicalDetails=Докладно:
# Defaults
defaults.vault.vaultName=Сховище
# Tray Menu
traymenu.showMainWindow=Показати
traymenu.showPreferencesWindow=Властивості
traymenu.lockAllVaults=Заблокувати все
traymenu.quitApplication=Вийти
traymenu.vault.unlock=Розблокувати
traymenu.vault.lock=Заблокувати
traymenu.vault.reveal=Показати
# Add Vault Wizard
addvaultwizard.title=Додати сховище
## Welcome
addvaultwizard.welcome.newButton=Створити нове сховище
addvaultwizard.welcome.existingButton=Відкрити існуюче сховище
## New
### Name
addvaultwizard.new.nameInstruction=Оберіть назву для сховища
addvaultwizard.new.namePrompt=Назва сховища
### Location
addvaultwizard.new.locationInstruction=Де Cryptomator має зберігати зашифровані файли вашого сховища?
addvaultwizard.new.locationLabel=Розташування сховища
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Власне розташування
addvaultwizard.new.directoryPickerButton=Обрати…
addvaultwizard.new.directoryPickerTitle=Оберіть директорію
addvaultwizard.new.fileAlreadyExists=Файл чи папка з іменем сховища вже існує
### Password
### Information
## Existing
addvaultwizard.existing.chooseBtn=Обрати…
## Success
# Remove Vault
@@ -25,6 +61,7 @@
# Forget Password
# Unlock
unlock.unlockBtn=Розблокувати
##
## Success
## Failure
@@ -32,6 +69,9 @@
# Lock
## Force
lock.forced.heading=Помилка блокування
lock.forced.retryBtn=Повторити
lock.forced.forceBtn=Примусове блокування
## Failure
# Migration
@@ -49,6 +89,7 @@
## Fix Application
# Preferences
preferences.title=Властивості
## General
## Volume
## Updates
@@ -62,12 +103,17 @@
## Write
# Main Window
main.closeBtn.tooltip=Закрити
main.preferencesBtn.tooltip=Властивості
## Drag 'n' Drop
## Vault List
main.vaultlist.contextMenu.lock=Заблокувати
main.vaultlist.addVaultBtn=Додати сховище
## Vault Detail
### Welcome
### Locked
### Unlocked
main.vaultDetail.lockBtn=Заблокувати
### Missing
### Needs Migration
### Error
@@ -76,8 +122,10 @@
# Vault Options
## General
vaultOptions.general.vaultName=Назва сховища
## Mount
vaultOptions.mount.mountPoint.directoryPickerButton=Обрати…
## Master Key

View File

@@ -117,9 +117,10 @@ unlock.error.invalidMountPoint.existing=挂载点 "%s" 已存在或缺少父文
# Lock
## Force
lock.forced.heading=常规锁定失败
lock.forced.heading=锁定失败
lock.forced.message=锁定 "%s" 被挂起的操作或使用中的文件中断。您可以强制锁定此保险库,不过请注意打断 I/O 可能导致未保存的数据丢失
lock.forced.confirmBtn=强制锁定
lock.forced.retryBtn=重试
lock.forced.forceBtn=强制锁定
## Failure
lock.fail.heading=锁定保险库失败
lock.fail.message=保险库 "%s" 无法锁定。请确保在其他地方保存未保存的工作,以及重要的 "读/写" 操作已完成。为了顺利关闭保险库,请查杀 Cryptomator 进程

View File

@@ -117,9 +117,8 @@ unlock.error.invalidMountPoint.existing=掛載點已經存在或上層資料夾
# Lock
## Force
lock.forced.heading=正常鎖定失敗
lock.forced.message=仍有未完成的操作或開啟中的檔案以致無法鎖定 "%s"。您可以強制鎖定這個加密檔案庫,不過中斷讀寫可能會導致資料遺失或未被儲存。
lock.forced.confirmBtn=強制鎖定
lock.forced.retryBtn=重試
## Failure
lock.fail.heading=鎖定加密檔案庫失敗。
lock.fail.message=加密檔案庫 "%s" 無法被鎖定。請確保未存檔的工作已儲存在別的地方以及重要的讀寫工作都已經完成。請強制結束 Cryptomator 以關閉加密檔案庫。

View File

@@ -17,8 +17,7 @@ Cryptomator uses 40 third-party dependencies under the following licenses:
- jnr-a64asm (com.github.jnr:jnr-a64asm:1.0.0 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-a64asm)
- jnr-constants (com.github.jnr:jnr-constants:0.10.2 - http://github.com/jnr/jnr-constants)
- jnr-ffi (com.github.jnr:jnr-ffi:2.2.7 - http://github.com/jnr/jnr-ffi)
- Gson (com.google.code.gson:gson:2.8.8 - https://github.com/google/gson/gson)
- Dagger (com.google.dagger:dagger:2.39 - https://github.com/google/dagger)
- Dagger (com.google.dagger:dagger:2.40.3 - https://github.com/google/dagger)
- Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.1 - https://github.com/google/guava/failureaccess)
- Guava: Google Core Libraries for Java (com.google.guava:guava:31.0-jre - https://github.com/google/guava)
- Apache Commons CLI (commons-cli:commons-cli:1.4 - http://commons.apache.org/proper/commons-cli/)
@@ -34,6 +33,7 @@ Cryptomator uses 40 third-party dependencies under the following licenses:
- Jetty :: Utilities (org.eclipse.jetty:jetty-util:10.0.6 - https://eclipse.org/jetty/jetty-util)
- Jetty :: Servlet API and Schemas for JPMS and OSGi (org.eclipse.jetty.toolchain:jetty-servlet-api:4.0.6 - https://eclipse.org/jetty/jetty-servlet-api)
Apache-2.0:
- Gson (com.google.code.gson:gson:2.8.9 - https://github.com/google/gson/gson)
- Java Native Access (net.java.dev.jna:jna:5.9.0 - https://github.com/java-native-access/jna)
- Java Native Access Platform (net.java.dev.jna:jna-platform:5.9.0 - https://github.com/java-native-access/jna)
BSD-3-Clause:
@@ -52,20 +52,20 @@ Cryptomator uses 40 third-party dependencies under the following licenses:
- Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:10.0.6 - https://eclipse.org/jetty/jetty-servlet)
- Jetty :: Utilities (org.eclipse.jetty:jetty-util:10.0.6 - https://eclipse.org/jetty/jetty-util)
Eclipse Public License - v 1.0:
- Logback Classic Module (ch.qos.logback:logback-classic:1.2.6 - http://logback.qos.ch/logback-classic)
- Logback Core Module (ch.qos.logback:logback-core:1.2.6 - http://logback.qos.ch/logback-core)
- Logback Classic Module (ch.qos.logback:logback-classic:1.2.7 - http://logback.qos.ch/logback-classic)
- Logback Core Module (ch.qos.logback:logback-core:1.2.7 - http://logback.qos.ch/logback-core)
Eclipse Public License - v 2.0:
- jnr-posix (com.github.jnr:jnr-posix:3.1.10 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix)
GNU Lesser General Public License:
- Logback Classic Module (ch.qos.logback:logback-classic:1.2.6 - http://logback.qos.ch/logback-classic)
- Logback Core Module (ch.qos.logback:logback-core:1.2.6 - http://logback.qos.ch/logback-core)
- Logback Classic Module (ch.qos.logback:logback-classic:1.2.7 - http://logback.qos.ch/logback-classic)
- Logback Core Module (ch.qos.logback:logback-core:1.2.7 - http://logback.qos.ch/logback-core)
GPLv2:
- jnr-posix (com.github.jnr:jnr-posix:3.1.10 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix)
GPLv2+CE:
- javafx-base (org.openjfx:javafx-base:17.0.0.1 - https://openjdk.java.net/projects/openjfx/javafx-base/)
- javafx-controls (org.openjfx:javafx-controls:17.0.0.1 - https://openjdk.java.net/projects/openjfx/javafx-controls/)
- javafx-fxml (org.openjfx:javafx-fxml:17.0.0.1 - https://openjdk.java.net/projects/openjfx/javafx-fxml/)
- javafx-graphics (org.openjfx:javafx-graphics:17.0.0.1 - https://openjdk.java.net/projects/openjfx/javafx-graphics/)
- javafx-base (org.openjfx:javafx-base:17.0.1 - https://openjdk.java.net/projects/openjfx/javafx-base/)
- javafx-controls (org.openjfx:javafx-controls:17.0.1 - https://openjdk.java.net/projects/openjfx/javafx-controls/)
- javafx-fxml (org.openjfx:javafx-fxml:17.0.1 - https://openjdk.java.net/projects/openjfx/javafx-fxml/)
- javafx-graphics (org.openjfx:javafx-graphics:17.0.1 - https://openjdk.java.net/projects/openjfx/javafx-graphics/)
LGPL 2.1:
- jnr-posix (com.github.jnr:jnr-posix:3.1.10 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix)
LGPL-2.1-or-later: