Compare commits

..
Author SHA1 Message Date
JaniruTEC 2bad933c85 First prototype: Moved logic of "getCiphertextPath"
Moved logic of "getCiphertextPath" from Vault to VaultState
2023-07-21 17:09:07 +02:00
101 changed files with 366 additions and 1852 deletions
-24
View File
@@ -1,24 +0,0 @@
version: 2
updates:
- package-ecosystem: "maven"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "06:00"
timezone: "UTC"
groups:
all: # one PR for all dependencies
patterns:
- "*"
- package-ecosystem: "github-actions"
directory: "/" # even for `.github/workflows`
schedule:
interval: "monthly"
groups:
all: # one PR for all actions
patterns:
- "*"
labels:
- "misc:ci"
+3 -8
View File
@@ -54,7 +54,7 @@ jobs:
--verbose
--output runtime
--module-path "${JAVA_HOME}/jmods"
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr
--strip-native-commands
--no-header-files
--no-man-pages
@@ -80,7 +80,7 @@ jobs:
--copyright "(C) 2016 - 2023 Skymatic GmbH"
--app-version "${{ needs.get-version.outputs.semVerNum }}.${{ needs.get-version.outputs.revNum }}"
--java-options "--enable-preview"
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator"
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64"
--java-options "-Xss5m"
--java-options "-Xmx256m"
--java-options "-Dcryptomator.appVersion=\"${{ needs.get-version.outputs.semVerStr }}\""
@@ -92,8 +92,7 @@ jobs:
--java-options "-Dcryptomator.p12Path=\"@{userhome}/.config/Cryptomator/key.p12\""
--java-options "-Dcryptomator.ipcSocketPath=\"@{userhome}/.config/Cryptomator/ipc.socket\""
--java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/.local/share/Cryptomator/mnt\""
--java-options "-Dcryptomator.showTrayIcon=true"
--java-options "-Dcryptomator.integrationsLinux.trayIconsDir=\"@{appdir}/usr/share/icons/hicolor/symbolic/apps\""
--java-options "-Dcryptomator.showTrayIcon=false"
--java-options "-Dcryptomator.buildNumber=\"appimage-${{ needs.get-version.outputs.revNum }}\""
--add-launcher Cryptomator-gtk2=launcher-gtk2.properties
--resource-dir dist/linux/resources
@@ -104,10 +103,6 @@ jobs:
cp dist/linux/common/org.cryptomator.Cryptomator256.png Cryptomator.AppDir/usr/share/icons/hicolor/256x256/apps/org.cryptomator.Cryptomator.png
cp dist/linux/common/org.cryptomator.Cryptomator512.png Cryptomator.AppDir/usr/share/icons/hicolor/512x512/apps/org.cryptomator.Cryptomator.png
cp dist/linux/common/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg
cp dist/linux/common/org.cryptomator.Cryptomator.tray.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.tray.svg
cp dist/linux/common/org.cryptomator.Cryptomator.tray-unlocked.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.tray-unlocked.svg
cp dist/linux/common/org.cryptomator.Cryptomator.tray.svg Cryptomator.AppDir/usr/share/icons/hicolor/symbolic/apps/org.cryptomator.Cryptomator.tray-symbolic.svg
cp dist/linux/common/org.cryptomator.Cryptomator.tray-unlocked.svg Cryptomator.AppDir/usr/share/icons/hicolor/symbolic/apps/org.cryptomator.Cryptomator.tray-unlocked-symbolic.svg
cp dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml Cryptomator.AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.metainfo.xml
cp dist/linux/common/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/usr/share/applications/org.cryptomator.Cryptomator.desktop
cp dist/linux/common/application-vnd.cryptomator.vault.xml Cryptomator.AppDir/usr/share/mime/packages/application-vnd.cryptomator.vault.xml
+2 -2
View File
@@ -17,8 +17,8 @@ on:
env:
JAVA_VERSION: 20
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_linux-x64_bin-jmods.zip'
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_linux-aarch64_bin-jmods.zip'
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/20.0.1/openjfx-20.0.1_linux-x64_bin-jmods.zip'
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/20.0.1/openjfx-20.0.1_linux-aarch64_bin-jmods.zip'
jobs:
build:
+12 -31
View File
@@ -8,11 +8,6 @@ on:
version:
description: 'Version'
required: false
notarize:
description: 'Notarize'
required: true
default: false
type: boolean
env:
JAVA_VERSION: 20
@@ -36,45 +31,31 @@ jobs:
output-suffix: x64
xcode-path: '/Applications/Xcode_13.2.1.app'
fuse-lib: macFUSE
openjfx-url: https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_osx-x64_bin-jmods.zip
openjfx-sha: 55b8ff7453d59c89ae129f6c9c5ad7b09a5d359568811b376ac1766c14d6a17c
- os: [self-hosted, macOS, ARM64]
architecture: aarch64
output-suffix: arm64
xcode-path: '/Applications/Xcode_13.2.1.app'
fuse-lib: FUSE-T
openjfx-url: https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_osx-aarch64_bin-jmods.zip
openjfx-sha: c60f5f19aa847e0e620e0b011e5de68f2c6755641c2141cec27a0b89f612beaf
steps:
- uses: actions/checkout@v3
- name: Setup Java
uses: actions/setup-java@v3
with:
distribution: 'temurin'
distribution: 'zulu'
java-version: ${{ env.JAVA_VERSION }}
java-package: 'jdk'
java-package: 'jdk+fx'
architecture: ${{ matrix.architecture }}
cache: 'maven'
- name: Download OpenJFX jmods
id: download-jmods
- name: Ensure major jfx version in pom equals in jdk
if: ${{ !contains(matrix.os, 'self-hosted') }}
shell: pwsh
run: |
curl -L ${{ matrix.openjfx-url }} -o openjfx-jmods.zip
echo "${{ matrix.openjfx-sha }} *openjfx-jmods.zip" | shasum -a256 --check
mkdir -p openjfx-jmods/
unzip -j openjfx-jmods.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javafx.fxml.jmod \*/javafx.graphics.jmod -d openjfx-jmods
- name: Ensure major jfx version in pom and in jmods is the same
run: |
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
JMOD_VERSION=${JMOD_VERSION#*@}
JMOD_VERSION=${JMOD_VERSION%%.*}
POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
if [ $POM_JFX_VERSION -ne $JMOD_VERSION ]; then
>&2 echo "Major JavaFX version in pom.xml (${POM_JFX_VERSION}) != jmod version (${JMOD_VERSION_AMD64})"
$jfxPomVersion = (&mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout) -split "\."
$jfxJdkVersion = ((Get-Content -path "${env:JAVA_HOME}/lib/javafx.properties" | Where-Object {$_ -like 'javafx.version=*' }) -replace '.*=','') -split "\."
if ($jfxPomVersion[0] -ne $jfxJdkVersion[0]) {
Write-Error "Major part of JavaFX version in pom($($jfxPomVersion[0])) does not match the version in JDK($($jfxJdkVersion[0])) "
exit 1
fi
}
- name: Set version
run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }}
- name: Run maven
@@ -88,7 +69,7 @@ jobs:
${JAVA_HOME}/bin/jlink
--verbose
--output runtime
--module-path "${JAVA_HOME}/jmods:openjfx-jmods"
--module-path "${JAVA_HOME}/jmods"
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr
--strip-native-commands
--no-header-files
@@ -227,7 +208,7 @@ jobs:
env:
VERSION_NO: ${{ needs.get-version.outputs.semVerNum }}
- name: Notarize .dmg
if: startsWith(github.ref, 'refs/tags/') || inputs.notarize
if: startsWith(github.ref, 'refs/tags/')
uses: cocoalibs/xcode-notarization-action@v1
with:
app-path: 'Cryptomator-*.dmg'
+1 -1
View File
@@ -18,7 +18,7 @@ jobs:
name: Validate commits pushed to release/hotfix branch to fulfill release requirements
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
- id: validate-pom-version
name: Validate POM version
run: |
+5 -5
View File
@@ -10,15 +10,15 @@ on:
required: false
isDebug:
description: 'Build debug version with console output'
type: boolean
type: boolean
env:
JAVA_VERSION: 20
JAVA_DIST: 'temurin'
JAVA_CACHE: 'maven'
JFX_JMODS_URL: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_windows-x64_bin-jmods.zip'
JFX_JMODS_HASH: '18625bbc13c57dbf802486564247a8d8cab72ec558c240a401bf6440384ebd77'
JFX_JMODS_URL: 'https://download2.gluonhq.com/openjfx/20.0.1/openjfx-20.0.1_windows-x64_bin-jmods.zip'
JFX_JMODS_HASH: 'D00767334C43B8832B5CF10267D34CA8F563D187C4655B73EB6020DD79C054B5'
defaults:
run:
@@ -359,7 +359,7 @@ jobs:
cp msi/*.msi files
cp exe/*.exe files
- name: Upload to Kaspersky
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
uses: SamKirkland/FTP-Deploy-Action@4.3.3
with:
protocol: ftps
server: allowlist.kaspersky-labs.com
@@ -368,7 +368,7 @@ jobs:
password: ${{ secrets.ALLOWLIST_KASPERSKY_PASSWORD }}
local-dir: files/
- name: Upload to Avast
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
uses: SamKirkland/FTP-Deploy-Action@4.3.0
with:
protocol: ftp
server: whitelisting.avast.com
+1 -1
View File
@@ -2,7 +2,7 @@
<configuration default="false" name="Cryptomator Linux" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
<module name="cryptomator" />
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath=&quot;@{userhome}/.config/Cryptomator/settings.json&quot; -Dcryptomator.p12Path=&quot;@{userhome}/.config/Cryptomator/key.p12&quot; -Dcryptomator.ipcSocketPath=&quot;@{userhome}/.config/Cryptomator/ipc.socket&quot; -Dcryptomator.logDir=&quot;@{userhome}/.local/share/Cryptomator/logs&quot; -Dcryptomator.pluginDir=&quot;@{userhome}/.local/share/Cryptomator/plugins&quot; -Dcryptomator.mountPointsDir=&quot;@{userhome}/.local/share/Cryptomator/mnt&quot; -Dcryptomator.showTrayIcon=true -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" />
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath=&quot;@{userhome}/.config/Cryptomator/settings.json&quot; -Dcryptomator.p12Path=&quot;@{userhome}/.config/Cryptomator/key.p12&quot; -Dcryptomator.ipcSocketPath=&quot;@{userhome}/.config/Cryptomator/ipc.socket&quot; -Dcryptomator.logDir=&quot;@{userhome}/.local/share/Cryptomator/logs&quot; -Dcryptomator.pluginDir=&quot;@{userhome}/.local/share/Cryptomator/plugins&quot; -Dcryptomator.mountPointsDir=&quot;@{userhome}/.local/share/Cryptomator/mnt&quot; -Dcryptomator.showTrayIcon=true -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64" />
<method v="2">
<option name="Make" enabled="true" />
</method>
+1 -1
View File
@@ -2,7 +2,7 @@
<configuration default="false" name="Cryptomator Linux Dev" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
<module name="cryptomator" />
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath=&quot;@{userhome}/.config/Cryptomator-Dev/settings.json&quot; -Dcryptomator.p12Path=&quot;@{userhome}/.config/Cryptomator-Dev/key.p12&quot; -Dcryptomator.ipcSocketPath=&quot;@{userhome}/.config/Cryptomator-Dev/ipc.socket&quot; -Dcryptomator.logDir=&quot;@{userhome}/.local/share/Cryptomator-Dev/logs&quot; -Dcryptomator.pluginDir=&quot;@{userhome}/.local/share/Cryptomator-Dev/plugins&quot; -Dcryptomator.mountPointsDir=&quot;@{userhome}/.local/share/Cryptomator-Dev/mnt&quot; -Dcryptomator.showTrayIcon=true -Dfuse.experimental=&quot;true&quot; -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" />
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath=&quot;@{userhome}/.config/Cryptomator-Dev/settings.json&quot; -Dcryptomator.p12Path=&quot;@{userhome}/.config/Cryptomator-Dev/key.p12&quot; -Dcryptomator.ipcSocketPath=&quot;@{userhome}/.config/Cryptomator-Dev/ipc.socket&quot; -Dcryptomator.logDir=&quot;@{userhome}/.local/share/Cryptomator-Dev/logs&quot; -Dcryptomator.pluginDir=&quot;@{userhome}/.local/share/Cryptomator-Dev/plugins&quot; -Dcryptomator.mountPointsDir=&quot;@{userhome}/.local/share/Cryptomator-Dev/mnt&quot; -Dcryptomator.showTrayIcon=true -Dfuse.experimental=&quot;true&quot; -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64" />
<method v="2">
<option name="Make" enabled="true" />
</method>
+4 -8
View File
@@ -16,6 +16,7 @@ mvn -f ../../../pom.xml versions:set -DnewVersion=${SEMVER_STR}
# compile
mvn -B -f ../../../pom.xml clean package -Plinux -DskipTests
cp ../../../LICENSE.txt ../../../target
cp ../launcher.sh ../../../target
cp ../../../target/cryptomator-*.jar ../../../target/mods
# add runtime
@@ -23,7 +24,7 @@ ${JAVA_HOME}/bin/jlink \
--verbose \
--output runtime \
--module-path "${JAVA_HOME}/jmods" \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr \
--strip-native-commands \
--no-header-files \
--no-man-pages \
@@ -43,7 +44,7 @@ ${JAVA_HOME}/bin/jpackage \
--name Cryptomator \
--vendor "Skymatic GmbH" \
--java-options "--enable-preview" \
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" \
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64" \
--copyright "(C) 2016 - 2023 Skymatic GmbH" \
--java-options "-Xss5m" \
--java-options "-Xmx256m" \
@@ -56,8 +57,7 @@ ${JAVA_HOME}/bin/jpackage \
--java-options "-Dcryptomator.p12Path=\"@{userhome}/.config/Cryptomator/key.p12\"" \
--java-options "-Dcryptomator.ipcSocketPath=\"@{userhome}/.config/Cryptomator/ipc.socket\"" \
--java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/.local/share/Cryptomator/mnt\"" \
--java-options "-Dcryptomator.showTrayIcon=true" \
--java-options "-Dcryptomator.integrationsLinux.trayIconsDir=\"@{appdir}/usr/share/icons/hicolor/symbolic/apps\"" \
--java-options "-Dcryptomator.showTrayIcon=false" \
--java-options "-Dcryptomator.buildNumber=\"appimage-${REVISION_NO}\"" \
--add-launcher cryptomator-gtk2=launcher-gtk2.properties \
--resource-dir ../resources
@@ -69,10 +69,6 @@ envsubst '${REVISION_NO}' < resources/AppDir/bin/cryptomator.sh > Cryptomator.Ap
cp ../common/org.cryptomator.Cryptomator256.png Cryptomator.AppDir/usr/share/icons/hicolor/256x256/apps/org.cryptomator.Cryptomator.png
cp ../common/org.cryptomator.Cryptomator512.png Cryptomator.AppDir/usr/share/icons/hicolor/512x512/apps/org.cryptomator.Cryptomator.png
cp ../common/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg
cp ../common/org.cryptomator.Cryptomator.tray.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.tray.svg
cp ../common/org.cryptomator.Cryptomator.tray-unlocked.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.tray-unlocked.svg
cp ../common/org.cryptomator.Cryptomator.tray.svg Cryptomator.AppDir/usr/share/icons/hicolor/symbolic/apps/org.cryptomator.Cryptomator.tray-symbolic.svg
cp ../common/org.cryptomator.Cryptomator.tray-unlocked.svg Cryptomator.AppDir/usr/share/icons/hicolor/symbolic/apps/org.cryptomator.Cryptomator.tray-unlocked-symbolic.svg
cp ../common/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/usr/share/applications/org.cryptomator.Cryptomator.desktop
cp ../common/org.cryptomator.Cryptomator.metainfo.xml Cryptomator.AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.metainfo.xml
cp ../common/application-vnd.cryptomator.vault.xml Cryptomator.AppDir/usr/share/mime/packages/application-vnd.cryptomator.vault.xml
@@ -66,8 +66,6 @@
</content_rating>
<releases>
<release date="2023-08-07" version="1.9.3"/>
<release date="2023-07-24" version="1.9.2"/>
<release date="2023-06-07" version="1.9.1"/>
<release date="2023-05-30" version="1.9.0"/>
<release date="2023-04-25" version="1.8.0"/>
@@ -1,12 +0,0 @@
<svg height="16" viewBox="0 0 42 42" width="16" xmlns="http://www.w3.org/2000/svg">
<style
id="current-color-scheme" type="text/css">
.ColorScheme-Text {
color:#232629;
}
</style>
<g fill-rule="evenodd" style="fill:#f2f2f2;fill-opacity:1" class="ColorScheme-Text" fill="currentColor">
<path d="m15.591 35.824c-.019.009-.936.775-1.458 1.208a.418.418 0 0 1 -.627-.111 9.322 9.322 0 0 1 -.3-5.974 15.843 15.843 0 0 0 2.894 2.043c.051 1.03-.161 2.644-.509 2.834zm6.409-6.824h-2l.5-5a2 2 0 1 1 1 0zm-14.544-3.241.744-1.366a1.579 1.579 0 0 0 -.019-1.557l.653-1.2c.2.014-.03-.113.165-.14.051-.217-.051-.336 0-.5a3.269 3.269 0 0 0 0-1.5 7.151 7.151 0 0 1 0-3 2.366 2.366 0 0 0 -2.378 1.448 2.409 2.409 0 0 0 .229 2.661l-.7 1.278a1.779 1.779 0 0 0 -1.317.891l-.741 1.372a1.577 1.577 0 0 0 -.019 1.487 3.028 3.028 0 0 0 -2.746 1.525 2.648 2.648 0 0 0 .044 2.631.748.748 0 0 0 .981.266.656.656 0 0 0 .284-.92 1.37 1.37 0 0 1 -.023-1.361 1.6 1.6 0 0 1 2.079-.63 1.408 1.408 0 0 1 .672 1.95 1.546 1.546 0 0 1 -1.2.78.688.688 0 0 0 -.636.749.707.707 0 0 0 .717.6.789.789 0 0 0 .082 0 2.989 2.989 0 0 0 2.322-1.513 2.669 2.669 0 0 0 -.377-3.084 1.767 1.767 0 0 0 1.184-.867zm13.544-10.759a13.013 13.013 0 0 1 5-1 21.6 21.6 0 0 1 4.5.5 9.312 9.312 0 0 0 -9.5-8.5c-5.794 0-9.176 4-9.5 8.5a21.858 21.858 0 0 1 4.5-.5 12.819 12.819 0 0 1 5 1zm3.5-5c1.209 0 2.5.866 2.5 2h-5c0-1.134 1.291-2 2.5-2zm-7 0c1.209 0 2.5.866 2.5 2h-5c0-1.134 1.291-2 2.5-2zm14.473 6a8.067 8.067 0 0 0 -8.08 8v2.141a3.891 3.891 0 0 0 -2.893 3.734v5.125a23.166 23.166 0 0 1 -4.174-1.623 7.857 7.857 0 0 1 -.027.878 3.263 3.263 0 0 1 -.729 2.074l-1.794 1.483a.379.379 0 0 1 -.276.188h-4c-1.324 0-2.346-1.336-2.653-3.343a7.058 7.058 0 0 1 .234-3.18 3.477 3.477 0 0 1 1.636-2.157 1.868 1.868 0 0 1 .783-.32h1.5a8.035 8.035 0 0 1 -1.5-5 11.1 11.1 0 0 1 .5-3 2.519 2.519 0 0 0 0-1.5 13.272 13.272 0 0 1 -.5-3.5c6.687-1.936 11 0 11 0s4.319-1.955 11 0"/>
<path d="m39 28h-10v-4a3.13 3.13 0 0 1 3-3 3.087 3.087 0 0 1 3 3v1a1.034 1.034 0 0 0 1 1h1a1.034 1.034 0 0 0 1-1v-1a6 6 0 0 0 -12 0v4h-1a2.073 2.073 0 0 0 -2 2v6a2.073 2.073 0 0 0 2 2h14a2.073 2.073 0 0 0 2-2v-6a2.073 2.073 0 0 0 -2-2zm-5.391 5.94a1.609 1.609 0 0 1 -3.217 0v-1.876a1.609 1.609 0 0 1 3.217 0z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

@@ -1,8 +0,0 @@
<svg height="16" viewBox="0 0 42 42" width="16" xmlns="http://www.w3.org/2000/svg">
<style id="current-color-scheme" type="text/css">
.ColorScheme-Text {
color:#232629;
}
</style>
<path d="m32.66 29.319a1.432 1.432 0 0 0 -.66-.319h-1.5a8.125 8.125 0 0 0 1.5-5 11.027 11.027 0 0 0 -.5-3 2.519 2.519 0 0 1 0-1.5 12.987 12.987 0 0 0 .5-3.5c-6.681-1.955-11 0-11 0s-4.313-1.936-11 0a13.272 13.272 0 0 0 .5 3.5 2.519 2.519 0 0 1 0 1.5 11.1 11.1 0 0 0 -.5 3 8.035 8.035 0 0 0 1.5 5h-1.5a1.868 1.868 0 0 0 -.783.319 3.477 3.477 0 0 0 -1.636 2.157 7.058 7.058 0 0 0 -.234 3.18c.307 2.008 1.329 3.344 2.653 3.344h4a.379.379 0 0 0 .277-.187l1.793-1.483a3.263 3.263 0 0 0 .729-2.074 7.857 7.857 0 0 0 .027-.878 23.166 23.166 0 0 0 4.174 1.622 24.4 24.4 0 0 0 4.051-1.614 7.848 7.848 0 0 0 .027.869 3.263 3.263 0 0 0 .729 2.074l1.793 1.484a.61.61 0 0 0 .4.187h4c1.324 0 2.223-1.336 2.529-3.343a7.057 7.057 0 0 0 -.234-3.18 3.477 3.477 0 0 0 -1.635-2.158zm-17.069 6.5c-.019.009-.936.775-1.458 1.208a.418.418 0 0 1 -.627-.111 9.322 9.322 0 0 1 -.3-5.974 15.843 15.843 0 0 0 2.894 2.048c.051 1.03-.161 2.644-.509 2.834zm6.409-6.819h-2l.5-5a2 2 0 1 1 1 0zm6.38 7.921a.418.418 0 0 1 -.627.111c-.522-.433-1.439-1.2-1.458-1.208-.348-.189-.56-1.8-.505-2.828a15.84 15.84 0 0 0 2.9-2.037 9.322 9.322 0 0 1 -.31 5.962zm-20.924-11.162.744-1.366a1.579 1.579 0 0 0 -.019-1.557l.653-1.2c.2.014-.03-.113.165-.14.051-.217-.051-.336 0-.5a3.269 3.269 0 0 0 0-1.5 7.151 7.151 0 0 1 0-3 2.366 2.366 0 0 0 -2.378 1.448 2.409 2.409 0 0 0 .229 2.661l-.7 1.278a1.779 1.779 0 0 0 -1.317.891l-.741 1.372a1.577 1.577 0 0 0 -.019 1.487 3.028 3.028 0 0 0 -2.746 1.525 2.648 2.648 0 0 0 .044 2.631.748.748 0 0 0 .981.266.656.656 0 0 0 .284-.92 1.37 1.37 0 0 1 -.023-1.361 1.6 1.6 0 0 1 2.079-.63 1.408 1.408 0 0 1 .672 1.95 1.546 1.546 0 0 1 -1.2.78.688.688 0 0 0 -.636.749.707.707 0 0 0 .717.6.789.789 0 0 0 .082 0 2.989 2.989 0 0 0 2.322-1.513 2.669 2.669 0 0 0 -.377-3.084 1.767 1.767 0 0 0 1.184-.867zm33.217 1.2a3.021 3.021 0 0 0 -2.658-1.525 1.574 1.574 0 0 0 -.107-1.283l-.745-1.367a1.779 1.779 0 0 0 -1.317-.891l-.7-1.278a2.409 2.409 0 0 0 .229-2.661 2.283 2.283 0 0 0 -2.375-1.454 7.039 7.039 0 0 1 0 3 3.272 3.272 0 0 0 0 1.5c.047.152-.047.3 0 .5.227.04-.069.156.165.14l.653 1.2a1.579 1.579 0 0 0 -.019 1.557l.745 1.367a1.753 1.753 0 0 0 1.045.832 2.66 2.66 0 0 0 -.238 2.916 2.989 2.989 0 0 0 2.326 1.509.79.79 0 0 0 .082 0 .707.707 0 0 0 .717-.6.688.688 0 0 0 -.636-.749 1.546 1.546 0 0 1 -1.2-.78 1.408 1.408 0 0 1 .672-1.95 1.628 1.628 0 0 1 1.179-.089 1.512 1.512 0 0 1 .9.719 1.37 1.37 0 0 1 -.023 1.361.656.656 0 0 0 .284.92.748.748 0 0 0 .981-.266 2.648 2.648 0 0 0 .04-2.633zm-19.673-11.959a13.013 13.013 0 0 1 5-1 21.6 21.6 0 0 1 4.5.5 9.312 9.312 0 0 0 -9.5-8.5c-5.794 0-9.176 4-9.5 8.5a21.858 21.858 0 0 1 4.5-.5 12.819 12.819 0 0 1 5 1zm3.5-5c1.209 0 2.5.866 2.5 2h-5c0-1.134 1.291-2 2.5-2zm-7 0c1.209 0 2.5.866 2.5 2h-5c0-1.134 1.291-2 2.5-2z" fill-rule="evenodd" style="fill:#f2f2f2;fill-opacity:1" class="ColorScheme-Text" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

-2
View File
@@ -1,8 +1,6 @@
cryptomator usr/lib
common/org.cryptomator.Cryptomator.desktop usr/share/applications
common/org.cryptomator.Cryptomator.svg usr/share/icons/hicolor/scalable/apps
common/org.cryptomator.Cryptomator.tray.svg usr/share/icons/hicolor/scalable/apps
common/org.cryptomator.Cryptomator.tray-unlocked.svg usr/share/icons/hicolor/scalable/apps
common/org.cryptomator.Cryptomator256.png usr/share/icons/hicolor/256x256/apps
common/org.cryptomator.Cryptomator512.png usr/share/icons/hicolor/512x512/apps
common/org.cryptomator.Cryptomator.metainfo.xml usr/share/metainfo
-2
View File
@@ -1,3 +1 @@
usr/lib/cryptomator/bin/cryptomator usr/bin/cryptomator
usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.tray.svg usr/share/icons/hicolor/symbolic/apps/org.cryptomator.Cryptomator.tray-symbolic.svg
usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.tray-unlocked.svg usr/share/icons/hicolor/symbolic/apps/org.cryptomator.Cryptomator.tray-unlocked-symbolic.svg
+3 -4
View File
@@ -27,7 +27,7 @@ override_dh_auto_build:
$(JAVA_HOME)/bin/jlink \
--output runtime \
--module-path "${JMODS_PATH}" \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr \
--strip-native-commands \
--no-header-files \
--no-man-pages \
@@ -43,7 +43,7 @@ override_dh_auto_build:
--name cryptomator \
--vendor "Skymatic GmbH" \
--java-options "--enable-preview" \
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" \
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64" \
--copyright "(C) 2016 - 2023 Skymatic GmbH" \
--java-options "-Xss5m" \
--java-options "-Xmx256m" \
@@ -55,8 +55,7 @@ override_dh_auto_build:
--java-options "-Dcryptomator.p12Path=\"@{userhome}/.config/Cryptomator/key.p12\"" \
--java-options "-Dcryptomator.ipcSocketPath=\"@{userhome}/.config/Cryptomator/ipc.socket\"" \
--java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/.local/share/Cryptomator/mnt\"" \
--java-options "-Dcryptomator.showTrayIcon=true" \
--java-options "-Dcryptomator.integrationsLinux.trayIconsDir=\"/usr/share/icons/hicolor/symbolic/apps\"" \
--java-options "-Dcryptomator.showTrayIcon=false" \
--java-options "-Dcryptomator.buildNumber=\"deb-${REVISION_NUM}\"" \
--java-options "-Dcryptomator.appVersion=\"${SEMVER_STR}\"" \
--app-version "${VERSION_NUM}.${REVISION_NUM}" \
+2 -26
View File
@@ -29,14 +29,6 @@ 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'`
FUSE_LIB="FUSE-T"
ARCH="undefined"
if [ "$(machine)" = "arm64e" ]; then
ARCH="aarch64"
else
ARCH="x64"
fi
OPENJFX_JMODS="https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_osx-${ARCH}_bin-jmods.zip"
# 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. Fix by 'brew install maven'."; exit 1; }
@@ -46,22 +38,6 @@ if [ -n "${CODESIGN_IDENTITY}" ]; then
if [[ ! `security find-identity -v -p codesigning | grep -w "${CODESIGN_IDENTITY}"` ]]; then echo "Given codesign identity is invalid."; exit 1; fi
fi
# download and check jmods
curl -L ${OPENJFX_JMODS} -o openjfx-jmods.zip
mkdir -p openjfx-jmods/
unzip -j openjfx-jmods.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javafx.fxml.jmod \*/javafx.graphics.jmod -d openjfx-jmods/
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
JMOD_VERSION=${JMOD_VERSION#*@}
JMOD_VERSION=${JMOD_VERSION%%.*}
POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
if [ $POM_JFX_VERSION -ne $JMOD_VERSION ]; then
>&2 echo "Major JavaFX version in pom.xml (${POM_JFX_VERSION}) != jmod version (${JMOD_VERSION})"
exit 1
fi
# compile
mvn -B -f../../../pom.xml clean package -DskipTests -Pmac
cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
@@ -69,8 +45,8 @@ cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
# add runtime
${JAVA_HOME}/bin/jlink \
--output runtime \
--module-path "${JAVA_HOME}/jmods:openjfx-jmods" \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr \
--module-path "${JAVA_HOME}/jmods" \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr \
--strip-native-commands \
--no-header-files \
--no-man-pages \
+1 -1
View File
@@ -11,7 +11,7 @@ SET HELP_URL="https://cryptomator.org/contact/"
SET MODULE_AND_MAIN_CLASS="org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator"
SET LOOPBACK_ALIAS="cryptomator-vault"
powershell -NoLogo -NoProfile -ExecutionPolicy Unrestricted -Command .\build.ps1^
powershell -NoLogo -ExecutionPolicy Unrestricted -Command .\build.ps1^
-AppName %APPNAME%^
-MainJarGlob "%MAIN_JAR_GLOB%"^
-ModuleAndMainClass "%MODULE_AND_MAIN_CLASS%"^
+3 -5
View File
@@ -51,11 +51,10 @@ if ($clean -and (Test-Path -Path $runtimeImagePath)) {
}
## download jfx jmods
$jmodsVersion='20.0.2'
$jmodsUrl = "https://download2.gluonhq.com/openjfx/${jmodsVersion}/openjfx-${jmodsVersion}_windows-x64_bin-jmods.zip"
$jfxJmodsChecksum = '18625bbc13c57dbf802486564247a8d8cab72ec558c240a401bf6440384ebd77'
$jfxJmodsChecksum = 'd00767334c43b8832b5cf10267d34ca8f563d187c4655b73eb6020dd79c054b5'
$jfxJmodsZip = '.\resources\jfxJmods.zip'
if( !(Test-Path -Path $jfxJmodsZip) ) {
$jmodsUrl = "https://download2.gluonhq.com/openjfx/20.0.1/openjfx-20.0.1_windows-x64_bin-jmods.zip"
Write-Output "Downloading ${jmodsUrl}..."
Invoke-WebRequest $jmodsUrl -OutFile $jfxJmodsZip # redirects are followed by default
}
@@ -66,13 +65,12 @@ if( $jmodsChecksumActual -ne $jfxJmodsChecksum ) {
exit 1;
}
Expand-Archive -Force -Path $jfxJmodsZip -DestinationPath ".\resources\"
Move-Item -Path ".\resources\javafx-jmods-*" -Destination ".\resources\javafx-jmods" -ErrorAction Stop
& "$Env:JAVA_HOME\bin\jlink" `
--verbose `
--output runtime `
--module-path "$Env:JAVA_HOME/jmods;$buildDir/resources/javafx-jmods" `
--module-path "$Env:JAVA_HOME/jmods;$buildDir/resources/javafx-jmods-20.0.1" `
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr,javafx.base,javafx.graphics,javafx.controls,javafx.fxml `
--strip-native-commands `
--no-header-files `
+1 -1
View File
@@ -3,5 +3,5 @@
::REPLACE ME
cd %~dp0
powershell -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command .\patchWebDAV.ps1^
powershell -NoLogo -NonInteractive -ExecutionPolicy Unrestricted -Command .\patchWebDAV.ps1^
-LoopbackAlias %LOOPBACK_ALIAS%
+1 -1
View File
@@ -2,4 +2,4 @@
:: see comments in file ./version170-migrate-settings.ps1
cd %~dp0
powershell -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command .\version170-migrate-settings.ps1
powershell -NoLogo -NonInteractive -ExecutionPolicy Unrestricted -Command .\version170-migrate-settings.ps1
+2 -8
View File
@@ -132,17 +132,11 @@
<CustomAction Id="JpSetARPURLUPDATEINFO" Property="ARPURLUPDATEINFO" Value="$(var.JpUpdateURL)" />
<?endif?>
<Property Id="WixQuietExec64CmdTimeout" Value="20" />
<!-- Note for custom actions: Immediate CAs run BEFORE the files are installed, hence if you depend on installed files, the CAs must be deferred.-->
<!-- WebDAV patches -->
<SetProperty Id="PatchWebDAV" Value="&quot;[INSTALLDIR]patchWebDAV.bat&quot;"
Sequence="execute" Before="PatchWebDAV" />
<CustomAction Id="PatchWebDAV" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
<CustomAction Id="PatchWebDAV" Impersonate="no" ExeCommand="[INSTALLDIR]patchWebDAV.bat" Directory="INSTALLDIR" Execute="deferred" Return="asyncWait" />
<!-- Special Settings migration for 1.7.0,. Should be removed eventually, for more info, see ../contrib/version170-migrate-settings.ps1-->
<SetProperty Id="V170MigrateSettings" Value="&quot;[INSTALLDIR]version170-migrate-settings.bat&quot;"
Sequence="execute" Before="V170MigrateSettings" />
<CustomAction Id="V170MigrateSettings" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
<CustomAction Id="V170MigrateSettings" Impersonate="no" ExeCommand="[INSTALLDIR]version170-migrate-settings.bat" Directory="INSTALLDIR" Execute="deferred" Return="asyncWait" />
<!-- Running App detection and exit -->
<Property Id="FOUNDRUNNINGAPP" Admin="yes"/>
+8 -8
View File
@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.cryptomator</groupId>
<artifactId>cryptomator</artifactId>
<version>1.10.0</version>
<version>1.10.0-SNAPSHOT</version>
<name>Cryptomator Desktop App</name>
<organization>
@@ -29,15 +29,15 @@
<project.jdk.version>20</project.jdk.version>
<!-- Group IDs of jars that need to stay on the class path for now -->
<!-- remove them, as soon they got modularized or support is dropped (i.e., WebDAV) -->
<nonModularGroupIds>org.ow2.asm,org.apache.jackrabbit,org.apache.httpcomponents</nonModularGroupIds>
<!-- Once hypfvieh, swiesend, purejava and integrations-linux have module-info, remove them-->
<nonModularGroupIds>org.ow2.asm,org.apache.jackrabbit,org.apache.httpcomponents,de.swiesend,org.purejava,com.github.hypfvieh</nonModularGroupIds>
<!-- cryptomator dependencies -->
<cryptomator.cryptofs.version>2.6.7</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.3.0</cryptomator.integrations.version>
<cryptomator.integrations.win.version>1.2.2</cryptomator.integrations.win.version>
<cryptomator.cryptofs.version>2.6.6</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.2.0</cryptomator.integrations.version>
<cryptomator.integrations.win.version>1.2.0</cryptomator.integrations.win.version>
<cryptomator.integrations.mac.version>1.2.0</cryptomator.integrations.mac.version>
<cryptomator.integrations.linux.version>1.3.0-beta6</cryptomator.integrations.linux.version>
<cryptomator.integrations.linux.version>1.2.1</cryptomator.integrations.linux.version>
<cryptomator.fuse.version>3.0.0</cryptomator.fuse.version>
<cryptomator.dokany.version>2.0.0</cryptomator.dokany.version>
<cryptomator.webdav.version>2.0.3</cryptomator.webdav.version>
@@ -48,7 +48,7 @@
<easybind.version>2.2</easybind.version>
<guava.version>32.0.1-jre</guava.version>
<jackson.version>2.15.2</jackson.version>
<javafx.version>20.0.2</javafx.version>
<javafx.version>20.0.1</javafx.version>
<jwt.version>4.4.0</jwt.version>
<nimbus-jose.version>9.31</nimbus-jose.version>
<logback.version>1.4.7</logback.version>
@@ -83,8 +83,8 @@ public final class OneDriveWindowsLocationPresetsProvider implements LocationPre
throw new TimeoutException(cmdDescription + " timed out after " + timeoutSeconds + "s");
}
if (process.exitValue() != 0) {
@SuppressWarnings("resource") var stdout = process.inputReader(StandardCharsets.ISO_8859_1).lines().collect(Collectors.joining("\n"));
@SuppressWarnings("resource") var stderr = process.errorReader(StandardCharsets.ISO_8859_1).lines().collect(Collectors.joining("\n"));
@SuppressWarnings("resource") var stdout = process.inputReader(StandardCharsets.UTF_8).lines().collect(Collectors.joining("\n"));
@SuppressWarnings("resource") var stderr = process.errorReader(StandardCharsets.UTF_8).lines().collect(Collectors.joining("\n"));
throw new CommandFailedException(cmdDescription, process.exitValue(), stdout, stderr);
}
}
@@ -1,17 +0,0 @@
package org.cryptomator.common.mount;
import java.nio.file.Path;
public class HideawayNotDirectoryException extends IllegalMountPointException {
private final Path hideaway;
public HideawayNotDirectoryException(Path path, Path hideaway) {
super(path, "Existing hideaway (" + hideaway.toString() + ") for mountpoint is not a directory: " + path.toString());
this.hideaway = hideaway;
}
public Path getHideaway() {
return hideaway;
}
}
@@ -1,25 +1,9 @@
package org.cryptomator.common.mount;
import java.nio.file.Path;
/**
* Indicates that validation or preparation of a mountpoint failed due to a configuration error or an invalid system state.<br>
* Instances of this exception are usually caught and displayed to the user in an appropriate fashion, e.g. by {@link org.cryptomator.ui.unlock.UnlockInvalidMountPointController UnlockInvalidMountPointController.}
*/
public class IllegalMountPointException extends IllegalArgumentException {
private final Path mountpoint;
public IllegalMountPointException(Path mountpoint) {
this(mountpoint, "The provided mountpoint has a problem: " + mountpoint.toString());
}
public IllegalMountPointException(Path mountpoint, String msg) {
public IllegalMountPointException(String msg) {
super(msg);
this.mountpoint = mountpoint;
}
public Path getMountpoint() {
return mountpoint;
}
}
}
@@ -1,10 +0,0 @@
package org.cryptomator.common.mount;
import java.nio.file.Path;
public class MountPointCleanupFailedException extends IllegalMountPointException {
public MountPointCleanupFailedException(Path path) {
super(path, "Mountpoint could not be cleared: " + path.toString());
}
}
@@ -1,10 +1,8 @@
package org.cryptomator.common.mount;
import java.nio.file.Path;
public class MountPointInUseException extends IllegalMountPointException {
public MountPointInUseException(Path path) {
super(path);
public MountPointInUseException(String msg) {
super(msg);
}
}
@@ -1,10 +0,0 @@
package org.cryptomator.common.mount;
import java.nio.file.Path;
public class MountPointNotEmptyDirectoryException extends IllegalMountPointException {
public MountPointNotEmptyDirectoryException(Path path, String msg) {
super(path, msg);
}
}
@@ -1,14 +0,0 @@
package org.cryptomator.common.mount;
import java.nio.file.Path;
public class MountPointNotExistingException extends IllegalMountPointException {
public MountPointNotExistingException(Path path, String msg) {
super(path, msg);
}
public MountPointNotExistingException(Path path) {
super(path, "Mountpoint does not exist: " + path);
}
}
@@ -0,0 +1,8 @@
package org.cryptomator.common.mount;
public class MountPointNotExistsException extends IllegalMountPointException {
public MountPointNotExistsException(String msg) {
super(msg);
}
}
@@ -1,10 +1,8 @@
package org.cryptomator.common.mount;
import java.nio.file.Path;
public class MountPointNotSupportedException extends IllegalMountPointException {
public MountPointNotSupportedException(Path path, String msg) {
super(path, msg);
public MountPointNotSupportedException(String msg) {
super(msg);
}
}
@@ -0,0 +1,12 @@
package org.cryptomator.common.mount;
public class MountPointPreparationException extends RuntimeException {
public MountPointPreparationException(String msg) {
super(msg);
}
public MountPointPreparationException(Throwable cause) {
super(cause);
}
}
@@ -5,11 +5,13 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.file.DirectoryNotEmptyException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.NoSuchFileException;
import java.nio.file.NotDirectoryException;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
public final class MountWithinParentUtil {
@@ -20,33 +22,31 @@ public final class MountWithinParentUtil {
private MountWithinParentUtil() {}
static void prepareParentNoMountPoint(Path mountPoint) throws IllegalMountPointException, IOException {
static void prepareParentNoMountPoint(Path mountPoint) throws MountPointPreparationException {
Path hideaway = getHideaway(mountPoint);
var mpState = getMountPointState(mountPoint);
var mpExists = Files.exists(mountPoint, LinkOption.NOFOLLOW_LINKS);
var hideExists = Files.exists(hideaway, LinkOption.NOFOLLOW_LINKS);
if (mpState == MountPointState.BROKEN_JUNCTION) {
LOG.info("Mountpoint \"{}\" is still a junction. Deleting it.", mountPoint);
Files.delete(mountPoint); //Throws if mountPoint is also a non-empty folder
mpState = MountPointState.NOT_EXISTING;
}
if (mpState == MountPointState.NOT_EXISTING && !hideExists) { //neither mountpoint nor hideaway exist
throw new MountPointNotExistingException(mountPoint);
} else if (mpState == MountPointState.NOT_EXISTING) { //only hideaway exists
checkIsHideawayDirectory(mountPoint, hideaway);
//TODO: possible improvement by just deleting an _empty_ hideaway
if (mpExists && hideExists) { //both resources exist (whatever type)
throw new MountPointPreparationException(new FileAlreadyExistsException(hideaway.toString()));
} else if (!mpExists && !hideExists) { //neither mountpoint nor hideaway exist
throw new MountPointPreparationException(new NoSuchFileException(mountPoint.toString()));
} else if (!mpExists) { //only hideaway exists
checkIsDirectory(hideaway);
LOG.info("Mountpoint {} seems to be not properly cleaned up. Will be fixed on unmount.", mountPoint);
if (SystemUtils.IS_OS_WINDOWS) {
Files.setAttribute(hideaway, WIN_HIDDEN_ATTR, true, LinkOption.NOFOLLOW_LINKS);
}
} else {
assert mpState == MountPointState.EMPTY_DIR;
try {
if (hideExists) { //... with hideaway
removeResidualHideaway(mountPoint, hideaway);
if (SystemUtils.IS_OS_WINDOWS) {
Files.setAttribute(hideaway, WIN_HIDDEN_ATTR, true, LinkOption.NOFOLLOW_LINKS);
}
} catch (IOException e) {
throw new MountPointPreparationException(e);
}
} else { //only mountpoint exists
try {
checkIsDirectory(mountPoint);
checkIsEmpty(mountPoint);
//... (now) without hideaway
Files.move(mountPoint, hideaway);
if (SystemUtils.IS_OS_WINDOWS) {
Files.setAttribute(hideaway, WIN_HIDDEN_ATTR, true, LinkOption.NOFOLLOW_LINKS);
@@ -54,66 +54,30 @@ public final class MountWithinParentUtil {
int attempts = 0;
while (!Files.notExists(mountPoint)) {
if (attempts >= 10) {
throw new MountPointCleanupFailedException(mountPoint);
throw new MountPointPreparationException("Path " + mountPoint + " could not be cleared");
}
Thread.sleep(1000);
attempts++;
}
} catch (IOException e) {
throw new MountPointPreparationException(e);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(e);
throw new MountPointPreparationException(e);
}
}
}
//visible for testing
static MountPointState getMountPointState(Path path) throws IOException, IllegalMountPointException {
if (Files.notExists(path, LinkOption.NOFOLLOW_LINKS)) {
return MountPointState.NOT_EXISTING;
}
if (!Files.readAttributes(path, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS).isOther()) {
checkIsMountPointDirectory(path);
checkIsMountPointEmpty(path);
return MountPointState.EMPTY_DIR;
}
if (Files.exists(path /* FOLLOW_LINKS */)) { //Both junction and target exist
throw new MountPointInUseException(path);
}
return MountPointState.BROKEN_JUNCTION;
}
//visible for testing
enum MountPointState {
NOT_EXISTING,
EMPTY_DIR,
BROKEN_JUNCTION;
}
//visible for testing
static void removeResidualHideaway(Path mountPoint, Path hideaway) throws IOException {
checkIsHideawayDirectory(mountPoint, hideaway);
Files.delete(hideaway); //Fails if not empty
}
static void cleanup(Path mountPoint) {
Path hideaway = getHideaway(mountPoint);
try {
waitForMountpointRestoration(mountPoint);
if (Files.notExists(hideaway, LinkOption.NOFOLLOW_LINKS)) {
LOG.error("Unable to restore hidden directory to mountpoint \"{}\": Directory does not exist.", mountPoint);
return;
}
Files.move(hideaway, mountPoint);
if (SystemUtils.IS_OS_WINDOWS) {
Files.setAttribute(mountPoint, WIN_HIDDEN_ATTR, false);
}
} catch (IOException e) {
LOG.error("Unable to restore hidden directory to mountpoint \"{}\".", mountPoint, e);
LOG.error("Unable to restore hidden directory to mountpoint {}.", mountPoint, e);
}
}
@@ -135,22 +99,16 @@ public final class MountWithinParentUtil {
}
}
private static void checkIsMountPointDirectory(Path toCheck) throws IllegalMountPointException {
private static void checkIsDirectory(Path toCheck) throws MountPointPreparationException {
if (!Files.isDirectory(toCheck, LinkOption.NOFOLLOW_LINKS)) {
throw new MountPointNotEmptyDirectoryException(toCheck, "Mountpoint is not a directory: " + toCheck);
throw new MountPointPreparationException(new NotDirectoryException(toCheck.toString()));
}
}
private static void checkIsHideawayDirectory(Path mountPoint, Path hideawayToCheck) {
if (!Files.isDirectory(hideawayToCheck, LinkOption.NOFOLLOW_LINKS)) {
throw new HideawayNotDirectoryException(mountPoint, hideawayToCheck);
}
}
private static void checkIsMountPointEmpty(Path toCheck) throws IllegalMountPointException, IOException {
private static void checkIsEmpty(Path toCheck) throws MountPointPreparationException, IOException {
try (var dirStream = Files.list(toCheck)) {
if (dirStream.findFirst().isPresent()) {
throw new MountPointNotEmptyDirectoryException(toCheck, "Mountpoint directory is not empty: " + toCheck);
throw new MountPointPreparationException(new DirectoryNotEmptyException(toCheck.toString()));
}
}
}
@@ -99,7 +99,7 @@ public class Mounter {
var mpIsDriveLetter = userChosenMountPoint.toString().matches("[A-Z]:\\\\");
if (mpIsDriveLetter) {
if (driveLetters.getOccupied().contains(userChosenMountPoint)) {
throw new MountPointInUseException(userChosenMountPoint);
throw new MountPointInUseException(userChosenMountPoint.toString());
}
} else if (canMountToParent && !canMountToDir) {
MountWithinParentUtil.prepareParentNoMountPoint(userChosenMountPoint);
@@ -115,13 +115,13 @@ public class Mounter {
|| (!canMountToParent && !mpIsDriveLetter) //
|| (!canMountToDir && !canMountToParent && !canMountToSystem && !canMountToDriveLetter);
if (configNotSupported) {
throw new MountPointNotSupportedException(userChosenMountPoint, e.getMessage());
throw new MountPointNotSupportedException(e.getMessage());
} else if (canMountToDir && !canMountToParent && !Files.exists(userChosenMountPoint)) {
//mountpoint must exist
throw new MountPointNotExistingException(userChosenMountPoint, e.getMessage());
throw new MountPointNotExistsException(e.getMessage());
} else {
//TODO: add specific exception for !canMountToDir && canMountToParent && !Files.notExists(userChosenMountPoint)
throw new IllegalMountPointException(userChosenMountPoint, e.getMessage());
throw new IllegalMountPointException(e.getMessage());
}
}
}
@@ -314,6 +314,10 @@ public class Vault {
return vaultSettings.path.get();
}
CryptoFileSystem getCryptoFileSystem() {
return cryptoFileSystem.get();
}
/**
* Gets from the cleartext path its ciphertext counterpart.
*
@@ -322,23 +326,7 @@ public class Vault {
* @throws IllegalStateException if the vault is not unlocked
*/
public Path getCiphertextPath(Path cleartextPath) throws IOException {
if (!state.getValue().equals(VaultState.Value.UNLOCKED)) {
throw new IllegalStateException("Vault is not unlocked");
}
var fs = cryptoFileSystem.get();
var osPathSeparator = cleartextPath.getFileSystem().getSeparator();
var cryptoFsPathSeparator = fs.getSeparator();
if (getMountPoint() instanceof Mountpoint.WithPath mp) {
var absoluteCryptoFsPath = cryptoFsPathSeparator + mp.path().relativize(cleartextPath).toString();
if (!cryptoFsPathSeparator.equals(osPathSeparator)) {
absoluteCryptoFsPath = absoluteCryptoFsPath.replace(osPathSeparator, cryptoFsPathSeparator);
}
var cryptoPath = fs.getPath(absoluteCryptoFsPath);
return fs.getCiphertextPath(cryptoPath);
} else {
throw new UnsupportedOperationException("URI mount points not supported.");
}
return state.get().getCiphertextPath(this, cleartextPath);
}
public VaultConfigCache getVaultConfigCache() {
@@ -1,6 +1,7 @@
package org.cryptomator.common.vaults;
import com.google.common.base.Preconditions;
import org.cryptomator.integrations.mount.Mountpoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -8,6 +9,8 @@ import javax.inject.Inject;
import javafx.application.Platform;
import javafx.beans.value.ObservableObjectValue;
import javafx.beans.value.ObservableValueBase;
import java.io.IOException;
import java.nio.file.Path;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.Condition;
@@ -43,12 +46,40 @@ public class VaultState extends ObservableValueBase<VaultState.Value> implements
/**
* Vault is unlocked
*/
UNLOCKED,
UNLOCKED {
/**
* Gets from the cleartext path its ciphertext counterpart.
*
* @return Local os path to the ciphertext resource
* @throws IOException if an I/O error occurs
* @throws IllegalStateException if the vault is not unlocked
*/
Path getCiphertextPath(Vault vault, Path cleartextPath) throws IOException {
var fs = vault.getCryptoFileSystem();
var osPathSeparator = cleartextPath.getFileSystem().getSeparator();
var cryptoFsPathSeparator = fs.getSeparator();
if (vault.getMountPoint() instanceof Mountpoint.WithPath mp) {
var absoluteCryptoFsPath = cryptoFsPathSeparator + mp.path().relativize(cleartextPath).toString();
if (!cryptoFsPathSeparator.equals(osPathSeparator)) {
absoluteCryptoFsPath = absoluteCryptoFsPath.replace(osPathSeparator, cryptoFsPathSeparator);
}
var cryptoPath = fs.getPath(absoluteCryptoFsPath);
return fs.getCiphertextPath(cryptoPath);
} else {
throw new UnsupportedOperationException("URI mount points not supported.");
}
}
},
/**
* Unknown state due to preceding unrecoverable exceptions.
*/
ERROR;
Path getCiphertextPath(Vault vault, Path cleartextPath) throws IOException {
throw new IllegalStateException("Vault is not unlocked");
}
}
private final AtomicReference<Value> value;
@@ -42,7 +42,7 @@ public class ErrorController implements FxController {
private static final ObjectMapper JSON = new ObjectMapper();
private static final Logger LOG = LoggerFactory.getLogger(ErrorController.class);
private static final String ERROR_CODES_URL = "https://api.cryptomator.org/desktop/error-codes.json";
private static final String ERROR_CODES_URL = "https://gist.githubusercontent.com/cryptobot/accba9fb9555e7192271b85606f97230/raw/errorcodes.json";
private static final String SEARCH_URL_FORMAT = "https://github.com/cryptomator/cryptomator/discussions/categories/errors?discussions_q=category:Errors+%s";
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 ";
@@ -65,13 +65,11 @@ public class ErrorController implements FxController {
private final Scene previousScene;
private final Stage window;
private final Environment environment;
private final ExecutorService executorService;
private final BooleanProperty copiedDetails = new SimpleBooleanProperty();
private final ObjectProperty<ErrorDiscussion> matchingErrorDiscussion = new SimpleObjectProperty<>();
private final BooleanExpression errorSolutionFound = matchingErrorDiscussion.isNotNull();
private final BooleanProperty isLoadingHttpResponse = new SimpleBooleanProperty();
private final BooleanProperty askedForLookupDatabasePermission = new SimpleBooleanProperty();
@Inject
ErrorController(Application application, @Named("stackTrace") String stackTrace, ErrorCode errorCode, @Nullable Scene previousScene, Stage window, Environment environment, ExecutorService executorService) {
@@ -81,7 +79,15 @@ public class ErrorController implements FxController {
this.previousScene = previousScene;
this.window = window;
this.environment = environment;
this.executorService = executorService;
isLoadingHttpResponse.set(true);
HttpClient httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
HttpRequest httpRequest = HttpRequest.newBuilder()//
.uri(URI.create(ERROR_CODES_URL))//
.build();
httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofInputStream())//
.thenAcceptAsync(this::loadHttpResponse, executorService)//
.whenCompleteAsync((r, e) -> isLoadingHttpResponse.set(false), Platform::runLater);
}
@FXML
@@ -134,24 +140,6 @@ public class ErrorController implements FxController {
CompletableFuture.delayedExecutor(2, TimeUnit.SECONDS, Platform::runLater).execute(() -> copiedDetails.set(false));
}
@FXML
public void dismiss() {
askedForLookupDatabasePermission.set(true);
}
@FXML
public void lookUpSolution() {
isLoadingHttpResponse.set(true);
askedForLookupDatabasePermission.set(true);
HttpClient httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
HttpRequest httpRequest = HttpRequest.newBuilder()//
.uri(URI.create(ERROR_CODES_URL))//
.build();
httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofInputStream())//
.thenAcceptAsync(this::loadHttpResponse, executorService)//
.whenCompleteAsync((r, e) -> isLoadingHttpResponse.set(false), Platform::runLater);
}
private void loadHttpResponse(HttpResponse<InputStream> response) {
if (response.statusCode() != 200) {
LOG.error("Status code {} when trying to load {} ", response.statusCode(), response.uri());
@@ -305,12 +293,4 @@ public class ErrorController implements FxController {
return isLoadingHttpResponse.get();
}
public BooleanProperty askedForLookupDatabasePermissionProperty() {
return askedForLookupDatabasePermission;
}
public boolean getAskedForLookupDatabasePermission() {
return askedForLookupDatabasePermission.get();
}
}
@@ -28,7 +28,7 @@ public abstract class UpdateCheckerModule {
private static final Logger LOG = LoggerFactory.getLogger(UpdateCheckerModule.class);
private static final URI LATEST_VERSION_URI = URI.create("https://api.cryptomator.org/desktop/latest-version.json");
private static final URI LATEST_VERSION_URI = URI.create("https://api.cryptomator.org/updates/latestVersion.json");
private static final Duration UPDATE_CHECK_INTERVAL = Duration.hours(3);
private static final Duration DISABLED_UPDATE_CHECK_INTERVAL = Duration.hours(100000); // Duration.INDEFINITE leads to overflows...
@@ -76,7 +76,7 @@ public class ReceiveKeyController implements FxController {
switch (response.statusCode()) {
case 200 -> retrievalSucceeded(response);
case 402 -> licenseExceeded();
case 403, 410 -> accessNotGranted(); // or vault has been archived, effectively disallowing access
case 403 -> accessNotGranted();
case 404 -> needsDeviceRegistration();
default -> throw new IOException("Unexpected response " + response.statusCode());
}
@@ -7,7 +7,6 @@ import org.cryptomator.integrations.common.Priority;
import org.cryptomator.integrations.tray.ActionItem;
import org.cryptomator.integrations.tray.SeparatorItem;
import org.cryptomator.integrations.tray.SubMenuItem;
import org.cryptomator.integrations.tray.TrayIconLoader;
import org.cryptomator.integrations.tray.TrayMenuController;
import org.cryptomator.integrations.tray.TrayMenuException;
import org.cryptomator.integrations.tray.TrayMenuItem;
@@ -15,7 +14,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.awt.AWTException;
import java.awt.Image;
import java.awt.Menu;
import java.awt.MenuItem;
import java.awt.PopupMenu;
@@ -25,12 +23,7 @@ import java.awt.TrayIcon;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;
import java.util.function.Consumer;
/**
* Fallback tray icon implementation using AWT. This will only be used if no better implementation is found.
* @see <a href="https://github.com/cryptomator/integrations-linux/blob/33f9a4685b781b55fcce399b8618818bfc08cbdf/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java">preferred AppIndicator-based implementation used on Linux</a>
*/
@CheckAvailability
@Priority(Priority.FALLBACK)
public class AwtTrayMenuController implements TrayMenuController {
@@ -39,7 +32,6 @@ public class AwtTrayMenuController implements TrayMenuController {
private final PopupMenu menu = new PopupMenu();
private TrayIcon trayIcon;
private Image image;
@CheckAvailability
public static boolean isAvailable() {
@@ -47,9 +39,8 @@ public class AwtTrayMenuController implements TrayMenuController {
}
@Override
public void showTrayIcon(Consumer<TrayIconLoader> iconLoader, Runnable defaultAction, String tooltip) throws TrayMenuException {
TrayIconLoader.PngData callback = this::showTrayIconWithPngData;
iconLoader.accept(callback);
public void showTrayIcon(byte[] imageData, Runnable defaultAction, String tooltip) throws TrayMenuException {
var image = Toolkit.getDefaultToolkit().createImage(imageData);
trayIcon = new TrayIcon(image, tooltip, menu);
trayIcon.setImageAutoSize(true);
@@ -65,17 +56,8 @@ public class AwtTrayMenuController implements TrayMenuController {
}
}
private void showTrayIconWithPngData(byte[] imageData) {
image = Toolkit.getDefaultToolkit().createImage(imageData);
}
@Override
public void updateTrayIcon(Consumer<TrayIconLoader> iconLoader) {
TrayIconLoader.PngData callback = this::updateTrayIconWithPngData;
iconLoader.accept(callback);
}
private void updateTrayIconWithPngData(byte[] imageData) {
public void updateTrayIcon(byte[] imageData) {
if (trayIcon == null) {
throw new IllegalStateException("Failed to update the icon as it has not yet been added");
}
@@ -118,4 +100,5 @@ public class AwtTrayMenuController implements TrayMenuController {
}
}
}
}
@@ -7,7 +7,6 @@ import org.cryptomator.common.vaults.VaultListManager;
import org.cryptomator.integrations.tray.ActionItem;
import org.cryptomator.integrations.tray.SeparatorItem;
import org.cryptomator.integrations.tray.SubMenuItem;
import org.cryptomator.integrations.tray.TrayIconLoader;
import org.cryptomator.integrations.tray.TrayMenuController;
import org.cryptomator.integrations.tray.TrayMenuException;
import org.cryptomator.integrations.tray.TrayMenuItem;
@@ -66,12 +65,7 @@ public class TrayMenuBuilder {
});
try {
trayMenu.showTrayIcon(loader -> {
switch (loader) {
case TrayIconLoader.PngData l -> l.loadPng(getAppropriateTrayIconImage());
case TrayIconLoader.FreedesktopIconName l -> l.lookupByName(getAppropriateFreedesktopIconName());
}
}, this::showMainWindow, "Cryptomator");
trayMenu.showTrayIcon(getAppropriateTrayIconImage(), this::showMainWindow, "Cryptomator");
trayMenu.onBeforeOpenMenu(() -> {
for (Vault vault : vaults) {
VaultListManager.redetermineVaultState(vault);
@@ -90,12 +84,7 @@ public class TrayMenuBuilder {
private void vaultListChanged(@SuppressWarnings("unused") Observable observable) {
assert Platform.isFxApplicationThread();
trayMenu.updateTrayIcon(loader -> {
switch (loader) {
case TrayIconLoader.PngData l -> l.loadPng(getAppropriateTrayIconImage());
case TrayIconLoader.FreedesktopIconName l -> l.lookupByName(getAppropriateFreedesktopIconName());
}
});
trayMenu.updateTrayIcon(getAppropriateTrayIconImage());
rebuildMenu();
}
@@ -184,8 +173,4 @@ public class TrayMenuBuilder {
}
}
private String getAppropriateFreedesktopIconName() {
boolean isAnyVaultUnlocked = vaults.stream().anyMatch(Vault::isUnlocked);
return isAnyVaultUnlocked ? "org.cryptomator.Cryptomator.tray-unlocked-symbolic" : "org.cryptomator.Cryptomator.tray-symbolic";
}
}
@@ -1,12 +1,7 @@
package org.cryptomator.ui.unlock;
import org.cryptomator.common.ObservableUtil;
import org.cryptomator.common.mount.HideawayNotDirectoryException;
import org.cryptomator.common.mount.IllegalMountPointException;
import org.cryptomator.common.mount.MountPointCleanupFailedException;
import org.cryptomator.common.mount.MountPointInUseException;
import org.cryptomator.common.mount.MountPointNotEmptyDirectoryException;
import org.cryptomator.common.mount.MountPointNotExistingException;
import org.cryptomator.common.mount.MountPointNotExistsException;
import org.cryptomator.common.mount.MountPointNotSupportedException;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.ui.common.FxController;
@@ -14,15 +9,12 @@ import org.cryptomator.ui.controls.FormattedLabel;
import org.cryptomator.ui.fxapp.FxApplicationWindows;
import org.cryptomator.ui.preferences.SelectedPreferencesTab;
import org.cryptomator.ui.vaultoptions.SelectedVaultOptionsTab;
import org.jetbrains.annotations.PropertyKey;
import javax.inject.Inject;
import javafx.beans.property.ObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.stage.Stage;
import java.nio.file.Path;
import java.util.ResourceBundle;
import java.util.concurrent.atomic.AtomicReference;
//At the current point in time only the CustomMountPointChooser may cause this window to be shown.
@UnlockScoped
@@ -31,31 +23,28 @@ public class UnlockInvalidMountPointController implements FxController {
private final Stage window;
private final Vault vault;
private final FxApplicationWindows appWindows;
private final ObservableValue<ExceptionType> exceptionType;
private final ObservableValue<Path> exceptionPath;
private final ObservableValue<String> exceptionMessage;
private final ObservableValue<Path> hideawayPath;
private final ObservableValue<String> format;
private final ObservableValue<Boolean> showPreferences;
private final ObservableValue<Boolean> showVaultOptions;
private final ResourceBundle resourceBundle;
private final ExceptionType exceptionType;
private final String exceptionMessage;
public FormattedLabel dialogDescription;
@Inject
UnlockInvalidMountPointController(@UnlockWindow Stage window, @UnlockWindow Vault vault, @UnlockWindow ObjectProperty<IllegalMountPointException> illegalMountPointException, FxApplicationWindows appWindows, ResourceBundle resourceBundle) {
UnlockInvalidMountPointController(@UnlockWindow Stage window, @UnlockWindow Vault vault, @UnlockWindow AtomicReference<Throwable> unlockException, FxApplicationWindows appWindows, ResourceBundle resourceBundle) {
this.window = window;
this.vault = vault;
this.appWindows = appWindows;
this.resourceBundle = resourceBundle;
this.exceptionType = illegalMountPointException.map(this::getExceptionType);
this.exceptionPath = illegalMountPointException.map(IllegalMountPointException::getMountpoint);
this.exceptionMessage = illegalMountPointException.map(IllegalMountPointException::getMessage);
this.hideawayPath = illegalMountPointException.map(e -> e instanceof HideawayNotDirectoryException haeExc ? haeExc.getHideaway() : null);
var exc = unlockException.get();
this.exceptionType = getExceptionType(exc);
this.exceptionMessage = exc.getMessage();
}
this.format = ObservableUtil.mapWithDefault(exceptionType, type -> resourceBundle.getString(type.translationKey), "");
this.showPreferences = ObservableUtil.mapWithDefault(exceptionType, type -> type.action == ButtonAction.SHOW_PREFERENCES, false);
this.showVaultOptions = ObservableUtil.mapWithDefault(exceptionType, type -> type.action == ButtonAction.SHOW_VAULT_OPTIONS, false);
@FXML
public void initialize() {
dialogDescription.setFormat(resourceBundle.getString(exceptionType.translationKey));
dialogDescription.setArg1(exceptionMessage);
}
@FXML
@@ -78,11 +67,8 @@ public class UnlockInvalidMountPointController implements FxController {
private ExceptionType getExceptionType(Throwable unlockException) {
return switch (unlockException) {
case MountPointNotSupportedException x -> ExceptionType.NOT_SUPPORTED;
case MountPointNotExistingException x -> ExceptionType.NOT_EXISTING;
case MountPointNotExistsException x -> ExceptionType.NOT_EXISTING;
case MountPointInUseException x -> ExceptionType.IN_USE;
case HideawayNotDirectoryException x -> ExceptionType.HIDEAWAY_NOT_DIR;
case MountPointCleanupFailedException x -> ExceptionType.COULD_NOT_BE_CLEARED;
case MountPointNotEmptyDirectoryException x -> ExceptionType.NOT_EMPTY_DIRECTORY;
default -> ExceptionType.GENERIC;
};
}
@@ -92,15 +78,12 @@ public class UnlockInvalidMountPointController implements FxController {
NOT_SUPPORTED("unlock.error.customPath.description.notSupported", ButtonAction.SHOW_PREFERENCES),
NOT_EXISTING("unlock.error.customPath.description.notExists", ButtonAction.SHOW_VAULT_OPTIONS),
IN_USE("unlock.error.customPath.description.inUse", ButtonAction.SHOW_VAULT_OPTIONS),
HIDEAWAY_NOT_DIR("unlock.error.customPath.description.hideawayNotDir", ButtonAction.SHOW_VAULT_OPTIONS),
COULD_NOT_BE_CLEARED("unlock.error.customPath.description.couldNotBeCleaned", ButtonAction.SHOW_VAULT_OPTIONS),
NOT_EMPTY_DIRECTORY("unlock.error.customPath.description.notEmptyDir", ButtonAction.SHOW_VAULT_OPTIONS),
GENERIC("unlock.error.customPath.description.generic", ButtonAction.SHOW_PREFERENCES);
private final String translationKey;
private final ButtonAction action;
ExceptionType(@PropertyKey(resourceBundle = "i18n.strings") String translationKey, ButtonAction action) {
ExceptionType(String translationKey, ButtonAction action) {
this.translationKey = translationKey;
this.action = action;
}
@@ -108,7 +91,6 @@ public class UnlockInvalidMountPointController implements FxController {
private enum ButtonAction {
//TODO Add option to show filesystem, e.g. for ExceptionType.HIDEAWAY_EXISTS
SHOW_PREFERENCES,
SHOW_VAULT_OPTIONS;
@@ -116,51 +98,11 @@ public class UnlockInvalidMountPointController implements FxController {
/* Getter */
public Path getExceptionPath() {
return exceptionPath.getValue();
public boolean isShowPreferences() {
return exceptionType.action == ButtonAction.SHOW_PREFERENCES;
}
public ObservableValue<Path> exceptionPathProperty() {
return exceptionPath;
}
public String getFormat() {
return format.getValue();
}
public ObservableValue<String> formatProperty() {
return format;
}
public String getExceptionMessage() {
return exceptionMessage.getValue();
}
public ObservableValue<String> exceptionMessageProperty() {
return exceptionMessage;
}
public Path getHideawayPath() {
return hideawayPath.getValue();
}
public ObservableValue<Path> hideawayPathProperty() {
return hideawayPath;
}
public Boolean getShowPreferences() {
return showPreferences.getValue();
}
public ObservableValue<Boolean> showPreferencesProperty() {
return showPreferences;
}
public Boolean getShowVaultOptions() {
return showVaultOptions.getValue();
}
public ObservableValue<Boolean> showVaultOptionsProperty() {
return showVaultOptions;
public boolean isShowVaultOptions() {
return exceptionType.action == ButtonAction.SHOW_VAULT_OPTIONS;
}
}
@@ -4,7 +4,6 @@ import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import org.cryptomator.common.mount.IllegalMountPointException;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FxController;
@@ -19,13 +18,12 @@ import org.jetbrains.annotations.Nullable;
import javax.inject.Named;
import javax.inject.Provider;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.scene.Scene;
import javafx.stage.Modality;
import javafx.stage.Stage;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.concurrent.atomic.AtomicReference;
@Module(subcomponents = {KeyLoadingComponent.class})
abstract class UnlockModule {
@@ -63,8 +61,8 @@ abstract class UnlockModule {
@Provides
@UnlockWindow
@UnlockScoped
static ObjectProperty<IllegalMountPointException> illegalMountPointException() {
return new SimpleObjectProperty<>();
static AtomicReference<Throwable> unlockException() {
return new AtomicReference<>();
}
@Provides
@@ -17,11 +17,11 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javafx.application.Platform;
import javafx.beans.property.ObjectProperty;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicReference;
/**
* A multi-step task that consists of background activities as well as user interaction.
@@ -40,10 +40,10 @@ public class UnlockWorkflow extends Task<Boolean> {
private final Lazy<Scene> invalidMountPointScene;
private final FxApplicationWindows appWindows;
private final KeyLoadingStrategy keyLoadingStrategy;
private final ObjectProperty<IllegalMountPointException> illegalMountPointException;
private final AtomicReference<Throwable> unlockFailedException;
@Inject
UnlockWorkflow(@UnlockWindow Stage window, @UnlockWindow Vault vault, VaultService vaultService, @FxmlScene(FxmlFile.UNLOCK_SUCCESS) Lazy<Scene> successScene, @FxmlScene(FxmlFile.UNLOCK_INVALID_MOUNT_POINT) Lazy<Scene> invalidMountPointScene, FxApplicationWindows appWindows, @UnlockWindow KeyLoadingStrategy keyLoadingStrategy, @UnlockWindow ObjectProperty<IllegalMountPointException> illegalMountPointException) {
UnlockWorkflow(@UnlockWindow Stage window, @UnlockWindow Vault vault, VaultService vaultService, @FxmlScene(FxmlFile.UNLOCK_SUCCESS) Lazy<Scene> successScene, @FxmlScene(FxmlFile.UNLOCK_INVALID_MOUNT_POINT) Lazy<Scene> invalidMountPointScene, FxApplicationWindows appWindows, @UnlockWindow KeyLoadingStrategy keyLoadingStrategy, @UnlockWindow AtomicReference<Throwable> unlockFailedException) {
this.window = window;
this.vault = vault;
this.vaultService = vaultService;
@@ -51,7 +51,7 @@ public class UnlockWorkflow extends Task<Boolean> {
this.invalidMountPointScene = invalidMountPointScene;
this.appWindows = appWindows;
this.keyLoadingStrategy = keyLoadingStrategy;
this.illegalMountPointException = illegalMountPointException;
this.unlockFailedException = unlockFailedException;
}
@Override
@@ -79,7 +79,7 @@ public class UnlockWorkflow extends Task<Boolean> {
private void handleIllegalMountPointError(IllegalMountPointException impe) {
Platform.runLater(() -> {
illegalMountPointException.set(impe);
unlockFailedException.set(impe);
window.setScene(invalidMountPointScene.get());
window.show();
});
+19 -31
View File
@@ -32,37 +32,25 @@
</StackPane>
<VBox spacing="6" HBox.hgrow="ALWAYS">
<FormattedLabel styleClass="label-extra-large" format="%error.message" arg1="${controller.errorCode}"/>
<VBox visible="${!controller.askedForLookupDatabasePermission}" managed="${!controller.askedForLookupDatabasePermission}">
<Label text="%error.lookupPermissionMessage" wrapText="true"/>
<Region VBox.vgrow="ALWAYS" minHeight="18"/>
<ButtonBar buttonMinWidth="120" buttonOrder="+NY">
<buttons>
<Button text="%error.dismiss" ButtonBar.buttonData="NO" onAction="#dismiss"/>
<Button text="%error.lookUpSolution" ButtonBar.buttonData="YES" defaultButton="true" onAction="#lookUpSolution"/>
</buttons>
</ButtonBar>
</VBox>
<VBox visible="${controller.askedForLookupDatabasePermission}" managed="${controller.askedForLookupDatabasePermission}">
<FontAwesome5Spinner glyphSize="24" visible="${controller.isLoadingHttpResponse}" managed="${controller.isLoadingHttpResponse}"/>
<VBox visible="${!controller.isLoadingHttpResponse}" managed="${!controller.isLoadingHttpResponse}">
<Label text="%error.existingSolutionDescription" wrapText="true" visible="${controller.errorSolutionFound}" managed="${controller.errorSolutionFound}"/>
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.solution" onAction="#showSolution" contentDisplay="LEFT" visible="${controller.errorSolutionFound}" managed="${controller.errorSolutionFound}">
<graphic>
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
</graphic>
</Hyperlink>
<Label text="%error.description" wrapText="true" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}"/>
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.lookup" onAction="#searchError" contentDisplay="LEFT" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}">
<graphic>
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
</graphic>
</Hyperlink>
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.report" onAction="#reportError" contentDisplay="LEFT" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}">
<graphic>
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
</graphic>
</Hyperlink>
</VBox>
<FontAwesome5Spinner glyphSize="24" visible="${controller.isLoadingHttpResponse}" managed="${controller.isLoadingHttpResponse}"/>
<VBox visible="${!controller.isLoadingHttpResponse}" managed="${!controller.isLoadingHttpResponse}">
<Label text="%error.existingSolutionDescription" wrapText="true" visible="${controller.errorSolutionFound}" managed="${controller.errorSolutionFound}"/>
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.solution" onAction="#showSolution" contentDisplay="LEFT" visible="${controller.errorSolutionFound}" managed="${controller.errorSolutionFound}">
<graphic>
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
</graphic>
</Hyperlink>
<Label text="%error.description" wrapText="true" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}"/>
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.lookup" onAction="#searchError" contentDisplay="LEFT" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}">
<graphic>
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
</graphic>
</Hyperlink>
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.report" onAction="#reportError" contentDisplay="LEFT" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}">
<graphic>
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
</graphic>
</Hyperlink>
</VBox>
</VBox>
</HBox>
@@ -40,7 +40,7 @@
</padding>
</Label>
<FormattedLabel fx:id="dialogDescription" wrapText="true" textAlignment="LEFT" format="${controller.format}" arg1="${controller.exceptionPath}" arg2="${controller.exceptionMessage}" arg3="${controller.hideawayPath}"/>
<FormattedLabel fx:id="dialogDescription" wrapText="true" textAlignment="LEFT"/>
<Region VBox.vgrow="ALWAYS" minHeight="18"/>
<ButtonBar buttonMinWidth="120" buttonOrder="+CI">
+3 -8
View File
@@ -23,9 +23,7 @@ error.hyperlink.report=Report this error
error.technicalDetails=Details:
error.existingSolutionDescription=Cryptomator didn't expect this to happen. But we found an existing solution for this error. Please take a look at the following link.
error.hyperlink.solution=Look up the solution
error.lookupPermissionMessage=Cryptomator can look up a solution for this problem online. This will send a request to our problem database from your IP address.
error.dismiss=Dismiss
error.lookUpSolution=Look up Solution
# Defaults
defaults.vault.vaultName=Vault
@@ -138,11 +136,8 @@ unlock.success.revealBtn=Reveal Drive
unlock.error.customPath.message=Unable to mount vault to custom path
unlock.error.customPath.description.notSupported=If you wish to keep using the custom path, please go to the preferences and select a volume type that supports it. Otherwise, go to the vault options and choose a supported mount point.
unlock.error.customPath.description.notExists=The custom mount path does not exist. Either create it in your local filesystem or change it in the vault options.
unlock.error.customPath.description.inUse=The drive letter or custom mount path "%s" is already in use.
unlock.error.customPath.description.hideawayNotDir=The temporary, hidden file "%3$s" used for unlock could not be removed. Please check the file and then delete it manually.
unlock.error.customPath.description.couldNotBeCleaned=Your vault could not be mounted to the path "%s". Please try again or choose a different path.
unlock.error.customPath.description.notEmptyDir=The custom mount path "%s" is not an empty folder. Please choose an empty folder and try again.
unlock.error.customPath.description.generic=You have selected a custom mount path for this vault, but using it failed with the message: %2$s
unlock.error.customPath.description.inUse=Drive letter "%s" is already in use.
unlock.error.customPath.description.generic=You have selected a custom mount path for this vault, but using it failed with the message: %s
## Hub
hub.noKeychain.message=Unable to access device key
hub.noKeychain.description=In order to unlock Hub vaults, a device key is required, which is secured using a keychain. To proceed, enable “%s” and select a keychain in the preferences.
+8 -106
View File
@@ -4,7 +4,7 @@
## Button
generic.button.apply=تطبيق
generic.button.back=رجوع
generic.button.cancel=إلغاء
generic.button.cancel=الغاء
generic.button.change=تغيير
generic.button.choose=اختر…
generic.button.close=إغلاق
@@ -16,22 +16,13 @@ generic.button.print=طباعة
# Error
error.message=حدث خطأ ما
error.description=لم يتوقع "كريبتوماتور" حدوث ذلك. يمكنك البحث عن الحلول الموجودة لهذا الخطأ. وإذا لم يتم الإبلاغ عنه بعد، لا تتردد في فعل ذلك.
error.hyperlink.lookup=ابحث عن هذا الخطأ
error.hyperlink.report=أبلغ عن هذا الخطأ
error.technicalDetails=التفاصيل:
error.existingSolutionDescription=لم يتوقع "كريبتوماتور" حدوث ذلك. لكننا وجدنا حلا لهذا الخطأ. يرجى إلقاء نظرة على الرابط التالي.
error.hyperlink.solution=ابحث عن الحل
error.lookupPermissionMessage=يمكن لـ Cryptomator البحث عن حل لهذه المشكلة على الإنترنت. هذا سيرسل طلب إلى قاعدة بيانات مشكلتنا من عنوان IP الخاص بك.
error.dismiss=تجاهل
error.lookUpSolution=البحث عن حل
# Defaults
defaults.vault.vaultName=الخزينة
defaults.vault.vaultName=مخزن
# Tray Menu
traymenu.showMainWindow=عرض
traymenu.showPreferencesWindow=التفضيلات
traymenu.showMainWindow=اظهار
traymenu.showPreferencesWindow=تفضيلات
traymenu.lockAllVaults=تأمين الكل
traymenu.quitApplication=انهاء
traymenu.vault.unlock=افتح
@@ -46,7 +37,7 @@ addvaultwizard.welcome.existingButton=افتح مخزن موجود
## New
### Name
addvaultwizard.new.nameInstruction=اختر اسم للمخزن
addvaultwizard.new.namePrompt=اسم الخزينة
addvaultwizard.new.namePrompt=اسم المخزن
### Location
addvaultwizard.new.locationInstruction=أين يجب على Cryptomator تخزين الملفات المشفرة للمخزن الخاص بك؟
addvaultwizard.new.locationLabel=موقع التخزين
@@ -58,18 +49,6 @@ addvaultwizard.new.fileAlreadyExists=ملف أو مجلد بنفس اسم الم
addvaultwizard.new.locationDoesNotExist=المجلد في المسار المحدد غير موجود أو لا يمكن الوصول إليه
addvaultwizard.new.locationIsNotWritable=لا يوجد صلاحيات للكتابة على المسار المحدد
addvaultwizard.new.locationIsOk=الموقع المناسب للمخزن الخاص بك
addvaultwizard.new.invalidName=اسم المخزن غير صالح
addvaultwizard.new.validName=اسم المخزن صالح
addvaultwizard.new.validCharacters.message=قد يحتوي اسم المخزن على الأحرف التالية:
addvaultwizard.new.validCharacters.chars=أحرف الكلمات (أمثلة: a, ж, 수)
addvaultwizard.new.validCharacters.numbers=الأعداد
addvaultwizard.new.validCharacters.dashes=الشرطة (%s) أو الشرطة السفلية (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=تمكين إعدادات الخبراء
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=أدخل قيمة بين 36 و 220 (الافتراضي 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=افتح وثائق الدعم لمعرفة المزيد.
addvaultwizard.new.expertSettings.shorteningThreshold.title=الحد الأقصى لطول أسماء الملفات المشفرة
addvaultwizard.new.expertSettings.shorteningThreshold.valid=صالح
### Password
addvaultwizard.new.createVaultBtn=إنشاء المخزن
addvaultwizard.new.generateRecoveryKeyChoice=لن تتمكن من الوصول إلى بياناتك بدون كلمة المرور الخاصة بك. هل تريد مفتاح استرداد في حالة فقدان كلمة المرور الخاصة بك؟
@@ -77,7 +56,7 @@ addvaultwizard.new.generateRecoveryKeyChoice.yes=نعم من فضلك، أن ت
addvaultwizard.new.generateRecoveryKeyChoice.no=لا شكراً، لن أفقد كلمة المرور الخاصة بي
### Information
addvault.new.readme.storageLocation.fileName=هام.rtf
addvault.new.readme.storageLocation.1=⚠️ ملفات الخزينة ⚠️
addvault.new.readme.storageLocation.1=⚠️ ملفات الخزنة ⚠️
addvault.new.readme.storageLocation.2=هذا هو موقع تخزين الخزنة الخاصة بك.
addvault.new.readme.storageLocation.3=لا تفعل
addvault.new.readme.storageLocation.4=• تغيير أي ملفات داخل هذا الدليل أو
@@ -93,17 +72,13 @@ 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=حدد مِلَفّ المخزن
addvaultwizard.existing.filePickerMimeDesc=مخزن Cryptomator
## Success
addvaultwizard.success.nextStepsInstructions=تم إضافة مخزن "%s".\nتحتاج إلى فتح هذا المخزن للوصول أو إضافة محتويات إليه. بدلاً من ذلك، يمكنك فتحه في أي وقت لاحق.
addvaultwizard.success.unlockNow=افتح الان
# Remove Vault
removeVault.title=احذف الحافظة
removeVault.message=حذف المخزن؟
removeVault.description=سيؤدي هذا إلى نسيان Cryptomator لهذا المخزن فقط. يمكنك إضافته مرة أخرى لاحقاً. لن يتم حذف أي من الملفات المشفرة من القرص الصلب الخاص بك.
removeVault.confirmBtn=احذف الحافظة
@@ -114,70 +89,34 @@ changepassword.finalConfirmation=أتفهم أنني لن أتمكن من الو
# Forget Password
forgetPassword.title=نسيت كلمة المرور
forgetPassword.message=نسيت كلمة المرور؟
forgetPassword.description=سيؤدي هذا إلى حذف كلمة المرور المحفوظة لهذا المخزن من سلسلة مفاتيح النظام الخاص بك.
forgetPassword.confirmBtn=نسيت كلمة المرور
# Unlock
unlock.title=فتح "%s"
unlock.passwordPrompt=‮أدخل كلمة السر لـ "%s":
unlock.savePassword=تذكر كلمة المرور
unlock.unlockBtn=افتح
## Select
unlock.chooseMasterkey.message=لم يتم العثور على مفتاح التشفير الرئيسي
unlock.chooseMasterkey.description=لم يتمكن Cryptomator من العثور على مفتاح التشفير الرئيسي للمخزن "%s". الرجاء اختيار الملف يدوياً.
unlock.chooseMasterkey.filePickerTitle=اختر ملف الـ Masterkey
unlock.chooseMasterkey.filePickerMimeDesc=مفتاح التشفير الرئيسي في Cryptomator
## Success
unlock.success.message=تم الفتح بنجاح
unlock.success.description=تم فتح "%s" بنجاح! يمكنك الآن الوصول لمخزنك عن طريق القرص الافتراضي الخاص به.
unlock.success.rememberChoice=تذكر اختياري ولا تظهر هذا مرة أخرى
unlock.success.revealBtn=اظهار القرص
## Failure
unlock.error.customPath.message=غير قادر على تركيب المخزن إلى المسار المخصص
unlock.error.customPath.description.notSupported=إذا كنت ترغب في الاستمرار في استخدام المسار المخصص، يرجى الذَّهاب إلى التفضيلات وتحديد نوع واسطة التخزين الذي يدعمها. خلاف ذلك، انتقل إلى خيارات المخزن واختر نقطة تركيب مدعومة.
unlock.error.customPath.description.notExists=مسار التركيب المخصص غير موجود. قم بإنشائه في نظام الملفات المحلي الخاص بك أو اختر غيره في خيارات الخزانة.
unlock.error.customPath.description.inUse=حرف القرص أو مسار التركيب المخصص "%s" قيد الاستخدام بالفعل.
unlock.error.customPath.description.hideawayNotDir=لا يمكن إزالة الملف المؤقت المخفي "%3$s" المستخدم للفتح. الرجاء التحقق من الملف ثم حذفه يدوياً.
unlock.error.customPath.description.couldNotBeCleaned=لا يمكن تركيب خزانتك على المسار "%s". الرجاء المحاولة مرة أخرى أو اختيار مسار مختلف.
unlock.error.customPath.description.notEmptyDir=مسار التركيب المخصص "%s" ليس مجلد فارغ. الرجاء اختيار مجلد فارغ وحاول مرة أخرى.
unlock.error.customPath.description.generic=لقد اخترت مسار تركيب مخصص لهذه الخزانة، ولكن استخدامه فشل مع الرسالة: %2$s
## Hub
hub.noKeychain.message=غير قادر على الوصول إلى مفتاح الجهاز
hub.noKeychain.description=من أجل فتح مركز مخازن، مطلوب مفتاح جهاز، يتم تأمينه باستخدام سلسلة مفاتيح. للمضي قدما، قم بتمكين "%s" واختر سلسلة مفاتيح في التفضيلات.
hub.noKeychain.openBtn=فتح التفضيلات
### Waiting
hub.auth.message=جاري الانتظار للمصادقة…
hub.auth.description=يجب أن يتم إعادة توجيهك تلقائياً إلى صفحة تسجيل الدخول.
hub.auth.loginLink=لم يتم إعادة توجيهك؟ انقر هنا لفتحه.
### Receive Key
hub.receive.message=معالجة الاستجابة…
hub.receive.description=Cryptomator يتلقى ويعالج الاستجابة من المركز. الرجاء الانتظار.
### Register Device
hub.register.message=اسم الجهاز متطلب
hub.register.description=يبدو أن هذا هو أول وصول للمركز من هذا الجهاز. من أجل تحديده للحصول على إذن الوصول، تحتاج إلى تسمية هذا الجهاز.
hub.register.nameLabel=اسم الجهاز
hub.register.occupiedMsg=الاسم مستخدم مسبقاً
hub.register.registerBtn=تأكيد
### Registration Success
hub.registerSuccess.message=تم تسمية الجهاز
hub.registerSuccess.description=للدخول إلى الخزينة، يحتاج جهازك إلى إذن من مالك الخزينة.
### Registration Failed
hub.registerFailed.message=أخفق في تسمية الجهاز
hub.registerFailed.description=خطأ في عملية التسمية. لمزيد من التفاصيل، انظر إلى سجل التطبيق.
### Unauthorized
hub.unauthorized.message=تم رفض الوصول
hub.unauthorized.description=لم يتم بعد منح الإذن لجهازك بالوصول إلى هذا المخزن. اطلب من مالك المخزن أن يأذن بذلك.
### License Exceeded
hub.invalidLicense.message=ترخيص المركز غير صالح
hub.invalidLicense.description=نموذج المركز Cryptomator الخاص بك لديه ترخيص غير صالح. الرجاء إبلاغ مسؤول مركز لترقية أو تجديد الترخيص.
# Lock
## Force
lock.forced.message=فشلت عملية القفل
lock.forced.description=تم حظر قفل "%s" بواسطة العمليات المعلقة أو الملفات المفتوحة. يمكنك فرض قفل هذا المخزن، ولكن مقاطعة عمليات الادخال والاخراج I/O قد تؤدي لفقدان البيانات غير المحفوظة.
lock.forced.retryBtn=اعد المحاولة
lock.forced.forceBtn=قفل قسري
## Failure
lock.fail.message=فشلت عملية اقفال الخزنة.
lock.fail.description=فشل عملية قفل %s". تأكد من حفظ العمل غير المحفوظ في مكان آخر وأن العمليات الهامة للقراءة/الكتابة قد انتهت. من أجل إغلاق المخزن، اقتل تطبيق Cryptomator.
@@ -213,42 +152,10 @@ migration.impossible.moreInfo=لا يزال ممكناً فتح المخزن ب
# Health Check
## Start
health.title=فحص الصحة لـ "%s"
health.intro.header=فحص الصحة
health.intro.text=فحص الصحة هو مجموعة من الفحوص للكشف عن المشاكل وربما إصلاحها في الهيكل الداخلي للمخزن الخاص بك. يرجى مراعاة ما يلي:
health.intro.remarkSync=تحقق من مزامنة جميع الأجهزة، وهذا يحل معظم المشاكل.
health.intro.remarkFix=لا يمكن حل جميع المشاكل.
health.intro.remarkBackup=إذا كانت البيانات تالفة، نسخة احتياطية يمكن فقط أن تساعد.
health.intro.affirmation=لقد قرأت وفهمت المعلومات الواردة أعلاه
## Start Failure
health.fail.header=خطأ في تحميل إعدادات المخزن
health.fail.ioError=حدث خطأ أثناء الوصول إلى ملف التهيئة وقراءته.
health.fail.parseError=حدث خطأ أثناء تحليل إعدادات المخزن.
health.fail.moreInfo=المزيد من المعلومات
## Check Selection
health.checkList.description=حدد عمليات التحقق في القائمة اليسرى أو استخدم الأزرار أدناه.
health.checkList.selectAllButton=اختر جميع الفحوص
health.checkList.deselectAllButton=إلغاء اختيار جميع الفحوص
health.check.runBatchBtn=تشغيل الفحوص المحددة
## Detail view
health.check.detail.noSelectedCheck=للحصول على النتائج اختر فحص صحة مكتمل من القائمة اليسرى.
health.check.detail.checkScheduled=تم تحديد ميعاد للفحص.
health.check.detail.checkRunning=جاري الفحص…
health.check.detail.checkSkipped=لم يتم تحديد الفحص للتشغيل.
health.check.detail.checkFinished=تم انتهاء الفحص بنجاح.
health.check.detail.checkFinishedAndFound=تم انتهاء الفحص. فضلا راجع النتائج.
health.check.detail.checkFailed=الفحص توقف بسبب خطأ.
health.check.detail.checkCancelled=تم إلغاء الفحص.
health.check.detail.listFilters.label=التصفية
health.check.detail.fixAllSpecificBtn=إصلاح كل الأنواع
health.check.exportBtn=تصدير التقرير
## Result view
health.result.severityFilter.all=الخطورة - الكل
health.result.severityFilter.good=جيد
health.result.severityFilter.info=معلومات
health.result.severityFilter.warn=تحذير
health.result.severityFilter.crit=حرج
health.result.severityTip.good=الخطورة: جيد\nبنية المخزن عادية.
## Fix Application
# Preferences
@@ -289,8 +196,6 @@ stats.cacheHitRate=معدل استخدام الكاش
stats.read.throughput.idle=قراءة: خامل
stats.decr.total.data.none=تم فك تشفير البيانات:-
## Write
stats.write.total.data.mib=البيانات المكتوبة: %.1f م.ب
stats.write.total.data.gib=البيانات المكتوبة: %.1f ج.ب
stats.encr.total.data.none=البيانات المشفرة: -
## Accesses
@@ -358,11 +263,10 @@ wrongFileAlert.link=لمزيد من المساعدة، قم بزيارة
## General
vaultOptions.general=عام
vaultOptions.general.vaultName=اسم المخزن
vaultOptions.general.autoLock.lockAfterTimePart2=دقائق
vaultOptions.general.unlockAfterStartup=فتح قفل المخزن عند بدء تشغيل Cryptomator
vaultOptions.general.actionAfterUnlock=بعد فتح القفل بنجاح
vaultOptions.general.actionAfterUnlock.ignore=‮لا تفعل شيئاً
vaultOptions.general.actionAfterUnlock.reveal=إظهار القرص
vaultOptions.general.actionAfterUnlock.reveal=اظهار القرص
vaultOptions.general.actionAfterUnlock.ask=اسأل
## Mount
@@ -411,6 +315,4 @@ passwordStrength.messageLabel.4=قوية جداً
# Quit
quit.lockAndQuitBtn=قفل و خروج
# Forced Quit
# Update Reminder
# Forced Quit
+2 -20
View File
@@ -20,8 +20,6 @@ error.description=Cryptomator не чакаў такога павароту. Т
error.hyperlink.lookup=Шукаць гэтую памылку
error.hyperlink.report=Паведаміць пра гэтую памылку
error.technicalDetails=Падрабязнасці:
error.existingSolutionDescription=Cryptomator не чакаў такога, але мы знайшлі, як можна выправіць гэтую хібу. Калі ласка, скарыстайся спасылкаю.
error.hyperlink.solution=Паглядзець на рашэнне
# Defaults
defaults.vault.vaultName=Скарбніца
@@ -61,7 +59,6 @@ addvaultwizard.new.validCharacters.message=Нчзва скарбніцы мус
addvaultwizard.new.validCharacters.chars=Слоўныя знакі, накшталт a, ж або 수
addvaultwizard.new.validCharacters.numbers=Лічбы
addvaultwizard.new.validCharacters.dashes=Злучок (%s) або падкрэслінік (%s)
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Стварыць скарбніцу
addvaultwizard.new.generateRecoveryKeyChoice=Бяз гэтага пароля ты ня зможаш атрымаць доступ да сваіх даных. Ці хочаш ты мець ключ аднаўлення на выпадак, калі ты згубіш свой пароль?
@@ -129,6 +126,7 @@ unlock.success.revealBtn=Паказаць дыск
unlock.error.customPath.message=Не магчыма змантажаваць скарбніцу да карыстальніцкай сцежкі
unlock.error.customPath.description.notSupported=Калі ты надалей жадаеш карыстацца адмысловаю сцежкаю, калі ласка, пайдзі ў налады ды абары там тып тому, які падтрымлівае яе. У іншым выпадку пайдзі ў опцыі скарбніцы ды абяры там пункт мантажавання, які падтрымліваецца.
unlock.error.customPath.description.notExists=Адмысловая сцежка мантажавання не існуе. Ствары яе ў сваёй файлавай сістэме, альбо змяні яе ў опцыях скарбніцы.
unlock.error.customPath.description.generic=Ты абраў адмысловую сцежку мантажавання для гэтай скарбніцы, але скарыстацца ёю не ўдалося. Вось паведамленне пра памылку: %s
## Hub
hub.noKeychain.message=Няма доступу да ключа прылады
hub.noKeychain.description=Каб разамкнуць скарбніцы Hub, патрэбны ключ прылады, які захаваны ў звязку ключоў. Каб працягнуць, уключы "%s" ды абяры звязак ключоў у наладах.
@@ -195,15 +193,11 @@ migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Файлава
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Файлавая сістэма не дазваляе пісаць у яе.
## Impossible
migration.impossible.heading=Не мажліва перанесці скарбніцу
migration.impossible.reason=Скарбніца ня можа аўтаматычна зьміґравацца, бо ейнае месца сховішча альбо пункт доступу не падтрымліваюцца.
migration.impossible.moreInfo=Скарбніца ўсё яшчэ можа адчыняцца, нягледзячы на старую вэрсію. Інструкцыю ручнога міґравання скарбніцы ты знойдзеш тут:
# Health Check
## Start
health.title=Тэст на цэласнасць для "%s"
health.intro.header=Тэст на цэласнасць
health.intro.text=Тэст на цэласнасьць – гэта калекцыя тэстаў для выяўлення ды выпраўленню хібаў унутранай структуры тваёй скарбніцы. Калі ласка, зьвярні ўвагу:
health.intro.remarkSync=Пераканайся, што ўсе прыстоі цалкам сынхранаваныя – гэта вырашае большасьць праблемаў.
health.intro.remarkFix=Ня ўсе хібы могуць быць выпраўленыя.
health.intro.remarkBackup=Калі даныя пашкоджаныя, дапаможа толькі рэзервовая копія.
health.intro.affirmation=Я прачытала і зразумела інфармацыю зверху
@@ -276,10 +270,8 @@ preferences.interface.showMinimizeButton=Паказаць кнопку згор
preferences.interface.showTrayIcon=Паказваць іконку на інфармацыйнай панэлі (спатрэбіцца перазапуск)
## Volume
preferences.volume=Віртуальны дыск
preferences.volume.type=Тып тому
preferences.volume.type.automatic=Аўтаматычна
preferences.volume.docsTooltip=Адчыні дакумэнтацыю, каб даведацца больш пра розныя тыпы тому.
preferences.volume.fuseRestartRequired=Каб дастасаваць зьмены, Cryptomator патрэбна перазапусьціць.
preferences.volume.tcp.port=Порт TCP
preferences.volume.supportedFeatures=Абраны тып тому падтрымлівае наступныя функцыі:
preferences.volume.feature.mountAuto=Аўтаматычны выбар пункту мантажавання
@@ -356,7 +348,6 @@ main.vaultlist.contextMenu.reveal=Паказаць дыск
main.vaultlist.addVaultBtn=Дадаць скарбніцу
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Дзякуй, што ты абраў Cryptomator для абароны тваіх файлаў. Калі табе патрэбна дапамога, калі ласка, паглядзі нашы інструкцыі:
### Locked
main.vaultDetail.lockedStatus=ЗАМКНЁНА
main.vaultDetail.unlockBtn=Адамкнуць…
@@ -395,7 +386,6 @@ main.vaultDetail.error.windowTitle=Памылка загрузкі скарбн
# Wrong File Alert
wrongFileAlert.title=Як зашыфраваць файлы
wrongFileAlert.message=Ці спрабаваў ты зашыфраваць гэтыя файлы?
wrongFileAlert.description=Для гэтай мэты Cryptomator стварае том у тваім мэнэджары файлавай сыстэмы.
wrongFileAlert.instruction.0=Каб зашыфраваць файлы, зрабі наступныя крокі:
wrongFileAlert.instruction.1=1. Разамкні свая скарбніцу.
wrongFileAlert.instruction.2=2. Пстрыкні па "Паказаць"; каб адчыніць том у тваім файлавым мэнэджары.
@@ -436,7 +426,6 @@ vaultOptions.masterkey.recoveryKeyExplanation=Ключ аднаўлення –
vaultOptions.masterkey.showRecoveryKeyBtn=Паказаць ключ аднаўлення
vaultOptions.masterkey.recoverPasswordBtn=Скінуць пароль
## Hub
vaultOptions.hub=Аднаўленне
# Recovery Key
## Display Recovery Key
@@ -448,7 +437,6 @@ recoveryKey.display.StorageHints=Захоўвай іх у бяспечным м
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=Скінуць пароль
recoveryKey.recover.prompt=Увядзі ключ аднаўлення для "%s":
recoveryKey.recover.correctKey=Гэта валідны ключ аднаўлення
recoveryKey.recover.wrongKey=Гэты ключ аднаўлення належыць іншай скарбніцы
recoveryKey.recover.invalidKey=Несапраўдны ключ аднаўлення
@@ -460,10 +448,6 @@ recoveryKey.recover.resetSuccess.message=Пароль паспяхова скі
recoveryKey.recover.resetSuccess.description=Ты можаш разамкнуць сваю скарбніцу з дапамогаю новага паролю.
# Convert Vault
convertVault.title=Перабудаваць скарбніцу
convertVault.convert.convertBtn.before=Перабудаваць
convertVault.convert.convertBtn.processing=Перабудаванне…
convertVault.success.message=Перабудаванне прайшло паспяхова
# New Password
newPassword.promptText=Увядзі новы пароль
@@ -486,6 +470,4 @@ quit.lockAndQuitBtn=Замкнуць ды вайсці
# Forced Quit
quit.forced.message=Некаторыя скарбніцы не магчыма замкнуць
quit.forced.description=Замыканне скарбніц было заблакавана праз дзеючыя аперацыі альбо праз адчыненыя файлы. Ты можаш прымусова замкнуць скарбніцы, але гэта можа прывесці да страты незахаваных даных.
quit.forced.forceAndQuitBtn=Прымусіць і выйсці
# Update Reminder
quit.forced.forceAndQuitBtn=Прымусіць і выйсці
+1 -30
View File
@@ -59,7 +59,6 @@ addvaultwizard.new.validCharacters.message=Името на хранилищет
addvaultwizard.new.validCharacters.chars=Букви (напр. a, ж или 수)
addvaultwizard.new.validCharacters.numbers=Числа
addvaultwizard.new.validCharacters.dashes=Тире (%s) или долна черта (%s)
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Създаване
addvaultwizard.new.generateRecoveryKeyChoice=Без парола няма да имате достъп до данните си. Желаете ли да бъде създаден ключ за възстановяване, в случай че загубите паролата си?
@@ -119,40 +118,17 @@ unlock.chooseMasterkey.filePickerMimeDesc=Гкавен ключ на Крипт
## Success
unlock.success.message=Отключено е успешно
unlock.success.description=Съдържанието на хранилището „%s“ е достъпно в точката му на монтиране.
unlock.success.rememberChoice=Запомняне на избора и да не бъде задаван отново този въпрос
unlock.success.revealBtn=Разкриване на диска
## Failure
unlock.error.customPath.message=Хранилището не може да бъде монтирано в потребителския път
unlock.error.customPath.description.notSupported=Ако искате да продължите да използвате потребитрлския път, отидете в настройките и изберете вид на дял, който поддържа потребителски пътища. В противен случай отидете в настройките на хранилището и изберете поддържана точка за монтиране.
unlock.error.customPath.description.notExists=Потребителският път на монтиране не съществува. Създайте го в местната файлова система или го променете в настройките на хранилището.
## Hub
hub.noKeychain.message=Няма достъп до ключа на устройството
hub.noKeychain.description=За да отключите хранилищата в Hub е необходим ключ за устройството, който се защитава с помощта на ключодържател. За да продължите, разрешете „%s“ и изберете ключодържателя в настройките.
hub.noKeychain.openBtn=Към настройките
### Waiting
hub.auth.message=Изчакване на удостоверяване…
hub.auth.description=Автоматично ще бъдете пренасочени към страницата за вход.
hub.auth.loginLink=Не сте пренасочени? Щракнете тук, за да посетите.
### Receive Key
hub.receive.message=Обработване на отговора…
hub.receive.description=Криптоматор получава и обработва отговора от Hub. Изчакайте.
### Register Device
hub.register.message=Изисква се име на устройство
hub.register.description=Изглежда, че това е първи достъп до Hub от това устройство. За да го разпознаете при разрешаване на достъпа, трябва да му дадете име.
hub.register.nameLabel=Име на устройството
hub.register.occupiedMsg=Това име вече е заето
hub.register.registerBtn=Потвърждаване
### Registration Success
hub.registerSuccess.message=Устройството е именувано
hub.registerSuccess.description=За да получи достъп до хранилището, устройството трябва да бъде упълномощено от собственика на хранилището.
### Registration Failed
hub.registerFailed.message=Грешка при именуване на устройството
hub.registerFailed.description=В процеса на именуване е допусната грешка. За повече подробности разгледайте дневника на приложението.
### Unauthorized
hub.unauthorized.message=Отказан достъп
hub.unauthorized.description=Устройството не е упълномощено за достъп до това хранилище. Поискайте достъп от собственика.
### License Exceeded
hub.invalidLicense.message=Лиценза за Hub е недействителен
# Lock
## Force
@@ -164,7 +140,6 @@ hub.invalidLicense.message=Лиценза за Hub е недействителе
## Success
migration.success.unlockNow=Отключване сега
## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Неподдържана файлова система
## Impossible
# Health Check
@@ -191,9 +166,7 @@ preferences.title=Настройки
## General
## Interface
preferences.interface.theme=Оформление
preferences.interface.theme.automatic=Автоматично
## Volume
preferences.volume.type.automatic=Автоматично
## Updates
## Contribution
#<-- Add entries for donations and code/translation/documentation contribution -->
@@ -257,6 +230,4 @@ vaultOptions.masterkey.changePasswordBtn=Промяна на парола
# Quit
# Forced Quit
# Update Reminder
# Forced Quit
@@ -57,7 +57,6 @@ addvaultwizard.new.validCharacters.message=ভোল্টের নামটি
addvaultwizard.new.validCharacters.chars=শব্দের অক্ষরগুলো (যেমনঃ a, ж অথবা 수)
addvaultwizard.new.validCharacters.numbers=সংখ্যা
addvaultwizard.new.validCharacters.dashes=হাইফেন (%s) অথবা আন্ডারস্কোর (%s)
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=ভোল্ট তৈরি করুন
addvaultwizard.new.generateRecoveryKeyChoice=পাসওয়ার্ড ছাড়া আপনি আপনার তথ্যগুলো ব্যবহার করতে পারবেন না. তাই আপনি কি একটি পুনরুদ্ধার চাবি চান যদি আপনি পাসওয়ার্ড হারিয়ে ফেলেন?
@@ -173,6 +172,4 @@ vaultOptions.mount.mountPoint.directoryPickerButton=নির্বাচন ক
# Quit
# Forced Quit
# Update Reminder
# Forced Quit
@@ -49,7 +49,6 @@ addvaultwizard.new.fileAlreadyExists=Upozorenje: Fajl ili mapa s tim nazivom ve
addvaultwizard.new.locationDoesNotExist=Direktorij u navedenoj putanji ne postoji ili mu se ne može pristupiti
addvaultwizard.new.locationIsNotWritable=Nije moguće izvršiti operaciju pisanja na navedenoj putanji
addvaultwizard.new.locationIsOk=Pogodno mjesto za vaš sef
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Kreiraj novi sef
addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći pristupiti svojim podacima bez lozinke. Želite li ključ za oporavak u slučaju da izgubite lozinku?
@@ -315,6 +314,4 @@ passwordStrength.messageLabel.4=Veoma sigurno
# Quit
quit.lockAndQuitBtn=Zaključaj i zatvori
# Forced Quit
# Update Reminder
# Forced Quit
@@ -20,8 +20,6 @@ error.description=Ui! Cryptomator no esperava que passés això. Podeu cercar al
error.hyperlink.lookup=Cerca aquest error
error.hyperlink.report=Notifica aquest error
error.technicalDetails=Detalls:
error.existingSolutionDescription=Cryptomator no esperava que això ocorreguera. Però hem trobat una solució per a aquest error. Per favor, done una ullada al següent enllaç.
error.hyperlink.solution=Buscar la solució
# Defaults
defaults.vault.vaultName=Caixa forta
@@ -61,7 +59,6 @@ addvaultwizard.new.validCharacters.message=El nom de la caixa forta només pot c
addvaultwizard.new.validCharacters.chars=Caràcters que formen paraules (ex.: a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Nombres
addvaultwizard.new.validCharacters.dashes=Guionet (%s) o guió baix (%s)
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Crea la caixa forta
addvaultwizard.new.generateRecoveryKeyChoice=No podreu accedir a les vostres dades sense la contrasenya. Voleu crear una clau de recuperació en cas perdre la vostra contrasenya?
@@ -129,6 +126,7 @@ unlock.success.revealBtn=Mostra la unitat
unlock.error.customPath.message=No es pot muntar la caixa forta en la ruta personalitzada
unlock.error.customPath.description.notSupported=Si vol continuar fent servir una ruta personalitzada, vagi si us plau a Preferències i seleccioni un tipus de volum que la suporti. Altrament, vagi a les opcions de la caixa forta i escolli un punt de muntatge suportat.
unlock.error.customPath.description.notExists=La ruta de muntatge personalitzada no existeix. Creï-la o canviï-la en les opcions de la caixa forta.
unlock.error.customPath.description.generic=Ha seleccionat una ruta personalitzada on muntar la caixa forta, però ha fallat amb aquest missatge: %s
## Hub
hub.noKeychain.message=No es pot accedir a la clau del dispositiu
hub.noKeychain.description=Per poder desblocar caixes fortes del Hub es requereix la clau d'un dispositiu, que s'emmagatzema de forma segura en un clauer. Per continuar, habiliti "%s" i seleccioni un clauer en les Preferències.
@@ -478,6 +476,4 @@ quit.lockAndQuitBtn=Bloqueja i surt
# Forced Quit
quit.forced.message=Algunes caixes fortes no s'han pogut bloquejar
quit.forced.description=No s'ha pogut blocar la caixa forta 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.
quit.forced.forceAndQuitBtn=Forçar i sortir
# Update Reminder
quit.forced.forceAndQuitBtn=Forçar i sortir
+1 -52
View File
@@ -20,9 +20,6 @@ error.description=Jejda! Tohle Cryptomator nečekal. Můžete najít již existu
error.hyperlink.lookup=Vyhledat tuto chybu
error.hyperlink.report=Nahlásit tuto chybu
error.technicalDetails=Podrobnosti:
error.existingSolutionDescription=Cryptomator neočekával, že se tak stane. Našli jsme však existující řešení pro tuto chybu. Podívejte se prosím na následující odkaz.
error.hyperlink.solution=Podívejte se na řešení
error.lookupPermissionMessage=Cryptomator může najít řešení tohoto problému online. To odešle žádost do naší databáze problémů z vaší IP adresy.
# Defaults
defaults.vault.vaultName=Trezor
@@ -62,12 +59,6 @@ addvaultwizard.new.validCharacters.message=Název trezoru může obsahovat tyto
addvaultwizard.new.validCharacters.chars=Slovní znaky (např. a, ж nebo 수)
addvaultwizard.new.validCharacters.numbers=Čísla
addvaultwizard.new.validCharacters.dashes=Pomlčka (%s) nebo podtržítko (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Zobrazit expertní nastavení
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Zadejte hodnotu mezi 36 a 220 (výchozí 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Otevřete dokumentaci, abyste se dozvěděli více.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximální délka šifrovaných názvů souborů
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Platný
### Password
addvaultwizard.new.createVaultBtn=Vytvořit trezor
addvaultwizard.new.generateRecoveryKeyChoice=Nebudete mít přístup k datům bez hesla. Chcete recovery klíč pro případ, že ztratíte heslo?
@@ -132,18 +123,11 @@ unlock.success.description=Trezor "%s" byl úspěšně odemčen a nyní je dostu
unlock.success.rememberChoice=Pamatovat si volbu, nezobrazovat to znovu
unlock.success.revealBtn=Zobrazit jednotku
## Failure
unlock.error.customPath.message=Nelze připojit trezor k vlastní cestě
unlock.error.customPath.description.notSupported=Pokud chcete pokračovat v používání vlastní cesty, přejděte do nastavení a vyberte typ hlasitosti, který ji podporuje. V opačném případě přejděte do možností trezoru a vyberte podporovaný přípojný bod.
unlock.error.customPath.description.notExists=Cesta k připojení neexistuje. Buď ji vytvořte ve vašem lokálním souborovém systému, nebo ji změňte v možnostech trezoru.
## Hub
hub.noKeychain.message=Nelze získat přístup ke klíči zařízení
hub.noKeychain.openBtn=Otevřít předvolby
### Waiting
hub.auth.message=Čekání na ověření…
hub.auth.description=Měli byste být automaticky přesměrováni na přihlašovací stránku.
hub.auth.loginLink=Nebyli jste přesměrováni? Klikněte zde pro otevření.
### Receive Key
hub.receive.message=Zpracovávání odezvy…
### Register Device
hub.register.message=Je vyžadován název zařízení
hub.register.nameLabel=Název zařízení
@@ -158,7 +142,6 @@ hub.registerFailed.message=Pojmenování zařízení se nezdařilo
hub.unauthorized.message=Přístup odepřen
hub.unauthorized.description=Vaše zařízení dosud nebylo oprávněno k přístupu k tomuto trezoru. Požádejte vlastníka trezoru, aby jej autorizoval.
### License Exceeded
hub.invalidLicense.message=Licence Hubu je neplatná
# Lock
## Force
@@ -236,11 +219,6 @@ health.result.severityFilter.good=Dobré
health.result.severityFilter.info=Informace
health.result.severityFilter.warn=Varování
health.result.severityFilter.crit=Kritické
health.result.fixStateFilter.fixable=Opravitelné
health.result.fixStateFilter.notFixable=Ne opravitelné
health.result.fixStateFilter.fixing=Opravování…
health.result.fixStateFilter.fixed=Opraveno
health.result.fixStateFilter.fixFailed=Opravovaní selhalo
## Fix Application
health.fix.fixBtn=Opravit
health.fix.successTip=Oprava byla úspěšná
@@ -272,9 +250,6 @@ preferences.interface.showTrayIcon=Zobrazit ikonu v liště (vyžaduje restart)
## Volume
preferences.volume=Virtuální jednotky
preferences.volume.type.automatic=Automatické
preferences.volume.tcp.port=TCP port
preferences.volume.feature.mountFlags=Vlastní možnosti připojení disku
preferences.volume.feature.readOnly=Připojení disku pouze pro čtení
## Updates
preferences.updates=Aktualizace
preferences.updates.currentVersion=Aktuální verze: %s
@@ -297,27 +272,21 @@ stats.title=Statistika pro %s
stats.cacheHitRate=Rychlost dosažené mezipaměti
## Read
stats.read.throughput.idle=Čtení: nečinné
stats.read.throughput.kibs=Rychlost čtení: %.2f KiB/s
stats.read.throughput.mibs=Čtení: %.2f MiB/s
stats.read.total.data.none=Přečteno: -
stats.read.total.data.kib=Přečtená data: %.1f KiB
stats.read.total.data.mib=Přečteno: %.1f MiB
stats.read.total.data.gib=Přečteno: %.1f GiB
stats.decr.total.data.none=Dešifrováno: -
stats.decr.total.data.kib=Dešifrovaná data: %.1f KiB
stats.decr.total.data.mib=Dešifrováno: %.1f MiB
stats.decr.total.data.gib=Dešifrováno: %.1f GiB
stats.read.accessCount=Celkem přečteno: %d
## Write
stats.write.throughput.idle=Zápis: nečinný
stats.write.throughput.kibs=Rychlost zápisu: %.2f KiB/s
stats.write.throughput.mibs=Zápis: %.2f MiB/s
stats.write.total.data.none=Zapsaná data: -
stats.write.total.data.kib=Zapsaná data: %.1f KiB
stats.write.total.data.mib=Zapsáno: %.1f MiB
stats.write.total.data.gib=Zapsáno: %.1f GiB
stats.encr.total.data.none=Zašifrováno: -
stats.encr.total.data.kib=Zašifrovaná data: %.1f KiB
stats.encr.total.data.mib=Zašifrováno: %.1f MiB
stats.encr.total.data.gib=Zašifrováno: %.1f GiB
stats.write.accessCount=Celkem zapsáno: %d
@@ -355,16 +324,12 @@ main.vaultDetail.passwordSavedInKeychain=Heslo uloženo
main.vaultDetail.unlockedStatus=ODEMKNUTO
main.vaultDetail.accessLocation=Obsah vašeho trezoru je dostupný:
main.vaultDetail.revealBtn=Zobrazit jednotku
main.vaultDetail.copyUri=Kopírovat URL
main.vaultDetail.lockBtn=Zamknout
main.vaultDetail.bytesPerSecondRead=Přečteno:
main.vaultDetail.bytesPerSecondWritten=Zapsáno:
main.vaultDetail.throughput.idle=nečinný
main.vaultDetail.throughput.kbps=%.1f KiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Statistiky trezoru
main.vaultDetail.locateEncryptedFileBtn=Najít šifrovaný soubor
main.vaultDetail.encryptedPathsCopied=Cesta souboru byla zkopírována do schránky!
### Missing
main.vaultDetail.missing.info=Cryptomator nemohl najít trezor na této cestě.
main.vaultDetail.missing.recheck=Znovu zkontrolovat
@@ -410,7 +375,6 @@ vaultOptions.mount.mountPoint=Přípojný bod
vaultOptions.mount.mountPoint.auto=Automaticky vybrat vhodné místo
vaultOptions.mount.mountPoint.driveLetter=Použít zvolenou jednotku
vaultOptions.mount.mountPoint.directoryPickerButton=Vybrat...
vaultOptions.mount.mountPoint.directoryPickerTitle=Vyberte složku
## Master Key
vaultOptions.masterkey=Heslo
vaultOptions.masterkey.changePasswordBtn=Změnit heslo
@@ -419,9 +383,6 @@ vaultOptions.masterkey.recoveryKeyExplanation=Obnovovací klíč je váš jedin
vaultOptions.masterkey.showRecoveryKeyBtn=Zobrazit klíč k obnově
vaultOptions.masterkey.recoverPasswordBtn=Resetovat heslo
## Hub
vaultOptions.hub=Obnovení
vaultOptions.hub.convertInfo=V případě nouze můžete použít klíč pro obnovení k převedení tohoho trezoru na trezor s heslem.
vaultOptions.hub.convertBtn=Převést na trezor s heslem
# Recovery Key
## Display Recovery Key
@@ -438,7 +399,6 @@ recoveryKey.printout.heading=Obnovovací klíč Cryptomator\n"%s"\n
### Reset Password
recoveryKey.recover.resetBtn=Resetovat
### Recovery Key Password Reset Success
recoveryKey.recover.resetSuccess.message=Resetování hesla bylo úspěšné
# Convert Vault
@@ -458,15 +418,4 @@ passwordStrength.messageLabel.4=velmi silné
quit.title=Ukončit aplikaci
quit.lockAndQuitBtn=Uzamknout a zavřít
# Forced Quit
quit.forced.message=Některé trezory nelze uzamknout
quit.forced.description=Uzamčení trezorů bylo zablokováno probíhajícími operacemi nebo otevřenými soubory. Můžete vynutit uzamčení zbývajících trezorů, ale přerušení I/O může mít za následek ztrátu neuložených dat.
quit.forced.forceAndQuitBtn=Vynutit a ukončit
# Update Reminder
updateReminder.title=Kontrola aktualizací
updateReminder.message=Zkontrolovat aktualizace?
updateReminder.description=Získejte aktuální informace o nových funkcích, opravách chyb a vylepšeních zabezpečení. Doporučujeme automaticky kontrolovat aktualizace.
updateReminder.notNow=Nyní ne
updateReminder.yesOnce=Ano, jednou
updateReminder.yesAutomatically=Ano, automaticky
# Forced Quit
+3 -27
View File
@@ -20,8 +20,6 @@ error.description=Cryptomator forventede ikke at dette skete. Du kan gennemse ek
error.hyperlink.lookup=Slå denne fejl op
error.hyperlink.report=Rapportér denne fejl
error.technicalDetails=Detaljer:
error.existingSolutionDescription=Cryptomator forventede ikke, at dette ville ske. Men vi har fundet en eksisterende løsning på denne fejl. Tag et kig på følgende link.
error.hyperlink.solution=Tjek løsningen
# Defaults
defaults.vault.vaultName=Boks
@@ -61,12 +59,6 @@ addvaultwizard.new.validCharacters.message=Boks-navnet må indeholde de følgend
addvaultwizard.new.validCharacters.chars=Bogstaver (fx a, ж eller 수)
addvaultwizard.new.validCharacters.numbers=Tal
addvaultwizard.new.validCharacters.dashes=Bindestreg (%s) eller understregning (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Aktivér ekspertindstillinger
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Indtast en værdi mellem 36 og 220 (standard 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Åbn dokumentationen for at få mere at vide.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maksimal længde af krypterede filnavne
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Gyldig
### Password
addvaultwizard.new.createVaultBtn=Opret boks
addvaultwizard.new.generateRecoveryKeyChoice=Du kan ikke tilgå dine data uden din adgangskode. Vil du oprette en gendannelses-nøgle i tilfælde af, at du mister din adgangskode?
@@ -134,6 +126,7 @@ unlock.success.revealBtn=Vis drev
unlock.error.customPath.message=Kan ikke montere boks til brugerdefineret sti
unlock.error.customPath.description.notSupported=Hvis du ønsker at fortsætte med at bruge den brugerdefinerede sti, skal du gå til præferencer og vælge en type drev der understøtter det. Hvis ikke, skal du gå til boksens indstillinger og vælge et understøttet monteringspunkt.
unlock.error.customPath.description.notExists=Den brugerdefinerede monteringssti eksisterer ikke. Opret den enten i dit lokale filsystem eller skift monteringssti i boksens indstillinger.
unlock.error.customPath.description.generic=Du har valgt en brugerdefineret monteringssti til denne boks, men det mislykkedes med beskeden: %s
## Hub
hub.noKeychain.message=Kan ikke tilgå enhedsnøgle
hub.noKeychain.description=En enhedsnøgle er påkrævet for at låse Hub bokse op. Enhedsnøglen er sikret i en nøglering. For at fortsætte, aktivér “%s” og vælg en nøglering i indstillingerne.
@@ -161,7 +154,7 @@ hub.registerFailed.description=Der opstod en fejl i navngivnings-processen. Kig
hub.unauthorized.message=Adgang nægtet
hub.unauthorized.description=Din enhed er endnu ikke blevet godkendt til at få adgang til denne boks. Spørg boks-ejeren om godkendelse.
### License Exceeded
hub.invalidLicense.message=Ugyldig Hub-licens
hub.invalidLicense.message=Ugyldig Hub licens
hub.invalidLicense.description=Din Cryptomator Hub har en ugyldig licens. Få venligst en Hub administrator til at opgradere eller forny licensen.
# Lock
@@ -441,9 +434,6 @@ vaultOptions.masterkey.recoveryKeyExplanation=En gendannelsesnøgle er den enest
vaultOptions.masterkey.showRecoveryKeyBtn=Vis gendannelsesnøgle
vaultOptions.masterkey.recoverPasswordBtn=Nulstil adgangskode
## Hub
vaultOptions.hub=Gendannelse
vaultOptions.hub.convertInfo=Du kan bruge gendannelsesnøglen til at konvertere denne Hub-boks til en adgangskode-baseret boks i en nødsituation.
vaultOptions.hub.convertBtn=Konvertér til adgangskodebaseret boks
# Recovery Key
## Display Recovery Key
@@ -455,7 +445,6 @@ recoveryKey.display.StorageHints=Opbevar den et meget sikkert sted, som fx:\n
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=Nulstil adgangskode
recoveryKey.recover.prompt=Indtast gendannelsesnøgle for "%s":
recoveryKey.recover.correctKey=Dette er en gyldig gendannelsesnøgle
recoveryKey.recover.wrongKey=Denne gendannelsesnøgle tilhører en anden boks
recoveryKey.recover.invalidKey=Denne gendannelsesnøgle er ikke gyldig
@@ -467,11 +456,6 @@ recoveryKey.recover.resetSuccess.message=Adgangskod nulstillet
recoveryKey.recover.resetSuccess.description=Du kan nu låse din boks op med den nye adgangskode.
# Convert Vault
convertVault.title=Konvertér boks
convertVault.convert.convertBtn.before=Konvertér
convertVault.convert.convertBtn.processing=Konverterer…
convertVault.success.message=Konvertering udført
convertVault.hubToPassword.success.description=Du kan nu låse boksen op med den valgte adgangskode uden at kræve Hub adgang.
# New Password
newPassword.promptText=Skriv en ny adgangskode
@@ -494,12 +478,4 @@ quit.lockAndQuitBtn=Lås og afslut
# Forced Quit
quit.forced.message=Nogle bokse kunne ikke låses
quit.forced.description=Låsning af "%s" blev blokeret fordi der er igangværende operationer eller åbne filer. Du kan gennemtvinge låsningen - men en afbrydelse af igangværende I/O operationer kan resultere i tab af data som endnu ikke er gemt.
quit.forced.forceAndQuitBtn=Tving og afslut
# Update Reminder
updateReminder.title=Opdateringstjek
updateReminder.message=Tjek for opdateringer?
updateReminder.description=Hold dig opdateret med nye funktioner, fejlrettelser og sikkerhedsforbedringer. Vi anbefaler automatisk at søge efter opdateringer.
updateReminder.notNow=Ikke nu
updateReminder.yesOnce=Ja, én gang
updateReminder.yesAutomatically=Ja, automatisk
quit.forced.forceAndQuitBtn=Tving og afslut
+18 -41
View File
@@ -20,11 +20,6 @@ error.description=Cryptomator hat diesen Fehler nicht erwartet. Du kannst für i
error.hyperlink.lookup=Diesen Fehler nachschlagen
error.hyperlink.report=Diesen Fehler melden
error.technicalDetails=Details:
error.existingSolutionDescription=Cryptomator hat dies nicht erwartet, wir haben jedoch eine funktionierende Lösung für diesen Fehler gefunden. Bitte wirf einen Blick auf den folgenden Link.
error.hyperlink.solution=Lösung nachsehen
error.lookupPermissionMessage=Cryptomator kann online nach einer Lösung für dieses Problem suchen. Hierbei wird eine Anfrage an unsere Problemdatenbank gesendet. Bitte beachte, dass dabei auch deine IP-Adresse übermittelt wird.
error.dismiss=Verwerfen
error.lookUpSolution=Lösung suchen
# Defaults
defaults.vault.vaultName=Tresor
@@ -64,12 +59,6 @@ addvaultwizard.new.validCharacters.message=Der Tresorname darf folgende Zeichen
addvaultwizard.new.validCharacters.chars=Wortzeichen (z. B. a, ж oder 수)
addvaultwizard.new.validCharacters.numbers=Zahlen
addvaultwizard.new.validCharacters.dashes=Bindestrich (%s) oder Unterstrich (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Experteneinstellungen aktivieren
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Gib einen Wert zwischen 36 und 220 ein (Standardwert: 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Öffne die Dokumentation, um mehr zu erfahren.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximale Länge verschlüsselter Dateinamen
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Gültig
### Password
addvaultwizard.new.createVaultBtn=Tresor erstellen
addvaultwizard.new.generateRecoveryKeyChoice=Ohne dieses Passwort kannst du auf deine Daten nicht mehr zugreifen. Möchtest du für den Fall eines Passwortverlusts einen Wiederherstellungsschlüssel erstellen?
@@ -134,14 +123,10 @@ unlock.success.description=Der Inhalt des Tresors „%s“ ist nun über dessen
unlock.success.rememberChoice=Auswahl merken und nicht mehr fragen
unlock.success.revealBtn=Laufwerk anzeigen
## Failure
unlock.error.customPath.message=Tresor kann nicht in benutzerdefinierten Pfad eingehängt werden
unlock.error.customPath.message=Tresor kann nicht an benutzerdefinierten Pfad eingehängt werden
unlock.error.customPath.description.notSupported=Wenn du weiterhin den benutzerdefinierten Pfad verwenden möchtest, öffne die allgemeinen Einstellungen und wähle einen unterstützten Laufwerkstyp. Andernfalls gehe zu den Tresor-Optionen und wähle einen unterstützten Einhängepunkt.
unlock.error.customPath.description.notExists=Der benutzerdefinierte Einhängepunkt existiert nicht. Erstelle ihn in deinem lokalen Dateisystem oder ändere ihn in den Tresor-Optionen.
unlock.error.customPath.description.inUse=Der Laufwerksbuchstabe oder benutzerdefinierte Einhängepunkt „%s“ wird bereits verwendet.
unlock.error.customPath.description.hideawayNotDir=Die temporäre, versteckte Datei "%3$s", die für das Entsperren verwendet wurde, konnte nicht entfernt werden. Bitte überprüfe die Datei und lösche sie manuell.
unlock.error.customPath.description.couldNotBeCleaned=Dein Tresor konnte nicht in den Pfad „%s“ eingehängt werden. Bitte versuche es erneut oder wähle einen anderen Pfad aus.
unlock.error.customPath.description.notEmptyDir=Der benutzerdefinierte Einhängepunkt "%s" ist kein leerer Ordner. Bitte wähle einen leeren Ordner und versuche es erneut.
unlock.error.customPath.description.generic=Du hast für diesen Tresor einen benutzerdefinierten Einhängepunkt ausgewählt, aber dessen Verwendung ist mit folgender Meldung fehlgeschlagen: %2$s
unlock.error.customPath.description.notExists=Der benutzerdefinierte Einhängepunkt existiert nicht. Entweder erstelle ihn in deinem lokalen Dateisystem oder ändere ihn in den Tresor-Optionen.
unlock.error.customPath.description.generic=Du hast für diesen Tresor einen benutzerdefinierten Einhängepunkt ausgewählt, aber die Verwendung ist fehlgeschlagen mit der Meldung: %s
## Hub
hub.noKeychain.message=Zugriff auf Geräteschlüssel nicht möglich
hub.noKeychain.description=Zum Entsperren von Hub-Tresoren wird ein Geräteschlüssel benötigt, der in einem Schlüsselbund gesichert ist. Um fortzufahren, aktiviere „%s“ und wähle in den Einstellungen einen Schlüsselbund.
@@ -170,7 +155,7 @@ hub.unauthorized.message=Zugriff verweigert
hub.unauthorized.description=Dein Gerät wurde noch nicht für den Zugriff auf diesen Tresor autorisiert. Bitte den Tresorbesitzer, dein Gerät zu autorisieren.
### License Exceeded
hub.invalidLicense.message=Hub-Lizenz ungültig
hub.invalidLicense.description=Die Lizenz deiner Cryptomator-Hub-Instanz ist ungültig. Bitte informiere deinen Hub-Administrator, um die Lizenz zu erweitern oder zu erneuern.
hub.invalidLicense.description=Die Lizenz für deine Cryptomator Hub-Instanz ist ungültig. Bitte informiere einen Hub-Administrator, um die Lizenz zu aktualisieren oder zu erneuern.
# Lock
## Force
@@ -187,8 +172,8 @@ migration.title=Tresor upgraden
## Start
migration.start.header=Tresor upgraden
migration.start.text=Um deinen Tresor "%s" in dieser neuen Version von Cryptomator zu öffnen, muss der Tresor auf ein neueres Format aktualisiert werden. Bevor du dies tust, solltest du Folgendes wissen:
migration.start.remarkUndone=Dieses Upgrade kann nicht rückgängig gemacht werden.
migration.start.remarkVersions=Ältere Versionen von Cryptomator können den aktualisierten Tresor nicht öffnen.
migration.start.remarkUndone=Diese Aktualisierung kann nicht rückgängig gemacht werden.
migration.start.remarkVersions=Ältere Versionen von Cryptomator werden den aktualisierten Tresor nicht öffnen können.
migration.start.remarkCanRun=Du musst sicherstellen, dass jedes Gerät, von dem aus du auf den Tresor zugreifst, diese Version von Cryptomator ausführen kann.
migration.start.remarkSynced=Du musst sicherstellen, dass dein Tresor auf diesem Gerät und auf deinen anderen Geräten vollständig synchronisiert ist, bevor du ihn aktualisierst.
migration.start.confirm=Ich habe die oben genannten Informationen gelesen und verstanden
@@ -295,9 +280,9 @@ preferences.volume.docsTooltip=Öffne die Dokumentation, um mehr über die versc
preferences.volume.fuseRestartRequired=Um die Änderungen anzuwenden, muss Cryptomator neu gestartet werden.
preferences.volume.tcp.port=TCP-Port
preferences.volume.supportedFeatures=Der gewählte Laufwerkstyp unterstützt folgende Funktionen:
preferences.volume.feature.mountAuto=Automatische Auswahl des Einhängepunkts
preferences.volume.feature.mountAuto=Automatische Einhängepunkt Auswahl
preferences.volume.feature.mountToDir=Benutzerdefiniertes Verzeichnis als Einhängepunkt
preferences.volume.feature.mountToDriveLetter=Laufwerksbuchstabe als Einhängepunkt
preferences.volume.feature.mountToDriveLetter=Laufwerkbuchstaben als Einhängepunkt
preferences.volume.feature.mountFlags=Benutzerdefinierte Einhänge-Optionen
preferences.volume.feature.readOnly=Schreibgeschütztes Einhängen
## Updates
@@ -349,7 +334,7 @@ stats.write.accessCount=Schreibzugriffe: %d
## Accesses
stats.access.current=Zugriffe: %d
stats.access.total=Gesamtzugriffe: %d
stats.access.total=Gesamte Zugriffe: %d
# Main Window
@@ -438,9 +423,9 @@ vaultOptions.mount.winDriveLetterOccupied=belegt
vaultOptions.mount.mountPoint=Einhängepunkt
vaultOptions.mount.mountPoint.auto=Automatisch einen geeigneten Ort auswählen
vaultOptions.mount.mountPoint.driveLetter=Laufwerksbuchstaben zuweisen
vaultOptions.mount.mountPoint.custom=Gewähltes Verzeichnis verwenden
vaultOptions.mount.mountPoint.custom=Ausgewähltes Verzeichnis verwenden
vaultOptions.mount.mountPoint.directoryPickerButton=Durchsuchen …
vaultOptions.mount.mountPoint.directoryPickerTitle=Wähle ein Verzeichnis
vaultOptions.mount.mountPoint.directoryPickerTitle=Verzeichnis wählen
## Master Key
vaultOptions.masterkey=Passwort
vaultOptions.masterkey.changePasswordBtn=Passwort ändern
@@ -451,7 +436,7 @@ vaultOptions.masterkey.recoverPasswordBtn=Passwort zurücksetzen
## Hub
vaultOptions.hub=Wiederherstellung
vaultOptions.hub.convertInfo=Im Notfall kannst du den Wiederherstellungsschlüssel verwenden, um diesen Hub-Tresor in einen passwortgeschützten Tresor umzuwandeln.
vaultOptions.hub.convertBtn=In passwortgeschützten Tresor umwandeln
vaultOptions.hub.convertBtn=In einen passwortgeschützten Tresor umwandeln
# Recovery Key
## Display Recovery Key
@@ -463,7 +448,7 @@ recoveryKey.display.StorageHints=Bewahre ihn möglichst sicher auf, z. B.\n •
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=Passwort zurücksetzen
recoveryKey.recover.prompt=Gib den Wiederherstellungsschlüssel für %s ein:
recoveryKey.recover.prompt=Gib den Wiederherstellungsschlüssel für "%s" ein:
recoveryKey.recover.correctKey=Dieser Wiederherstellungsschlüssel ist gültig
recoveryKey.recover.wrongKey=Dieser Wiederherstellungsschlüssel gehört zu einem anderen Tresor
recoveryKey.recover.invalidKey=Dieser Wiederherstellungsschlüssel ist ungültig
@@ -475,11 +460,11 @@ recoveryKey.recover.resetSuccess.message=Passwort erfolgreich zurückgesetzt
recoveryKey.recover.resetSuccess.description=Du kannst deinen Tresor mit dem neuen Passwort entsperren.
# Convert Vault
convertVault.title=Tresor umwandeln
convertVault.title=Tresor konvertieren
convertVault.convert.convertBtn.before=Konvertieren
convertVault.convert.convertBtn.processing=Wird umgewandelt…
convertVault.success.message=Umwandlung erfolgreich
convertVault.hubToPassword.success.description=Du kannst nun den Tresor mit dem gewählten Passwort entsperren, ohne Hub-Zugriff zu benötigen.
convertVault.convert.convertBtn.processing=Konvertierung läuft…
convertVault.success.message=Konvertierung erfolgreich
convertVault.hubToPassword.success.description=Du kannst nun den Tresor mit dem gewählten Passwort entsperren, ohne Hub Zugriff zu benötigen.
# New Password
newPassword.promptText=Gib ein neues Passwort ein
@@ -502,12 +487,4 @@ quit.lockAndQuitBtn=Sperren und beenden
# Forced Quit
quit.forced.message=Einige Tresore konnten nicht gesperrt werden
quit.forced.description=Das Sperren von Tresoren wurde durch ausstehende Operationen oder geöffnete Dateien verhindert. Du kannst das Sperren der verbleibenden Tresore erzwingen, jedoch kann das Unterbrechen von E/A-Vorgängen zum Verlust ungespeicherter Daten führen.
quit.forced.forceAndQuitBtn=Erzwingen und beenden
# Update Reminder
updateReminder.title=Update-Überprüfung
updateReminder.message=Nach Updates suchen?
updateReminder.description=Bleib auf dem Laufenden mit neuen Funktionen, Fehlerbehebungen und Sicherheitsverbesserungen. Wir empfehlen, automatisch nach Updates zu suchen.
updateReminder.notNow=Nicht jetzt
updateReminder.yesOnce=Ja, einmalig
updateReminder.yesAutomatically=Ja, automatisch
quit.forced.forceAndQuitBtn=Erzwingen und beenden
+2 -25
View File
@@ -20,11 +20,6 @@ error.description=Ωχ! Το Cryptomator δεν περίμενε να συμβε
error.hyperlink.lookup=Αναζήτηση αυτού του σφάλματος
error.hyperlink.report=Αναφέρετε αυτό το σφάλμα
error.technicalDetails=Λεπτομέρειες:
error.existingSolutionDescription=Το Cryptomator δεν περίμενε ότι θα συμβεί αυτό. Αλλά βρήκαμε μια υπάρχουσα λύση για αυτό το σφάλμα. Ρίξτε μια ματιά στον παρακάτω σύνδεσμο.
error.hyperlink.solution=Αναζήτηση της λύσης
error.lookupPermissionMessage=Το Cryptomator μπορεί να αναζητήσει μια λύση για αυτό το πρόβλημα στο διαδίκτυο. Αυτό θα στείλει ένα αίτημα στη βάση δεδομένων προβλημάτων μας από τη διεύθυνση IP σας.
error.dismiss=Παράβλεψη
error.lookUpSolution=Αναζήτηση λύσης
# Defaults
defaults.vault.vaultName=Κρύπτη
@@ -64,12 +59,6 @@ addvaultwizard.new.validCharacters.message=Το όνομα κρύπτης μπο
addvaultwizard.new.validCharacters.chars=Χαρακτήρες λέξεων (πχ, a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Αριθμοί
addvaultwizard.new.validCharacters.dashes=Παύλα (%s) ή κάτω παύλα (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Ενεργοποιήστε τις ρυθμίσεις ειδικών
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Εισάγετε μια τιμή μεταξύ 36 και 220 (προεπιλογή 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Ανοίξτε την τεκμηρίωση για να μάθετε περισσότερα.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Μέγιστο μήκος ονομάτων κρυπτογραφημένων αρχείων
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Έγκυρο
### Password
addvaultwizard.new.createVaultBtn=Δημιουργία Κρύπτης
addvaultwizard.new.generateRecoveryKeyChoice=Δεν θα μπορείτε να έχετε πρόσβαση στα δεδομένα σας χωρίς τον κωδικό σας. Θέλετε να δημιουργηθεί ένα κλειδί ανάκτησης στην περίπτωση που χάσετε τον κωδικό σας;
@@ -137,11 +126,7 @@ unlock.success.revealBtn=Αποκάλυψη εικονικού δίσκου
unlock.error.customPath.message=Αδυναμία προσάρτησης της κρύπτης στην προσαρμοσμένη διαδρομή
unlock.error.customPath.description.notSupported=Εάν θέλετε να συνεχίσετε να χρησιμοποιείτε την προσαρμοσμένη διαδρομή, μεταβείτε στις προτιμήσεις και επιλέξτε έναν τύπο τόμου που την υποστηρίζει. Διαφορετικά, μεταβείτε στις επιλογές της κρύπτης και επιλέξτε ένα υποστηριζόμενο σημείο προσάρτησης.
unlock.error.customPath.description.notExists=Η προσαρμοσμένη διαδρομή προσάρτησης δεν υπάρχει. Είτε δημιουργήστε την στο τοπικό σύστημα αρχείων σας είτε αλλάξτε την στις επιλογές κρύπτης.
unlock.error.customPath.description.inUse=Το γράμμα μονάδας δίσκου ή προσαρμοσμένη διαδρομή προσάρτησης "%s" είναι ήδη σε χρήση.
unlock.error.customPath.description.hideawayNotDir=Το προσωρινό, κρυφό αρχείο "%3$s" που χρησιμοποιείται για το ξεκλείδωμα δεν μπορεί να αφαιρεθεί. Παρακαλώ ελέγξτε το αρχείο και στη συνέχεια διαγράψτε το χειροκίνητα.
unlock.error.customPath.description.couldNotBeCleaned=Η κρύπτη σας δεν μπορεί να τοποθετηθεί στη διαδρομή "%s". Παρακαλώ δοκιμάστε ξανά ή επιλέξτε διαφορετική διαδρομή.
unlock.error.customPath.description.notEmptyDir=Η προσαρμοσμένη διαδρομή προσάρτησης "%s" δεν είναι ένας άδειος φάκελος. Παρακαλώ επιλέξτε έναν άδειο φάκελο και προσπαθήστε ξανά.
unlock.error.customPath.description.generic=Έχετε επιλέξει μια προσαρμοσμένη διαδρομή προσάρτησης για αυτή την κρύπτη, αλλά η χρήση της απέτυχε με το μήνυμα: %2$s
unlock.error.customPath.description.generic=Έχετε επιλέξει μια προσαρμοσμένη διαδρομή προσάρτησης για αυτή την κρύπτη, αλλά η χρήση της απέτυχε με το μήνυμα: %s
## Hub
hub.noKeychain.message=Δεν είναι δυνατή η πρόσβαση στο κλειδί της συσκευής
hub.noKeychain.description=Για να ξεκλειδώσετε τις κρύπτες Hub, απαιτείται ένα κλειδί συσκευής, το οποίο ασφαλίζεται με χρήση μπρελόκ. Για να συνεχίσετε, ενεργοποιήστε το "%s" και επιλέξτε ένα keychain στις προτιμήσεις.
@@ -502,12 +487,4 @@ quit.lockAndQuitBtn=Κλείδωμα και Έξοδος
# Forced Quit
quit.forced.message=Δεν ήταν δυνατό να κλειδωθούν ορισμένες κρύπτες
quit.forced.description=Το κλείδωμα κρυπτών αποκλείστηκε από εκκρεμείς ενέργειες ή από ανοιχτά αρχεία. Μπορείτε να αναγκάσετε το κλείδωμα εναπομείναντων θησαυροφυλάκων, ωστόσο η διακοπή I/O μπορεί να οδηγήσει στην απώλεια μη αποθηκευμένων δεδομένων.
quit.forced.forceAndQuitBtn=Εξαναγκασμός και Έξοδος
# Update Reminder
updateReminder.title=Έλεγχος Ενημερώσεων
updateReminder.message=Έλεγχος για ενημερώσεις;
updateReminder.description=Μείνετε ενημερωμένοι με νέες δυνατότητες, διορθώσεις σφαλμάτων και βελτιώσεις ασφάλειας. Συνιστούμε τον αυτόματο έλεγχο για ενημερώσεις.
updateReminder.notNow=Όχι Τώρα
updateReminder.yesOnce=Ναι, Μία Φορά
updateReminder.yesAutomatically=Ναι, Αυτόματα
quit.forced.forceAndQuitBtn=Εξαναγκασμός και Έξοδος
+3 -26
View File
@@ -20,11 +20,6 @@ error.description=Cryptomator no esperaba que esto sucediera. Puede buscar soluc
error.hyperlink.lookup=Buscar este error
error.hyperlink.report=Notificar este error
error.technicalDetails=Detalles:
error.existingSolutionDescription=Cryptomator no esperaba que esto ocurriera, pero hemos encontrado una solución existente para este error. Eche un vistazo al siguiente enlace.
error.hyperlink.solution=Buscar la solución
error.lookupPermissionMessage=Cryptomator puede buscar una solución en línea para este problema. Esto enviará una solicitud a nuestra base de datos de problemas desde su dirección IP.
error.dismiss=Descartar
error.lookUpSolution=Buscar solución
# Defaults
defaults.vault.vaultName=Bóveda
@@ -64,12 +59,6 @@ addvaultwizard.new.validCharacters.message=El nombre de la bóveda puede contene
addvaultwizard.new.validCharacters.chars=Caracteres de la palabra (por ejemplo, a, ж o 수)
addvaultwizard.new.validCharacters.numbers=Números
addvaultwizard.new.validCharacters.dashes=Guion (%s) o subrayado (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Habilitar ajustes expertos
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Ingrese un valor entre 36 y 220 (por defecto 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Abra la documentación para obtener más información.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Longitud máxima de los nombres de archivo cifrados
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Válido
### Password
addvaultwizard.new.createVaultBtn=Crear bóveda
addvaultwizard.new.generateRecoveryKeyChoice=No podrá acceder a sus datos sin su contraseña. ¿Desea una clave de recuperación en caso de que pierda su contraseña?
@@ -137,11 +126,7 @@ unlock.success.revealBtn=Revelar unidad
unlock.error.customPath.message=No se puede montar la bóveda en la ruta personalizada
unlock.error.customPath.description.notSupported=Si desea seguir usando la ruta personalizada, vaya a las preferencias y seleccione un tipo de volumen que lo admita. De lo contrario, vaya a las opciones de la bóveda y elija un punto de montaje compatible.
unlock.error.customPath.description.notExists=La ruta de montaje personalizada no existe. Créela en su sistema de archivos local o cámbiela en las opciones de la bóveda.
unlock.error.customPath.description.inUse=La letra de unidad o ruta de montaje personalizada "%s" ya está en uso.
unlock.error.customPath.description.hideawayNotDir=El archivo oculto temporal "%3$s" usado para el desbloqueo no pudo ser eliminado. Compruebe el archivo y elimínelo manualmente.
unlock.error.customPath.description.couldNotBeCleaned=Su bóveda no se pudo montar en la ruta "%s". Intente de nuevo o elija una ruta diferente.
unlock.error.customPath.description.notEmptyDir=La ruta de montaje personalizada "%s" no es una carpeta vacía. Elija una carpeta vacía y vuelva a intentarlo.
unlock.error.customPath.description.generic=Seleccionó una ruta de montaje personalizada para esta bóveda, pero falló al usarla con el mensaje: %2$s
unlock.error.customPath.description.generic=Seleccionó una ruta de montaje personalizada para esta bóveda, pero falló al usarla con el mensaje: %s
## Hub
hub.noKeychain.message=No se puede acceder a la clave del dispositivo
hub.noKeychain.description=Para desbloquear las bóvedas de Hub, se requiere una clave de dispositivo que se asegura con un llavero. Para continuar, habilite "%s" y seleccione un llavero en las preferencias.
@@ -179,7 +164,7 @@ lock.forced.description=El bloqueo de "%s" fue bloqueado por operaciones pendien
lock.forced.retryBtn=Reintentar
lock.forced.forceBtn=Forzar bloqueo
## Failure
lock.fail.message=Error al bloquear la bóveda
lock.fail.message=Error al bloquear la bóveda.
lock.fail.description=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
@@ -502,12 +487,4 @@ quit.lockAndQuitBtn=Bloquear y salir
# Forced Quit
quit.forced.message=Algunas bóvedas no pudieron ser bloqueadas
quit.forced.description=El bloqueo de las bóvedas fue impedido por operaciones pendientes o archivos abiertos. Puede forzar a bloquear las bóvedas restantes, sin embargo, la interrupción de E/S puede resultar en la pérdida de datos sin guardar.
quit.forced.forceAndQuitBtn=Forzar y salir
# Update Reminder
updateReminder.title=Comprobación de actualización
updateReminder.message=¿Buscar actualizaciones?
updateReminder.description=Manténgase actualizado con funciones nuevas, correcciones de errores y mejoras de seguridad. Recomendamos comprobar actualizaciones automáticamente.
updateReminder.notNow=Ahora no
updateReminder.yesOnce=Sí, una vez
updateReminder.yesAutomatically=Sí, automáticamente
quit.forced.forceAndQuitBtn=Forzar y salir
@@ -43,7 +43,6 @@ addvaultwizard.new.directoryPickerLabel=مکان سفارشی
addvaultwizard.new.directoryPickerButton=انتخاب کنید…
addvaultwizard.new.fileAlreadyExists=در حال حاضر یک فایل یا پوشه با همین نام وجود دارد
addvaultwizard.new.validCharacters.numbers=اعداد
### Expert Settings
### Password
### Information
## Existing
@@ -146,6 +145,4 @@ vaultOptions.mount.mountPoint.directoryPickerButton=انتخاب کنید…
# Quit
# Forced Quit
# Update Reminder
# Forced Quit
+2 -21
View File
@@ -20,8 +20,6 @@ error.description=Cryptomator ei odottanut tämän tapahtuvan. Voit etsiä olema
error.hyperlink.lookup=Etsi tämä virhe
error.hyperlink.report=Ilmoita ongelmasta
error.technicalDetails=Tiedot:
error.existingSolutionDescription=Cryptomator ei odottanut tämän tapahtuvan. Mutta löysimme olemassa olevan ratkaisun tähän virheeseen. Ole hyvä ja katso seuraavaa linkkiä.
error.hyperlink.solution=Etsi ratkaisu
# Defaults
defaults.vault.vaultName=Vault
@@ -61,7 +59,6 @@ addvaultwizard.new.validCharacters.message=Vaultin nimi voi sisältää seuraava
addvaultwizard.new.validCharacters.chars=Sanamerkit (e.g. a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Numerot
addvaultwizard.new.validCharacters.dashes=Hyphen (%s) tai alaviiva (%s)
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Luo Uusi Vault
addvaultwizard.new.generateRecoveryKeyChoice=Et voi käyttää tietojasi ilman salasanaasi. Haluatko palautusavaimen siltä varalta, että menetät salasanasi?
@@ -129,6 +126,7 @@ unlock.success.revealBtn=Paljasta Asema
unlock.error.customPath.message=Holvia ei pystytty yhdistämään valittuun polkuun
unlock.error.customPath.description.notSupported=Mikäli haluat jatkaa mukautetun polun käyttöä, ole hyvä ja mene Asetuksiin ja valitse volyymityyppi mikä tukee sitä. Muussa tapauksessa avaa holvin asetukset ja valitse tuettu mukautettu polku.
unlock.error.customPath.description.notExists=Valitsemaasi mukautettua polkua ei ole olemassa. Voit joko luoda uuden polun tai muuttaa polkua holvisi asetuksissa.
unlock.error.customPath.description.generic=Olet valinnut mukautetun polun holvillesi, mutta sen kanssa ilmeni ongelma: %s
## Hub
hub.noKeychain.message=Laitteen avainta ei löytynyt
hub.noKeychain.description=Hub-holvien purkamiseksi tarvitaan laiteavain joka on suojattu avainrenkaalla. Jatkaaksesi, kytke “%s” päälle ja valitse avainrengas asetuksista.
@@ -180,28 +178,13 @@ migration.start.remarkCanRun=Sinun tulee varmistaa, että kaikki laitteet joilla
migration.start.remarkSynced=Sinun tulee varmistaa, että holvisi on täysin ajantasalla tällä laitteella ja muilla laitteillasi, ennen kuin aloitat päivitysprosessin.
migration.start.confirm=Olen lukenut ja ymmärtänyt yllä ilmoitetut ohjeet
## Run
migration.run.enterPassword=Kirjoita "%s" salasana
migration.run.startMigrationBtn=Siirrä Holvi
migration.run.progressHint=Tämä saattaa kestää jonkin aikaa…
## Success
migration.success.nextStepsInstructions="%s" siirretty onnistuneesti.\nVoit nyt avata holvin lukituksen.
migration.success.unlockNow=Avaa Nyt
## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Tiedostojärjestelmää ei tueta
migration.error.missingFileSystemCapabilities.description=Siirtoa ei aloitettu, koska varastosi sijaitsee riittämättömässä tiedostojärjestelmässä.
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=Tiedostojärjestelmä ei tue pitkiä tiedostonimiä.
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Tiedostojärjestelmä ei tue pitkiä polkuja.
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Tiedostojärjestelmä ei salli lukemista.
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Tiedostojärjestelmä ei salli kirjoittamista.
## Impossible
migration.impossible.heading=Holvin siirtäminen ei onnistu
migration.impossible.reason=Varastoa ei voida siirtää automaattisesti, koska sen tallennuspaikka tai tukiasema ei ole yhteensopiva.
migration.impossible.moreInfo=Varasto voidaan edelleen avata vanhemmalla versiolla. Katso ohjeet varaston manuaaliseen siirtämiseen osoitteesta
# Health Check
## Start
health.title="%s" kuntotarkastus
health.intro.header=Kuntotarkastus
## Start Failure
## Check Selection
## Detail view
@@ -272,6 +255,4 @@ vaultOptions.masterkey.changePasswordBtn=Vaihda salasana
# Quit
# Forced Quit
# Update Reminder
# Forced Quit
@@ -20,7 +20,6 @@ error.description=Oops! Hindi inaasahan ng Cryptomator na ito'y mangyari. Maaari
error.hyperlink.lookup=Hanapin ang solusyon
error.hyperlink.report=I-report ang problema
error.technicalDetails=Mga detalye:
error.lookUpSolution=Itignan ang solusyon
# Defaults
defaults.vault.vaultName=Vault
@@ -50,8 +49,6 @@ addvaultwizard.new.locationPrompt=…
addvaultwizard.new.directoryPickerLabel=Custom Location
addvaultwizard.new.directoryPickerButton=Mamili…
addvaultwizard.new.directoryPickerTitle=Pumili ng Direktoryo
### Expert Settings
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Ibukas ang dokumentasyon para matuto pa.
### Password
addvaultwizard.new.createVaultBtn=Gumawa ng bagong Vault
### Information
@@ -72,7 +69,6 @@ removeVault.confirmBtn=Itangal ang vault
# Change Password
# Forget Password
forgetPassword.message=Nakalimutan ang iyong password?
# Unlock
unlock.savePassword=Maalala ang password
@@ -173,7 +169,4 @@ vaultOptions.mount.mountPoint.directoryPickerButton=Mamili…
# Quit
# Forced Quit
# Update Reminder
updateReminder.message=I-tsek kung may bagong update?
# Forced Quit
+5 -28
View File
@@ -20,11 +20,6 @@ error.description=Oups ! Cryptomator ne s'attendait pas à ce que cela se produi
error.hyperlink.lookup=Rechercher cette erreur
error.hyperlink.report=Signaler cette erreur
error.technicalDetails=Détails :
error.existingSolutionDescription=Cryptomator ne s'attendait pas à ce que cela se produise. Mais nous avons trouvé une solution existante pour cette erreur. Veuillez consulter le lien suivant.
error.hyperlink.solution=Rechercher la solution
error.lookupPermissionMessage=Cryptomator peut rechercher une solution en ligne. Une requête sera envoyée à notre base de données de problèmes à partir de votre adresse IP.
error.dismiss=Ignorer
error.lookUpSolution=Rechercher une solution
# Defaults
defaults.vault.vaultName=Coffre
@@ -64,12 +59,6 @@ addvaultwizard.new.validCharacters.message=Le nom du coffre ne peut contenir que
addvaultwizard.new.validCharacters.chars=Caractères de mot (par exemple a, ж ou 수)
addvaultwizard.new.validCharacters.numbers=Nombres
addvaultwizard.new.validCharacters.dashes=Tiret (%s) ou tiret du bas (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Activer les paramètres experts
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Entrez une valeur entre 36 et 220 (par défaut 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Ouvrez la documentation pour en savoir plus.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Longueur maximale des noms de fichiers chiffrés
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valide
### Password
addvaultwizard.new.createVaultBtn=Créer un coffre
addvaultwizard.new.generateRecoveryKeyChoice=Il sera impossible daccéder à vos données sans mot de passe. Souhaitez-vous créer une clé de secours en cas d'oubli du mot passe ?
@@ -80,7 +69,7 @@ addvault.new.readme.storageLocation.fileName=IMPORTANT.rtf
addvault.new.readme.storageLocation.1=Fichiers de coffre-fort
addvault.new.readme.storageLocation.2=Ceci est l'emplacement de stockage de votre coffre.
addvault.new.readme.storageLocation.3=NE PAS
addvault.new.readme.storageLocation.4=Modifier n'importe quel fichier dans ce répertoire ou
addvault.new.readme.storageLocation.4=modifier les fichiers dans ce répertoire ni
addvault.new.readme.storageLocation.5=• coller de fichier à chiffrer dans ce répertoire.
addvault.new.readme.storageLocation.6=Si vous voulez chiffrer les fichiers et afficher le contenu du coffre, faites ce qui suit :
addvault.new.readme.storageLocation.7=1. Ajouter ce coffre à Cryptomator.
@@ -137,11 +126,7 @@ unlock.success.revealBtn=Révéler le lecteur
unlock.error.customPath.message=Impossible de monter le coffre vers le chemin personnalisé
unlock.error.customPath.description.notSupported=Si vous souhaitez continuer à utiliser le chemin personnalisé, veuillez aller dans les préférences et sélectionner un type de volume qui le prend en charge. Sinon, allez dans les options du coffre et choisissez un point de montage pris en charge.
unlock.error.customPath.description.notExists=Le chemin de montage personnalisé n'existe pas. Créez-le dans votre système de fichiers local ou modifiez-le dans les options du coffre.
unlock.error.customPath.description.inUse=La lettre de lecteur ou le point de montage personnalisé «%s» est déjà utilisé.
unlock.error.customPath.description.hideawayNotDir=Le fichier temporaire et caché « %3$s » utilisé pour le déverrouillage na pas pu être supprimé. Veuillez vérifier le fichier puis le supprimer manuellement.
unlock.error.customPath.description.couldNotBeCleaned=Votre coffre n'a pas pu être monté au point "%s". Veuillez réessayer ou choisissez un autre point.
unlock.error.customPath.description.notEmptyDir=Le chemin de montage personnalisé "%s" n'est pas un dossier vide. Veuillez choisir un dossier vide et réessayez.
unlock.error.customPath.description.generic=Vous avez sélectionné un point de montage personnalisé pour ce coffre, mais son utilisation a échoué avec le message : %2$s
unlock.error.customPath.description.generic=Vous avez sélectionné un chemin de montage personnalisé pour ce coffre, mais son utilisation a échoué avec le message : %s
## Hub
hub.noKeychain.message=Impossible d'accéder à la clé du périphérique
hub.noKeychain.description=Le déverrouillage des coffres Hub nécessite une clé de périphérique sécurisée à l'aide d'un trousseau. Pour continuer, activez « %s » et sélectionnez un trousseau dans les préférences.
@@ -450,7 +435,7 @@ vaultOptions.masterkey.showRecoveryKeyBtn=Afficher la clé de récupération
vaultOptions.masterkey.recoverPasswordBtn=Réinitialiser le mot de passe
## Hub
vaultOptions.hub=Récupération
vaultOptions.hub.convertInfo=Vous pouvez utiliser la clé de récupération pour convertir ce coffre Hub en coffre à mot de passe en cas d'urgence.
vaultOptions.hub.convertInfo=Vous pouvez utiliser la clé de récupération pour convertir ce coffre Hub en coffre basé sur un mot de passe en cas d'urgence.
vaultOptions.hub.convertBtn=Convertir en coffre-fort basé sur mot de passe
# Recovery Key
@@ -463,7 +448,7 @@ recoveryKey.display.StorageHints=Gardez-la dans un endroit sûr, par ex. :\n •
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=Réinitialiser le mot de passe
recoveryKey.recover.prompt=Entrez la clé de récupération pour "%s" :
recoveryKey.recover.prompt=Entrez la clé de récupération pour "%s " :
recoveryKey.recover.correctKey=Cette clé de récupération est correcte
recoveryKey.recover.wrongKey=Cette clé de récupération appartient à un autre coffre
recoveryKey.recover.invalidKey=Cette clé de récupération n'est pas valide
@@ -502,12 +487,4 @@ quit.lockAndQuitBtn=Verrouiller et quitter
# Forced Quit
quit.forced.message=Certains coffres n'ont pas pu être verrouillés
quit.forced.description=Le verrouillage des coffres a été bloqué par des opérations en attente ou des fichiers ouverts. Vous pouvez forcer le verrouillage des coffres restants, mais l'interruption d'E/S peut entraîner la perte de données non enregistrées.
quit.forced.forceAndQuitBtn=Forcer la fermeture
# Update Reminder
updateReminder.title=Recherche de mise à jour
updateReminder.message=Rechercher des mises à jour ?
updateReminder.description=Restez à jour avec de nouvelles fonctionnalités, des corrections de bugs et des améliorations de sécurité. La vérification automatique des mises à jour est recommandée.
updateReminder.notNow=Plus tard
updateReminder.yesOnce=Cette fois seulement
updateReminder.yesAutomatically=Oui, automatiquement
quit.forced.forceAndQuitBtn=Forcer la fermeture
@@ -26,7 +26,6 @@ error.message=Produciuse un erro
## New
### Name
### Location
### Expert Settings
### Password
### Information
## Existing
@@ -121,6 +120,4 @@ main.closeBtn.tooltip=Pechar
# Quit
# Forced Quit
# Update Reminder
# Forced Quit
@@ -59,7 +59,6 @@ addvaultwizard.new.validCharacters.message=שם כספת יכול לכלול א
addvaultwizard.new.validCharacters.chars=תווי מילים (למשל: a, ж or 수)
addvaultwizard.new.validCharacters.numbers=מספרים
addvaultwizard.new.validCharacters.dashes=מקף (%s) או קו תחתון (%s)
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=צור כספת חדשה
addvaultwizard.new.generateRecoveryKeyChoice=לא תיהיה אפשרות לקבל גישה למידע שלך בלי הסיסמה שלך. האם תרצה/י מפתח שחזור למקרה ותאבד/י את הסיסמה שלך?
@@ -127,6 +126,7 @@ unlock.success.revealBtn=חשוף את הכונן
unlock.error.customPath.message=כשלון בקישור הכספת לנתיב הידני שהוגדר
unlock.error.customPath.description.notSupported=אם ברצונך להשתמש בנתיב ידני, אנא גש להעדפות ובחר סוג volume שתומך בכך. אחרת, לך לאפשרויות הכספת ובחר אפשרות יעד קישור נתמך.
unlock.error.customPath.description.notExists=יעד הקישור הידני לא קיים. או שתיצור אותו במערכת הקבצים המקומית או שנה אותו באפשרויות הכספת.
unlock.error.customPath.description.generic=אתה בחרת באפשרות יעד קישור ידני לכספת זו, אבל השימוש בו נכשל עם ההודעה: %s
## Hub
hub.noKeychain.message=לא ניתן לגשת למפתח המכשיר
hub.noKeychain.description=כדאי לשחרר כספות האב נדרש מפתח מכשיר שיאובטח בצרור מפתחות. כדאי להמשיך, אפשר ״%s״ ובחר את צרור המפתחות בהעדפות.
@@ -479,6 +479,4 @@ quit.lockAndQuitBtn=נעילה ויציאה
# Forced Quit
quit.forced.message=חלק מה vaults לא היו ניתנים לנעילה
quit.forced.description=נעילה כספות נחסמה על ידי תהליכים ממתינים או קבצים פתוחים. אתה יכול לנעול את הכספת בכוח, אולם הפרעה לפעולת קריאה וכתיבה עשויה לגרום לאובדן מידע לא שמור.
quit.forced.forceAndQuitBtn=נעילה בכח ויציאה
# Update Reminder
quit.forced.forceAndQuitBtn=נעילה בכח ויציאה
@@ -57,7 +57,6 @@ addvaultwizard.new.invalidName=तिजोरी के लिए इस ना
addvaultwizard.new.validName=आप इस नाम का उपयोग कर सकते हैं
addvaultwizard.new.validCharacters.message=नाम के लिए केवल इन वर्णों का उपयोग कर सकते हैं
addvaultwizard.new.validCharacters.numbers=नंबर
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=वॉल्ट बनाएं
addvaultwizard.new.generateRecoveryKeyChoice=आप अपने पासवर्ड के बिना अपने डेटा तक नहीं पहुंच पाएंगे। क्या आप उस वक़्त के लिए एक पुनर्प्राप्ति कुंजी चाहते हैं जब आप अपना पासवर्ड खो देते हैं?
@@ -278,6 +277,4 @@ passwordStrength.messageLabel.4=बहुत मजबूत
quit.title=एप्लीकेशन को बंद करें
# Forced Quit
quit.forced.message=कुछ वॉल्ट्स लॉक नहीं हो पायी
# Update Reminder
quit.forced.message=कुछ वॉल्ट्स लॉक नहीं हो पायी
@@ -53,7 +53,6 @@ addvaultwizard.new.fileAlreadyExists=Datoteka ili mapa s nazivom trezora već po
addvaultwizard.new.locationDoesNotExist=Mapa u navedenoj putanji ne postoji ili joj se ne može pristupiti
addvaultwizard.new.locationIsNotWritable=Nemate pravo pisanja u navedenu mapu
addvaultwizard.new.locationIsOk=Prikladna lokacija za Vaš trezor
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Izradi trezor
addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći pristupiti svojim podacima bez lozinke. Želite li ključ za oporavak za slučaj gubitka lozinke?
@@ -379,6 +378,4 @@ passwordStrength.messageLabel.4=Vrlo jaka
# Quit
quit.lockAndQuitBtn=Zaključaj i napusti
# Forced Quit
# Update Reminder
# Forced Quit
+2 -22
View File
@@ -20,8 +20,6 @@ error.description=Upsz! A Cryptomator nem számított rá, hogy ez megtörténik
error.hyperlink.lookup=Hiba okának keresése
error.hyperlink.report=Hiba jelentése
error.technicalDetails=Részletek:
error.existingSolutionDescription=A Cryptomator nem számított arra, hogy ez megtörténjen. Viszont már találtunk egy létező megoldást erre a problémára. Kérem, látogassa meg az alábbi linket.
error.hyperlink.solution=Megoldás megnézése
# Defaults
defaults.vault.vaultName=Széf
@@ -61,12 +59,6 @@ addvaultwizard.new.validCharacters.message=A vault neve a következő karakterek
addvaultwizard.new.validCharacters.chars=Szókarakterek (pl. a, ж vagy 수)
addvaultwizard.new.validCharacters.numbers=Számok
addvaultwizard.new.validCharacters.dashes=Kötőjel (%s) vagy alulvonás (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Haladó beállítások engedélyezése
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Írjon be egy értéket 36 és 220 között (alapértelmezett: 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=További információkért olvassa el a dokumentációt.
addvaultwizard.new.expertSettings.shorteningThreshold.title=A kódolt fájlnevek maximális hosszúsága
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Érvényes
### Password
addvaultwizard.new.createVaultBtn=Új 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?
@@ -134,11 +126,7 @@ unlock.success.revealBtn=Széf megjelenítése
unlock.error.customPath.message=Nem lehet csatolni a széfet az egyéni útvonalhoz
unlock.error.customPath.description.notSupported=Ha szeretné továbbra is az egyéni útvonalat használni, kérem, menjen a beállításokba és válasszon egy kötet típust, amely támogatja azt. Máskülönben, menjen a széf opciókhoz és válasszon egy támogatott csatoláspontot.
unlock.error.customPath.description.notExists=Az egyéni csatolás útvonal nem létezik. Hozza létre a helyi fájlrendszerében vagy változtassa meg a széf opciókban.
unlock.error.customPath.description.inUse=A meghajtó betűjele vagy a csatolási útvonal: "%s" már foglalt.
unlock.error.customPath.description.hideawayNotDir=A feloldáshoz használt, "%3$s" nevű ideiglenes, rejtett fájlt nem lehet eltávolítani. Kérjük, ellenőrizze a fájlt, majd törölje manuálisan.
unlock.error.customPath.description.couldNotBeCleaned=A széfet nem lehetett a "%s" elérési útvonalra csatlakoztatni. Kérjük, próbálja meg újra, vagy válasszon másik elérési útvonalat.
unlock.error.customPath.description.notEmptyDir=A megadott "%s" elérési útvonal nem egy üres mappa. Kérjük, válasszon egy üres mappát, és próbálja meg újra.
unlock.error.customPath.description.generic=Egyéni csatolási útvonalat választott ehhez a széfhez, de használatakor ez a hibaüzenet érkezett: %2$s
unlock.error.customPath.description.generic=Egyéni csatolási útvonalat választott ehhez a széfhez, de használatakor ez a hibaüzenet érkezett: %s
## Hub
hub.noKeychain.message=Nem lehet az eszközkulcshoz hozzáférni
hub.noKeychain.description=Hogy feloldja a Hub széfeket, egy eszközkulcs szükséges, mely egy kulcslánccal van biztosítva. A folytatáshoz engedélyezze a következőt: “%s” és válasszon egy kulcsláncot a beállításokban.
@@ -499,12 +487,4 @@ quit.lockAndQuitBtn=Zárolás és kilépés
# Forced Quit
quit.forced.message=Egyes széfeket nem lehetett lezárni
quit.forced.description=A széfek zárolását függőbben lévő műveletek vagy megnyitott fájlok blokkolták. Kényszerítheti a maradék széfek zárolását, de az I/O megszakítása nem mentett adatok elvesztéséhez vezethet.
quit.forced.forceAndQuitBtn=Kényszerítés és Kilépés
# Update Reminder
updateReminder.title=Frissítések keresése
updateReminder.message=Frissítések ellenőrzése?
updateReminder.description=Maradjon naprakész az új funkciókkal, hibajavításokkal és biztonsági fejlesztésekkel. Javasoljuk, hogy automatikusan ellenőrizze a frissítéseket.
updateReminder.notNow=Most nem
updateReminder.yesOnce=Igen, egyszer
updateReminder.yesAutomatically=Igen, automatikusan
quit.forced.forceAndQuitBtn=Kényszerítés és Kilépés
@@ -53,7 +53,6 @@ addvaultwizard.new.fileAlreadyExists=Sudah ada file atau direktori dengan nama v
addvaultwizard.new.locationDoesNotExist=Direktori pada path yang dipilih tidak tersedia atau tidak dapat diakses
addvaultwizard.new.locationIsNotWritable=Anda tidak memiliki hak akses untuk menulis pada path yang dipilih
addvaultwizard.new.locationIsOk=Lokasi yang sesuai dengan vault Anda
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Buat Vault
addvaultwizard.new.generateRecoveryKeyChoice=Anda tidak dapat mengakses data tanpa kata sandi yang Anda miliki. Apa Anda ingin sebuah kunci pemulihan untuk berjaga-jaga jika seandainya Anda kehilangan kata sandi?
@@ -379,6 +378,4 @@ passwordStrength.messageLabel.4=Sangat kuat
# Quit
quit.lockAndQuitBtn=Kunci dan Keluar
# Forced Quit
# Update Reminder
# Forced Quit
+2 -25
View File
@@ -20,11 +20,6 @@ error.description=Oops! Cryptomator non si aspettava che ciò accadesse. Puoi ce
error.hyperlink.lookup=Cerca questo errore
error.hyperlink.report=Segnala questo errore
error.technicalDetails=Dettagli:
error.existingSolutionDescription=Cryptomator non si aspettava che questo problema accadesse. Ma abbiamo trovato una soluzione a questo errore. Dai un'occhiata al seguente link.
error.hyperlink.solution=Cerca la soluzione
error.lookupPermissionMessage=Cryptomator può cercare una soluzione a questo problema online. Invierà una richiesta al nostro database dei problemi, dal tuo indirizzo IP.
error.dismiss=Ignora
error.lookUpSolution=Cerca la Soluzione
# Defaults
defaults.vault.vaultName=Cassaforte
@@ -64,12 +59,6 @@ addvaultwizard.new.validCharacters.message=Il nome della cassaforte può contene
addvaultwizard.new.validCharacters.chars=Caratteri della parola (e.g. a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Numeri
addvaultwizard.new.validCharacters.dashes=Trattino (%s) o tratto basso (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Abilita le impostazioni avanzate
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Inserisci un valore compreso tra 36 e 220 (predefinito 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Apri la documentazione per saperne di più.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Lunghezza massima dei nomi dei file crittografati
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valido
### Password
addvaultwizard.new.createVaultBtn=Crea Cassaforte
addvaultwizard.new.generateRecoveryKeyChoice=Non potrai accedere ai tuoi dati senza la tua password. Desideri una chiave di recupero nel caso dovessi perdere la password?
@@ -137,11 +126,7 @@ unlock.success.revealBtn=Rivela l'Unità
unlock.error.customPath.message=Impossibile montare la cassaforte sul percorso personalizzato
unlock.error.customPath.description.notSupported=Se desideri continuare a utilizzare il percorso personalizzato, vai alle preferenze e seleziona un tipo di volume che lo supporta. Altrimenti, vai alle opzioni della cassaforte e scegli un punto di montaggio supportato.
unlock.error.customPath.description.notExists=Il percorso di mount personalizzato non esiste. Crealo nel tuo file system locale o cambialo nelle opzioni della cassaforte.
unlock.error.customPath.description.inUse=La lettera di unità o il percorso di montaggio selezionato "%s" è già in uso.
unlock.error.customPath.description.hideawayNotDir=Il file provvisorio nascosto "%3$s" utilizzato per sbloccare non può essere rimosso. Controlla il file ed eliminalo manualmente.
unlock.error.customPath.description.couldNotBeCleaned=La tua cassaforte non può essere montata sul percorso "%s". Riprova o scegli un percorso diverso.
unlock.error.customPath.description.notEmptyDir=Il percorso di montaggio selezionato "%s" non è una cartella vuota. Scegli una cartella vuota e riprova.
unlock.error.customPath.description.generic=Hai selezionato un percorso di montaggio personalizzato per questa cassaforte, ma il suo utilizzo non è riuscito con il messaggio: %2$s
unlock.error.customPath.description.generic=Hai selezionato un percorso di montaggio personalizzato per questa cassaforte, ma il suo utilizzo è fallito col messaggio: %s
## Hub
hub.noKeychain.message=Impossibile accedere alla chiave del dispositivo
hub.noKeychain.description=Per sbloccare le casseforti Hub, è necessaria una chiave del dispositivo, che è protetta tramite un portachiavi. Per procedere, abilita "%s" e seleziona un portachiavi nelle preferenze.
@@ -502,12 +487,4 @@ quit.lockAndQuitBtn=Blocca ed Esci
# Forced Quit
quit.forced.message=Qualche cassaforte non può essere bloccata
quit.forced.description=Il blocco delle cassaforte è stato bloccato da operazioni in attesa o da file aperti. È possibile forzare il blocco delle cassaforti rimanenti, tuttavia interrompere le operazioni I/O potrebbe causare la perdita di dati non salvati.
quit.forced.forceAndQuitBtn=Forza e Esci
# Update Reminder
updateReminder.title=Controllo aggiornamenti
updateReminder.message=Controllo aggiornamenti?
updateReminder.description=Rimani aggiornato per nuove funzionalità, correzioni di bug e miglioramenti di sicurezza. Si consiglia di controllare automaticamente la presenza di aggiornamenti.
updateReminder.notNow=Non adesso
updateReminder.yesOnce=Sì, una volta
updateReminder.yesAutomatically=Sì, automaticamente
quit.forced.forceAndQuitBtn=Forza e Esci
+3 -30
View File
@@ -16,15 +16,10 @@ generic.button.print=印刷
# Error
error.message=エラー %s
error.description=Cryptomator で予期ない問題が発生しました。このエラーの解決方法を検索することができ、まだ報告されていない場合は、報告を行うことができます。
error.description=Cryptomator で予期できない問題が発生しました! 。このエラーの解決方法を検索することができ、まだ報告されていない場合は、報告を行うことができます。
error.hyperlink.lookup=このエラーを検索する
error.hyperlink.report=このエラーを報告する
error.technicalDetails=詳細:
error.existingSolutionDescription=Cryptomator が予期しない状況が発生しましたが、解決策が見つかりました。以下のリンクを参照してください。
error.hyperlink.solution=解決策を調べる
error.lookupPermissionMessage=Cryptomatorはこの問題の解決策をオンラインで調べることができます。その際、あなたのIPアドレスから私たちの解決策データベースに問い合わせます。
error.dismiss=閉じる
error.lookUpSolution=解決策を調べる
# Defaults
defaults.vault.vaultName=金庫
@@ -64,12 +59,6 @@ addvaultwizard.new.validCharacters.message=金庫の名前には次の文字が
addvaultwizard.new.validCharacters.chars=単語文字 (例: a、ж、수)
addvaultwizard.new.validCharacters.numbers=数字
addvaultwizard.new.validCharacters.dashes=ハイフン (%s) またはアンダースコア (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=上級者向け設定を有効にする
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=36 から 220 までの値を入力してください (既定値は 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=ドキュメントを開いて詳細を見る
addvaultwizard.new.expertSettings.shorteningThreshold.title=暗号化ファイル名の最大長
addvaultwizard.new.expertSettings.shorteningThreshold.valid=有効
### Password
addvaultwizard.new.createVaultBtn=金庫を作成
addvaultwizard.new.generateRecoveryKeyChoice=データにアクセスするにはパスワードが必須です。パスワードを紛失したときのためにリカバリーキーは必要ですか?
@@ -137,11 +126,7 @@ unlock.success.revealBtn=ドライブを表示
unlock.error.customPath.message=カスタム パスに金庫をマウントできません
unlock.error.customPath.description.notSupported=カスタム パスを使い続けたい場合、環境設定に移動してサポートしているボリューム タイプを選択してください。もしくは、金庫のオプションに移動してサポートされるマウント ポイントを選択してください。
unlock.error.customPath.description.notExists=カスタム マウント パスが存在していません。ローカル ファイルシステムで作成するか、金庫のオプションで変更してください。
unlock.error.customPath.description.inUse=ドライブ名またはカスタムマウントパス「%s」は既に使用されています。
unlock.error.customPath.description.hideawayNotDir=ロック解除に使用される一時的な隠しファイル "%3$s" を削除できませんでした。ファイルを確認し、手動で削除してください。
unlock.error.customPath.description.couldNotBeCleaned=金庫を "%s" にマウントすることができませんでした。もう一度試すか、別のパスを選択してください。
unlock.error.customPath.description.notEmptyDir=カスタムマウントパス「%s」は空のフォルダではありません。空のフォルダを選択して再度お試し下さい。
unlock.error.customPath.description.generic=この金庫に対してカスタムマウントパスを選択しましたが、以下のメッセージとともに失敗しました:%2$s
unlock.error.customPath.description.generic=この金庫のカスタム マウント パスを選択しましたが、次のメッセージで失敗しました: %s
## Hub
hub.noKeychain.message=デバイス キーにアクセスできません
hub.noKeychain.description=ハブ金庫を解錠するには、キーチェーンが保護するデバイス キーが必要です。続行するには、"%s" を有効にし環境設定からキーチェーンを選択します。
@@ -450,8 +435,6 @@ vaultOptions.masterkey.showRecoveryKeyBtn=回復キーを表示
vaultOptions.masterkey.recoverPasswordBtn=パスワードをリセット
## Hub
vaultOptions.hub=回復
vaultOptions.hub.convertInfo=緊急時にはリカバリキーを利用して Hub 金庫からパスワードで解錠できる金庫に変換できます。
vaultOptions.hub.convertBtn=パスワードに基づいた金庫に変換
# Recovery Key
## Display Recovery Key
@@ -463,7 +446,6 @@ recoveryKey.display.StorageHints=十分に安全な場所に保存してくだ
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=パスワードをリセット
recoveryKey.recover.prompt="%s" のリカバリーキーを入力してください:
recoveryKey.recover.correctKey=有効な回復キー
recoveryKey.recover.wrongKey=この回復キーは別の金庫に属しています
recoveryKey.recover.invalidKey=この回復キーは有効ではありません
@@ -479,7 +461,6 @@ convertVault.title=金庫を変換
convertVault.convert.convertBtn.before=変換
convertVault.convert.convertBtn.processing=変換中…
convertVault.success.message=変換完了
convertVault.hubToPassword.success.description=Hub へアクセスせずに選択したパスワードで金庫を解錠できるようになりました。
# New Password
newPassword.promptText=新しいパスワードを入力してください
@@ -502,12 +483,4 @@ quit.lockAndQuitBtn=施錠して終了
# Forced Quit
quit.forced.message=一部の金庫を施錠できませんでした
quit.forced.description=保留中の操作か、開かれたファイルによって、金庫の施錠が中断されました。残りの金庫を強制的に施錠することはできますが、I/O を中断すると保存されていないデータを失う可能性があります。
quit.forced.forceAndQuitBtn=強制的に終了
# Update Reminder
updateReminder.title=更新の確認
updateReminder.message=更新を確認するか
updateReminder.description=自動的に更新をチェックして、新機能、バグ修正、セキュリティの改善などを入手するのをお勧めします。
updateReminder.notNow=また後で
updateReminder.yesOnce=はい、一度だけ
updateReminder.yesAutomatically=自動的に行う
quit.forced.forceAndQuitBtn=強制的に終了
@@ -59,7 +59,6 @@ addvaultwizard.new.validCharacters.message=Vault 이름에는 다음과 같은
addvaultwizard.new.validCharacters.chars=문자 (예시: a, ж or 수)
addvaultwizard.new.validCharacters.numbers=숫자
addvaultwizard.new.validCharacters.dashes=대시 (%s) 또는 언더바 (%s)
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Vault 생성
addvaultwizard.new.generateRecoveryKeyChoice=비밀번호가 없으면 데이터에 접근할 수 없습니다. 비밀번호를 잊었을 때를 대비한 복구 키를 원하십니까?
@@ -403,6 +402,4 @@ quit.title=앱 종료
quit.message=잠금 해제된 vault들이 존재합니다
quit.lockAndQuitBtn=Vault 잠금 후 종료하기
# Forced Quit
# Update Reminder
# Forced Quit
@@ -55,7 +55,6 @@ addvaultwizard.new.validCharacters.message=Krātuves nosaukums var saturēt šā
addvaultwizard.new.validCharacters.chars=Burtus (piemēram: a, ж vai 수)
addvaultwizard.new.validCharacters.numbers=Skaitļus
addvaultwizard.new.validCharacters.dashes=Defise (%s) vai pasvītra (%s)
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Izveidot glabātuvi
addvaultwizard.new.generateRecoveryKeyChoice=Jūs nevarēsiet piekļūt saviem datiem bez paroles. Vai vēlaties atkopšanas atslēgu gadījumam, kad esat pazaudējis paroli?
@@ -276,6 +275,4 @@ passwordStrength.messageLabel.4=Ļoti stipra
# Quit
quit.lockAndQuitBtn=Aizslēgt un aizvērt
# Forced Quit
# Update Reminder
# Forced Quit
+1 -54
View File
@@ -2,63 +2,21 @@
# Generics
## Button
generic.button.apply=Примени
generic.button.back=Назад
generic.button.cancel=Откажи
generic.button.change=Промени
generic.button.choose=Избор…
generic.button.close=Затвори
generic.button.copy=Копирај
generic.button.copied=Копирано!
generic.button.done=Прифати
generic.button.next=Продолжи
generic.button.print=Печати
# Error
error.message=Грешка
error.description=Не очекуваше да се случи ова. Можете да пронајдете постоечки решенија за оваа грешка. Или, ако не е пријавена сè уште, слободно направете тоа.
error.hyperlink.lookup=Пребарај за оваа грешка
error.hyperlink.report=Пријави ја оваа грешка
error.technicalDetails=Детали:
error.existingSolutionDescription=Не очекуваше да се случи ова. Но најдовме постоечко решение за оваа грешка. Ве молиме погледнете го следниот линк.
error.hyperlink.solution=Пребарај решение
# 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=Датотека или папка со истото име на сефот веќе постои
addvaultwizard.new.locationDoesNotExist=Папка на наведената локација не постои или е непристапна
addvaultwizard.new.locationIsNotWritable=Нема пристап за запишување на наведената локација
### Expert Settings
### Password
### Information
## Existing
addvaultwizard.existing.chooseBtn=Избор…
## Success
# Remove Vault
@@ -68,7 +26,6 @@ addvaultwizard.existing.chooseBtn=Избор…
# Forget Password
# Unlock
unlock.unlockBtn=Отклучи
## Select
## Success
## Failure
@@ -102,7 +59,6 @@ hub.register.registerBtn=Потврди
## Fix Application
# Preferences
preferences.title=Поставки
## General
## Interface
## Volume
@@ -120,16 +76,11 @@ preferences.title=Поставки
# Main Window
main.closeBtn.tooltip=Затвори
main.preferencesBtn.tooltip=Поставки
## Vault List
main.vaultlist.contextMenu.lock=Заклучи
main.vaultlist.addVaultBtn=Додај сеф
## Vault Detail
### Welcome
### Locked
### Unlocked
main.vaultDetail.lockBtn=Заклучи
### Missing
### Needs Migration
### Error
@@ -138,10 +89,8 @@ main.vaultDetail.lockBtn=Заклучи
# Vault Options
## General
vaultOptions.general.vaultName=Име на сеф
## Mount
vaultOptions.mount.mountPoint.directoryPickerButton=Избор…
## Master Key
## Hub
@@ -158,6 +107,4 @@ vaultOptions.mount.mountPoint.directoryPickerButton=Избор…
# Quit
# Forced Quit
# Update Reminder
# Forced Quit
+8 -21
View File
@@ -20,8 +20,6 @@ error.description=Oops! Cryptomator forventet ikke at dette skulle skje. Du kan
error.hyperlink.lookup=Slå opp denne feilen
error.hyperlink.report=Rapporter denne feilen
error.technicalDetails=Detaljer:
error.existingSolutionDescription=Cryptomator forventet ikke at dette skulle skje. Men vi fant en eksisterende løsning for denne feilen. Ta en titt ved å følge lenken.
error.hyperlink.solution=Slå opp løsningen
# Defaults
defaults.vault.vaultName=Hvelv
@@ -61,7 +59,6 @@ addvaultwizard.new.validCharacters.message=Hvelvnavnet kan inneholde følgende t
addvaultwizard.new.validCharacters.chars=Ordtegn (eks. a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Tall
addvaultwizard.new.validCharacters.dashes=Bindestrek (%s) eller understrek (%s)
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Opprett hvelv
addvaultwizard.new.generateRecoveryKeyChoice=Du vil ikke kunne få tilgang til dataene dine uten passordet. Vil du ha en gjenopprettingsnøkkel i tilefelle du mister passordet ditt?
@@ -124,11 +121,12 @@ unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Hovednøkkel
unlock.success.message=Opplåsing vellykket
unlock.success.description=Vellykket opplåsing av "%s"! Hvelvet ditt er nå tilgjengelig via sin virtuelle stasjon.
unlock.success.rememberChoice=Husk valget - ikke vis dette igjen
unlock.success.revealBtn=Vis enheten
unlock.success.revealBtn=Gjør enheten synlig
## Failure
unlock.error.customPath.message=Kan ikke montere hvelvet til egendefinert sti
unlock.error.customPath.description.notSupported=Hvis du vil fortsette å bruke den egendefinerte stien, gå til innstillingene og velg en enhetstype som støtter den. Gå ellers til hvelvalternativene og velg et støttet monteringspunkt.
unlock.error.customPath.description.notExists=Egendefinert monteringssti eksisterer ikke. Enten opprett den i ditt lokale filsystem eller endre den i hvelvvalgene.
unlock.error.customPath.description.generic=Du har valgt en egendefinert monterings sti for dette hvelvet, men ved bruk av den mislyktes med meldingen: %s
## Hub
hub.noKeychain.message=Får ikke tilgang til enhetsnøkkel
hub.noKeychain.description=For å låse opp Hub-hvelv er det nødvendig med en enhetsnøkkel som er sikret med en nøkkelring. For å fortsette, aktiver "%s" og velg en nøkkelring i innstillingene.
@@ -276,10 +274,8 @@ preferences.interface.showMinimizeButton=Vis minimer-knapp
preferences.interface.showTrayIcon=Vis verktøykasseikon (krever omstart)
## Volume
preferences.volume=Virtuell enhet
preferences.volume.type=Volumtype
preferences.volume.type.automatic=Automatisk
preferences.volume.docsTooltip=Åpne dokumentasjonen for å lære mer om de forskjellige volumtypene.
preferences.volume.fuseRestartRequired=For å iverksette endringene, må Cryptomator startes på nytt.
preferences.volume.tcp.port=TCP Port
preferences.volume.supportedFeatures=Valgt volumtype støtter følgende funksjoner:
preferences.volume.feature.mountAuto=Valg av automatisk monteringspunkt
@@ -352,7 +348,7 @@ main.vaultlist.contextMenu.lock=Lås
main.vaultlist.contextMenu.unlock=Lås opp…
main.vaultlist.contextMenu.unlockNow=Lås opp nå
main.vaultlist.contextMenu.vaultoptions=Alternativer for hvelvet
main.vaultlist.contextMenu.reveal=Vis enheten
main.vaultlist.contextMenu.reveal=Gjør enheten synlig
main.vaultlist.addVaultBtn=Legg til hvelv
## Vault Detail
### Welcome
@@ -366,7 +362,7 @@ main.vaultDetail.passwordSavedInKeychain=Passordet er lagret
### Unlocked
main.vaultDetail.unlockedStatus=ULÅST
main.vaultDetail.accessLocation=Innholdet i hvelvet ditt er tilgjengelig her:
main.vaultDetail.revealBtn=Vis enheten
main.vaultDetail.revealBtn=Gjør enheten synlig
main.vaultDetail.copyUri=Kopier URI
main.vaultDetail.lockBtn=Lås
main.vaultDetail.bytesPerSecondRead=Lesehastighet:
@@ -411,20 +407,20 @@ vaultOptions.general.autoLock.lockAfterTimePart2=minutter
vaultOptions.general.unlockAfterStartup=Lås opp hvelvet når du starter Cryptomator
vaultOptions.general.actionAfterUnlock=Etter vellykket opplåsing
vaultOptions.general.actionAfterUnlock.ignore=Ikke gjør noe
vaultOptions.general.actionAfterUnlock.reveal=Vis enheten
vaultOptions.general.actionAfterUnlock.reveal=Gjør enheten synlig
vaultOptions.general.actionAfterUnlock.ask=Spør
vaultOptions.general.startHealthCheckBtn=Start helsesjekk
## Mount
vaultOptions.mount=Montering
vaultOptions.mount.info=Alternativer avhenger av den valgte volumtypen.
vaultOptions.mount.linkToPreferences=Åpne virtuelle drev-innstillinger
vaultOptions.mount.linkToPreferences=Åpne virtuelle driv-innstillinger
vaultOptions.mount.readonly=Skrivebeskyttet
vaultOptions.mount.customMountFlags=Tilpassede moteringsparametre
vaultOptions.mount.winDriveLetterOccupied=opptatt
vaultOptions.mount.mountPoint=Monteringspunkt
vaultOptions.mount.mountPoint.auto=Velg et passende sted automatisk
vaultOptions.mount.mountPoint.driveLetter=Bruk tildelt drevbokstav
vaultOptions.mount.mountPoint.driveLetter=Bruk tildelt enhetsbokstav
vaultOptions.mount.mountPoint.custom=Bruk valgt mappe
vaultOptions.mount.mountPoint.directoryPickerButton=Velg…
vaultOptions.mount.mountPoint.directoryPickerTitle=Velg en mappe
@@ -436,8 +432,6 @@ vaultOptions.masterkey.recoveryKeyExplanation=En gjenopprettingsnøkkel er den e
vaultOptions.masterkey.showRecoveryKeyBtn=Vis gjenopprettingsnøkkelen
vaultOptions.masterkey.recoverPasswordBtn=Nullstill passord
## Hub
vaultOptions.hub=Gjenoppretting
vaultOptions.hub.convertBtn=Konverter til passordbasert hvelv
# Recovery Key
## Display Recovery Key
@@ -449,7 +443,6 @@ recoveryKey.display.StorageHints=Oppbevar den et veldig sikkert sted, f.eks. ved
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=Nullstill passordet
recoveryKey.recover.prompt=Angi gjenopprettingsnøkkelen for "%s":
recoveryKey.recover.correctKey=Gjenopprettingsnøkkelen er gyldig
recoveryKey.recover.wrongKey=Gjenopprettingsnøkkelen tilhører et annet hvelv
recoveryKey.recover.invalidKey=Gjennopprettingsnøkkelen er ugyldig
@@ -461,10 +454,6 @@ recoveryKey.recover.resetSuccess.message=Passordnullstillingen vellykket
recoveryKey.recover.resetSuccess.description=Du kan låse opp hvelvet med det nye passordet.
# Convert Vault
convertVault.title=Konverter hvelvet
convertVault.convert.convertBtn.before=Konverter
convertVault.convert.convertBtn.processing=Konverterer…
convertVault.success.message=Konverteringen var vellykket
# New Password
newPassword.promptText=Skriv inn et nytt passord
@@ -487,6 +476,4 @@ quit.lockAndQuitBtn=Lås og avslutt
# Forced Quit
quit.forced.message=Noen hvelv kunne ikke låses
quit.forced.description=Låsing av hvelvene ble blokkert av ventende operasjoner eller åpne filer. Du kan tvinge låsing av gjenværende hvelv, men forstyrring av I/O kan resultere i tap av ulagret data.
quit.forced.forceAndQuitBtn=Tvinge og avslutte
# Update Reminder
quit.forced.forceAndQuitBtn=Tvinge og avslutte
+2 -25
View File
@@ -20,11 +20,6 @@ error.description=Oeps! Cryptomator verwachtte niet dat dit zou gebeuren. U kunt
error.hyperlink.lookup=Deze fout opzoeken
error.hyperlink.report=Deze fout melden
error.technicalDetails=Details:
error.existingSolutionDescription=Cryptomator had niet verwacht dat dit zou gebeuren. Maar we hebben een bestaande oplossing voor deze fout gevonden. Neem een kijkje op de volgende link.
error.hyperlink.solution=Zoek de oplossing op
error.lookupPermissionMessage=Cryptomator kan online een oplossing voor dit probleem zoeken. Dit zal een aanvraag naar onze probleemdatabase verzenden vanaf uw IP-adres.
error.dismiss=Afwijzen
error.lookUpSolution=Oplossing opzoeken
# Defaults
defaults.vault.vaultName=Kluis
@@ -64,12 +59,6 @@ addvaultwizard.new.validCharacters.message=De kluisnaam mag de volgende karakter
addvaultwizard.new.validCharacters.chars=Woordtekens (b.v. a, ½ of ±)
addvaultwizard.new.validCharacters.numbers=Nummers
addvaultwizard.new.validCharacters.dashes=Koppelteken (%s) of lage streep (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Schakel geavanceerde instellingen in
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Voer een waarde in tussen 36 en 220 (standaard 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Open de documentatie om meer te leren.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximale lengte van versleutelde bestandsnamen
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Geldig
### Password
addvaultwizard.new.createVaultBtn=Kluis aanmaken
addvaultwizard.new.generateRecoveryKeyChoice=Zonder wachtwoord hebt u geen toegang tot uw data. Wilt u een herstelsleutel voor het geval u uw wachtwoord verliest?
@@ -137,11 +126,7 @@ unlock.success.revealBtn=Toon Schijf
unlock.error.customPath.message=Kan kluis niet aan aangepast pad koppelen
unlock.error.customPath.description.notSupported=Als je het aangepaste pad wilt blijven gebruiken, ga dan naar de voorkeuren en selecteer een volume type dat het ondersteunt. Anders ga je naar de kluis opties en kies je een steunpunt voor het koppelplaten.
unlock.error.customPath.description.notExists=Het aangepaste koppelpad bestaat niet. Maak het aan in uw lokale bestandssysteem of verander het in de kluis opties.
unlock.error.customPath.description.inUse=De schijfletter of aangepaste pad "%s" is al in gebruik.
unlock.error.customPath.description.hideawayNotDir=Het verborgen tijdelijk bestand "%3$s" gebruikt voor ontgrendelen kon niet worden verwijderd. Controleer het bestand en verwijder het handmatig.
unlock.error.customPath.description.couldNotBeCleaned=Uw kluis kon niet worden gekoppeld aan het pad "%s". Probeer het opnieuw of kies een ander pad.
unlock.error.customPath.description.notEmptyDir=Het aangepaste pad "%s" is geen lege map. Kies een lege map en probeer het opnieuw.
unlock.error.customPath.description.generic=Je hebt een aangepast koppelpad voor deze kluis geselecteerd, maar gebruik ervan is mislukt met het bericht: %2$s
unlock.error.customPath.description.generic=Je hebt een aangepast koppel pad geselecteerd voor deze kluis, maar het gebruik ervan is mislukt met het bericht: %s
## Hub
hub.noKeychain.message=Geen toegang tot de apparaatsleutel
hub.noKeychain.description=Om Hub kluizen te ontgrendelen is een apparaatsleutel vereist, die met een sleutelhanger wordt beveiligd. Om verder te gaan, schakel "%s" in en selecteer een sleutelhanger in de voorkeursinstellingen.
@@ -502,12 +487,4 @@ quit.lockAndQuitBtn=Vergrendelen en Afsluiten
# Forced Quit
quit.forced.message=Sommige kluizen konden niet vergrendeld worden
quit.forced.description=Kluizen vergrendelen is geblokkeerd door openstaande bewerkingen of geopende bestanden. U kunt de resterende kluizen forceren, maar het onderbreken van I/O kan leiden tot het verlies van niet-opgeslagen gegevens.
quit.forced.forceAndQuitBtn=Forceren en afsluiten
# Update Reminder
updateReminder.title=Zoek naar updates
updateReminder.message=Controleren op updates?
updateReminder.description=Blijf op de hoogte met nieuwe functies, bugfixes en beveiligingsverbeteringen. We raden aan om automatisch te controleren op updates.
updateReminder.notNow=Niet nu
updateReminder.yesOnce=Ja, Eenmaal
updateReminder.yesAutomatically=Ja, automatisch
quit.forced.forceAndQuitBtn=Forceren en afsluiten
@@ -43,7 +43,6 @@ addvaultwizard.new.locationPrompt=…
addvaultwizard.new.directoryPickerLabel=Tilpassa lagringsstad
addvaultwizard.new.directoryPickerButton=Vel…
addvaultwizard.new.directoryPickerTitle=Vel mappe
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Opprett kvelven
addvaultwizard.new.generateRecoveryKeyChoice=Du vil ikkje kunna få tilgang til dataa dine utan passordet. Vil du ha ein gjenopprettingsnøkkel i tilfelle du mistar passordet ditt?
@@ -274,6 +273,4 @@ passwordStrength.messageLabel.4=Veldig sterkt
# Quit
quit.lockAndQuitBtn=Lås og avslutt
# Forced Quit
# Update Reminder
# Forced Quit
@@ -44,7 +44,6 @@ addvaultwizard.new.locationPrompt=…
addvaultwizard.new.directoryPickerLabel=ਪਸੰਦੀਦਾ ਟਿਕਾਣਾ
addvaultwizard.new.directoryPickerButton=…ਚੁਣੋ
addvaultwizard.new.directoryPickerTitle=ਡਾਇਰੈਕਟਰੀ ਚੁਣੋ
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=ਵਾਲਟ ਬਣਾਓ
addvaultwizard.new.generateRecoveryKeyChoice=ਤੁਸੀਂ ਬਿਨਾਂ ਪਾਸਵਰਡ ਦੇ ਆਪਣੇ ਡਾਟੇ ਨੂੰ ਇਸਤੇਮਾਲ ਨਹੀਂ ਕਰ ਸਕੋਗੇ। ਕੀ ਤੁਸੀਂ ਰਿਕਵਰੀ ਕੁੰਜੀ ਚਾਹੋਗੇ, ਜੇ ਕਿਤੇ ਤੁਸੀਂ ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਜਾਓ?
@@ -306,6 +305,4 @@ passwordStrength.messageLabel.4=ਬਹੁਤ ਮਜ਼ਬੂਤ
# Quit
quit.lockAndQuitBtn=ਲਾਕ ਕਰੋ ਤੇ ਬਾਹਰ ਜਾਓ
# Forced Quit
# Update Reminder
# Forced Quit
+2 -22
View File
@@ -20,8 +20,6 @@ error.description=Cryptomator nie spodziewał się czegoś takiego. Możesz wysz
error.hyperlink.lookup=Wyszukaj ten błąd
error.hyperlink.report=Zgłoś ten błąd
error.technicalDetails=Szczegóły:
error.existingSolutionDescription=Cryptomator nie spodziewał się, że tak się stanie. Znaleźliśmy jednak istniejące rozwiązanie dla tego błędu. Proszę spojrzeć na poniższy link.
error.hyperlink.solution=Wyszukaj rozwiązanie
# Defaults
defaults.vault.vaultName=Sejf
@@ -61,12 +59,6 @@ addvaultwizard.new.validCharacters.message=Nazwa sejfu może zawierać następuj
addvaultwizard.new.validCharacters.chars=Znaki słów (np. a, ж lub 수)
addvaultwizard.new.validCharacters.numbers=Liczby
addvaultwizard.new.validCharacters.dashes=Myślnik (%s) lub podkreślenie (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Włącz ustawienia eksperta
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Wprowadź wartość między 36 a 220 (domyślnie 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Otwórz dokumentację, aby dowiedzieć się więcej.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maksymalna długość zaszyfrowanych nazw plików
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Poprawne
### Password
addvaultwizard.new.createVaultBtn=Utwórz sejf
addvaultwizard.new.generateRecoveryKeyChoice=Nie będziesz mógł uzyskać dostępu do swoich danych bez hasła. Czy chciałbyś klucz odzyskiwania w przypadku utraty hasła?
@@ -134,11 +126,7 @@ unlock.success.revealBtn=Pokaż Dysk
unlock.error.customPath.message=Nie można zamontować sejfu na niestandardowej ścieżce
unlock.error.customPath.description.notSupported=Jeśli chcesz nadal używać niestandardowej ścieżki, przejdź do preferencji i wybierz typ udziału, który ją obsługuje. W przeciwnym razie przejdź do opcji sejfu i wybierz obsługiwany punkt montowania.
unlock.error.customPath.description.notExists=Niestandardowa ścieżka montowania nie istnieje. Stwórz ją w lokalnym systemie plików lub zmień ją w opcjach sejfu.
unlock.error.customPath.description.inUse=Litera dysku lub podana ścieżka montowania "%s" jest już w użyciu.
unlock.error.customPath.description.hideawayNotDir=Tymczasowy, ukryty plik "%3$s" używany do odblokowywania nie mógł zostać usunięty. Sprawdź plik, a następnie usuń go ręcznie.
unlock.error.customPath.description.couldNotBeCleaned=Twój sejf nie mógł być zamontowany do ścieżki "%s". Spróbuj ponownie lub wybierz inną ścieżkę.
unlock.error.customPath.description.notEmptyDir=Wybrana ścieżka montowania "%s" nie jest pustym katalogiem. Wybierz pusty katalog i spróbuj ponownie.
unlock.error.customPath.description.generic=Wybrałeś własną ścieżkę montowania dla tego sejfu, ale użycie jej nie powiodło się. Powód: %2$s
unlock.error.customPath.description.generic=Wybrałeś niestandardową ścieżkę montowania dla tego sejfu, ale użycie jej nie powiodło się z wiadomością: %s
## Hub
hub.noKeychain.message=Brak dostępu do klucza urządzenia
hub.noKeychain.description=Aby odblokować sejfy na Hubie, wymagany jest klucz urządzenia zabezpieczony za pomocą pęku kluczy. Aby kontynuować, włącz "%s" i wybierz Pęk kluczy w ustawieniach.
@@ -499,12 +487,4 @@ quit.lockAndQuitBtn=Zablokuj i wyjdź
# Forced Quit
quit.forced.message=Niektóre sejfy nie mogą być zablokowane
quit.forced.description=Blokowanie sejfów zostało zablokowane przez oczekujące operacje lub otwarte pliki. Możesz wymusić zablokowanie pozostałych sejfów, jednak przerwanie I/O może spowodować utratę niezapisanych danych.
quit.forced.forceAndQuitBtn=Wymuś i wyjdź
# Update Reminder
updateReminder.title=Sprawdzanie aktualizacji
updateReminder.message=Sprawdzić aktualizacje?
updateReminder.description=Bądź na bieżąco z nowymi funkcjami, poprawkami błędów i poprawkami bezpieczeństwa. Zalecamy automatyczne sprawdzanie aktualizacji.
updateReminder.notNow=Nie teraz
updateReminder.yesOnce=Tak, raz
updateReminder.yesAutomatically=Tak, automatycznie
quit.forced.forceAndQuitBtn=Wymuś i wyjdź
+13 -36
View File
@@ -20,8 +20,6 @@ error.description=Opa! Cryptomator não esperava que isto acontecesse. Pode proc
error.hyperlink.lookup=Procure este erro
error.hyperlink.report=Relatar este erro
error.technicalDetails=Detalhes:
error.existingSolutionDescription=O Cryptomator não esperava que isso acontecesse. Mas encontrámos uma solução existente para esse erro. Por favor, veja o seguinte link.
error.hyperlink.solution=Procure a solução
# Defaults
defaults.vault.vaultName=Cofre
@@ -61,12 +59,6 @@ addvaultwizard.new.validCharacters.message=O nome do cofre pode conter os seguin
addvaultwizard.new.validCharacters.chars=Caracteres válidos (p. ex. a, ж ou 수)
addvaultwizard.new.validCharacters.numbers=Números
addvaultwizard.new.validCharacters.dashes=Hífen (%s) ou sublinhado (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Ativar configurações avançadas
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Digite um valor entre 36 e 220 (padrão 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Abra a documentação para saber mais.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Comprimento máximo dos ficheiros encriptados
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Válido
### Password
addvaultwizard.new.createVaultBtn=Criar Cofre
addvaultwizard.new.generateRecoveryKeyChoice=Não será capaz de aceder aos seus dados sem a sua palavra-passe. Quer uma chave de recuperação para caso perca a sua palavra-passe?
@@ -78,8 +70,8 @@ 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 diretório.
addvault.new.readme.storageLocation.6=Se deseja encriptar arquivos e visualizar o conteúdo do cofre, faça o seguinte:
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.
addvault.new.readme.storageLocation.9=3. Abra o local de acesso clicando no botão "Revelar".
@@ -119,7 +111,7 @@ forgetPassword.confirmBtn=Esquecer a Palavra-passe
unlock.title=Desbloquear "%s"
unlock.passwordPrompt=Insira a senha para "%s":
unlock.savePassword=Recordar a palavra-passe
unlock.unlockBtn=Desbloquear
unlock.unlockBtn=Destrancar
## Select
unlock.chooseMasterkey.message=Chave Mestra não encontrada
unlock.chooseMasterkey.description=Não foi possível encontrar o ficheiro masterkey no local predefinido para este cofre. Por favor, escolha o ficheiro chave manualmente.
@@ -132,8 +124,6 @@ unlock.success.rememberChoice=Lembrar escolha, não mostrar isto novamente
unlock.success.revealBtn=Revelar unidade
## Failure
unlock.error.customPath.message=Não é possível montar o cofre no caminho personalizado
unlock.error.customPath.description.notSupported=Se pretender continuar a utilizar o caminho personalizado, vá às preferências e seleccione um tipo de volume que o suporte. Caso contrário, aceda às opções do vault e escolha um ponto de montagem suportado.
unlock.error.customPath.description.notExists=O caminho de montagem personalizado não existe. Crie-o no seu sistema de ficheiros local ou altere-o nas opções do vault.
## Hub
hub.noKeychain.message=Não foi possível aceder à chave do dispositivo
hub.noKeychain.description=Para desbloquear os cofres do Hub, é necessária uma chave do dispositivo, que é protegida usando um porta-chaves. Para continuar, ative “%s” e selecione um porta-chaves nas preferências.
@@ -148,11 +138,11 @@ hub.receive.description=Cryptomator está a receber e a processar a resposta do
### Register Device
hub.register.message=Nome do dispositivo necessário
hub.register.description=Parece ser o primeiro acesso ao Hub a partir deste dispositivo. Para identificá-lo para autorização de acesso, é preciso dar um nome a este dispositivo.
hub.register.nameLabel=Nome do dispositivo
hub.register.nameLabel=Nome do Dispositivo
hub.register.occupiedMsg=Nome já utilizado
hub.register.registerBtn=Confirmar
### Registration Success
hub.registerSuccess.message=Nome do dispositivo
hub.registerSuccess.message=Nome de Dispositivo
hub.registerSuccess.description=Para aceder ao cofre, o seu dispositivo precisa de ser autorizado pelo proprietário do cofre.
### Registration Failed
hub.registerFailed.message=Falha ao nomear o dispositivo
@@ -186,7 +176,7 @@ migration.run.startMigrationBtn=Migrar Cofre
migration.run.progressHint=Isso pode levar algum tempo…
## Success
migration.success.nextStepsInstructions="%s" foi migrado com sucesso.\nPoderá desbloquear o seu cofre agora.
migration.success.unlockNow=Desbloquear agora
migration.success.unlockNow=Destrancar agora
## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Sistema de ficheiros não suportado
migration.error.missingFileSystemCapabilities.description=O processo de migração não foi iniciado, porque o seu cofre está localizado num sistema de ficheiros inadequado.
@@ -233,10 +223,6 @@ health.result.severityFilter.good=Ótimo
health.result.severityFilter.info=Informações
health.result.severityFilter.warn=Atenção
health.result.severityFilter.crit=Crítico
health.result.fixStateFilter.all=Estado de reparação - Todos
health.result.fixStateFilter.fixable=Reparável
health.result.fixStateFilter.notFixable=Não reparável
health.result.fixStateFilter.fixing=Reparação…
health.result.fixStateFilter.fixed=Corrigido
health.result.fixStateFilter.fixFailed=Falha na correção
## Fix Application
@@ -288,12 +274,6 @@ preferences.about=Sobre
# Vault Statistics
stats.title=Estatísticas de %s
## Read
stats.read.throughput.kibs=Leitura: %.2f KiB/s
stats.read.throughput.mibs=Leitura: %.2f MiB/s
stats.read.total.data.none=Dados lidos: -
stats.read.total.data.kib=Dados lidos: %.1f KiB
stats.read.total.data.mib=Dados lidos: %.1f MiB
stats.read.total.data.gib=Dados lidos: %.1f GiB
stats.decr.total.data.none=Dados desencriptados: -
stats.decr.total.data.kib=Dados desencriptados: %.1f KiB
stats.decr.total.data.mib=Dados desencriptados: %.1f MiB
@@ -327,9 +307,9 @@ main.supporterCertificateMissing.tooltip=Por favor, considere doar
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Clique aqui para adicionar um cofre
main.vaultlist.contextMenu.remove=Remover…
main.vaultlist.contextMenu.lock=Bloquear
main.vaultlist.contextMenu.lock=Trancar
main.vaultlist.contextMenu.unlock=Desbloquear…
main.vaultlist.contextMenu.unlockNow=Desbloquear agora
main.vaultlist.contextMenu.unlockNow=Destrancar agora
main.vaultlist.contextMenu.vaultoptions=Mostrar opções do Cofre
main.vaultlist.contextMenu.reveal=Revelar unidade
main.vaultlist.addVaultBtn=Adicionar Cofre
@@ -339,7 +319,7 @@ main.vaultDetail.welcomeOnboarding=Obrigado por escolher Cryptomator para proteg
### Locked
main.vaultDetail.lockedStatus=BLOQUEADO
main.vaultDetail.unlockBtn=Desbloquear…
main.vaultDetail.unlockNowBtn=Desbloquear agora
main.vaultDetail.unlockNowBtn=Destrancar agora
main.vaultDetail.optionsBtn=Opções do Cofre
main.vaultDetail.passwordSavedInKeychain=Palavra-passe guardada
### Unlocked
@@ -347,7 +327,7 @@ main.vaultDetail.unlockedStatus=DESBLOQUEADO
main.vaultDetail.accessLocation=O conteúdo do seu cofre está acessível aqui:
main.vaultDetail.revealBtn=Revelar unidade
main.vaultDetail.copyUri=Copiar endereço
main.vaultDetail.lockBtn=Bloquear
main.vaultDetail.lockBtn=Trancar
main.vaultDetail.bytesPerSecondRead=Ler:
main.vaultDetail.bytesPerSecondWritten=Escrever:
main.vaultDetail.throughput.idle=inativo
@@ -387,8 +367,8 @@ vaultOptions.general=Geral
vaultOptions.general.vaultName=Nome do Cofre
vaultOptions.general.autoLock.lockAfterTimePart1=Bloquear quando inativo por
vaultOptions.general.autoLock.lockAfterTimePart2=minutos
vaultOptions.general.unlockAfterStartup=Desbloquear o cofre ao iniciar o Cryptomator
vaultOptions.general.actionAfterUnlock=Após desbloquear com sucesso
vaultOptions.general.unlockAfterStartup=Destrancar o cofre ao iniciar o Cryptomator
vaultOptions.general.actionAfterUnlock=Após destrancar com sucesso
vaultOptions.general.actionAfterUnlock.ignore=Não fazer nada
vaultOptions.general.actionAfterUnlock.reveal=Revelar unidade
vaultOptions.general.actionAfterUnlock.ask=Perguntar
@@ -437,7 +417,6 @@ recoveryKey.recover.resetSuccess.message=Palavra-passe redefinida com sucesso
recoveryKey.recover.resetSuccess.description=Você pode desbloquear o seu cofre com a nova senha.
# Convert Vault
convertVault.convert.convertBtn.processing=Convertendo…
# New Password
newPassword.promptText=Inserir uma nova palavra-passe
@@ -460,6 +439,4 @@ quit.lockAndQuitBtn=Bloquear e Sair
# Forced Quit
quit.forced.message=Alguns cofres não poderam ser fechados
quit.forced.description=Bloquear os cofres foi impossibilitado por operações pendentes ou ficheiros abertos. Poderá forçar o bloqueio dos cofres restantes, sob a possibilidade da perda de dados não guardados.
quit.forced.forceAndQuitBtn=Forçar e Sair
# Update Reminder
quit.forced.forceAndQuitBtn=Forçar e Sair
@@ -20,8 +20,6 @@ error.description=Oops! Cryptomator não esperava que isso acontecesse. Você po
error.hyperlink.lookup=Procure este erro
error.hyperlink.report=Reportar este erro
error.technicalDetails=Detalhes:
error.existingSolutionDescription=O Cryptomator encontrou um erro inesperado, mas há uma solução pré-existente disponível no seguinte link.
error.hyperlink.solution=Procure a solução
# Defaults
defaults.vault.vaultName=Cofre
@@ -61,12 +59,6 @@ addvaultwizard.new.validCharacters.message=O nome do cofre pode conter os seguin
addvaultwizard.new.validCharacters.chars=Caracteres de texto (exemplo: a, ж ou 수)
addvaultwizard.new.validCharacters.numbers=Números
addvaultwizard.new.validCharacters.dashes=Hífen (%s) ou sublinhado (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Ativar configurações avançadas
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Digite um valor entre 36 e 220 (padrão 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Abra a documentação para saber mais.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Comprimento máximo dos nomes de arquivos encriptados
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Válido
### Password
addvaultwizard.new.createVaultBtn=Criar Cofre
addvaultwizard.new.generateRecoveryKeyChoice=Você não será capaz de acessar seus dados sem sua senha. Você quer uma chave de recuperação para o caso de perder sua senha?
@@ -134,11 +126,7 @@ unlock.success.revealBtn=Revelar Volume
unlock.error.customPath.message=Não foi possível iniciar o cofre no caminho personalizado
unlock.error.customPath.description.notSupported=Se você deseja continuar usando o caminho personalizado, por favor vá para as preferências e selecione um tipo de volume que o suporte. Caso contrário, vá para as opções de cofre e escolha um ponto de montagem suportado.
unlock.error.customPath.description.notExists=O caminho de montagem personalizado não existe. Crie o caminho em seu sistema de arquivos local, ou o altere nas opções de cofre.
unlock.error.customPath.description.inUse=A letra da unidade ou o caminho de montagem "%s" já está em uso.
unlock.error.customPath.description.hideawayNotDir=O arquivo oculto temporário "%3$s" usado para desbloquear não pôde ser removido. Verifique o arquivo e exclua-o manualmente.
unlock.error.customPath.description.couldNotBeCleaned=Seu cofre não pôde ser montado no caminho "%s". Tente novamente ou escolha um caminho diferente.
unlock.error.customPath.description.notEmptyDir=O caminho de montagem escolhido "%s" não é uma pasta vazia. Escolha uma pasta vazia e tente novamente.
unlock.error.customPath.description.generic=Você selecionou um caminho de montagem personalizado para este cofre, mas falhou com a mensagem: %2$s
unlock.error.customPath.description.generic=Você selecionou um caminho de montagem personalizado para este cofre, mas ao usá-lo ocorreu uma falha com a mensagem: %s
## Hub
hub.noKeychain.message=Não foi possível acessar a chave do dispositivo
hub.noKeychain.description=Para desbloquear os cofres centrais, é necessário a chave do dispositivo, protegida por um chaveiro. Para proceder, ative "%s" e selecione um chaveiro nas preferências.
@@ -499,12 +487,4 @@ quit.lockAndQuitBtn=Bloquear e Sair
# Forced Quit
quit.forced.message=Alguns cofres não puderam ser trancados
quit.forced.description=O bloqueio dos cofres foi impedido por operações pendentes ou arquivos abertos. Você pode forçar o bloqueio dos cofres restantes, no entanto, essa interrupção de E/S pode resultar na perda de dados não salvos nos cofres — “seus dados”.
quit.forced.forceAndQuitBtn=Forçar e Sair
# Update Reminder
updateReminder.title=Verificação de Atualizações
updateReminder.message=Verificar Atualizações?
updateReminder.description=Mantenha-se atualizado com novos recursos, correções de bugs e melhoramentos de segurança. Recomendamos verificar atualizações automaticamente.
updateReminder.notNow=Agora Não
updateReminder.yesOnce=Sim, Uma Vez
updateReminder.yesAutomatically=Sim, Automaticamente
quit.forced.forceAndQuitBtn=Forçar e Sair
+2 -52
View File
@@ -20,8 +20,6 @@ error.description=Cryptomatorul nu se aștepta să se întâmple asta. Puteți c
error.hyperlink.lookup=Caută soluții pentru această eroare
error.hyperlink.report=Raportează această eroare
error.technicalDetails=Detalii:
error.existingSolutionDescription=Cryptomator nu s-a aşteptat să se întâmple asta. Dar am găsit o soluţie pentru această eroare. Vă rugăm să cititi următorul link.
error.hyperlink.solution=Caută soluția
# Defaults
defaults.vault.vaultName=Seif
@@ -61,12 +59,6 @@ addvaultwizard.new.validCharacters.message=Numele seifului poate conține următ
addvaultwizard.new.validCharacters.chars=Caractere (e.x. a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Numere
addvaultwizard.new.validCharacters.dashes=Linii(%s) sau sub-linii(%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Activează setările Expert
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Introduceți o valoare între 36 și 220 (implicit 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Deschideți documentația pentru a afla mai multe.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Lungimea maximă a numelor de fișiere criptate
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valid
### Password
addvaultwizard.new.createVaultBtn=Crează seif
addvaultwizard.new.generateRecoveryKeyChoice=Nu veți putea accesa datele dvs. fără parolă. Doriți o cheie de recuperare pentru cazul în care vă pierdeți parola?
@@ -134,6 +126,7 @@ unlock.success.revealBtn=Dezvăluie partiția
unlock.error.customPath.message=Nu se poate monta seiful în locația alesă
unlock.error.customPath.description.notSupported=Dacă doriți să continuați să utilizați locația aleasă, vă rugăm să mergeți la preferințe și să selectați o unitate de stocare suportată. În caz contrar, mergeți la opțiunile seifului și alegeți o locație de montare suportată.
unlock.error.customPath.description.notExists=Locația de montare aleasă nu există. Creați-o în sistemul de fișiere local sau schimbați-o din opțiunile seifului.
unlock.error.customPath.description.generic=Ați selectat o locație de montare pentru acest seif, dar utilizarea ei a eșuat cu mesajul: %s
## Hub
hub.noKeychain.message=Cheia dispozitivului nu a putut fi accesată
hub.noKeychain.description=Pentru a debloca seifele de tip Hub, este necesară o cheie a dispozitivului, care este securizată prin intermediul unui keychain. Pentru a continua, activați „%s” și selectați un keychain în preferințe.
@@ -161,8 +154,6 @@ hub.registerFailed.description=O eroare a fost întâmpinata în procesul de den
hub.unauthorized.message=Acces respins
hub.unauthorized.description=Dispozitivul dvs. nu a fost autorizat să acceseze acest seif. Solicitați proprietarului seifului să va autorizeze accesul.
### License Exceeded
hub.invalidLicense.message=Licență de Hub invalidă
hub.invalidLicense.description=Instanța Hub are o licență invalidă. Vă rugăm să informați un administrator Hub să actualizeze sau să reînnoiască licența.
# Lock
## Force
@@ -281,17 +272,9 @@ preferences.interface.showMinimizeButton=Arată butonul de minimizare
preferences.interface.showTrayIcon=Arată tray icon (necesită repornire)
## Volume
preferences.volume=Unitate virtuală
preferences.volume.type=Tip volum
preferences.volume.type.automatic=Automat
preferences.volume.docsTooltip=Deschideți documentația pentru a afla mai multe despre tipurile diferite de unități de stocare.
preferences.volume.fuseRestartRequired=Cryptomator trebuie repornit pentru ca modificările să fie aplicate.
preferences.volume.tcp.port=Portul TCP
preferences.volume.supportedFeatures=Tipul de volum selectat suportă următoarele caracteristici:
preferences.volume.feature.mountAuto=Selectare punct de montare automat
preferences.volume.feature.mountToDir=Director personalizat ca punct de montaj
preferences.volume.feature.mountToDriveLetter=Literă unitate ca punct de montare
preferences.volume.feature.mountFlags=Opțiuni de montare personalizată
preferences.volume.feature.readOnly=Montare read-only
## Updates
preferences.updates=Actualizări
preferences.updates.currentVersion=Versiunea actuală: %s
@@ -314,27 +297,21 @@ stats.title=Statistici pentru %s
stats.cacheHitRate=Rata de control cache
## Read
stats.read.throughput.idle=Citire: inactiv
stats.read.throughput.kibs=Citire: %.2f kiB/s
stats.read.throughput.mibs=Citire: %.2f MiB/s
stats.read.total.data.none=Date citite: -
stats.read.total.data.kib=Date citite: %.1f KiB
stats.read.total.data.mib=Date citite: %.1f MiB
stats.read.total.data.gib=Date citite: %.1f GiB
stats.decr.total.data.none=Date decriptate: -
stats.decr.total.data.kib=Date decriptate: %.1f KiB
stats.decr.total.data.mib=Date decriptate: %.1f MiB
stats.decr.total.data.gib=Date decriptate: %.1f GiB
stats.read.accessCount=Total citit: %d
## Write
stats.write.throughput.idle=Scriere: inactiv
stats.write.throughput.kibs=Scrie: %.2f KiB/s
stats.write.throughput.mibs=Scrie: %.2f MiB/s
stats.write.total.data.none=Date scrise: -
stats.write.total.data.kib=Date scrise: %.1f KiB
stats.write.total.data.mib=Date scrise: %.1f MiB
stats.write.total.data.gib=Date scrise: %.1f GiB
stats.encr.total.data.none=Date criptate: -
stats.encr.total.data.kib=Date criptate: %.1f KiB
stats.encr.total.data.mib=Date criptate: %.1f MiB
stats.encr.total.data.gib=Date criptate: %.1f GiB
stats.write.accessCount=Total scrieri: %d
@@ -372,18 +349,12 @@ main.vaultDetail.passwordSavedInKeychain=Parola a fost salvată
main.vaultDetail.unlockedStatus=DEBLOCAT
main.vaultDetail.accessLocation=Conținutul seifului tău este accesibil aici:
main.vaultDetail.revealBtn=Dezvăluie unitatea
main.vaultDetail.copyUri=Copiază URI
main.vaultDetail.lockBtn=Blocaţi
main.vaultDetail.bytesPerSecondRead=Citire:
main.vaultDetail.bytesPerSecondWritten=Scriere:
main.vaultDetail.throughput.idle=inactiv
main.vaultDetail.throughput.kbps=%.1f KiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Statistici de seif
main.vaultDetail.locateEncryptedFileBtn=Localizează fișier criptat
main.vaultDetail.locateEncryptedFileBtn.tooltip=Alege un fișier din seiful tău pentru a-i localiza echivalentul criptat
main.vaultDetail.encryptedPathsCopied=Căile au fost copiate în Clipboard
main.vaultDetail.filePickerTitle=Alege fișier din seifului
### Missing
main.vaultDetail.missing.info=Cryptomator nu a putut găsi un seif pe această cale.
main.vaultDetail.missing.recheck=Verifică din nou
@@ -422,17 +393,13 @@ vaultOptions.general.startHealthCheckBtn=Începe verificarea de sănătate
## Mount
vaultOptions.mount=Montare
vaultOptions.mount.info=Opțiunile depind de tipul de volum selectat.
vaultOptions.mount.linkToPreferences=Deschide preferințele discului virtual
vaultOptions.mount.readonly=Doar citire
vaultOptions.mount.customMountFlags=Atribute de montare personalizate
vaultOptions.mount.winDriveLetterOccupied=ocupat
vaultOptions.mount.mountPoint=Punct de montare
vaultOptions.mount.mountPoint.auto=Alegeţi automat o locaţie potrivită
vaultOptions.mount.mountPoint.driveLetter=Utilizați litera de unitate atribuită
vaultOptions.mount.mountPoint.custom=Folosește directorul ales
vaultOptions.mount.mountPoint.directoryPickerButton=Alege…
vaultOptions.mount.mountPoint.directoryPickerTitle=Alege un director
## Master Key
vaultOptions.masterkey=Parolă
vaultOptions.masterkey.changePasswordBtn=Schimbați parola
@@ -441,9 +408,6 @@ vaultOptions.masterkey.recoveryKeyExplanation=O cheie de recuperare este singuru
vaultOptions.masterkey.showRecoveryKeyBtn=Afișează cheia de recuperare
vaultOptions.masterkey.recoverPasswordBtn=Resetează Parola
## Hub
vaultOptions.hub=Recuperare
vaultOptions.hub.convertInfo=În caz de urgență, poți folosi cheia de recuperare pentru a transforma acest seif Hub într-un seif cu parolă.
vaultOptions.hub.convertBtn=Transformă în seif cu parolă
# Recovery Key
## Display Recovery Key
@@ -455,7 +419,6 @@ recoveryKey.display.StorageHints=Păstrați cheia de recuperare undeva foarte si
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=Resetează Parola
recoveryKey.recover.prompt=Introduce cheia de recuperare pentru "%s:
recoveryKey.recover.correctKey=Cheia de recuperare este validă
recoveryKey.recover.wrongKey=Cheia de recuperare aparţine unui alt seif
recoveryKey.recover.invalidKey=Cheia de recuperare nu este validă
@@ -467,11 +430,6 @@ recoveryKey.recover.resetSuccess.message=Parola a fost resetată cu succes
recoveryKey.recover.resetSuccess.description=Puteți debloca seiful cu parola noua.
# Convert Vault
convertVault.title=Transformă seiful
convertVault.convert.convertBtn.before=Convertește
convertVault.convert.convertBtn.processing=În curs de convertire…
convertVault.success.message=Convertire reușită
convertVault.hubToPassword.success.description=Acum poti debloca seiful cu parola aleasa fara a necesita acces Hub.
# New Password
newPassword.promptText=Introduceți o parolă nouă
@@ -494,12 +452,4 @@ quit.lockAndQuitBtn=Blocați și ieșiți
# Forced Quit
quit.forced.message=Unele seifuri nu au putut fi blocate
quit.forced.description=Încuierea seifurilor a fost blocata de operațiuni in curs sau de fișiere deschise. Puteți încuia forțat aceste seifuri dar prin întreruperea operațiunilor I/O poate rezulta în pierderea datelor nesalvate.
quit.forced.forceAndQuitBtn=Încuiați forțat și ieșiți
# Update Reminder
updateReminder.title=Verificare actualizare
updateReminder.message=Verificați dacă există actualizări?
updateReminder.description=Rămâneți la curent cu noi caracteristici, remedieri ale erorilor și îmbunătățiri de securitate. Vă recomandăm să verificați automat actualizările.
updateReminder.notNow=Nu acum
updateReminder.yesOnce=Da, o dată
updateReminder.yesAutomatically=Da, automat
quit.forced.forceAndQuitBtn=Încuiați forțat și ieșiți
+3 -26
View File
@@ -20,11 +20,6 @@ error.description=Произошла непредвиденная ситуаци
error.hyperlink.lookup=Найти ошибку
error.hyperlink.report=Сообщить об ошибке
error.technicalDetails=Подробности:
error.existingSolutionDescription=Произошло неожиданное событие. Однако мы нашли решение этой проблемы. Ознакомьтесь с ним по ссылке.
error.hyperlink.solution=Найти решение
error.lookupPermissionMessage=Cryptomator может поискать решение этой проблемы в Интернете. Для этого будет отправлен запрос о проблеме в нашу базу данных с вашего IP-адреса.
error.dismiss=Отклонить
error.lookUpSolution=Найти решение
# Defaults
defaults.vault.vaultName=Хранилище
@@ -64,12 +59,6 @@ addvaultwizard.new.validCharacters.message=Имя хранилища может
addvaultwizard.new.validCharacters.chars=Буквы (например, a, ж или 수)
addvaultwizard.new.validCharacters.numbers=Цифры
addvaultwizard.new.validCharacters.dashes=Дефис (%s) или подчёркивание (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Включить расширенные настройки
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Введите значение между 36 и 220 (по умолчанию 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=См. подробности в документации.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Максимальная длина зашифрованных имён файлов
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Корректно
### Password
addvaultwizard.new.createVaultBtn=Создать хранилище
addvaultwizard.new.generateRecoveryKeyChoice=Вы не сможете получить доступ к своим данным без пароля. Хотите создать ключ для восстановления на случай утери пароля?
@@ -137,11 +126,7 @@ unlock.success.revealBtn=Показать диск
unlock.error.customPath.message=Невозможно смонтировать хранилище по указанному пути
unlock.error.customPath.description.notSupported=Если вы хотите продолжить использование пользовательского пути, перейдите в настройки и выберите тип тома, который его поддерживает. В противном случае, перейдите в настройки хранилища и выберите поддерживаемую точку монтирования.
unlock.error.customPath.description.notExists=Пользовательский путь монтирования не существует. Либо создайте его в локальной файловой системе, либо измените в параметрах хранилища.
unlock.error.customPath.description.inUse=Буква диска или путь монтирования "%s" уже используется.
unlock.error.customPath.description.hideawayNotDir=Временный скрытый файл "%3$s" используется для разблокировки и не может быть удалён. Проверьте файл и затем удалите его вручную.
unlock.error.customPath.description.couldNotBeCleaned=Хранилище не может быть смонтировано к пути "%s". Попробуйте ещё раз или выберите другой путь.
unlock.error.customPath.description.notEmptyDir=Путь монтирования "%s" — не пустая папка. Выберите пустую папку и повторите попытку.
unlock.error.customPath.description.generic=Выбранный вами путь монтирования для хранилища не удалось использовать: %2$s
unlock.error.customPath.description.generic=Вы выбрали свой путь монтирования этого хранилища, но его нельзя использовать: %s
## Hub
hub.noKeychain.message=Нет доступа к ключу устройства
hub.noKeychain.description=Для разблокировки хаб-хранилища необходим ключ устройства, который защищён с помощью связки ключей. Чтобы продолжить, включите "%s" и выберите связку ключей в настройках.
@@ -166,7 +151,7 @@ hub.registerSuccess.description=Для доступа к хранилищу ва
hub.registerFailed.message=Ошибка присвоения имени устройству
hub.registerFailed.description=Ошибка присвоения имени. Более подробную информацию см. в журнале приложения.
### Unauthorized
hub.unauthorized.message=Доступ запрещен
hub.unauthorized.message=Нет доступа
hub.unauthorized.description=Устройство ещё не авторизовано для доступа к этому хранилищу. Попросите владельца хранилища разрешить его.
### License Exceeded
hub.invalidLicense.message=Лицензия хаба недействительна
@@ -502,12 +487,4 @@ quit.lockAndQuitBtn=Заблокировать и выйти
# Forced Quit
quit.forced.message=Некоторые хранилища не могут быть заблокированы
quit.forced.description=Блокировка хранилищ была прервана из-за отложенной операции или открытых файлов. Вы можете заблокировать оставшиеся хранилища принудительно, однако прерывание ввода-вывода может привести к потере несохранённых данных.
quit.forced.forceAndQuitBtn=Заблокировать и выйти
# Update Reminder
updateReminder.title=Проверка обновлений
updateReminder.message=Проверить обновления?
updateReminder.description=Будьте в курсе новых возможностей, исправлений ошибок и улучшений безопасности. Мы рекомендуем автоматически проверять наличие обновлений.
updateReminder.notNow=Не сейчас
updateReminder.yesOnce=Да, один раз
updateReminder.yesAutomatically=Да, автоматически
quit.forced.forceAndQuitBtn=Заблокировать и выйти
@@ -29,7 +29,6 @@ traymenu.vault.unlock=අගුළුහරින්න
### Name
### Location
addvaultwizard.new.locationPrompt=
### Expert Settings
### Password
### Information
## Existing
@@ -124,6 +123,4 @@ main.closeBtn.tooltip=වසන්න
# Quit
# Forced Quit
# Update Reminder
# Forced Quit
+5 -24
View File
@@ -20,8 +20,6 @@ error.description=Cryptomator toto neočakával. Môžte nahliadnuť do existuj
error.hyperlink.lookup=Vyhľadať túto chybu
error.hyperlink.report=Nahlásiť túto chybu
error.technicalDetails=Podrobnosti:
error.existingSolutionDescription=Cryptomator nečakal, že sa toto stane. Našli sme však existujúce riešenie tejto chyby. Pozrite si prosím nasledujúci odkaz.
error.hyperlink.solution=Vyhľadať riešenie
# Defaults
defaults.vault.vaultName=Trezor
@@ -61,12 +59,6 @@ addvaultwizard.new.validCharacters.message=Meno trezora smie obsahovať nasleduj
addvaultwizard.new.validCharacters.chars=Slovné znaky (napr. a, ж alebo 수)
addvaultwizard.new.validCharacters.numbers=Čísla
addvaultwizard.new.validCharacters.dashes=Pomlčka (%s) alebo podčiarnik (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Povoliť expertné nastavenia
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Zadajte hodnotu medzi 36 a 220 (predvolená 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Otvorte dokumentáciu pre viac informácií.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximálna dĺžka zakryptovaných mien súborov
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Platný
### Password
addvaultwizard.new.createVaultBtn=Vytvoriť trezor
addvaultwizard.new.generateRecoveryKeyChoice=Bez hesla nebudete mať prístup k svojim údajom. Chcete obnovovací kľúč pre prípad straty hesla?
@@ -118,7 +110,7 @@ forgetPassword.confirmBtn=Zabudnuté heslo
# Unlock
unlock.title=Odomknúť "%s"
unlock.passwordPrompt=Zadajte heslo pre "%s":
unlock.savePassword=Zapamätať heslo
unlock.savePassword=Odomknúť.uložiťHeslo
unlock.unlockBtn=Odomknúť
## Select
unlock.chooseMasterkey.message=Súbor hlavného kľúča nenájdený
@@ -132,7 +124,7 @@ unlock.success.rememberChoice=Zapamätať voľbu, už viac nezobrazovať
unlock.success.revealBtn=Odkryť disk
## Failure
unlock.error.customPath.message=Nie je možné namapovať trezor na uživateĺskej ceste
unlock.error.customPath.description.notSupported=Ak chcete naďalej používať vlastnú cestu, prejdite do nastavení a vyberte typ zväzku, ktorý ju podporuje. V opačnom prípade prejdite na možnosti trezoru a vyberte podporovaný bod pripojenia.
unlock.error.customPath.description.generic=Vybrali ste voliteľnú cestu pripojenia pre tento trezor, ale použiť ho zlyhalo so správou: %s
## Hub
hub.noKeychain.message=Nemôžem pristúpiť ku kľúču zariadenia
hub.noKeychain.description=V poradí odomknutia Hub trezorov, je požadovaný kľúč zariadenia ktorý je zabezpečený použitím keychain. K vykonaniu povoľte "%s" a zvoľte keychain v nastaveniach.
@@ -438,22 +430,20 @@ vaultOptions.masterkey.changePasswordBtn=Zmeniť heslo
vaultOptions.masterkey.forgetSavedPasswordBtn=Zabudnúť uložené heslo
vaultOptions.masterkey.recoveryKeyExplanation=Kľúč pre obnovu je Vašou jedinou cestou k obnove prístupu do trezoru v prípade straty hesla.
vaultOptions.masterkey.showRecoveryKeyBtn=Ukázať klúč obnovy
vaultOptions.masterkey.recoverPasswordBtn=Obnoviť heslo
vaultOptions.masterkey.recoverPasswordBtn=Resetovanie hesla
## Hub
vaultOptions.hub=Obnova
vaultOptions.hub.convertBtn=Konvertovať do Password-Based trezora
# Recovery Key
## Display Recovery Key
recoveryKey.display.title=Ukázať kľúč obnovenia
recoveryKey.create.message=Požadované heslo
recoveryKey.create.description=Zadajte heslo pre "%s", aby sa zobrazil kľúč na obnovenie.
recoveryKey.create.description=Zadajte Vaše heslo pre zobrazenie kľúča obnovy k "%s":
recoveryKey.display.description=Nasledujúci kľúč obnovy slúži k prístupu k "%s":
recoveryKey.display.StorageHints=Uchovávajte ho na bezpečnom mieste, ako napr.:\n- v menežérovi hesiel\n- uložené na USB kľúči\n- vytlačené na papiery
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=Resetovanie hesla
recoveryKey.recover.prompt=Zadajte obnovovací kľúč pre „%s":
recoveryKey.recover.correctKey=Toto je platný kľúč obnovy
recoveryKey.recover.wrongKey=Tento kľúč obnovy patrí inému trezoru
recoveryKey.recover.invalidKey=Toto je neplatný kľúč obnovy
@@ -469,7 +459,6 @@ convertVault.title=Konvertovať trezor
convertVault.convert.convertBtn.before=Konvertovať
convertVault.convert.convertBtn.processing=Konvertujem…
convertVault.success.message=Konverzia úspešná
convertVault.hubToPassword.success.description=Teraz môžete odomknúť trezor pomocou zvoleného hesla bez toho, aby ste potrebovali prístup k Hub službe.
# New Password
newPassword.promptText=Zadajte nové heslo
@@ -492,12 +481,4 @@ quit.lockAndQuitBtn=Zamknúť a Skončiť
# Forced Quit
quit.forced.message=Niektoré trezory nemožno uzamknúť
quit.forced.description=Uzavretie trezorov bolo blokované prebiehajúcou operáciou alebo otvorenými súbormi. Môžte vynútiť uzamknutie ostávajúcich trezorov, čo preruší I/O a to môže viesť k strate neuložených dát.
quit.forced.forceAndQuitBtn=Vynútiť a skončiť
# Update Reminder
updateReminder.title=Kontrola aktualizácií
updateReminder.message=Skontrolovať aktualizácie?
updateReminder.description=Zostaňte aktualizovaný s novými vlastnosťami, opravami chýb a bezpečnostnými vylepšeniami. Odporúčame automatickú kontrolu aktualizácií.
updateReminder.notNow=Teraz nie
updateReminder.yesOnce=Áno, raz
updateReminder.yesAutomatically=Áno, automaticky
quit.forced.forceAndQuitBtn=Vynútiť a skončiť
@@ -30,7 +30,6 @@ error.technicalDetails=Podrobnosti:
## New
### Name
### Location
### Expert Settings
### Password
### Information
## Existing
@@ -130,6 +129,4 @@ recoveryKey.recover.invalidKey=Obnovitveni ključ ni pravilen
# Quit
# Forced Quit
# Update Reminder
# Forced Quit
@@ -48,7 +48,6 @@ addvaultwizard.new.fileAlreadyExists=Datoteka ili direktorijum sa ovim imenom se
addvaultwizard.new.locationDoesNotExist=Direktorijum na datoj lokaciji ne postoji ili mu se ne može pristupiti
addvaultwizard.new.locationIsNotWritable=Nemate pristup pisanju na datoj lokaciji
addvaultwizard.new.locationIsOk=Prikladna lokacija za vaš sef
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Napravi sef
addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći da pristupite vašim podacima bez vaše lozinke. Da li želite rezervni ključ u slučaju gubitka lozinke?
@@ -318,6 +317,4 @@ passwordStrength.messageLabel.4=Веома јака
# Quit
quit.lockAndQuitBtn=Zaključaj i Izađi
# Forced Quit
# Update Reminder
# Forced Quit
@@ -47,7 +47,6 @@ addvaultwizard.new.fileAlreadyExists=Datoteka ili direktorijum sa ovim imenom se
addvaultwizard.new.locationDoesNotExist=Direktorijum na datoj lokaciji ne postoji ili mu se ne može pristupiti
addvaultwizard.new.locationIsNotWritable=Nemate pristup pisanju na datoj lokaciji
addvaultwizard.new.locationIsOk=Prikladna lokacija za vaš sef
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Napravi sef
addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći da pristupite vašim podacima bez vaše lozinke. Da li želite rezervni ključ u slučaju gubitka lozinke?
@@ -235,6 +234,4 @@ vaultOptions.masterkey.changePasswordBtn=Promena lozinke
# Quit
# Forced Quit
# Update Reminder
# Forced Quit
+2 -33
View File
@@ -20,11 +20,6 @@ error.description=Hoppsan! Cryptomator stötte på något oväntat. Du kan leta
error.hyperlink.lookup=Slå upp detta fel
error.hyperlink.report=Rapportera fel
error.technicalDetails=Detaljer:
error.existingSolutionDescription=Cryptomator förväntade sig inte att det här skulle hända. Men vi hittade en befintlig lösning för detta fel. Ta en titt på följande länk.
error.hyperlink.solution=Se lösningen
error.lookupPermissionMessage=Cryptomator kan leta efter en lösning för detta problem på Internet. Detta kommer att skicka en förfrågan till vår problemdatabas från din IP-adress.
error.dismiss=Avfärda
error.lookUpSolution=Sök efter lösning
# Defaults
defaults.vault.vaultName=Valv
@@ -64,12 +59,6 @@ addvaultwizard.new.validCharacters.message=Valvets namn kan innehålla följande
addvaultwizard.new.validCharacters.chars=Ordtecken (t ex. a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Siffror
addvaultwizard.new.validCharacters.dashes=Bindestreck (%s) eller understrykningstecken (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Visa expertinställningar
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Ange ett värde mellan 36 och 220 (standard 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Öppna dokumentationen för att lära dig mer.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximal längd på krypterade filnamn
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valid
### Password
addvaultwizard.new.createVaultBtn=Skapa Valv
addvaultwizard.new.generateRecoveryKeyChoice=Du kommer inte ha tillgång till din data utan ditt lösenord. Vill du skapa en återställningsnyckel, ifall du tappar bort ditt lösenord?
@@ -137,11 +126,7 @@ unlock.success.revealBtn=Visa enhet
unlock.error.customPath.message=Det går inte att montera valvet på utpekad sökväg
unlock.error.customPath.description.notSupported=Om du vill fortsätta använda den anpassade sökvägen, gå till inställningarna och välj en volymtyp som stöder den. Annars går du till valvalternativen och väljer en monteringspunkt som stöds.
unlock.error.customPath.description.notExists=Den anpassade monteringssökvägen finns inte. Skapa den antingen i ditt lokala filsystem eller ändra den i valvalternativen.
unlock.error.customPath.description.inUse=Enhetsbokstaven eller anpassad monteringsväg "%s" används redan.
unlock.error.customPath.description.hideawayNotDir=Den temporära, dolda filen "%3$s" som användes för upplåsning kunde inte tas bort. Kontrollera filen och ta sedan bort den manuellt.
unlock.error.customPath.description.couldNotBeCleaned=Ditt valv kunde inte monteras till sökvägen "%s". Försök igen eller välj en annan sökväg.
unlock.error.customPath.description.notEmptyDir=Den anpassade monteringssökvägen "%s" är inte en tom mapp. Välj en tom mapp och försök igen.
unlock.error.customPath.description.generic=Den anpassade monteringssökvägen gick inte att använda. Felmeddelande: %2$s
unlock.error.customPath.description.generic=Den anpassade monteringssökvägen gick inte att använda. Felmeddelande: %s
## Hub
hub.noKeychain.message=Kan inte komma åt enhetsnyckeln
hub.noKeychain.description=För att låsa upp Hubb-valv krävs en enhetsnyckel, som är säkrad med hjälp av en nyckelring. För att fortsätta, aktivera ”%s” och välj en nyckelring i inställningarna.
@@ -297,9 +282,6 @@ preferences.volume.tcp.port=TCP-port
preferences.volume.supportedFeatures=Den valda volymtypen stöder följande funktioner:
preferences.volume.feature.mountAuto=Automatiskt val av monteringspunkt
preferences.volume.feature.mountToDir=Utpekad katalog som monteringspunkt
preferences.volume.feature.mountToDriveLetter=Enhetsbokstav som monteringspunkt
preferences.volume.feature.mountFlags=Anpassade monteringsalternativ
preferences.volume.feature.readOnly=Skrivskyddat enhetspunkt
## Updates
preferences.updates=Uppdateringar
preferences.updates.currentVersion=Nuvarande version: %s
@@ -380,7 +362,6 @@ main.vaultDetail.passwordSavedInKeychain=Lösenord sparat
main.vaultDetail.unlockedStatus=UPPLÅST
main.vaultDetail.accessLocation=Valvets innehåll kan nås härifrån:
main.vaultDetail.revealBtn=Visa enhet
main.vaultDetail.copyUri=Kopiera URI
main.vaultDetail.lockBtn=Lås
main.vaultDetail.bytesPerSecondRead=Läs:
main.vaultDetail.bytesPerSecondWritten=Skriv:
@@ -430,17 +411,13 @@ vaultOptions.general.startHealthCheckBtn=Starta hälsokontroll
## Mount
vaultOptions.mount=Montering
vaultOptions.mount.info=Val beror på enhetstyp.
vaultOptions.mount.linkToPreferences=Öppna virtuella enhetsinställningar
vaultOptions.mount.readonly=Skrivskyddad
vaultOptions.mount.customMountFlags=Egna monterings-flaggor
vaultOptions.mount.winDriveLetterOccupied=upptagen
vaultOptions.mount.mountPoint=Monteringspunkt
vaultOptions.mount.mountPoint.auto=Välj en lämplig plats automatiskt
vaultOptions.mount.mountPoint.driveLetter=Använd tilldelad enhetsbokstav
vaultOptions.mount.mountPoint.custom=Använd vald mapp
vaultOptions.mount.mountPoint.directoryPickerButton=Välj…
vaultOptions.mount.mountPoint.directoryPickerTitle=Välj mapp
## Master Key
vaultOptions.masterkey=Lösenord
vaultOptions.masterkey.changePasswordBtn=Ändra lösenord
@@ -502,12 +479,4 @@ quit.lockAndQuitBtn=Lås och avsluta
# Forced Quit
quit.forced.message=Vissa valv kunde inte låsas
quit.forced.description=Valvlåsningen blockerades av köade operationer eller öppna filer. Du kan framtvinga låsning av återstående valv, men att störa pågående operationer kan resultera i förlust av osparat data.
quit.forced.forceAndQuitBtn=Tvinga och avsluta
# Update Reminder
updateReminder.title=Sök efter uppdateringar
updateReminder.message=Sök efter uppdateringar?
updateReminder.description=Håll dig uppdaterad med nya funktioner, buggfixar och säkerhetsförbättringar. Vi rekommenderar att automatiskt söka efter uppdateringar.
updateReminder.notNow=Inte nu
updateReminder.yesOnce=Ja, en gång
updateReminder.yesAutomatically=Ja, automatiskt
quit.forced.forceAndQuitBtn=Tvinga och avsluta
@@ -59,7 +59,6 @@ addvaultwizard.new.validCharacters.message=Jina la kuhifadhi linaweza kuwa na he
addvaultwizard.new.validCharacters.chars=Vibambo vya maneno (k.m. a, ж au 수)
addvaultwizard.new.validCharacters.numbers=Namba
addvaultwizard.new.validCharacters.dashes=Kistariungio (%s) au kistari (%s)
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Unda Kuba
addvaultwizard.new.generateRecoveryKeyChoice=Hutaweza kufikia data yako bila neno la siri lako. Unataka ufunguo wa kurejesha kwa kesi unayopoteza neno lako la siri?
@@ -127,6 +126,7 @@ unlock.success.revealBtn=Fichua Kiendeshaji
unlock.error.customPath.message=Haiwezi kupachika kuba kwenye njia maalum
unlock.error.customPath.description.notSupported=Ikiwa ungependa kuendelea kutumia njia maalum, tafadhali nenda kwa mapendeleo na uchague aina ya sauti inayoitumia. Vinginevyo, nenda kwa chaguo za kuba na uchague sehemu ya kupachika inayotumika.
unlock.error.customPath.description.notExists=Njia maalum ya kupachika haipo. Iunde katika mfumo wako wa faili wa karibu au ubadilishe katika chaguzi za kuba.
unlock.error.customPath.description.generic=Umechagua njia maalum ya kupachika kwa kuba hii, lakini kuitumia imeshindwa na ujumbe: %s
## Hub
hub.noKeychain.message=Imeshindwa kufikia ufunguo wa kifaa
hub.noKeychain.description=Ili kufungua kuba za Hub, ufunguo wa kifaa unahitajika, ambao hulindwa kwa kutumia mnyororo wa vitufe. Ili kuendelea, washa "%s" na uchague mnyororo wa vitufe katika mapendeleo.
@@ -476,6 +476,4 @@ quit.lockAndQuitBtn=Funga na Acha
# Forced Quit
quit.forced.message=Baadhi ya kuba hazikuweza kufungwa
quit.forced.description=Kufunga kuba kulizuiwa na shughuli zinazosubiri au kufungua faili. Unaweza kulazimisha kufunga vyumba vilivyosalia, hata hivyo kukatiza I/O kunaweza kusababisha upotevu wa data ambayo haijahifadhiwa.
quit.forced.forceAndQuitBtn=Lazimisha na Uache
# Update Reminder
quit.forced.forceAndQuitBtn=Lazimisha na Uache
@@ -53,7 +53,6 @@ addvaultwizard.new.fileAlreadyExists=பெட்டகம் பெயருட
addvaultwizard.new.locationDoesNotExist=குறிப்பிட்ட பாதையில் ஒரு கோப்பகம் இல்லை அல்லது அணுக முடியாது
addvaultwizard.new.locationIsNotWritable=குறிப்பிடப்பட்ட பாதையில் எழுதுவதற்கான அணுகல் இல்லை
addvaultwizard.new.locationIsOk=உங்கள் பெட்டகத்திற்கு ஏற்ற இடம்
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=பெட்டகத்தை உருவாக்கவும்
addvaultwizard.new.generateRecoveryKeyChoice=உங்கள் கடவுச்சொல் இல்லாமல் உங்கள் தரவை அணுக முடியாது. உங்கள் கடவுச்சொல்லை இழந்தால் மீட்டெடுப்பு விசை தேவையா?
@@ -301,6 +300,4 @@ quit.lockAndQuitBtn=பூட்டு மற்றும் வெளியே
# Forced Quit
quit.forced.message=சில பெட்டகங்களை பூட்ட முடியவில்லை
quit.forced.description=நிலுவையில் உள்ள செயல்பாடுகள் அல்லது திறந்த கோப்புகளால் பெட்டகங்களைப் பூட்டுவது தடுக்கப்பட்டது. மீதமுள்ள பெட்டகங்களை நீங்கள் கட்டாயப்படுத்தலாம், இருப்பினும் I/O குறுக்கிடுவது சேமிக்கப்படாத தரவை இழக்க நேரிடும்.
quit.forced.forceAndQuitBtn=கட்டாயப்படுத்தி வெளியேறு
# Update Reminder
quit.forced.forceAndQuitBtn=கட்டாயப்படுத்தி வெளியேறு
@@ -14,7 +14,6 @@
## New
### Name
### Location
### Expert Settings
### Password
### Information
## Existing
@@ -110,6 +109,4 @@ preferences.interface.theme.light=కాంతి
# Quit
# Forced Quit
# Update Reminder
# Forced Quit
@@ -53,7 +53,6 @@ addvaultwizard.new.fileAlreadyExists=คำเตือน: มีชื่อ
addvaultwizard.new.locationDoesNotExist=ไม่มีไดเรกทอรีในตำแหน่งที่คุณเลือก หรือไม่สามารถเข้าถึงได้
addvaultwizard.new.locationIsNotWritable=ไม่มีสิทธิ์ในการเขียนตำแหน่งที่คุณเลือก
addvaultwizard.new.locationIsOk=ตำแหน่งนี้เหมาะสมสำหรับ Vault ของคุณ
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=สร้าง Vault
addvaultwizard.new.generateRecoveryKeyChoice=หากคุณลืมรหัสผ่าน คุณจะไม่สามารถเข้าถึงข้อมูลเหล่านี้ได้ คุณต้องการที่จะสร้างรหัสกู้คืนหรือไม่?
@@ -175,6 +174,4 @@ vaultOptions.mount.mountPoint.directoryPickerButton=เลือก...
# Quit
# Forced Quit
# Update Reminder
# Forced Quit
+9 -29
View File
@@ -15,13 +15,11 @@ generic.button.next=İleri
generic.button.print=Yazdır
# Error
error.message=Bir hata oluştu
error.description=Cryptomator bunun olmasını beklemiyordu. Bu hata için mevcut çözümlere bakabilirsiniz. Ya da henüz bildirilmediyse, bunu raporlamaktan çekinmeyin.
error.hyperlink.lookup=Bu hatayı araştır
error.message=Hata: %s
error.description=Uups! Cryptomator bunun olmasını beklemiyordu. Bu hata için mevcut çözümlere bakabilirsiniz. Ya da henüz bildirilmediyse, bunu raporlamaktan çekinmeyin.
error.hyperlink.lookup=Bu hatayı ara
error.hyperlink.report=Bu hatayı bildir
error.technicalDetails=Detaylar:
error.existingSolutionDescription=Cryptomator bunun olmasını beklemiyordu. Ancak bu hata için hali hazırda bir çözüm olduğunu bulduk. Lütfen aşağıdaki bağlantıya göz atın.
error.hyperlink.solution=Çözüme bak
# Defaults
defaults.vault.vaultName=Kasa
@@ -48,7 +46,7 @@ addvaultwizard.new.namePrompt=Kasa Adı
addvaultwizard.new.locationInstruction=Cryptomator kasanızın şifreli dosyalarını nerede depolasın?
addvaultwizard.new.locationLabel=Depolama konumu
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Diğer konum
addvaultwizard.new.directoryPickerLabel=Özel Konum
addvaultwizard.new.directoryPickerButton=Seç…
addvaultwizard.new.directoryPickerTitle=Dizin Seç
addvaultwizard.new.fileAlreadyExists=Kasa adına sahip bir dosya veya dizin zaten mevcut
@@ -61,12 +59,6 @@ addvaultwizard.new.validCharacters.message=Kasa adı aşağıdaki karakterleri i
addvaultwizard.new.validCharacters.chars=Kelime karakterleri (örn. a, ж veya 수)
addvaultwizard.new.validCharacters.numbers=Sayılar
addvaultwizard.new.validCharacters.dashes=Tire (%s) veya alt çizgi (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Uzman düzeyi ayarları etkinleştir
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=36 ile 220 arasında bir değer girin (varsayılan 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Daha fazlasını öğrenmek için dökümantasyonu açın.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Şifrelenmiş dosya isimleri için maksimum uzunluk
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Geçerli
### Password
addvaultwizard.new.createVaultBtn=Kasa Oluştur
addvaultwizard.new.generateRecoveryKeyChoice=Şifreniz olmadan verilerinize erişemeyeceksiniz. Şifrenizi kaybetmeniz durumunda kullanabileceğiniz bir kurtarma anahtarı ister misiniz?
@@ -118,10 +110,10 @@ forgetPassword.confirmBtn=Şifreyi Unut
# Unlock
unlock.title="%s" kilidini aç
unlock.passwordPrompt="%s" için şifre girin:
unlock.savePassword=Şifreyi hatırla
unlock.unlockBtn=Kilit aç
unlock.savePassword=Şifreyi Hatırla
unlock.unlockBtn=Kilidi Aç
## Select
unlock.chooseMasterkey.message=Master anahtar dosyası bulunamadı
unlock.chooseMasterkey.message=Ana anahtar dosyası bulunamadı
unlock.chooseMasterkey.description=Bu kasa için masterkey dosyası beklenen konumda bulunamadı. Lütfen anahtar dosyasını manuel olarak seçin.
unlock.chooseMasterkey.filePickerTitle=Masterkey Dosyasını Seç
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Ana anahtarı
@@ -134,11 +126,7 @@ unlock.success.revealBtn=Sürücüyü Göster
unlock.error.customPath.message=Kasa özel yola bağlanamıyor
unlock.error.customPath.description.notSupported=Özel yolu kullanmaya devam etmek istiyorsanız, lütfen tercihlere gidin ve onu destekleyen bir cilt türü seçin. Aksi takdirde kasa seçeneklerine gidin ve desteklenen bir bağlama noktası seçin.
unlock.error.customPath.description.notExists=Özel bağlama yolu mevcut değil. Ya yerel dosya sisteminizde oluşturun ya da kasa seçeneklerinde değiştirin.
unlock.error.customPath.description.inUse=Sürücü harfi veya özel montaj yolu "%s" zaten kullanımda.
unlock.error.customPath.description.hideawayNotDir=Kilidi açmak için kullanılan geçici, gizli dosya "%3$s" kaldırılamadı. Lütfen dosyayı kontrol edin ve elle silin.
unlock.error.customPath.description.couldNotBeCleaned=Kasanız "%s" yoluna monte edilemedi. Lütfen tekrar deneyin veya farklı bir montaj yolu seçin.
unlock.error.customPath.description.notEmptyDir=Özel montaj yolu "%s" boş bir klasör değil. Lütfen boş bir klasör seçip tekrar deneyin.
unlock.error.customPath.description.generic=Bu kasa için özel bir montaj yolu seçtiniz ancak bu yolun kullanımı şu ileti ile başarısız oldu: %2$s
unlock.error.customPath.description.generic=Bu kasa için özel bir bağlama yolu seçtiniz, ancak bunu kullanmak şu mesajla başarısız oldu: %s
## Hub
hub.noKeychain.message=Cihaz anahtarına erişilemiyor
hub.noKeychain.description=Hub kasalarının kilidini açmak için, bir anahtarlık kullanılarak güvenliği sağlanan bir cihaz anahtarı gerekir. Devam etmek için "%s"yi etkinleştirin ve tercihlerde bir anahtarlık seçin.
@@ -499,12 +487,4 @@ quit.lockAndQuitBtn=Kilitle ve Çık
# Forced Quit
quit.forced.message=Bazı kasalar kilitlenemedi
quit.forced.description=Kasaların kilitlenmesi, bekleyen işlemler veya açık dosyalar tarafından engellendi. Kalan kasaları zorla kilitleyebilirsiniz, ancak G/Ç'nin kesilmesi kaydedilmemiş verilerin kaybına neden olabilir.
quit.forced.forceAndQuitBtn=Zorla ve Çık
# Update Reminder
updateReminder.title=Güncelleme Kontrolü
updateReminder.message=Güncellemeleri Denetle?
updateReminder.description=Yeni özellikler, hata düzeltmeleri ve güvenlik iyileştirmeleri ile güncel kalın. Güncellemelerin otomatik olarak kontrol edilmesini öneririz.
updateReminder.notNow=Şimdi değil
updateReminder.yesOnce=Evet, tek seferlik
updateReminder.yesAutomatically=Evet, otomatik olarak
quit.forced.forceAndQuitBtn=Zorla ve Çık
@@ -59,7 +59,6 @@ addvaultwizard.new.validCharacters.message=Назва сховища може м
addvaultwizard.new.validCharacters.chars=Літери (напр. a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Цифри
addvaultwizard.new.validCharacters.dashes=Дефіс (%s) або підкреслення (%s)
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Створити сховище
addvaultwizard.new.generateRecoveryKeyChoice=Ви не зможете отримати доступ до своїх даних, якщо втратите пароль. Хочете створити ключ відновлення на випадок втрати паролю?
@@ -127,6 +126,7 @@ unlock.success.revealBtn=Розкрити Диск
unlock.error.customPath.message=Не вдалося змонтувати сховище за вказаним шляхом
unlock.error.customPath.description.notSupported=Якщо ви хочете надалі використовувати власний шлях, будь ласка, перейдіть до налаштувань та виберіть тип тому, що його підтримує. В іншому випадку перейдіть до параметрів сховища та оберіть точку монтування, що підтримується.
unlock.error.customPath.description.notExists=Вказаний шлях підключення не існує. Створіть його в локальній файловій системі або змініть його в параметрах сховища.
unlock.error.customPath.description.generic=Ви створили власний шлях підключення для цього сховища, але скористатися ним не вдалося. Повідомлення про помилку: %s
## Hub
hub.noKeychain.message=Не вдалося отримати доступ до ключа пристрою
hub.noKeychain.description=Щоб розблокувати Hub vaults, необхідний ключ пристрою, який захищено за допомогою ланцюга ключів. Щоб продовжити, увімкніть “%s” та виберіть ланцюг ключів у налаштуваннях.
@@ -358,6 +358,4 @@ convertVault.hubToPassword.success.description=Тепер ви можете ро
# Quit
# Forced Quit
# Update Reminder
# Forced Quit
+11 -105
View File
@@ -20,8 +20,6 @@ error.description=Oops! Cryptomator không mong đợi điều này xảy ra. B
error.hyperlink.lookup=Tìm kiếm lỗi này
error.hyperlink.report=Báo cáo lỗi
error.technicalDetails=Chi tiết:
error.existingSolutionDescription=Cryptomator không mong đợi điều này xảy ra. Nhưng chúng tôi đã tìm thấy một giải pháp hiện có cho lỗi này. Vui lòng xem qua liên kết sau.
error.hyperlink.solution=Tra cứu giải pháp
# Defaults
defaults.vault.vaultName=Vault
@@ -61,7 +59,6 @@ addvaultwizard.new.validCharacters.message=Tên vault có thể chứa những k
addvaultwizard.new.validCharacters.chars=Các ký tự trong từ (ví dụ: a, ж hoặc 수)
addvaultwizard.new.validCharacters.numbers=Số
addvaultwizard.new.validCharacters.dashes=Dấu gạch ngang (%s) hoặc dấu gạch dưới (%s)
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Tạo Vault
addvaultwizard.new.generateRecoveryKeyChoice=Bạn sẽ không thể truy cập dữ liệu của mình nếu không có mật khẩu. Bạn có muốn có khóa khôi phục cho trường hợp mất mật khẩu không?
@@ -85,7 +82,6 @@ addvault.new.readme.accessLocation.2=Đây là vị trí truy cập vault của
addvault.new.readme.accessLocation.3=Bất kỳ tệp nào được thêm vào đây sẽ được mã hóa bởi Cryptomator. Bạn có thể làm việc trên nó như trên bất kỳ ổ đĩa/thư mục nào khác. Đây chỉ là chế độ xem nội dung được giải mã của nó, các tệp của bạn luôn được mã hóa trên ổ cứng của bạn.
addvault.new.readme.accessLocation.4=Bạn hoàn toàn có thể xoá tập tin này.
## Existing
addvaultwizard.existing.instruction=Chọn tệp "vault.cryptomator" trong vault hiện tại của bạn. Nếu chỉ tồn tại một tệp có tên "masterkey.cryptomator", hãy chọn tệp đó để thay thế.
addvaultwizard.existing.chooseBtn=Chọn…
addvaultwizard.existing.filePickerTitle=Chọn Tập Tin Vault
addvaultwizard.existing.filePickerMimeDesc=Cryptomator Vault
@@ -117,7 +113,6 @@ unlock.savePassword=Nhớ mật khẩu
unlock.unlockBtn=Mở khoá
## Select
unlock.chooseMasterkey.message=Không tìm thấy tệp Masterkey
unlock.chooseMasterkey.description=Cryptomator không thể tìm thấy tệp khóa chính cho vault "%s". Vui lòng chọn tệp khoá theo cách thủ công.
unlock.chooseMasterkey.filePickerTitle=Chọn tệp Masterkey
unlock.chooseMasterkey.filePickerMimeDesc=Khóa chính Cryptomator
## Success
@@ -126,13 +121,7 @@ unlock.success.description=Nội dung trong vault "%s" đã có thể được t
unlock.success.rememberChoice=Ghi nhớ lựa chọn, không hiện lại
unlock.success.revealBtn=Hiển thị Ổ đĩa
## Failure
unlock.error.customPath.message=Không thể gắn vault vào đường dẫn tùy chỉnh
unlock.error.customPath.description.notSupported=Nếu bạn muốn tiếp tục sử dụng đường dẫn tuỳ chỉnh, vui lòng chuyển đến tuỳ chọn và chọn loại ổ đĩa hỗ trợ nó. Nếu không, hãy chuyển đến tuỳ chọn vault và chọn điểm gắn kết được hỗ trợ.
unlock.error.customPath.description.notExists=Đường dẫn gắn kết tuỳ chỉnh không tồn tại. Tạo nó trong hệ thống tệp cục bộ của bạn hoặc thay đổi nó trong các tuỳ chọn vault.
## Hub
hub.noKeychain.message=Không thể truy cập khoá thiết bị
hub.noKeychain.description=Để mở khoá vault Hub, cần có khoá thiết bị, khoá này được bảo mật bằng chuỗi khoá. Để tiếp tục, hãy bật “%s” và chọn một chuỗi khoá trong tuỳ chọn.
hub.noKeychain.openBtn=Mở Tuỳ chọn
### Waiting
hub.auth.message=Đang chờ xác thực…
hub.auth.description=Bạn sẽ tự động được chuyển hướng đến trang đăng nhập.
@@ -142,7 +131,6 @@ hub.receive.message=Đang xử lý phản hồi…
hub.receive.description=Cryptomator đang nhận và xử lý phản hồi từ Hub. Vui lòng chờ.
### Register Device
hub.register.message=Tên thiết bị bắt buộc
hub.register.description=Đây dường như là lần truy cập Hub đầu tiên từ thiết bị này. Để xác định nó để cấp quyền truy cập, bạn cần đặt tên cho thiết bị này.
hub.register.nameLabel=Tên thiết bị
hub.register.occupiedMsg=Tên đã sử dụng
hub.register.registerBtn=Xác nhận
@@ -156,13 +144,10 @@ hub.registerFailed.description=Lỗi phát sinh trong quá trình đặt tên.
hub.unauthorized.message=Truy cập bị từ chối
hub.unauthorized.description=Thiết bị của bạn chưa được phép truy cập vault này. Yêu cầu chủ sở hữu cấp phép.
### License Exceeded
hub.invalidLicense.message=Giấy phép Hub không hợp lệ
hub.invalidLicense.description=Phiên bản Cryptomator Hub của bạn có giấy phép không hợp lệ. Vui lòng thông báo cho quản trị viên Hub để nâng cấp hoặc gia hạn giấy phép.
# Lock
## Force
lock.forced.message=Khóa thất bại
lock.forced.description=Việc khoá "%s" đã bị chặn bởi các hoạt động đang chờ xử lý hoặc các tệp đang mở. Bạn có thể buộc khoá vault này, tuy nhiên, việc gián đoạn I/O có thể dẫn đến mất dữ liệu chưa lưu.
lock.forced.retryBtn=Thử lại
lock.forced.forceBtn=Ép Khoá
## Failure
@@ -173,30 +158,21 @@ lock.fail.description=Không thể khoá vault "%s". Hãy chắc rằng phần v
migration.title=Nâng cấp Vault
## Start
migration.start.header=Nâng cấp Vault
migration.start.text=Để mở vault "%s" của bạn trong phiên bản Cryptomator mới này, vault cần được nâng cấp lên định dạng mới hơn. Trước khi làm điều này, bạn nên biết những điều sau đây:
migration.start.remarkUndone=Không thể hoàn tác nâng cấp này.
migration.start.remarkVersions=Các phiên bản cũ hơn của Cryptomator sẽ không thể mở vault đã nâng cấp.
migration.start.remarkCanRun=Bạn phải chắc chắn rằng mọi thiết bị mà bạn truy cập vào vault đều có thể chạy phiên bản Cryptomator này.
migration.start.remarkSynced=Bạn phải đảm bảo rằng vault của mình được đồng bộ hoá hoàn toàn trên thiết bị này và trên các thiết bị khác trước khi nâng cấp.
migration.start.confirm=Tôi đã đọc và hiểu thông tin trên
## Run
migration.run.enterPassword=Nhập mật khẩu cho "%s"
migration.run.startMigrationBtn=Chuyển Vault
migration.run.progressHint=Việc này có thể mất một chút thời gian…
## Success
migration.success.nextStepsInstructions=Đã nâng cấp "%s" thành công.\nBây giờ bạn có thể mở khóa vault của mình.
migration.success.unlockNow=Mở khóa bây giờ
## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Hệ thống tệp không được hỗ trợ
migration.error.missingFileSystemCapabilities.description=Quá trình nâng cấp chưa được bắt đầu vì vault của bạn được đặt trên một hệ thống tệp không đủ khả năng.
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=Hệ thống tệp không hỗ trợ tên tệp dài.
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Hệ thống tệp không hỗ trợ đường dẫn dài.
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Hệ thống tệp không cho phép đọc.
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Hệ thống tệp không cho phép ghi vào.
## Impossible
migration.impossible.heading=Không thể di chuyển vault
migration.impossible.reason=Vault không thể được nâng cấp tự động vì vị trí lưu trữ hoặc điểm truy cập của nó không tương thích.
migration.impossible.moreInfo=Vault vẫn có thể được mở bằng phiên bản cũ hơn. Để biết hướng dẫn về cách nâng cấp vault theo cách thủ công, hãy truy cập
# Health Check
## Start
@@ -213,38 +189,12 @@ health.fail.ioError=Đã xảy ra lỗi khi truy cập và đọc tệp config.
health.fail.parseError=Lỗi xuất hiện khi phân tích cú pháp trong cấu hình của vault.
health.fail.moreInfo=Thêm thông tin
## Check Selection
health.checkList.description=Chọn kiểm tra trong danh sách bên trái hoặc sử dụng các nút bên dưới.
health.checkList.selectAllButton=Chọn Tất cả Kiểm tra
health.checkList.deselectAllButton=Bỏ chọn Tất cả Kiểm tra
health.check.runBatchBtn=Chạy Kiểm tra Đã chọn
## Detail view
health.check.detail.noSelectedCheck=Để biết kết quả, hãy chọn kiểm tra sức khoẻ đã hoàn thành trong danh sách bên trái.
health.check.detail.checkScheduled=Việc kiểm tra đã được lên lịch.
health.check.detail.checkRunning=Kiểm tra hiện đang chạy…
health.check.detail.checkSkipped=Kiểm tra không được chọn để chạy.
health.check.detail.checkFinished=Việc kiểm tra đã kết thúc thành công.
health.check.detail.checkFinishedAndFound=Kiểm tra chạy xong. Vui lòng xem lại kết quả.
health.check.detail.checkFailed=Kiểm tra đã thoát do lỗi.
health.check.detail.checkCancelled=Việc kiểm tra đã bị huỷ bỏ.
health.check.detail.listFilters.label=Lọc
health.check.detail.fixAllSpecificBtn=Sửa tất cả các loại
health.check.exportBtn=Xuất Báo Cáo
## Result view
health.result.severityFilter.all=Mức độ nghiêm trọng - Tất cả
health.result.severityFilter.good=Tốt
health.result.severityFilter.info=Thông tin
health.result.severityFilter.warn=Cảnh báo
health.result.severityFilter.crit=Nghiêm trọng
health.result.severityTip.good=Mức độ nghiêm trọng: Tốt\nCấu trúc vault bình thường.
health.result.severityTip.info=Mức độ nghiêm trọng: Thông tin\nCấu trúc vault nguyên vẹn, đề xuất sửa chữa.
health.result.severityTip.warn=Mức độ nghiêm trọng: Cảnh báo\nCấu trúc vault bị hỏng, rất nên sửa chữa.
health.result.severityTip.crit=Mức độ nghiêm trọng: Nghiêm trọng\nCấu trúc vault bị hỏng, mất dữ liệu được xác định.
health.result.fixStateFilter.all=Trạng thái sửa lỗi - Tất cả
health.result.fixStateFilter.fixable=Có thể sửa chữa
health.result.fixStateFilter.notFixable=Không thể sửa chữa
health.result.fixStateFilter.fixing=Đang sửa…
health.result.fixStateFilter.fixed=Đã sửa
health.result.fixStateFilter.fixFailed=Sửa lỗi không thành công
## Fix Application
health.fix.fixBtn=Sửa
health.fix.successTip=Sửa thành công
@@ -276,17 +226,7 @@ preferences.interface.showMinimizeButton=Hiện nút thu nhỏ
preferences.interface.showTrayIcon=Hiển thị biểu tượng khay (yêu cầu khởi động lại)
## Volume
preferences.volume=Ổ lưu trữ ảo
preferences.volume.type=Loại Ổ đĩa
preferences.volume.type.automatic=Tự động
preferences.volume.docsTooltip=Mở tài liệu để tìm hiểu thêm về các loại ổ đĩa khác nhau.
preferences.volume.fuseRestartRequired=Để áp dụng các thay đổi, Cryptomator cần được khởi động lại.
preferences.volume.tcp.port=Cổng TCP
preferences.volume.supportedFeatures=Loại ổ đĩa đã chọn hỗ trợ các tính năng sau:
preferences.volume.feature.mountAuto=Lựa chọn điểm gắn kết tự động
preferences.volume.feature.mountToDir=Thư mục tuỳ chỉnh làm điểm gắn kết
preferences.volume.feature.mountToDriveLetter=Ký tự ổ đĩa làm điểm gắn kết
preferences.volume.feature.mountFlags=Tuỳ chọn gắn kết tuỳ chỉnh
preferences.volume.feature.readOnly=Gắn kết chỉ đọc
## Updates
preferences.updates=Cập nhật
preferences.updates.currentVersion=Phiên bản hiện tại: %s
@@ -308,35 +248,27 @@ preferences.about=Giới thiệu
stats.title=Thống kê về %s
stats.cacheHitRate=Tỷ lệ truy cập bộ nhớ cache
## Read
stats.read.throughput.idle=Đọc: nhàn rỗi
stats.read.throughput.kibs=Đọc: %.2f KiB/s
stats.read.throughput.idle=Đọc: không có
stats.read.throughput.mibs=Đọc: %.2f MiB/s
stats.read.total.data.none=Dữ liệu đã đọc: -
stats.read.total.data.kib=Dữ liệu đã đọc: %.1f KiB
stats.read.total.data.mib=Dữ liệu đã đọc: %.1f MiB
stats.read.total.data.gib=Dữ liệu đã đọc: %.1f GiB
stats.decr.total.data.none=Dữ liệu đã giải mã: -
stats.decr.total.data.kib=Dữ liệu đã giải mã: %.1f KiB
stats.decr.total.data.mib=Dữ liệu đã giải mã: %.1f MiB
stats.decr.total.data.gib=Dữ liệu đã giải mã: %.1f GiB
stats.decr.total.data.none=Dữ liệu được giải mã: -
stats.decr.total.data.mib=Dữ liệu được giải mã: %.1f MiB
stats.decr.total.data.gib=Dữ liệu được giải mã: %.1f GiB
stats.read.accessCount=Tổng đọc: %d
## Write
stats.write.throughput.idle=Ghi: nhàn rỗi
stats.write.throughput.kibs=Ghi: %.2f KiB/s
stats.write.throughput.idle=Ghi: tạm ngưng
stats.write.throughput.mibs=Ghi: %.2f MiB/s
stats.write.total.data.none=Dữ liệu đã ghi: -
stats.write.total.data.kib=Dữ liệu đã ghi: %.1f KiB
stats.write.total.data.mib=Dữ liệu đã ghi: %.1f MiB
stats.write.total.data.gib=Dữ liệu đã ghi: %.1f GiB
stats.encr.total.data.none=Dữ liệu đã mã h: -
stats.encr.total.data.kib=Dữ liệu đã mã h: %.1f KiB
stats.encr.total.data.mib=Dữ liệu đã mã h: %.1f MiB
stats.encr.total.data.gib=Dữ liệu đã mã hoá: %.1f GiB
stats.encr.total.data.none=Dữ liệu được mã hóa: -
stats.encr.total.data.mib=Dữ liệu được mã hóa: %.1f MiB
stats.encr.total.data.gib=Dữ liệu được mã hóa: %.1f GiB
stats.write.accessCount=Tổng ghi: %d
## Accesses
stats.access.current=Truy cập: %d
stats.access.total=Tổng số lần truy cập: %d
# Main Window
@@ -367,18 +299,12 @@ main.vaultDetail.passwordSavedInKeychain=Đã lưu mật khẩu
main.vaultDetail.unlockedStatus=ĐÃ MỞ KHÓA
main.vaultDetail.accessLocation=Nội dung trong vault của bạn có thể truy cập ở đây:
main.vaultDetail.revealBtn=Hiển thị Ổ đĩa
main.vaultDetail.copyUri=Sao chép URI
main.vaultDetail.lockBtn=Khoá
main.vaultDetail.bytesPerSecondRead=Đọc:
main.vaultDetail.bytesPerSecondWritten=Ghi:
main.vaultDetail.throughput.idle=nhàn rỗi
main.vaultDetail.throughput.kbps=%.1f Kib/s
main.vaultDetail.throughput.idle=chờ
main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Thống kê Vault
main.vaultDetail.locateEncryptedFileBtn=Định vị Tệp Đã mã hoá
main.vaultDetail.locateEncryptedFileBtn.tooltip=Chọn một tệp từ vaule của bạn để xác định vị trí đối tác được mã hoá của nó
main.vaultDetail.encryptedPathsCopied=Đường dẫn Đã sao chép vào Bảng tạm!
main.vaultDetail.filePickerTitle=Chọn Tệp Bên trong Vault
### Missing
main.vaultDetail.missing.info=Cryptomator không thể tìm thấy vault tại đường dẫn này.
main.vaultDetail.missing.recheck=Kiểm tra lại
@@ -395,7 +321,6 @@ main.vaultDetail.error.windowTitle=Lỗi khi tải dữ liệu
# Wrong File Alert
wrongFileAlert.title=Cách mã hóa tệp
wrongFileAlert.message=Bạn đã cố gắng mã hóa các tệp này?
wrongFileAlert.description=Với mục đích này, Cryptomator cung cấp một ổ đĩa trong trình quản lý tệp hệ thống của bạn.
wrongFileAlert.instruction.0=Để mã hóa tệp, hãy làm theo các bước sau:
wrongFileAlert.instruction.1=1. Mở Vault của bạn.
wrongFileAlert.instruction.2=2. Bấm vào "Hiển thị" để mở ổ đĩa trên trình quản lý tệp.
@@ -406,7 +331,7 @@ wrongFileAlert.link=Để được hỗ trợ thêm, hãy truy cập
## General
vaultOptions.general=Chung
vaultOptions.general.vaultName=Tên Vault
vaultOptions.general.autoLock.lockAfterTimePart1=Kh khi nhàn rỗi trong
vaultOptions.general.autoLock.lockAfterTimePart1=Khóa khi không hoạt động trong
vaultOptions.general.autoLock.lockAfterTimePart2=phút
vaultOptions.general.unlockAfterStartup=Mở khóa vault khi khởi động Cryptomator
vaultOptions.general.actionAfterUnlock=Sau khi mở khóa thành công
@@ -416,18 +341,12 @@ vaultOptions.general.actionAfterUnlock.ask=Hỏi
vaultOptions.general.startHealthCheckBtn=Bắt đầu Kiểm tra sức khỏe
## Mount
vaultOptions.mount=Gắn kết
vaultOptions.mount.info=Các tuỳ chọn phụ thuộc vào loại ổ đĩa đã chọn.
vaultOptions.mount.linkToPreferences=Mở tuỳ chọn ổ đĩa ảo
vaultOptions.mount.readonly=Chỉ đọc
vaultOptions.mount.customMountFlags=Cờ gắn kết tuỳ chỉnh
vaultOptions.mount.winDriveLetterOccupied=đã bị chiếm
vaultOptions.mount.mountPoint=Đường dẫn gắn kết
vaultOptions.mount.mountPoint.auto=Tự động chọn một vị trí thích hợp
vaultOptions.mount.mountPoint.driveLetter=Sử dụng ký tự ổ đĩa được chỉ định
vaultOptions.mount.mountPoint.custom=Sử dụng thư mục đã chọn
vaultOptions.mount.mountPoint.directoryPickerButton=Chọn…
vaultOptions.mount.mountPoint.directoryPickerTitle=Chọn một thư mục
## Master Key
vaultOptions.masterkey=Mật khẩu
vaultOptions.masterkey.changePasswordBtn=Đổi mật khẩu
@@ -436,9 +355,6 @@ vaultOptions.masterkey.recoveryKeyExplanation=Khóa khôi phục là cách duy n
vaultOptions.masterkey.showRecoveryKeyBtn=Hiện Khóa Khôi Phục
vaultOptions.masterkey.recoverPasswordBtn=Đặt lại Mật khẩu
## Hub
vaultOptions.hub=Khôi phục
vaultOptions.hub.convertInfo=Bạn có thể sử dụng khoá khôi phục để chuyển đổi vault Hub này thành vault dựa-trên-mật-khẩu trong trường hợp khẩn cấp.
vaultOptions.hub.convertBtn=Chuyển đổi thành Vault Dựa-trên-Mật-khẩu
# Recovery Key
## Display Recovery Key
@@ -450,10 +366,7 @@ recoveryKey.display.StorageHints=Giữ ở một nơi rất an toàn, ví dụ:\
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=Đặt lại Mật khẩu
recoveryKey.recover.prompt=Nhập khoá khôi phục cho "%s":
recoveryKey.recover.correctKey=Đây là khóa khôi phục hợp lệ
recoveryKey.recover.wrongKey=Khoá phục hồi này thuộc về một vault khác
recoveryKey.recover.invalidKey=Khoá khôi phục này không hợp lệ
recoveryKey.printout.heading=Khóa Khôi phục Cryptomator\n"%s"\n
### Reset Password
recoveryKey.recover.resetBtn=Đặt lại
@@ -462,11 +375,6 @@ recoveryKey.recover.resetSuccess.message=Đặt lại mật khẩu thành công
recoveryKey.recover.resetSuccess.description=Bạn có thể mở khóa vault với mật khẩu mới.
# Convert Vault
convertVault.title=Chuyển đổi Vault
convertVault.convert.convertBtn.before=Chuyển đổi
convertVault.convert.convertBtn.processing=Đang chuyển đổi…
convertVault.success.message=Chuyển đổi thành công
convertVault.hubToPassword.success.description=Bây giờ bạn có thể mở khoá vault bằng mật khẩu đã chọn mà không cần truy cập Hub.
# New Password
newPassword.promptText=Nhập mật khẩu mới
@@ -489,6 +397,4 @@ quit.lockAndQuitBtn=Khóa và Thoát
# Forced Quit
quit.forced.message=Không thể khóa một số vault
quit.forced.description=Việc khoá vault đã bị chặn bởi các hoạt động đang chờ xử lý hoặc các tệp đang mở. Bạn có thể buộc khóa các vault còn lại, tuy nhiên việc làm gián đoạn đọc/ghi có thể dẫn đến mất dữ liệu chưa được lưu.
quit.forced.forceAndQuitBtn=Bắt buộc và Thoát
# Update Reminder
quit.forced.forceAndQuitBtn=Bắt buộc và Thoát
+2 -25
View File
@@ -20,11 +20,6 @@ error.description=糟糕!Cryptomator 未料到会发生这种情况。您可
error.hyperlink.lookup=查找该错误
error.hyperlink.report=报告该错误
error.technicalDetails=详细信息:
error.existingSolutionDescription=Cryptomator 没有预料到会发生这种情况。但我们找到了一个现有的解决方案来解决这个错误。请查看以下链接。
error.hyperlink.solution=查找解决方案
error.lookupPermissionMessage=Cryptomator 可以在线查找这个问题的解决方案。这将从您的IP地址向我们的问题数据库发送一个请求。
error.dismiss=放弃
error.lookUpSolution=查找解决方案
# Defaults
defaults.vault.vaultName=保险库
@@ -64,12 +59,6 @@ addvaultwizard.new.validCharacters.message=保险库名称可包含以下字符
addvaultwizard.new.validCharacters.chars=字母字符(例如 a、ж 或 수)
addvaultwizard.new.validCharacters.numbers=位数
addvaultwizard.new.validCharacters.dashes=连字符 (%s) 或下划线 (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=启用专家设置
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=请输入 36-220 之间的数值(默认为 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=打开文档以了解更多信息
addvaultwizard.new.expertSettings.shorteningThreshold.title=加密文件名的最大长度
addvaultwizard.new.expertSettings.shorteningThreshold.valid=有效
### Password
addvaultwizard.new.createVaultBtn=创建保险库
addvaultwizard.new.generateRecoveryKeyChoice=如果丢失密码,您将无法访问您的数据。您想要创建一个恢复密钥以防您丢失密码吗?
@@ -137,11 +126,7 @@ unlock.success.revealBtn=显示驱动器
unlock.error.customPath.message=无法将保险库挂载到自定义路径
unlock.error.customPath.description.notSupported=如果您仍想使用自定义路径,请转至首选项并选择支持它的卷类型。否则,请转至保险库选项并选择受支持的挂载点
unlock.error.customPath.description.notExists=自定义挂载路径不存在,请在您的本地文件系统中创建它或在保险库选项中进行更改
unlock.error.customPath.description.inUse=盘符或自定义挂载路径「%s」已被使用。
unlock.error.customPath.description.hideawayNotDir=无法删除用于解锁的临时隐藏文件 '%3$s'。请检查该文件,然后手动删除。
unlock.error.customPath.description.couldNotBeCleaned=无法将您的保险库挂载到路径 "%s"。请重试或选择其他路径。
unlock.error.customPath.description.notEmptyDir=自定义挂载路径 "%s" 不是一个空文件夹。请选择一个空文件夹并重试。
unlock.error.customPath.description.generic=您为此保险库选择了自定义挂载路径,但使用它时出现了错误信息:%2$s。
unlock.error.customPath.description.generic=您已为此保险库选择了自定义挂载路径,但使用失败,错误消息:%s
## Hub
hub.noKeychain.message=无法访问设备密钥
hub.noKeychain.description=为了解锁 Hub 保险库,需要使用由钥匙串保护的设备密钥。若要继续,请启用“%s”并在首选项中选择一个钥匙串
@@ -502,12 +487,4 @@ quit.lockAndQuitBtn=锁定并退出
# Forced Quit
quit.forced.message=无法锁定某些保险库
quit.forced.description=锁定保险库因进行中的操作或已打开的文件被阻止。您可以强制锁定剩余的保险库,不过请注意中断读写可能导致未保存的数据丢失
quit.forced.forceAndQuitBtn=强制并退出
# Update Reminder
updateReminder.title=检查更新
updateReminder.message=检查软件更新?
updateReminder.description=随时跟进最新功能、错误修复和安全性能提升。我们建议自动检查更新
updateReminder.notNow=暂不
updateReminder.yesOnce=是的,仅此次
updateReminder.yesAutomatically=是的,自动
quit.forced.forceAndQuitBtn=强制并退出
@@ -20,8 +20,6 @@ error.description=糟糕!Cryptomator 發生了預期外的錯誤。你可以
error.hyperlink.lookup=搜尋此錯誤
error.hyperlink.report=報告此錯誤
error.technicalDetails=詳情:
error.existingSolutionDescription=Cryptomator 沒有預料到會發生這種情況。但我們找到了一個現有的解決方案來解決這個錯誤。請查看以下連結。
error.hyperlink.solution=尋找解決方案
# Defaults
defaults.vault.vaultName=加密庫
@@ -61,12 +59,6 @@ addvaultwizard.new.validCharacters.message=加密庫名稱可包含以下字元
addvaultwizard.new.validCharacters.chars=單詞字符 (例如 a、ж 或 수)
addvaultwizard.new.validCharacters.numbers=數字
addvaultwizard.new.validCharacters.dashes=連字符 (%s) 或下劃線 (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=啟用專家設定
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=請輸入介於 36 和 220 之間的值(默認為 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=開啟文件以瞭解更多。
addvaultwizard.new.expertSettings.shorteningThreshold.title=加密檔案名稱的最大長度
addvaultwizard.new.expertSettings.shorteningThreshold.valid=有效
### Password
addvaultwizard.new.createVaultBtn=建立加密庫
addvaultwizard.new.generateRecoveryKeyChoice=若遺失密碼,你將無法存取資料。你是否希望建立一組在遺失密碼時可用作復原的金鑰?
@@ -134,11 +126,7 @@ unlock.success.revealBtn=展示磁碟
unlock.error.customPath.message=無法掛載加密庫於此自定路徑
unlock.error.customPath.description.notSupported=若要繼續使用自定路徑,請在設定選取支援此自定路徑的空間/加密空間類型;或者,在加密庫選項中選擇一個受支援的掛載點。
unlock.error.customPath.description.notExists=自定路徑不存在。請在本機文件系統指定另一路徑或在加密庫選項中變更。
unlock.error.customPath.description.inUse=磁碟代號或自訂掛載路徑「%s」已被使用。
unlock.error.customPath.description.hideawayNotDir=無法移除用於解鎖的臨時隱藏檔案「%3$s」。請檢查該檔案,然後手動刪除。
unlock.error.customPath.description.couldNotBeCleaned=無法將您的保險庫掛載至路徑「%s」。請再試一次或選擇不同的路徑。
unlock.error.customPath.description.notEmptyDir=自訂掛載路徑「%s」不是一個空資料夾。請選擇一個空資料夾並重試。
unlock.error.customPath.description.generic=您為此保險庫選擇了自訂掛載路徑,但使用時出現了錯誤訊息:%2$s
unlock.error.customPath.description.generic=已為加密庫設定了自定路徑,但是運作時出現錯誤:%s
## Hub
hub.noKeychain.message=無法訪問設備密鑰
hub.noKeychain.description=為了解鎖 Hub 加密檔案庫需要一個裝置密鑰,該密鑰已被安全地保管在鑰匙串中。為了繼續進行,請啟用「%s」並在偏好設定中選擇一個鑰匙串。
@@ -499,12 +487,4 @@ quit.lockAndQuitBtn=鎖定並離開
# Forced Quit
quit.forced.message=無法鎖定某些加密庫
quit.forced.description=仍有未完成的操作或有開啟中的檔案以致無法鎖定。你可以強制鎖定這個加密庫,不過中斷讀寫可能會導致資料遺失或未被儲存。
quit.forced.forceAndQuitBtn=強制退出程式
# Update Reminder
updateReminder.title=檢查更新
updateReminder.message=檢查更新?
updateReminder.description=保持最新功能、錯誤修復和安全改進。我們建議自動檢查更新。
updateReminder.notNow=暫不
updateReminder.yesOnce=是,僅一次
updateReminder.yesAutomatically=是,自動
quit.forced.forceAndQuitBtn=強制退出程式
@@ -20,8 +20,6 @@ error.description=糟糕!Cryptomator 發生了預期外的錯誤。您可以
error.hyperlink.lookup=查找錯誤
error.hyperlink.report=回報錯誤
error.technicalDetails=詳情:
error.existingSolutionDescription=Cryptomator 沒有預料到會發生這種情況。但我們找到了一個現有的解決方案來解決這個錯誤。請查看以下連結。
error.hyperlink.solution=查詢解決方案
# Defaults
defaults.vault.vaultName=加密檔案庫
@@ -61,12 +59,6 @@ addvaultwizard.new.validCharacters.message=檔案庫名稱可包含以下字元
addvaultwizard.new.validCharacters.chars=單詞字符 (例如 a、ж 或 수)
addvaultwizard.new.validCharacters.numbers=數字
addvaultwizard.new.validCharacters.dashes=連字符 (%s) 或下劃線 (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=啟用專家設定
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=請輸入介於 36 和 220 之間的值(默認為 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=開啟文件以瞭解更多。
addvaultwizard.new.expertSettings.shorteningThreshold.title=加密檔案名稱的最大長度
addvaultwizard.new.expertSettings.shorteningThreshold.valid=有效
### Password
addvaultwizard.new.createVaultBtn=新建加密檔案庫
addvaultwizard.new.generateRecoveryKeyChoice=若您遺失密碼將無法存取您的資料。您是否希望建立一組在您遺失密碼時可供復原的金鑰?
@@ -134,11 +126,7 @@ unlock.success.revealBtn=顯示磁碟
unlock.error.customPath.message=無法將檔案庫掛載至自訂路徑
unlock.error.customPath.description.notSupported=如果要繼續使用自訂的掛載路徑,必須變更成支援的磁區空間類型,不然就必須使用不同的掛載路徑
unlock.error.customPath.description.notExists=自訂的掛載路徑並不存在‧ 請在本機創立該路徑,或者在加密庫選項中更改
unlock.error.customPath.description.inUse=磁碟代號或自訂掛載路徑「%s」已被使用。
unlock.error.customPath.description.hideawayNotDir=無法移除用於解鎖的臨時隱藏檔案「%3$s」。請檢查該檔案,然後手動刪除。
unlock.error.customPath.description.couldNotBeCleaned=無法將您的保險庫掛載至路徑「%s」。請再試一次或選擇不同的路徑。
unlock.error.customPath.description.notEmptyDir=自訂掛載路徑「%s」不是一個空資料夾。請選擇一個空資料夾並重試。
unlock.error.customPath.description.generic=您為此保險庫選擇了自訂掛載路徑,但使用時出現了錯誤訊息:%2$s
unlock.error.customPath.description.generic=你選擇使用自訂的路徑來掛載此加密庫,但是掛載失敗,原因: %s
## Hub
hub.noKeychain.message=無法讀取裝置金鑰
hub.noKeychain.description=需要由鑰匙圈保護的裝置金鑰才能解鎖Hub加密檔案庫。請先至偏好設定中啟用「%s」並選擇一組鑰匙圈。
@@ -166,7 +154,7 @@ hub.registerFailed.description=命名過程中出現錯誤。更多詳情,請
hub.unauthorized.message=拒絕存取
hub.unauthorized.description=您的設備權限尚未允許存取檔案庫,請聯絡檔案庫擁有者
### License Exceeded
hub.invalidLicense.message=Hub 憑證無效
hub.invalidLicense.message=Hub 授權無效
hub.invalidLicense.description=此 Cryptomator Hub 實例授權無效,請聯繫管理員升級或續訂授權。
# Lock
@@ -289,7 +277,7 @@ preferences.volume=虛擬磁碟
preferences.volume.type=磁區類型
preferences.volume.type.automatic=自动
preferences.volume.docsTooltip=打開文檔以了解有關不同磁區類型更多信息。
preferences.volume.fuseRestartRequired=Cryptomator 必需重新啟動以套用變更。
preferences.volume.fuseRestartRequired=需要重新啟動 Cryptomator以套用變更。
preferences.volume.tcp.port=TCP 埠
preferences.volume.supportedFeatures=所選擇的磁區空間類別支援下列功能:
preferences.volume.feature.mountAuto=自動選擇掛載路徑
@@ -499,12 +487,4 @@ quit.lockAndQuitBtn=鎖定並離開
# Forced Quit
quit.forced.message=某些檔案庫無法鎖定
quit.forced.description=因為進行中的操作或已經打開的檔案被阻止,無法鎖定加密檔案庫。您可以強制鎖定其餘的加密檔案庫,但請注意,中斷讀寫可能導致未保存的數據丟失。
quit.forced.forceAndQuitBtn=強制並結束
# Update Reminder
updateReminder.title=檢查更新
updateReminder.message=檢查更新?
updateReminder.description=保持最新功能、錯誤修復和安全改進。我們建議自動檢查更新。
updateReminder.notNow=暫不
updateReminder.yesOnce=是,僅一次
updateReminder.yesAutomatically=是,自動
quit.forced.forceAndQuitBtn=強制並結束
@@ -1,241 +0,0 @@
package org.cryptomator.common.mount;
import org.apache.commons.lang3.SystemUtils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledOnOs;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;
import org.junit.jupiter.api.io.TempDir;
import java.io.File;
import java.io.IOException;
import java.nio.file.DirectoryNotEmptyException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Objects;
import static java.nio.file.LinkOption.NOFOLLOW_LINKS;
import static org.cryptomator.common.mount.MountWithinParentUtil.MountPointState.EMPTY_DIR;
import static org.cryptomator.common.mount.MountWithinParentUtil.MountPointState.NOT_EXISTING;
import static org.cryptomator.common.mount.MountWithinParentUtil.cleanup;
import static org.cryptomator.common.mount.MountWithinParentUtil.getHideaway;
import static org.cryptomator.common.mount.MountWithinParentUtil.getMountPointState;
import static org.cryptomator.common.mount.MountWithinParentUtil.prepareParentNoMountPoint;
import static org.cryptomator.common.mount.MountWithinParentUtil.removeResidualHideaway;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
class MountWithinParentUtilTest {
@Test
void testPrepareNeitherExist(@TempDir Path parentDir) {
assertThrows(MountPointNotExistingException.class, () -> {
prepareParentNoMountPoint(parentDir.resolve("mount"));
});
}
@Test
void testPrepareOnlyHideawayFileExists(@TempDir Path parentDir) throws IOException {
var mount = parentDir.resolve("mount");
var hideaway = getHideaway(mount);
Files.createFile(hideaway);
assertThrows(HideawayNotDirectoryException.class, () -> {
prepareParentNoMountPoint(mount);
});
}
@Test
void testPrepareOnlyHideawayDirExists(@TempDir Path parentDir) throws IOException {
var mount = parentDir.resolve("mount");
var hideaway = getHideaway(mount);
Files.createDirectory(hideaway);
assertFalse(isHidden(hideaway));
prepareParentNoMountPoint(mount);
assumeTrue(SystemUtils.IS_OS_WINDOWS);
assertTrue(isHidden(hideaway));
}
@Test
void testPrepareBothExistHideawayFile(@TempDir Path parentDir) throws IOException {
var mount = parentDir.resolve("mount");
var hideaway = getHideaway(mount);
Files.createFile(hideaway);
Files.createDirectory(mount);
assertThrows(HideawayNotDirectoryException.class, () -> {
prepareParentNoMountPoint(mount);
});
}
@Test
void testPrepareBothExistHideawayNotEmpty(@TempDir Path parentDir) throws IOException {
var mount = parentDir.resolve("mount");
var hideaway = getHideaway(mount);
Files.createDirectory(hideaway);
Files.createFile(hideaway.resolve("dummy"));
Files.createDirectory(mount);
assertThrows(DirectoryNotEmptyException.class, () -> {
prepareParentNoMountPoint(mount);
});
}
@Test
void testPrepareBothExistMountNotDir(@TempDir Path parentDir) throws IOException {
var mount = parentDir.resolve("mount");
var hideaway = getHideaway(mount);
Files.createFile(hideaway);
Files.createFile(mount);
assertThrows(MountPointNotEmptyDirectoryException.class, () -> {
prepareParentNoMountPoint(mount); //Must not throw something related to hideaway
});
assertTrue(Files.exists(hideaway, NOFOLLOW_LINKS));
}
@Test
void testPrepareBothExistMountNotEmpty(@TempDir Path parentDir) throws IOException {
var mount = parentDir.resolve("mount");
var hideaway = getHideaway(mount);
Files.createFile(hideaway);
Files.createDirectory(mount);
Files.createFile(mount.resolve("dummy"));
assertThrows(MountPointNotEmptyDirectoryException.class, () -> {
prepareParentNoMountPoint(mount); //Must not throw something related to hideaway
});
assertTrue(Files.exists(hideaway, NOFOLLOW_LINKS));
}
@Test
void testPrepareBothExist(@TempDir Path parentDir) throws IOException {
var mount = parentDir.resolve("mount");
var hideaway = getHideaway(mount);
Files.createDirectory(hideaway);
Files.createDirectory(mount);
prepareParentNoMountPoint(mount);
assertTrue(Files.notExists(mount, NOFOLLOW_LINKS));
assumeTrue(SystemUtils.IS_OS_WINDOWS);
assertTrue(isHidden(hideaway));
}
@Test
void testHandleMountPointFolderDoesNotExist(@TempDir Path parentDir) throws IOException {
assertSame(getMountPointState(parentDir.resolve("notExisting")), NOT_EXISTING);
}
@Test
void testHandleMountPointFolderIsFile(@TempDir Path parentDir) throws IOException {
var regularFile = parentDir.resolve("regularFile");
Files.createFile(regularFile);
assertThrows(MountPointNotEmptyDirectoryException.class, () -> {
getMountPointState(regularFile);
});
}
@Test
void testHandleMountPointFolderIsNotEmpty(@TempDir Path parentDir) throws IOException {
var regularFolder = parentDir.resolve("regularFolder");
var dummyFile = regularFolder.resolve("dummy");
Files.createDirectory(regularFolder);
Files.createFile(dummyFile);
assertThrows(MountPointNotEmptyDirectoryException.class, () -> {
getMountPointState(regularFolder);
});
}
@Test
void testHandleMountPointFolder(@TempDir Path parentDir) throws IOException {
//Sadly can't easily create files with "Other" attribute
var regularFolder = parentDir.resolve("regularFolder");
Files.createDirectory(regularFolder);
assertSame(getMountPointState(regularFolder), EMPTY_DIR);
}
@Test
void testRemoveResidualHideawayFile(@TempDir Path parentDir) throws IOException {
var hideaway = parentDir.resolve("hideaway");
Files.createFile(hideaway);
assertThrows(HideawayNotDirectoryException.class, () -> removeResidualHideaway(parentDir.resolve("mount"), hideaway));
}
@Test
void testRemoveResidualHideawayNotEmpty(@TempDir Path parentDir) throws IOException {
var hideaway = parentDir.resolve("hideaway");
Files.createDirectory(hideaway);
Files.createFile(hideaway.resolve("dummy"));
assertThrows(DirectoryNotEmptyException.class, () -> removeResidualHideaway(parentDir.resolve("mount"), hideaway));
}
@Test
void testCleanupNoHideaway(@TempDir Path parentDir) {
assertDoesNotThrow(() -> cleanup(parentDir.resolve("mount")));
}
@Test
void testCleanup(@TempDir Path parentDir) throws IOException {
var mount = parentDir.resolve("mount");
var hideaway = getHideaway(mount);
Files.createDirectory(hideaway);
cleanup(mount);
assertTrue(Files.exists(mount, NOFOLLOW_LINKS));
assertTrue(Files.notExists(hideaway, NOFOLLOW_LINKS));
assertFalse(isHidden(mount));
}
@Test
@EnabledOnOs(OS.WINDOWS)
void testGetHideawayRootDirWin() {
var mount = Path.of("C:\\mount");
var hideaway = getHideaway(mount);
assertEquals(mount.getParent(), hideaway.getParent());
assertEquals(mount.getParent().resolve(".~$mount.tmp"), hideaway);
assertEquals(mount.getParent().toAbsolutePath() + ".~$mount.tmp", hideaway.toAbsolutePath().toString());
}
@Test
@DisabledOnOs(OS.WINDOWS)
void testGetHideawayRootDirUnix() {
var mount = Path.of("/mount");
var hideaway = getHideaway(mount);
assertEquals(mount.getParent(), hideaway.getParent());
assertEquals(mount.getParent().resolve(".~$mount.tmp"), hideaway);
assertEquals(mount.getParent().toAbsolutePath() + ".~$mount.tmp", hideaway.toAbsolutePath().toString());
}
@Test
void testGetHideaway(@TempDir Path parentDir) {
var mount = parentDir.resolve("mount");
var hideaway = getHideaway(mount);
assertEquals(mount.getParent(), hideaway.getParent());
assertEquals(mount.getParent().resolve(".~$mount.tmp"), hideaway);
assertEquals(mount.getParent().toAbsolutePath() + File.separator + ".~$mount.tmp", hideaway.toAbsolutePath().toString());
}
private static boolean isHidden(Path path) throws IOException {
try {
return (boolean) Objects.requireNonNullElse(Files.getAttribute(path, "dos:hidden", NOFOLLOW_LINKS), false);
} catch (UnsupportedOperationException | IllegalMountPointException e) {
return false;
}
}
}

Some files were not shown because too many files have changed in this diff Show More