mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-09-22 07:54:19 +00:00
Compare commits
184
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4bb28f4286 | ||
|
|
721cdf20e7 | ||
|
|
cf248c5cbc | ||
|
|
151ca75e5f | ||
|
|
0e52b7aff4 | ||
|
|
3a0199a1e5 | ||
|
|
50e96095ba | ||
|
|
2f5bce6229 | ||
|
|
62f50ce366 | ||
|
|
864c1c9c0d | ||
|
|
ad97338f9b | ||
|
|
5d596f4fd0 | ||
|
|
aa14d79642 | ||
|
|
745d435a57 | ||
|
|
094a7c6a20 | ||
|
|
aedbefc38a | ||
|
|
0cd3cf9e1c | ||
|
|
ef24141713 | ||
|
|
820d4ff573 | ||
|
|
f024f0ee5d | ||
|
|
a038b34e29 | ||
|
|
4cc516def6 | ||
|
|
bb1095eb78 | ||
|
|
4c11190be9 | ||
|
|
8a7a5eeea1 | ||
|
|
34328c10bf | ||
|
|
c4d503c8d5 | ||
|
|
5fdf5141a5 | ||
|
|
9be00a2693 | ||
|
|
17778f32b9 | ||
|
|
bcbdad99bc | ||
|
|
1e6d2bb6fb | ||
|
|
57fee3e428 | ||
|
|
4ea45e937a | ||
|
|
dc80d79da0 | ||
|
|
57f68376fe | ||
|
|
f47cfa60c5 | ||
|
|
de78cd014d | ||
|
|
9db53f73e2 | ||
|
|
e5f0aca477 | ||
|
|
261f2da105 | ||
|
|
ef4738f920 | ||
|
|
f23348eda2 | ||
|
|
6edfaf3eb6 | ||
|
|
9d02035263 | ||
|
|
8bbcb86bfc | ||
|
|
abdc8672f1 | ||
|
|
333c7457ca | ||
|
|
9b9a354902 | ||
|
|
83b2ff8ce8 | ||
|
|
b7f514e16b | ||
|
|
5c4c59fe18 | ||
|
|
296ae20cc2 | ||
|
|
7af5e00d71 | ||
|
|
deaf71b4ce | ||
|
|
27f3d85ae2 | ||
|
|
f91a854b3e | ||
|
|
be7b265a00 | ||
|
|
34c0f1d13e | ||
|
|
da21c7fa80 | ||
|
|
9ae9473b95 | ||
|
|
32a17407de | ||
|
|
727c32ad50 | ||
|
|
d939e91661 | ||
|
|
151f2babd8 | ||
|
|
76340f31d1 | ||
|
|
b2f2d3ac36 | ||
|
|
9bd5b45ea7 | ||
|
|
a17b2029ec | ||
|
|
4c819807de | ||
|
|
175e05aae4 | ||
|
|
fa3e0efd12 | ||
|
|
d08d992768 | ||
|
|
7f0c92e2f0 | ||
|
|
f4ad7aa43d | ||
|
|
1f09a3fa3a | ||
|
|
7d7b88829d | ||
|
|
4078abeb33 | ||
|
|
6f6c3936aa | ||
|
|
6771963686 | ||
|
|
ab409152e3 | ||
|
|
f92cf9c9e0 | ||
|
|
8b9d5d136e | ||
|
|
3071cfbfb1 | ||
|
|
1a153e1f6e | ||
|
|
b0a7c23055 | ||
|
|
27ca6591ea | ||
|
|
ad3d36e06a | ||
|
|
83e91d361f | ||
|
|
221b4e85bc | ||
|
|
b536bd3e09 | ||
|
|
b73993c375 | ||
|
|
ae392b4014 | ||
|
|
1c34402c87 | ||
|
|
a415e3b0a9 | ||
|
|
e41a33d250 | ||
|
|
587cff9518 | ||
|
|
ea8e850aa9 | ||
|
|
9bb24320bf | ||
|
|
108df3ddbc | ||
|
|
9ca1ff1a2d | ||
|
|
164a350e7e | ||
|
|
b48ebd524b | ||
|
|
7ba9d4de4f | ||
|
|
807e718d13 | ||
|
|
6efb839fd0 | ||
|
|
ca71bb207f | ||
|
|
8ed1878035 | ||
|
|
4e3b2e0be0 | ||
|
|
59d89faf38 | ||
|
|
c2819963d2 | ||
|
|
8f67404766 | ||
|
|
1942850888 | ||
|
|
821cc0940d | ||
|
|
419a7ab245 | ||
|
|
a29ebfd302 | ||
|
|
73da954355 | ||
|
|
879e6dcab7 | ||
|
|
f9f8a6b357 | ||
|
|
3ea6da3c6d | ||
|
|
bb0b1b3592 | ||
|
|
0b6782d44b | ||
|
|
238aaeb5a0 | ||
|
|
ed6f1ad8d1 | ||
|
|
c3ac043c68 | ||
|
|
a90e75ceba | ||
|
|
aa2e63acb0 | ||
|
|
a259d554fa | ||
|
|
f5e035fa3b | ||
|
|
9e25d0fcc0 | ||
|
|
96ebb67085 | ||
|
|
3fbc5e84e3 | ||
|
|
614756c740 | ||
|
|
2a9d1e3fba | ||
|
|
9361a75cd8 | ||
|
|
becc5e316a | ||
|
|
08a1e1ec7d | ||
|
|
12f5f41968 | ||
|
|
da8410842b | ||
|
|
1cae1a5f2f | ||
|
|
5e2e8c35d5 | ||
|
|
328f2f89a8 | ||
|
|
92b77baf40 | ||
|
|
3d0741f4d2 | ||
|
|
b75459fbc6 | ||
|
|
e484813233 | ||
|
|
711a3881f8 | ||
|
|
399c5c0565 | ||
|
|
ca6c1e244c | ||
|
|
449e330992 | ||
|
|
0f0855165e | ||
|
|
3ae847d5ad | ||
|
|
58bb266085 | ||
|
|
c8ed30574a | ||
|
|
1cb5a3531a | ||
|
|
d5cad1a704 | ||
|
|
c9dd7454f5 | ||
|
|
7a7332a3f6 | ||
|
|
a22bfacfa2 | ||
|
|
1abf591459 | ||
|
|
641b21a144 | ||
|
|
20664ff3d3 | ||
|
|
c8cfe473f1 | ||
|
|
ec03bc569c | ||
|
|
1093cb618f | ||
|
|
8c05c774bf | ||
|
|
6af9132721 | ||
|
|
1f443453c7 | ||
|
|
71caefbe70 | ||
|
|
6bb69ea8d3 | ||
|
|
06690e98c7 | ||
|
|
6e858746c1 | ||
|
|
8b94c82889 | ||
|
|
fbe997e6c4 | ||
|
|
491fdaa9bb | ||
|
|
2d17ad9a2e | ||
|
|
5502f58637 | ||
|
|
1006cb506f | ||
|
|
d7bc92aa09 | ||
|
|
948a62b482 | ||
|
|
2fbdce26ea | ||
|
|
317f3c3458 | ||
|
|
97cede12b7 | ||
|
|
6da107f4db |
@@ -0,0 +1,24 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "maven"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "monday"
|
||||
time: "06:00"
|
||||
timezone: "UTC"
|
||||
groups:
|
||||
maven-dependencies:
|
||||
patterns:
|
||||
- "*"
|
||||
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/" # even for `.github/workflows`
|
||||
schedule:
|
||||
interval: "monthly"
|
||||
groups:
|
||||
github-actions:
|
||||
patterns:
|
||||
- "*"
|
||||
labels:
|
||||
- "misc:ci"
|
||||
@@ -30,6 +30,7 @@ jobs:
|
||||
distribution: 'zulu'
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
java-package: 'jdk+fx'
|
||||
check-latest: true
|
||||
cache: 'maven'
|
||||
- name: Ensure major jfx version in pom equals in jdk
|
||||
shell: pwsh
|
||||
@@ -54,7 +55,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
|
||||
--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
|
||||
--strip-native-commands
|
||||
--no-header-files
|
||||
--no-man-pages
|
||||
@@ -80,7 +81,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"
|
||||
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator"
|
||||
--java-options "-Xss5m"
|
||||
--java-options "-Xmx256m"
|
||||
--java-options "-Dcryptomator.appVersion=\"${{ needs.get-version.outputs.semVerStr }}\""
|
||||
@@ -92,7 +93,8 @@ 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=false"
|
||||
--java-options "-Dcryptomator.showTrayIcon=true"
|
||||
--java-options "-Dcryptomator.integrationsLinux.trayIconsDir=\"@{appdir}/usr/share/icons/hicolor/symbolic/apps\""
|
||||
--java-options "-Dcryptomator.buildNumber=\"appimage-${{ needs.get-version.outputs.revNum }}\""
|
||||
--add-launcher Cryptomator-gtk2=launcher-gtk2.properties
|
||||
--resource-dir dist/linux/resources
|
||||
@@ -103,6 +105,10 @@ 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
|
||||
|
||||
@@ -17,8 +17,8 @@ on:
|
||||
|
||||
env:
|
||||
JAVA_VERSION: 20
|
||||
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'
|
||||
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'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -45,6 +45,7 @@ jobs:
|
||||
with:
|
||||
distribution: 'zulu'
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
check-latest: true
|
||||
cache: 'maven'
|
||||
- name: Run maven
|
||||
run: mvn -B clean package -Pdependency-check,linux -DskipTests
|
||||
|
||||
@@ -8,6 +8,11 @@ on:
|
||||
version:
|
||||
description: 'Version'
|
||||
required: false
|
||||
notarize:
|
||||
description: 'Notarize'
|
||||
required: true
|
||||
default: false
|
||||
type: boolean
|
||||
|
||||
env:
|
||||
JAVA_VERSION: 20
|
||||
@@ -31,31 +36,46 @@ 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: 'zulu'
|
||||
distribution: 'temurin'
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
java-package: 'jdk+fx'
|
||||
java-package: 'jdk'
|
||||
architecture: ${{ matrix.architecture }}
|
||||
check-latest: true
|
||||
cache: 'maven'
|
||||
- name: Ensure major jfx version in pom equals in jdk
|
||||
if: ${{ !contains(matrix.os, 'self-hosted') }}
|
||||
shell: pwsh
|
||||
- name: Download OpenJFX jmods
|
||||
id: download-jmods
|
||||
run: |
|
||||
$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])) "
|
||||
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})"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
- name: Set version
|
||||
run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }}
|
||||
- name: Run maven
|
||||
@@ -69,7 +89,7 @@ jobs:
|
||||
${JAVA_HOME}/bin/jlink
|
||||
--verbose
|
||||
--output runtime
|
||||
--module-path "${JAVA_HOME}/jmods"
|
||||
--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.accessibility,jdk.management.jfr
|
||||
--strip-native-commands
|
||||
--no-header-files
|
||||
@@ -208,7 +228,7 @@ jobs:
|
||||
env:
|
||||
VERSION_NO: ${{ needs.get-version.outputs.semVerNum }}
|
||||
- name: Notarize .dmg
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
if: startsWith(github.ref, 'refs/tags/') || inputs.notarize
|
||||
uses: cocoalibs/xcode-notarization-action@v1
|
||||
with:
|
||||
app-path: 'Cryptomator-*.dmg'
|
||||
|
||||
@@ -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@v2
|
||||
- uses: actions/checkout@v3
|
||||
- id: validate-pom-version
|
||||
name: Validate POM version
|
||||
run: |
|
||||
|
||||
@@ -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.1/openjfx-20.0.1_windows-x64_bin-jmods.zip'
|
||||
JFX_JMODS_HASH: 'D00767334C43B8832B5CF10267D34CA8F563D187C4655B73EB6020DD79C054B5'
|
||||
JFX_JMODS_URL: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_windows-x64_bin-jmods.zip'
|
||||
JFX_JMODS_HASH: '18625bbc13c57dbf802486564247a8d8cab72ec558c240a401bf6440384ebd77'
|
||||
|
||||
defaults:
|
||||
run:
|
||||
@@ -45,12 +45,13 @@ jobs:
|
||||
distribution: ${{ env.JAVA_DIST }}
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
java-package: 'jdk'
|
||||
check-latest: true
|
||||
cache: ${{ env.JAVA_CACHE }}
|
||||
- name: Download and extract JavaFX jmods from Gluon
|
||||
#In the last step we move all jmods files a dir level up because jmods are placed inside a directory in the zip
|
||||
run: |
|
||||
curl --output jfxjmods.zip -L "${{ env.JFX_JMODS_URL }}"
|
||||
if(!(Get-FileHash -Path jfxjmods.zip -Algorithm SHA256).Hash.equals("${{ env.JFX_JMODS_HASH }}")) {
|
||||
if(!(Get-FileHash -Path jfxjmods.zip -Algorithm SHA256).Hash.ToLower().equals("${{ env.JFX_JMODS_HASH }}")) {
|
||||
throw "Wrong checksum of JMOD archive downloaded from ${{ env.JFX_JMODS_URL }}.";
|
||||
}
|
||||
Expand-Archive -Path jfxjmods.zip -DestinationPath jfxjmods
|
||||
@@ -247,6 +248,7 @@ jobs:
|
||||
with:
|
||||
distribution: ${{ env.JAVA_DIST }}
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
check-latest: true
|
||||
cache: ${{ env.JAVA_CACHE }}
|
||||
- name: Generate license for exe
|
||||
run: >
|
||||
@@ -359,7 +361,7 @@ jobs:
|
||||
cp msi/*.msi files
|
||||
cp exe/*.exe files
|
||||
- name: Upload to Kaspersky
|
||||
uses: SamKirkland/FTP-Deploy-Action@4.3.3
|
||||
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
|
||||
with:
|
||||
protocol: ftps
|
||||
server: allowlist.kaspersky-labs.com
|
||||
@@ -368,7 +370,7 @@ jobs:
|
||||
password: ${{ secrets.ALLOWLIST_KASPERSKY_PASSWORD }}
|
||||
local-dir: files/
|
||||
- name: Upload to Avast
|
||||
uses: SamKirkland/FTP-Deploy-Action@4.3.0
|
||||
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
|
||||
with:
|
||||
protocol: ftp
|
||||
server: whitelisting.avast.com
|
||||
|
||||
+1
-1
@@ -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="@{userhome}/.config/Cryptomator/settings.json" -Dcryptomator.p12Path="@{userhome}/.config/Cryptomator/key.p12" -Dcryptomator.ipcSocketPath="@{userhome}/.config/Cryptomator/ipc.socket" -Dcryptomator.logDir="@{userhome}/.local/share/Cryptomator/logs" -Dcryptomator.pluginDir="@{userhome}/.local/share/Cryptomator/plugins" -Dcryptomator.mountPointsDir="@{userhome}/.local/share/Cryptomator/mnt" -Dcryptomator.showTrayIcon=true -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64" />
|
||||
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{userhome}/.config/Cryptomator/settings.json" -Dcryptomator.p12Path="@{userhome}/.config/Cryptomator/key.p12" -Dcryptomator.ipcSocketPath="@{userhome}/.config/Cryptomator/ipc.socket" -Dcryptomator.logDir="@{userhome}/.local/share/Cryptomator/logs" -Dcryptomator.pluginDir="@{userhome}/.local/share/Cryptomator/plugins" -Dcryptomator.mountPointsDir="@{userhome}/.local/share/Cryptomator/mnt" -Dcryptomator.showTrayIcon=true -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
|
||||
+1
-1
@@ -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="@{userhome}/.config/Cryptomator-Dev/settings.json" -Dcryptomator.p12Path="@{userhome}/.config/Cryptomator-Dev/key.p12" -Dcryptomator.ipcSocketPath="@{userhome}/.config/Cryptomator-Dev/ipc.socket" -Dcryptomator.logDir="@{userhome}/.local/share/Cryptomator-Dev/logs" -Dcryptomator.pluginDir="@{userhome}/.local/share/Cryptomator-Dev/plugins" -Dcryptomator.mountPointsDir="@{userhome}/.local/share/Cryptomator-Dev/mnt" -Dcryptomator.showTrayIcon=true -Dfuse.experimental="true" -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64" />
|
||||
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{userhome}/.config/Cryptomator-Dev/settings.json" -Dcryptomator.p12Path="@{userhome}/.config/Cryptomator-Dev/key.p12" -Dcryptomator.ipcSocketPath="@{userhome}/.config/Cryptomator-Dev/ipc.socket" -Dcryptomator.logDir="@{userhome}/.local/share/Cryptomator-Dev/logs" -Dcryptomator.pluginDir="@{userhome}/.local/share/Cryptomator-Dev/plugins" -Dcryptomator.mountPointsDir="@{userhome}/.local/share/Cryptomator-Dev/mnt" -Dcryptomator.showTrayIcon=true -Dfuse.experimental="true" -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
|
||||
Vendored
+8
-4
@@ -16,7 +16,6 @@ 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
|
||||
@@ -24,7 +23,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 \
|
||||
--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 \
|
||||
--strip-native-commands \
|
||||
--no-header-files \
|
||||
--no-man-pages \
|
||||
@@ -44,7 +43,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" \
|
||||
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" \
|
||||
--copyright "(C) 2016 - 2023 Skymatic GmbH" \
|
||||
--java-options "-Xss5m" \
|
||||
--java-options "-Xmx256m" \
|
||||
@@ -57,7 +56,8 @@ ${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=false" \
|
||||
--java-options "-Dcryptomator.showTrayIcon=true" \
|
||||
--java-options "-Dcryptomator.integrationsLinux.trayIconsDir=\"@{appdir}/usr/share/icons/hicolor/symbolic/apps\"" \
|
||||
--java-options "-Dcryptomator.buildNumber=\"appimage-${REVISION_NO}\"" \
|
||||
--add-launcher cryptomator-gtk2=launcher-gtk2.properties \
|
||||
--resource-dir ../resources
|
||||
@@ -69,6 +69,10 @@ 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,6 +66,9 @@
|
||||
</content_rating>
|
||||
|
||||
<releases>
|
||||
<release date="2023-08-11" version="1.9.4"/>
|
||||
<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"/>
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<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>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,8 @@
|
||||
<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>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
+2
@@ -1,6 +1,8 @@
|
||||
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
|
||||
|
||||
Vendored
+2
@@ -1 +1,3 @@
|
||||
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
|
||||
Vendored
+4
-3
@@ -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 \
|
||||
--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 \
|
||||
--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" \
|
||||
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" \
|
||||
--copyright "(C) 2016 - 2023 Skymatic GmbH" \
|
||||
--java-options "-Xss5m" \
|
||||
--java-options "-Xmx256m" \
|
||||
@@ -55,7 +55,8 @@ 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=false" \
|
||||
--java-options "-Dcryptomator.showTrayIcon=true" \
|
||||
--java-options "-Dcryptomator.integrationsLinux.trayIconsDir=\"/usr/share/icons/hicolor/symbolic/apps\"" \
|
||||
--java-options "-Dcryptomator.buildNumber=\"deb-${REVISION_NUM}\"" \
|
||||
--java-options "-Dcryptomator.appVersion=\"${SEMVER_STR}\"" \
|
||||
--app-version "${VERSION_NUM}.${REVISION_NUM}" \
|
||||
|
||||
Vendored
+26
-2
@@ -29,6 +29,14 @@ 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; }
|
||||
@@ -38,6 +46,22 @@ 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
|
||||
@@ -45,8 +69,8 @@ cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
|
||||
# add runtime
|
||||
${JAVA_HOME}/bin/jlink \
|
||||
--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,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr \
|
||||
--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 \
|
||||
--strip-native-commands \
|
||||
--no-header-files \
|
||||
--no-man-pages \
|
||||
|
||||
Vendored
BIN
Binary file not shown.
Vendored
+1
-1
@@ -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 -ExecutionPolicy Unrestricted -Command .\build.ps1^
|
||||
powershell -NoLogo -NoProfile -ExecutionPolicy Unrestricted -Command .\build.ps1^
|
||||
-AppName %APPNAME%^
|
||||
-MainJarGlob "%MAIN_JAR_GLOB%"^
|
||||
-ModuleAndMainClass "%MODULE_AND_MAIN_CLASS%"^
|
||||
|
||||
Vendored
+5
-3
@@ -51,10 +51,11 @@ if ($clean -and (Test-Path -Path $runtimeImagePath)) {
|
||||
}
|
||||
|
||||
## download jfx jmods
|
||||
$jfxJmodsChecksum = 'd00767334c43b8832b5cf10267d34ca8f563d187c4655b73eb6020dd79c054b5'
|
||||
$jmodsVersion='20.0.2'
|
||||
$jmodsUrl = "https://download2.gluonhq.com/openjfx/${jmodsVersion}/openjfx-${jmodsVersion}_windows-x64_bin-jmods.zip"
|
||||
$jfxJmodsChecksum = '18625bbc13c57dbf802486564247a8d8cab72ec558c240a401bf6440384ebd77'
|
||||
$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
|
||||
}
|
||||
@@ -65,12 +66,13 @@ 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-20.0.1" `
|
||||
--module-path "$Env:JAVA_HOME/jmods;$buildDir/resources/javafx-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,javafx.base,javafx.graphics,javafx.controls,javafx.fxml `
|
||||
--strip-native-commands `
|
||||
--no-header-files `
|
||||
|
||||
Vendored
+1
-1
@@ -3,5 +3,5 @@
|
||||
::REPLACE ME
|
||||
|
||||
cd %~dp0
|
||||
powershell -NoLogo -NonInteractive -ExecutionPolicy Unrestricted -Command .\patchWebDAV.ps1^
|
||||
powershell -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -Command .\patchWebDAV.ps1^
|
||||
-LoopbackAlias %LOOPBACK_ALIAS%
|
||||
+1
-1
@@ -2,4 +2,4 @@
|
||||
:: see comments in file ./version170-migrate-settings.ps1
|
||||
|
||||
cd %~dp0
|
||||
powershell -NoLogo -NonInteractive -ExecutionPolicy Unrestricted -Command .\version170-migrate-settings.ps1
|
||||
powershell -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -Command .\version170-migrate-settings.ps1
|
||||
|
||||
Vendored
+8
-2
@@ -132,11 +132,17 @@
|
||||
<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 -->
|
||||
<CustomAction Id="PatchWebDAV" Impersonate="no" ExeCommand="[INSTALLDIR]patchWebDAV.bat" Directory="INSTALLDIR" Execute="deferred" Return="asyncWait" />
|
||||
<SetProperty Id="PatchWebDAV" Value=""[INSTALLDIR]patchWebDAV.bat""
|
||||
Sequence="execute" Before="PatchWebDAV" />
|
||||
<CustomAction Id="PatchWebDAV" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
|
||||
|
||||
<!-- Special Settings migration for 1.7.0,. Should be removed eventually, for more info, see ../contrib/version170-migrate-settings.ps1-->
|
||||
<CustomAction Id="V170MigrateSettings" Impersonate="no" ExeCommand="[INSTALLDIR]version170-migrate-settings.bat" Directory="INSTALLDIR" Execute="deferred" Return="asyncWait" />
|
||||
<SetProperty Id="V170MigrateSettings" Value=""[INSTALLDIR]version170-migrate-settings.bat""
|
||||
Sequence="execute" Before="V170MigrateSettings" />
|
||||
<CustomAction Id="V170MigrateSettings" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
|
||||
|
||||
<!-- Running App detection and exit -->
|
||||
<Property Id="FOUNDRUNNINGAPP" Admin="yes"/>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>cryptomator</artifactId>
|
||||
<version>1.10.0-SNAPSHOT</version>
|
||||
<version>1.10.0</version>
|
||||
<name>Cryptomator Desktop App</name>
|
||||
|
||||
<organization>
|
||||
@@ -29,42 +29,49 @@
|
||||
<project.jdk.version>20</project.jdk.version>
|
||||
|
||||
<!-- Group IDs of jars that need to stay on the class path for now -->
|
||||
<!-- 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>
|
||||
<!-- 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>
|
||||
|
||||
<!-- cryptomator dependencies -->
|
||||
<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.2.1</cryptomator.integrations.linux.version>
|
||||
<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.integrations.mac.version>1.2.1</cryptomator.integrations.mac.version>
|
||||
<cryptomator.integrations.linux.version>1.3.0-beta6</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>
|
||||
|
||||
<!-- 3rd party dependencies -->
|
||||
<commons-lang3.version>3.12.0</commons-lang3.version>
|
||||
<dagger.version>2.45</dagger.version>
|
||||
<commons-lang3.version>3.13.0</commons-lang3.version>
|
||||
<dagger.version>2.47</dagger.version>
|
||||
<easybind.version>2.2</easybind.version>
|
||||
<guava.version>32.0.1-jre</guava.version>
|
||||
<guava.version>32.1.2-jre</guava.version>
|
||||
<jackson.version>2.15.2</jackson.version>
|
||||
<javafx.version>20.0.1</javafx.version>
|
||||
<javafx.version>20.0.2</javafx.version>
|
||||
<jwt.version>4.4.0</jwt.version>
|
||||
<nimbus-jose.version>9.31</nimbus-jose.version>
|
||||
<logback.version>1.4.7</logback.version>
|
||||
<logback.version>1.4.11</logback.version>
|
||||
<slf4j.version>2.0.7</slf4j.version>
|
||||
<tinyoauth2.version>0.5.1</tinyoauth2.version>
|
||||
<zxcvbn.version>1.7.0</zxcvbn.version>
|
||||
<tinyoauth2.version>0.6.0</tinyoauth2.version>
|
||||
<zxcvbn.version>1.8.2</zxcvbn.version>
|
||||
|
||||
<!-- test dependencies -->
|
||||
<junit.jupiter.version>5.9.3</junit.jupiter.version>
|
||||
<mockito.version>5.3.1</mockito.version>
|
||||
<junit.jupiter.version>5.10.0</junit.jupiter.version>
|
||||
<mockito.version>5.5.0</mockito.version>
|
||||
<hamcrest.version>2.2</hamcrest.version>
|
||||
|
||||
<!-- build-time dependencies -->
|
||||
<jetbrains.annotations.version>23.0.0</jetbrains.annotations.version>
|
||||
<dependency-check.version>8.1.2</dependency-check.version>
|
||||
<jacoco.version>0.8.9</jacoco.version>
|
||||
<jetbrains.annotations.version>24.0.1</jetbrains.annotations.version>
|
||||
<dependency-check.version>8.4.0</dependency-check.version>
|
||||
<jacoco.version>0.8.10</jacoco.version>
|
||||
<license-generator.version>2.2.0</license-generator.version>
|
||||
<junit-tree-reporter.version>1.2.1</junit-tree-reporter.version>
|
||||
<mvn-compiler.version>3.11.0</mvn-compiler.version>
|
||||
<mvn-resources.version>3.3.1</mvn-resources.version>
|
||||
<mvn-dependency.version>3.6.0</mvn-dependency.version>
|
||||
<mvn-surefire.version>3.1.2</mvn-surefire.version>
|
||||
<mvn-jar.version>3.3.0</mvn-jar.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
@@ -240,7 +247,7 @@
|
||||
<dependency>
|
||||
<groupId>com.google.jimfs</groupId>
|
||||
<artifactId>jimfs</artifactId>
|
||||
<version>1.2</version>
|
||||
<version>1.3.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -258,32 +265,32 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.10.1</version>
|
||||
<version>${mvn-compiler.version}</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<version>${mvn-resources.version}</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<version>${mvn-dependency.version}</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>3.0.0-M7</version>
|
||||
<version>${mvn-surefire.version}</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>license-maven-plugin</artifactId>
|
||||
<version>2.0.0</version>
|
||||
<version>${license-generator.version}</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<version>${mvn-jar.version}</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
@@ -332,8 +339,22 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>me.fabriciorby</groupId>
|
||||
<artifactId>maven-surefire-junit5-tree-reporter</artifactId>
|
||||
<version>${junit-tree-reporter.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<configuration>
|
||||
<argLine>--enable-preview</argLine>
|
||||
<reportFormat>plain</reportFormat>
|
||||
<consoleOutputReporter>
|
||||
<disable>true</disable>
|
||||
</consoleOutputReporter>
|
||||
<statelessTestsetInfoReporter
|
||||
implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5StatelessTestsetInfoTreeReporter">
|
||||
</statelessTestsetInfoReporter>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
|
||||
+2
-2
@@ -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.UTF_8).lines().collect(Collectors.joining("\n"));
|
||||
@SuppressWarnings("resource") var stderr = process.errorReader(StandardCharsets.UTF_8).lines().collect(Collectors.joining("\n"));
|
||||
@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"));
|
||||
throw new CommandFailedException(cmdDescription, process.exitValue(), stdout, stderr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
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,9 +1,25 @@
|
||||
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 {
|
||||
|
||||
public IllegalMountPointException(String msg) {
|
||||
super(msg);
|
||||
private final Path mountpoint;
|
||||
|
||||
public IllegalMountPointException(Path mountpoint) {
|
||||
this(mountpoint, "The provided mountpoint has a problem: " + mountpoint.toString());
|
||||
}
|
||||
|
||||
}
|
||||
public IllegalMountPointException(Path mountpoint, String msg) {
|
||||
super(msg);
|
||||
this.mountpoint = mountpoint;
|
||||
}
|
||||
|
||||
public Path getMountpoint() {
|
||||
return mountpoint;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
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,8 +1,10 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class MountPointInUseException extends IllegalMountPointException {
|
||||
|
||||
public MountPointInUseException(String msg) {
|
||||
super(msg);
|
||||
public MountPointInUseException(Path path) {
|
||||
super(path);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class MountPointNotEmptyDirectoryException extends IllegalMountPointException {
|
||||
|
||||
public MountPointNotEmptyDirectoryException(Path path, String msg) {
|
||||
super(path, msg);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
public class MountPointNotExistsException extends IllegalMountPointException {
|
||||
|
||||
public MountPointNotExistsException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,10 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class MountPointNotSupportedException extends IllegalMountPointException {
|
||||
|
||||
public MountPointNotSupportedException(String msg) {
|
||||
super(msg);
|
||||
public MountPointNotSupportedException(Path path, String msg) {
|
||||
super(path, msg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
public class MountPointPreparationException extends RuntimeException {
|
||||
|
||||
public MountPointPreparationException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public MountPointPreparationException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
||||
@@ -5,13 +5,11 @@ 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 {
|
||||
|
||||
@@ -22,31 +20,33 @@ public final class MountWithinParentUtil {
|
||||
|
||||
private MountWithinParentUtil() {}
|
||||
|
||||
static void prepareParentNoMountPoint(Path mountPoint) throws MountPointPreparationException {
|
||||
static void prepareParentNoMountPoint(Path mountPoint) throws IllegalMountPointException, IOException {
|
||||
Path hideaway = getHideaway(mountPoint);
|
||||
var mpExists = Files.exists(mountPoint, LinkOption.NOFOLLOW_LINKS);
|
||||
var mpState = getMountPointState(mountPoint);
|
||||
var hideExists = Files.exists(hideaway, LinkOption.NOFOLLOW_LINKS);
|
||||
|
||||
//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);
|
||||
try {
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
}
|
||||
|
||||
//... (now) without hideaway
|
||||
Files.move(mountPoint, hideaway);
|
||||
if (SystemUtils.IS_OS_WINDOWS) {
|
||||
Files.setAttribute(hideaway, WIN_HIDDEN_ATTR, true, LinkOption.NOFOLLOW_LINKS);
|
||||
@@ -54,30 +54,66 @@ public final class MountWithinParentUtil {
|
||||
int attempts = 0;
|
||||
while (!Files.notExists(mountPoint)) {
|
||||
if (attempts >= 10) {
|
||||
throw new MountPointPreparationException("Path " + mountPoint + " could not be cleared");
|
||||
throw new MountPointCleanupFailedException(mountPoint);
|
||||
}
|
||||
Thread.sleep(1000);
|
||||
attempts++;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new MountPointPreparationException(e);
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
throw new MountPointPreparationException(e);
|
||||
throw new RuntimeException(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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,16 +135,22 @@ public final class MountWithinParentUtil {
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkIsDirectory(Path toCheck) throws MountPointPreparationException {
|
||||
private static void checkIsMountPointDirectory(Path toCheck) throws IllegalMountPointException {
|
||||
if (!Files.isDirectory(toCheck, LinkOption.NOFOLLOW_LINKS)) {
|
||||
throw new MountPointPreparationException(new NotDirectoryException(toCheck.toString()));
|
||||
throw new MountPointNotEmptyDirectoryException(toCheck, "Mountpoint is not a directory: " + toCheck);
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkIsEmpty(Path toCheck) throws MountPointPreparationException, IOException {
|
||||
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 {
|
||||
try (var dirStream = Files.list(toCheck)) {
|
||||
if (dirStream.findFirst().isPresent()) {
|
||||
throw new MountPointPreparationException(new DirectoryNotEmptyException(toCheck.toString()));
|
||||
throw new MountPointNotEmptyDirectoryException(toCheck, "Mountpoint directory is not empty: " + toCheck);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.toString());
|
||||
throw new MountPointInUseException(userChosenMountPoint);
|
||||
}
|
||||
} 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(e.getMessage());
|
||||
throw new MountPointNotSupportedException(userChosenMountPoint, e.getMessage());
|
||||
} else if (canMountToDir && !canMountToParent && !Files.exists(userChosenMountPoint)) {
|
||||
//mountpoint must exist
|
||||
throw new MountPointNotExistsException(e.getMessage());
|
||||
throw new MountPointNotExistingException(userChosenMountPoint, e.getMessage());
|
||||
} else {
|
||||
//TODO: add specific exception for !canMountToDir && canMountToParent && !Files.notExists(userChosenMountPoint)
|
||||
throw new IllegalMountPointException(e.getMessage());
|
||||
throw new IllegalMountPointException(userChosenMountPoint, e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,7 +65,6 @@ public class Settings {
|
||||
public final IntegerProperty windowYPosition;
|
||||
public final IntegerProperty windowWidth;
|
||||
public final IntegerProperty windowHeight;
|
||||
public final StringProperty displayConfiguration;
|
||||
public final StringProperty language;
|
||||
public final StringProperty mountService;
|
||||
public final StringProperty lastUpdateCheck;
|
||||
@@ -103,7 +102,6 @@ public class Settings {
|
||||
this.windowYPosition = new SimpleIntegerProperty(this, "windowYPosition", json.windowYPosition);
|
||||
this.windowWidth = new SimpleIntegerProperty(this, "windowWidth", json.windowWidth);
|
||||
this.windowHeight = new SimpleIntegerProperty(this, "windowHeight", json.windowHeight);
|
||||
this.displayConfiguration = new SimpleStringProperty(this, "displayConfiguration", json.displayConfiguration);
|
||||
this.language = new SimpleStringProperty(this, "language", json.language);
|
||||
this.mountService = new SimpleStringProperty(this, "mountService", json.mountService);
|
||||
this.lastUpdateCheck = new SimpleStringProperty(this, "lastUpdateCheck", json.lastUpdateCheck);
|
||||
@@ -131,7 +129,6 @@ public class Settings {
|
||||
windowYPosition.addListener(this::somethingChanged);
|
||||
windowWidth.addListener(this::somethingChanged);
|
||||
windowHeight.addListener(this::somethingChanged);
|
||||
displayConfiguration.addListener(this::somethingChanged);
|
||||
language.addListener(this::somethingChanged);
|
||||
mountService.addListener(this::somethingChanged);
|
||||
lastUpdateCheck.addListener(this::somethingChanged);
|
||||
@@ -186,7 +183,6 @@ public class Settings {
|
||||
json.windowYPosition = windowYPosition.get();
|
||||
json.windowWidth = windowWidth.get();
|
||||
json.windowHeight = windowHeight.get();
|
||||
json.displayConfiguration = displayConfiguration.get();
|
||||
json.language = language.get();
|
||||
json.mountService = mountService.get();
|
||||
json.lastUpdateCheck = lastUpdateCheck.get();
|
||||
|
||||
@@ -31,9 +31,6 @@ class SettingsJson {
|
||||
@JsonProperty("theme")
|
||||
UiTheme theme = Settings.DEFAULT_THEME;
|
||||
|
||||
@JsonProperty("displayConfiguration")
|
||||
String displayConfiguration;
|
||||
|
||||
@JsonProperty("keychainProvider")
|
||||
String keychainProvider = Settings.DEFAULT_KEYCHAIN_PROVIDER;
|
||||
|
||||
|
||||
@@ -45,9 +45,8 @@ public abstract class AddVaultModule {
|
||||
@Provides
|
||||
@AddVaultWizardWindow
|
||||
@AddVaultWizardScoped
|
||||
static Stage provideStage(StageFactory factory, @PrimaryStage Stage primaryStage, ResourceBundle resourceBundle) {
|
||||
static Stage provideStage(StageFactory factory, @PrimaryStage Stage primaryStage) {
|
||||
Stage stage = factory.create();
|
||||
stage.setTitle(resourceBundle.getString("addvaultwizard.title"));
|
||||
stage.setResizable(false);
|
||||
stage.initModality(Modality.WINDOW_MODAL);
|
||||
stage.initOwner(primaryStage);
|
||||
@@ -90,13 +89,6 @@ public abstract class AddVaultModule {
|
||||
|
||||
// ------------------
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.ADDVAULT_WELCOME)
|
||||
@AddVaultWizardScoped
|
||||
static Scene provideWelcomeScene(@AddVaultWizardWindow FxmlLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_WELCOME);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.ADDVAULT_EXISTING)
|
||||
@AddVaultWizardScoped
|
||||
@@ -148,11 +140,6 @@ public abstract class AddVaultModule {
|
||||
|
||||
// ------------------
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(AddVaultWelcomeController.class)
|
||||
abstract FxController bindWelcomeController(AddVaultWelcomeController controller);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(ChooseExistingVaultController.class)
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
package org.cryptomator.ui.addvaultwizard;
|
||||
|
||||
import dagger.Lazy;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
@AddVaultWizardScoped
|
||||
public class AddVaultWelcomeController implements FxController {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AddVaultWelcomeController.class);
|
||||
private final Stage window;
|
||||
private final Lazy<Scene> chooseExistingVaultScene;
|
||||
private final Lazy<Scene> createNewVaultScene;
|
||||
|
||||
@Inject
|
||||
AddVaultWelcomeController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_EXISTING) Lazy<Scene> chooseExistingVaultScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_NAME) Lazy<Scene> createNewVaultScene) {
|
||||
this.window = window;
|
||||
this.chooseExistingVaultScene = chooseExistingVaultScene;
|
||||
this.createNewVaultScene = createNewVaultScene;
|
||||
}
|
||||
|
||||
public void createNewVault() {
|
||||
LOG.debug("AddVaultWelcomeController.createNewVault()");
|
||||
window.setScene(createNewVaultScene.get());
|
||||
}
|
||||
|
||||
public void chooseExistingVault() {
|
||||
LOG.debug("AddVaultWelcomeController.chooseExistingVault()");
|
||||
window.setScene(chooseExistingVaultScene.get());
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@ import org.cryptomator.ui.common.FxmlScene;
|
||||
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
@AddVaultWizardScoped
|
||||
@Subcomponent(modules = {AddVaultModule.class})
|
||||
@@ -20,12 +21,23 @@ public interface AddVaultWizardComponent {
|
||||
@AddVaultWizardWindow
|
||||
Stage window();
|
||||
|
||||
@FxmlScene(FxmlFile.ADDVAULT_WELCOME)
|
||||
Lazy<Scene> scene();
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_NAME)
|
||||
Lazy<Scene> sceneNew();
|
||||
@FxmlScene(FxmlFile.ADDVAULT_EXISTING)
|
||||
Lazy<Scene> sceneExisting();
|
||||
|
||||
default void showAddVaultWizard() {
|
||||
default void showAddNewVaultWizard(ResourceBundle resourceBundle) {
|
||||
Stage stage = window();
|
||||
stage.setScene(scene().get());
|
||||
stage.setScene(sceneNew().get());
|
||||
stage.setTitle(resourceBundle.getString("addvaultwizard.new.title"));
|
||||
stage.sizeToScene();
|
||||
stage.show();
|
||||
}
|
||||
|
||||
default void showAddExistingVaultWizard(ResourceBundle resourceBundle) {
|
||||
Stage stage = window();
|
||||
stage.setScene(sceneExisting().get());
|
||||
stage.setTitle(resourceBundle.getString("addvaultwizard.existing.title"));
|
||||
stage.sizeToScene();
|
||||
stage.show();
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ public class ChooseExistingVaultController implements FxController {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ChooseExistingVaultController.class);
|
||||
|
||||
private final Stage window;
|
||||
private final Lazy<Scene> welcomeScene;
|
||||
private final Lazy<Scene> successScene;
|
||||
private final FxApplicationWindows appWindows;
|
||||
private final ObjectProperty<Path> vaultPath;
|
||||
@@ -45,9 +44,15 @@ public class ChooseExistingVaultController implements FxController {
|
||||
private final ObservableValue<Image> screenshot;
|
||||
|
||||
@Inject
|
||||
ChooseExistingVaultController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, FxApplicationWindows appWindows, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, VaultListManager vaultListManager, ResourceBundle resourceBundle, FxApplicationStyle applicationStyle) {
|
||||
ChooseExistingVaultController(@AddVaultWizardWindow Stage window, //
|
||||
@FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, //
|
||||
FxApplicationWindows appWindows, //
|
||||
ObjectProperty<Path> vaultPath, //
|
||||
@AddVaultWizardWindow ObjectProperty<Vault> vault, //
|
||||
VaultListManager vaultListManager, //
|
||||
ResourceBundle resourceBundle, //
|
||||
FxApplicationStyle applicationStyle) {
|
||||
this.window = window;
|
||||
this.welcomeScene = welcomeScene;
|
||||
this.successScene = successScene;
|
||||
this.appWindows = appWindows;
|
||||
this.vaultPath = vaultPath;
|
||||
@@ -70,11 +75,6 @@ public class ChooseExistingVaultController implements FxController {
|
||||
return new Image((Objects.requireNonNull(getClass().getResource(imageResourcePath)).toString()));
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void back() {
|
||||
window.setScene(welcomeScene.get());
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void chooseFileAndNext() {
|
||||
FileChooser fileChooser = new FileChooser();
|
||||
|
||||
@@ -17,7 +17,6 @@ import javafx.scene.Scene;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.stage.Stage;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@AddVaultWizardScoped
|
||||
@@ -27,16 +26,17 @@ public class CreateNewVaultNameController implements FxController {
|
||||
|
||||
public TextField textField;
|
||||
private final Stage window;
|
||||
private final Lazy<Scene> welcomeScene;
|
||||
private final Lazy<Scene> chooseLocationScene;
|
||||
private final ObjectProperty<Path> vaultPath;
|
||||
private final StringProperty vaultName;
|
||||
private final BooleanBinding validVaultName;
|
||||
|
||||
@Inject
|
||||
CreateNewVaultNameController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, ObjectProperty<Path> vaultPath, @Named("vaultName") StringProperty vaultName, ResourceBundle resourceBundle) {
|
||||
CreateNewVaultNameController(@AddVaultWizardWindow Stage window, //
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, //
|
||||
ObjectProperty<Path> vaultPath, //
|
||||
@Named("vaultName") StringProperty vaultName) {
|
||||
this.window = window;
|
||||
this.welcomeScene = welcomeScene;
|
||||
this.chooseLocationScene = chooseLocationScene;
|
||||
this.vaultPath = vaultPath;
|
||||
this.vaultName = vaultName;
|
||||
@@ -58,11 +58,6 @@ public class CreateNewVaultNameController implements FxController {
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void back() {
|
||||
window.setScene(welcomeScene.get());
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void next() {
|
||||
window.setScene(chooseLocationScene.get());
|
||||
|
||||
@@ -8,7 +8,6 @@ public enum FxmlFile {
|
||||
ADDVAULT_NEW_PASSWORD("/fxml/addvault_new_password.fxml"), //
|
||||
ADDVAULT_NEW_RECOVERYKEY("/fxml/addvault_new_recoverykey.fxml"), //
|
||||
ADDVAULT_SUCCESS("/fxml/addvault_success.fxml"), //
|
||||
ADDVAULT_WELCOME("/fxml/addvault_welcome.fxml"), //
|
||||
CHANGEPASSWORD("/fxml/changepassword.fxml"), //
|
||||
CONVERTVAULT_HUBTOPASSWORD_START("/fxml/convertvault_hubtopassword_start.fxml"), //
|
||||
CONVERTVAULT_HUBTOPASSWORD_CONVERT("/fxml/convertvault_hubtopassword_convert.fxml"), //
|
||||
|
||||
@@ -42,19 +42,20 @@ 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://gist.githubusercontent.com/cryptobot/accba9fb9555e7192271b85606f97230/raw/errorcodes.json";
|
||||
private static final String ERROR_CODES_URL = "https://api.cryptomator.org/desktop/error-codes.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 ";
|
||||
private static final String REPORT_BODY_TEMPLATE = """
|
||||
<!-- 💚 Thank you for reporting this error. -->
|
||||
OS: %s / %s
|
||||
App: %s / %s
|
||||
|
||||
<!-- ✏ Please describe what happened as accurately as possible. -->
|
||||
|
||||
<!-- 📋 Please also copy and paste the detail text from the error window. -->
|
||||
|
||||
<!-- ℹ Text enclosed like this (chevrons, exclamation mark, two dashes) is not visible to others! -->
|
||||
Description:
|
||||
|
||||
<!-- 📋 Please also copy and paste the details from the error window. -->
|
||||
Details:
|
||||
|
||||
<!-- ❗ If the description or the detail text is missing, the discussion will be deleted. -->
|
||||
""";
|
||||
@@ -65,11 +66,13 @@ 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) {
|
||||
@@ -79,15 +82,7 @@ public class ErrorController implements FxController {
|
||||
this.previousScene = previousScene;
|
||||
this.window = window;
|
||||
this.environment = environment;
|
||||
|
||||
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);
|
||||
this.executorService = executorService;
|
||||
}
|
||||
|
||||
@FXML
|
||||
@@ -140,6 +135,24 @@ 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());
|
||||
@@ -293,4 +306,12 @@ 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/updates/latestVersion.json");
|
||||
private static final URI LATEST_VERSION_URI = URI.create("https://api.cryptomator.org/desktop/latest-version.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 -> accessNotGranted();
|
||||
case 403, 410 -> accessNotGranted(); // or vault has been archived, effectively disallowing access
|
||||
case 404 -> needsDeviceRegistration();
|
||||
default -> throw new IOException("Unexpected response " + response.statusCode());
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ public interface MainWindowComponent {
|
||||
default Stage showMainWindow() {
|
||||
Stage stage = window();
|
||||
stage.setScene(scene().get());
|
||||
stage.setIconified(false);
|
||||
stage.show();
|
||||
stage.toFront();
|
||||
stage.requestFocus();
|
||||
|
||||
@@ -16,6 +16,7 @@ import javafx.stage.Stage;
|
||||
public class MainWindowSceneFactory extends DefaultSceneFactory {
|
||||
|
||||
protected static final KeyCodeCombination SHORTCUT_N = new KeyCodeCombination(KeyCode.N, KeyCombination.SHORTCUT_DOWN);
|
||||
protected static final KeyCodeCombination SHORTCUT_O = new KeyCodeCombination(KeyCode.O, KeyCombination.SHORTCUT_DOWN);
|
||||
|
||||
private final Lazy<MainWindowTitleController> mainWindowTitleController;
|
||||
private final Lazy<VaultListController> vaultListController;
|
||||
@@ -34,6 +35,7 @@ public class MainWindowSceneFactory extends DefaultSceneFactory {
|
||||
} else {
|
||||
scene.getAccelerators().put(SHORTCUT_W, mainWindowTitleController.get()::close);
|
||||
}
|
||||
scene.getAccelerators().put(SHORTCUT_N, vaultListController.get()::didClickAddVault);
|
||||
scene.getAccelerators().put(SHORTCUT_N, vaultListController.get()::didClickAddNewVault);
|
||||
scene.getAccelerators().put(SHORTCUT_O, vaultListController.get()::didClickAddExistingVault);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.BooleanBinding;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.fxml.FXML;
|
||||
@@ -15,6 +14,7 @@ import javafx.scene.input.MouseEvent;
|
||||
import javafx.scene.layout.Region;
|
||||
import javafx.stage.Screen;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.stage.WindowEvent;
|
||||
|
||||
@MainWindow
|
||||
public class ResizeController implements FxController {
|
||||
@@ -53,48 +53,70 @@ public class ResizeController implements FxController {
|
||||
public void initialize() {
|
||||
LOG.trace("init ResizeController");
|
||||
|
||||
if (neverTouched()) {
|
||||
settings.displayConfiguration.set(getMonitorSizes());
|
||||
return;
|
||||
} else {
|
||||
if (didDisplayConfigurationChange()) {
|
||||
//If the position is illegal, then the window appears on the main screen in the middle of the window.
|
||||
Rectangle2D primaryScreenBounds = Screen.getPrimary().getBounds();
|
||||
window.setX((primaryScreenBounds.getWidth() - window.getMinWidth()) / 2);
|
||||
window.setY((primaryScreenBounds.getHeight() - window.getMinHeight()) / 2);
|
||||
window.setWidth(window.getMinWidth());
|
||||
window.setHeight(window.getMinHeight());
|
||||
} else {
|
||||
window.setHeight(settings.windowHeight.get() > window.getMinHeight() ? settings.windowHeight.get() : window.getMinHeight());
|
||||
window.setWidth(settings.windowWidth.get() > window.getMinWidth() ? settings.windowWidth.get() : window.getMinWidth());
|
||||
window.setX(settings.windowXPosition.get());
|
||||
window.setY(settings.windowYPosition.get());
|
||||
}
|
||||
if (!neverTouched()) {
|
||||
window.setHeight(settings.windowHeight.get() > window.getMinHeight() ? settings.windowHeight.get() : window.getMinHeight());
|
||||
window.setWidth(settings.windowWidth.get() > window.getMinWidth() ? settings.windowWidth.get() : window.getMinWidth());
|
||||
window.setX(settings.windowXPosition.get());
|
||||
window.setY(settings.windowYPosition.get());
|
||||
}
|
||||
savePositionalSettings();
|
||||
|
||||
window.setOnShowing(this::checkDisplayBounds);
|
||||
}
|
||||
|
||||
private boolean neverTouched() {
|
||||
return (settings.windowHeight.get() == 0) && (settings.windowWidth.get() == 0) && (settings.windowXPosition.get() == 0) && (settings.windowYPosition.get() == 0);
|
||||
}
|
||||
|
||||
private boolean didDisplayConfigurationChange() {
|
||||
String currentDisplayConfiguration = getMonitorSizes();
|
||||
String settingsDisplayConfiguration = settings.displayConfiguration.get();
|
||||
boolean configurationHasChanged = !settingsDisplayConfiguration.equals(currentDisplayConfiguration);
|
||||
if (configurationHasChanged) settings.displayConfiguration.set(currentDisplayConfiguration);
|
||||
return configurationHasChanged;
|
||||
private boolean isWithinDisplayBounds() {
|
||||
// (x1, y1) is the top left corner of the window, (x2, y2) is the bottom right corner
|
||||
final double slack = 10;
|
||||
final double width = window.getWidth() - 2 * slack;
|
||||
final double height = window.getHeight() - 2 * slack;
|
||||
final double x1 = window.getX() + slack;
|
||||
final double y1 = window.getY() + slack;
|
||||
final double x2 = x1 + width;
|
||||
final double y2 = y1 + height;
|
||||
|
||||
final ObservableList<Screen> screens = Screen.getScreensForRectangle(x1, y1, width, height);
|
||||
|
||||
// Find the total visible area of the window
|
||||
double visibleArea = 0;
|
||||
for (Screen screen : screens) {
|
||||
Rectangle2D bounds = screen.getVisualBounds();
|
||||
|
||||
double xOverlap = Math.min(x2, bounds.getMaxX()) - Math.max(x1, bounds.getMinX());
|
||||
double yOverlap = Math.min(y2, bounds.getMaxY()) - Math.max(y1, bounds.getMinY());
|
||||
|
||||
visibleArea += xOverlap * yOverlap;
|
||||
}
|
||||
|
||||
final double windowArea = width * height;
|
||||
|
||||
// Within bounds if the visible area matches the window area
|
||||
return visibleArea == windowArea;
|
||||
}
|
||||
|
||||
private String getMonitorSizes() {
|
||||
ObservableList<Screen> screens = Screen.getScreens();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < screens.size(); i++) {
|
||||
Rectangle2D screenBounds = screens.get(i).getBounds();
|
||||
if (!sb.isEmpty()) sb.append(" ");
|
||||
sb.append("displayId: " + i + ", " + screenBounds.getWidth() + "x" + screenBounds.getHeight() + ";");
|
||||
private void checkDisplayBounds(WindowEvent evt) {
|
||||
|
||||
// Minimizing a window in Windows and closing it could result in an out of bounds position at (x, y) = (-32000, -32000)
|
||||
// See https://devblogs.microsoft.com/oldnewthing/20041028-00/?p=37453
|
||||
// If the position is (-32000, -32000), restore to the last saved position
|
||||
if (window.getX() == -32000 && window.getY() == -32000) {
|
||||
window.setX(settings.windowXPosition.get());
|
||||
window.setY(settings.windowYPosition.get());
|
||||
window.setWidth(settings.windowWidth.get());
|
||||
window.setHeight(settings.windowHeight.get());
|
||||
}
|
||||
|
||||
if (!isWithinDisplayBounds()) {
|
||||
// If the position is illegal, then the window appears on the main screen in the middle of the window.
|
||||
Rectangle2D primaryScreenBounds = Screen.getPrimary().getBounds();
|
||||
window.setX((primaryScreenBounds.getWidth() - window.getMinWidth()) / 2);
|
||||
window.setY((primaryScreenBounds.getHeight() - window.getMinHeight()) / 2);
|
||||
window.setWidth(window.getMinWidth());
|
||||
window.setHeight(window.getMinHeight());
|
||||
savePositionalSettings();
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private void startResize(MouseEvent evt) {
|
||||
@@ -183,5 +205,4 @@ public class ResizeController implements FxController {
|
||||
public boolean isShowResizingArrows() {
|
||||
return showResizingArrows.get();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -20,7 +20,9 @@ import javafx.beans.property.SimpleBooleanProperty;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.collections.ListChangeListener;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.event.Event;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.ListView;
|
||||
import javafx.scene.input.ContextMenuEvent;
|
||||
import javafx.scene.input.DragEvent;
|
||||
@@ -34,6 +36,7 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.EnumSet;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -59,12 +62,21 @@ public class VaultListController implements FxController {
|
||||
private final RemoveVaultComponent.Builder removeVaultDialogue;
|
||||
private final VaultListManager vaultListManager;
|
||||
private final BooleanProperty draggingVaultOver = new SimpleBooleanProperty();
|
||||
private final ResourceBundle resourceBundle;
|
||||
|
||||
public ListView<Vault> vaultList;
|
||||
public StackPane root;
|
||||
public Button addVaultBtn;
|
||||
|
||||
@Inject
|
||||
VaultListController(@MainWindow Stage mainWindow, ObservableList<Vault> vaults, ObjectProperty<Vault> selectedVault, VaultListCellFactory cellFactory, AddVaultWizardComponent.Builder addVaultWizard, RemoveVaultComponent.Builder removeVaultDialogue, VaultListManager vaultListManager) {
|
||||
VaultListController(@MainWindow Stage mainWindow, //
|
||||
ObservableList<Vault> vaults, //
|
||||
ObjectProperty<Vault> selectedVault, //
|
||||
VaultListCellFactory cellFactory, //
|
||||
AddVaultWizardComponent.Builder addVaultWizard, //
|
||||
RemoveVaultComponent.Builder removeVaultDialogue, //
|
||||
VaultListManager vaultListManager, //
|
||||
ResourceBundle resourceBundle) {
|
||||
this.mainWindow = mainWindow;
|
||||
this.vaults = vaults;
|
||||
this.selectedVault = selectedVault;
|
||||
@@ -72,6 +84,7 @@ public class VaultListController implements FxController {
|
||||
this.addVaultWizard = addVaultWizard;
|
||||
this.removeVaultDialogue = removeVaultDialogue;
|
||||
this.vaultListManager = vaultListManager;
|
||||
this.resourceBundle = resourceBundle;
|
||||
|
||||
this.emptyVaultList = Bindings.isEmpty(vaults);
|
||||
|
||||
@@ -127,6 +140,15 @@ public class VaultListController implements FxController {
|
||||
root.setOnDragOver(this::handleDragEvent);
|
||||
root.setOnDragDropped(this::handleDragEvent);
|
||||
root.setOnDragExited(this::handleDragEvent);
|
||||
|
||||
addVaultBtn.addEventFilter(ContextMenuEvent.CONTEXT_MENU_REQUESTED, Event::consume);
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void showMenu() {
|
||||
double screenX = addVaultBtn.localToScreen(addVaultBtn.getBoundsInLocal()).getMinX();
|
||||
double screenY = addVaultBtn.localToScreen(addVaultBtn.getBoundsInLocal()).getMaxY();
|
||||
addVaultBtn.getContextMenu().show(addVaultBtn, screenX, screenY);
|
||||
}
|
||||
|
||||
private void deselect(MouseEvent released) {
|
||||
@@ -144,8 +166,13 @@ public class VaultListController implements FxController {
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void didClickAddVault() {
|
||||
addVaultWizard.build().showAddVaultWizard();
|
||||
public void didClickAddNewVault() {
|
||||
addVaultWizard.build().showAddNewVaultWizard(resourceBundle);
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void didClickAddExistingVault() {
|
||||
addVaultWizard.build().showAddExistingVaultWizard(resourceBundle);
|
||||
}
|
||||
|
||||
private void pressedShortcutToRemoveVault() {
|
||||
|
||||
@@ -7,6 +7,7 @@ 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;
|
||||
@@ -14,6 +15,7 @@ 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;
|
||||
@@ -23,7 +25,12 @@ 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 {
|
||||
@@ -32,6 +39,7 @@ public class AwtTrayMenuController implements TrayMenuController {
|
||||
|
||||
private final PopupMenu menu = new PopupMenu();
|
||||
private TrayIcon trayIcon;
|
||||
private Image image;
|
||||
|
||||
@CheckAvailability
|
||||
public static boolean isAvailable() {
|
||||
@@ -39,8 +47,9 @@ public class AwtTrayMenuController implements TrayMenuController {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showTrayIcon(byte[] imageData, Runnable defaultAction, String tooltip) throws TrayMenuException {
|
||||
var image = Toolkit.getDefaultToolkit().createImage(imageData);
|
||||
public void showTrayIcon(Consumer<TrayIconLoader> iconLoader, Runnable defaultAction, String tooltip) throws TrayMenuException {
|
||||
TrayIconLoader.PngData callback = this::showTrayIconWithPngData;
|
||||
iconLoader.accept(callback);
|
||||
trayIcon = new TrayIcon(image, tooltip, menu);
|
||||
|
||||
trayIcon.setImageAutoSize(true);
|
||||
@@ -56,8 +65,17 @@ public class AwtTrayMenuController implements TrayMenuController {
|
||||
}
|
||||
}
|
||||
|
||||
private void showTrayIconWithPngData(byte[] imageData) {
|
||||
image = Toolkit.getDefaultToolkit().createImage(imageData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTrayIcon(byte[] imageData) {
|
||||
public void updateTrayIcon(Consumer<TrayIconLoader> iconLoader) {
|
||||
TrayIconLoader.PngData callback = this::updateTrayIconWithPngData;
|
||||
iconLoader.accept(callback);
|
||||
}
|
||||
|
||||
private void updateTrayIconWithPngData(byte[] imageData) {
|
||||
if (trayIcon == null) {
|
||||
throw new IllegalStateException("Failed to update the icon as it has not yet been added");
|
||||
}
|
||||
@@ -100,5 +118,4 @@ public class AwtTrayMenuController implements TrayMenuController {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ 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;
|
||||
@@ -65,7 +66,12 @@ public class TrayMenuBuilder {
|
||||
});
|
||||
|
||||
try {
|
||||
trayMenu.showTrayIcon(getAppropriateTrayIconImage(), this::showMainWindow, "Cryptomator");
|
||||
trayMenu.showTrayIcon(loader -> {
|
||||
switch (loader) {
|
||||
case TrayIconLoader.PngData l -> l.loadPng(getAppropriateTrayIconImage());
|
||||
case TrayIconLoader.FreedesktopIconName l -> l.lookupByName(getAppropriateFreedesktopIconName());
|
||||
}
|
||||
}, this::showMainWindow, "Cryptomator");
|
||||
trayMenu.onBeforeOpenMenu(() -> {
|
||||
for (Vault vault : vaults) {
|
||||
VaultListManager.redetermineVaultState(vault);
|
||||
@@ -84,7 +90,12 @@ public class TrayMenuBuilder {
|
||||
|
||||
private void vaultListChanged(@SuppressWarnings("unused") Observable observable) {
|
||||
assert Platform.isFxApplicationThread();
|
||||
trayMenu.updateTrayIcon(getAppropriateTrayIconImage());
|
||||
trayMenu.updateTrayIcon(loader -> {
|
||||
switch (loader) {
|
||||
case TrayIconLoader.PngData l -> l.loadPng(getAppropriateTrayIconImage());
|
||||
case TrayIconLoader.FreedesktopIconName l -> l.lookupByName(getAppropriateFreedesktopIconName());
|
||||
}
|
||||
});
|
||||
rebuildMenu();
|
||||
}
|
||||
|
||||
@@ -173,4 +184,8 @@ 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,7 +1,12 @@
|
||||
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.MountPointNotExistsException;
|
||||
import org.cryptomator.common.mount.MountPointNotEmptyDirectoryException;
|
||||
import org.cryptomator.common.mount.MountPointNotExistingException;
|
||||
import org.cryptomator.common.mount.MountPointNotSupportedException;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
@@ -9,12 +14,15 @@ 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
|
||||
@@ -23,28 +31,31 @@ public class UnlockInvalidMountPointController implements FxController {
|
||||
private final Stage window;
|
||||
private final Vault vault;
|
||||
private final FxApplicationWindows appWindows;
|
||||
private final ResourceBundle resourceBundle;
|
||||
private final ExceptionType exceptionType;
|
||||
private final String exceptionMessage;
|
||||
|
||||
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;
|
||||
|
||||
public FormattedLabel dialogDescription;
|
||||
|
||||
@Inject
|
||||
UnlockInvalidMountPointController(@UnlockWindow Stage window, @UnlockWindow Vault vault, @UnlockWindow AtomicReference<Throwable> unlockException, FxApplicationWindows appWindows, ResourceBundle resourceBundle) {
|
||||
UnlockInvalidMountPointController(@UnlockWindow Stage window, @UnlockWindow Vault vault, @UnlockWindow ObjectProperty<IllegalMountPointException> illegalMountPointException, FxApplicationWindows appWindows, ResourceBundle resourceBundle) {
|
||||
this.window = window;
|
||||
this.vault = vault;
|
||||
this.appWindows = appWindows;
|
||||
this.resourceBundle = resourceBundle;
|
||||
|
||||
var exc = unlockException.get();
|
||||
this.exceptionType = getExceptionType(exc);
|
||||
this.exceptionMessage = exc.getMessage();
|
||||
}
|
||||
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);
|
||||
|
||||
@FXML
|
||||
public void initialize() {
|
||||
dialogDescription.setFormat(resourceBundle.getString(exceptionType.translationKey));
|
||||
dialogDescription.setArg1(exceptionMessage);
|
||||
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
|
||||
@@ -67,8 +78,11 @@ public class UnlockInvalidMountPointController implements FxController {
|
||||
private ExceptionType getExceptionType(Throwable unlockException) {
|
||||
return switch (unlockException) {
|
||||
case MountPointNotSupportedException x -> ExceptionType.NOT_SUPPORTED;
|
||||
case MountPointNotExistsException x -> ExceptionType.NOT_EXISTING;
|
||||
case MountPointNotExistingException 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;
|
||||
};
|
||||
}
|
||||
@@ -78,12 +92,15 @@ 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(String translationKey, ButtonAction action) {
|
||||
ExceptionType(@PropertyKey(resourceBundle = "i18n.strings") String translationKey, ButtonAction action) {
|
||||
this.translationKey = translationKey;
|
||||
this.action = action;
|
||||
}
|
||||
@@ -91,6 +108,7 @@ 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;
|
||||
|
||||
@@ -98,11 +116,51 @@ public class UnlockInvalidMountPointController implements FxController {
|
||||
|
||||
/* Getter */
|
||||
|
||||
public boolean isShowPreferences() {
|
||||
return exceptionType.action == ButtonAction.SHOW_PREFERENCES;
|
||||
public Path getExceptionPath() {
|
||||
return exceptionPath.getValue();
|
||||
}
|
||||
|
||||
public boolean isShowVaultOptions() {
|
||||
return exceptionType.action == ButtonAction.SHOW_VAULT_OPTIONS;
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ 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;
|
||||
@@ -18,12 +19,13 @@ 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 {
|
||||
@@ -61,8 +63,8 @@ abstract class UnlockModule {
|
||||
@Provides
|
||||
@UnlockWindow
|
||||
@UnlockScoped
|
||||
static AtomicReference<Throwable> unlockException() {
|
||||
return new AtomicReference<>();
|
||||
static ObjectProperty<IllegalMountPointException> illegalMountPointException() {
|
||||
return new SimpleObjectProperty<>();
|
||||
}
|
||||
|
||||
@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 AtomicReference<Throwable> unlockFailedException;
|
||||
private final ObjectProperty<IllegalMountPointException> illegalMountPointException;
|
||||
|
||||
@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 AtomicReference<Throwable> unlockFailedException) {
|
||||
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) {
|
||||
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.unlockFailedException = unlockFailedException;
|
||||
this.illegalMountPointException = illegalMountPointException;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -79,7 +79,7 @@ public class UnlockWorkflow extends Task<Boolean> {
|
||||
|
||||
private void handleIllegalMountPointError(IllegalMountPointException impe) {
|
||||
Platform.runLater(() -> {
|
||||
unlockFailedException.set(impe);
|
||||
illegalMountPointException.set(impe);
|
||||
window.setScene(invalidMountPointScene.get());
|
||||
window.show();
|
||||
});
|
||||
|
||||
@@ -795,6 +795,16 @@
|
||||
-fx-scale-shape: false;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* Add Vault - MenuItem *
|
||||
* *
|
||||
******************************************************************************/
|
||||
|
||||
.add-vault-menu-item {
|
||||
-fx-padding: 4px 8px;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* ProgressBar *
|
||||
|
||||
@@ -794,6 +794,16 @@
|
||||
-fx-scale-shape: false;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* Add Vault - MenuItem *
|
||||
* *
|
||||
******************************************************************************/
|
||||
|
||||
.add-vault-menu-item {
|
||||
-fx-padding: 4px 8px;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* ProgressBar *
|
||||
|
||||
@@ -24,9 +24,8 @@
|
||||
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="B+X">
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="+X">
|
||||
<buttons>
|
||||
<Button text="%generic.button.back" ButtonBar.buttonData="BACK_PREVIOUS" onAction="#back"/>
|
||||
<Button fx:id="finishButton" text="%addvaultwizard.existing.chooseBtn" ButtonBar.buttonData="NEXT_FORWARD" onAction="#chooseFileAndNext" defaultButton="true"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
|
||||
@@ -68,9 +68,8 @@
|
||||
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="B+X">
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="+X">
|
||||
<buttons>
|
||||
<Button text="%generic.button.back" ButtonBar.buttonData="BACK_PREVIOUS" onAction="#back"/>
|
||||
<Button text="%generic.button.next" ButtonBar.buttonData="NEXT_FORWARD" onAction="#next" defaultButton="true" disable="${!controller.validVaultName}"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.image.Image?>
|
||||
<?import javafx.scene.image.ImageView?>
|
||||
<?import javafx.scene.layout.Region?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:controller="org.cryptomator.ui.addvaultwizard.AddVaultWelcomeController"
|
||||
prefWidth="450"
|
||||
prefHeight="450"
|
||||
spacing="12"
|
||||
alignment="TOP_CENTER">
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="24"/>
|
||||
</padding>
|
||||
<children>
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
|
||||
<ImageView VBox.vgrow="ALWAYS" fitHeight="128" preserveRatio="true" smooth="true" cache="true">
|
||||
<Image url="@../img/logo.png"/>
|
||||
</ImageView>
|
||||
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
|
||||
<VBox alignment="CENTER" spacing="9">
|
||||
<Button styleClass="button-large" text="%addvaultwizard.welcome.newButton" onAction="#createNewVault" prefWidth="Infinity">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="MAGIC" glyphSize="15"/>
|
||||
</graphic>
|
||||
</Button>
|
||||
<Button styleClass="button-large" text="%addvaultwizard.welcome.existingButton" onAction="#chooseExistingVault" prefWidth="Infinity">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="FOLDER_OPEN" glyphSize="15"/>
|
||||
</graphic>
|
||||
</Button>
|
||||
</VBox>
|
||||
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
</children>
|
||||
</VBox>
|
||||
@@ -32,25 +32,37 @@
|
||||
</StackPane>
|
||||
<VBox spacing="6" HBox.hgrow="ALWAYS">
|
||||
<FormattedLabel styleClass="label-extra-large" format="%error.message" arg1="${controller.errorCode}"/>
|
||||
<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 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>
|
||||
</VBox>
|
||||
</VBox>
|
||||
</HBox>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</padding>
|
||||
</Label>
|
||||
|
||||
<FormattedLabel fx:id="dialogDescription" wrapText="true" textAlignment="LEFT"/>
|
||||
<FormattedLabel fx:id="dialogDescription" wrapText="true" textAlignment="LEFT" format="${controller.format}" arg1="${controller.exceptionPath}" arg2="${controller.exceptionMessage}" arg3="${controller.hideawayPath}"/>
|
||||
|
||||
<Region VBox.vgrow="ALWAYS" minHeight="18"/>
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="+CI">
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
<?import javafx.scene.layout.StackPane?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.shape.Arc?>
|
||||
<?import javafx.scene.control.ContextMenu?>
|
||||
<?import javafx.scene.control.MenuItem?>
|
||||
<StackPane xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:id="root"
|
||||
@@ -26,10 +28,26 @@
|
||||
<Arc VBox.vgrow="NEVER" styleClass="onboarding-overlay-arc" type="OPEN" centerX="50" centerY="0" radiusY="100" radiusX="50" startAngle="0" length="-60" strokeWidth="1"/>
|
||||
</VBox>
|
||||
</StackPane>
|
||||
<Button styleClass="toolbar-button" text="%main.vaultlist.addVaultBtn" onAction="#didClickAddVault" alignment="BASELINE_CENTER" maxWidth="Infinity">
|
||||
<Button fx:id="addVaultBtn" onAction="#showMenu" styleClass="toolbar-button" text="%main.vaultlist.addVaultBtn" alignment="BASELINE_CENTER" maxWidth="Infinity" contentDisplay="RIGHT">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="PLUS"/>
|
||||
<FontAwesome5IconView glyph="CARET_DOWN"/>
|
||||
</graphic>
|
||||
<contextMenu>
|
||||
<ContextMenu>
|
||||
<items>
|
||||
<MenuItem styleClass="add-vault-menu-item" text="%main.vaultlist.addVaultBtn.menuItemNew" onAction="#didClickAddNewVault" >
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="PLUS" textAlignment="CENTER" wrappingWidth="14" />
|
||||
</graphic>
|
||||
</MenuItem>
|
||||
<MenuItem styleClass="add-vault-menu-item" text="%main.vaultlist.addVaultBtn.menuItemExisting" onAction="#didClickAddExistingVault" >
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="FOLDER_OPEN" textAlignment="CENTER" wrappingWidth="14" />
|
||||
</graphic>
|
||||
</MenuItem>
|
||||
</items>
|
||||
</ContextMenu>
|
||||
</contextMenu>
|
||||
</Button>
|
||||
</VBox>
|
||||
<Region styleClass="drag-n-drop-border" visible="${controller.draggingVaultOver}"/>
|
||||
|
||||
@@ -23,7 +23,9 @@ 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
|
||||
@@ -39,10 +41,8 @@ traymenu.vault.reveal=Reveal
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Add Vault
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Create New Vault
|
||||
addvaultwizard.welcome.existingButton=Open Existing Vault
|
||||
## New
|
||||
addvaultwizard.new.title=Add New Vault
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Choose a name for the vault
|
||||
addvaultwizard.new.namePrompt=Vault Name
|
||||
@@ -92,6 +92,7 @@ addvault.new.readme.accessLocation.2=This is your vault's access location.
|
||||
addvault.new.readme.accessLocation.3=Any files added to this volume will be encrypted by Cryptomator. You can work on it like on any other drive/folder. This is only a decrypted view of its content, your files stay encrypted on your hard drive all the time.
|
||||
addvault.new.readme.accessLocation.4=Feel free to remove this file.
|
||||
## Existing
|
||||
addvaultwizard.existing.title=Add Existing Vault
|
||||
addvaultwizard.existing.instruction=Choose the "vault.cryptomator" file of your existing vault. If only a file named "masterkey.cryptomator" exists, select that instead.
|
||||
addvaultwizard.existing.chooseBtn=Choose…
|
||||
addvaultwizard.existing.filePickerTitle=Select Vault File
|
||||
@@ -136,8 +137,11 @@ 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=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
|
||||
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 unlocking 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
|
||||
## 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.
|
||||
@@ -362,7 +366,9 @@ main.vaultlist.contextMenu.unlock=Unlock…
|
||||
main.vaultlist.contextMenu.unlockNow=Unlock Now
|
||||
main.vaultlist.contextMenu.vaultoptions=Show Vault Options
|
||||
main.vaultlist.contextMenu.reveal=Reveal Drive
|
||||
main.vaultlist.addVaultBtn=Add Vault
|
||||
main.vaultlist.addVaultBtn=Add
|
||||
main.vaultlist.addVaultBtn.menuItemNew=New Vault...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Existing Vault...
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Thanks for choosing Cryptomator to protect your files. If you need any assistance, check out our getting started guides:
|
||||
|
||||
@@ -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,13 +16,22 @@ 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=افتح
|
||||
@@ -31,13 +40,10 @@ traymenu.vault.reveal=إظهار
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=أضِف مخزنًا
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=إنشاء مخزن جديد
|
||||
addvaultwizard.welcome.existingButton=افتح مخزن موجود
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=اختر اسم للمخزن
|
||||
addvaultwizard.new.namePrompt=اسم المخزن
|
||||
addvaultwizard.new.namePrompt=اسم الخزينة
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=أين يجب على Cryptomator تخزين الملفات المشفرة للمخزن الخاص بك؟
|
||||
addvaultwizard.new.locationLabel=موقع التخزين
|
||||
@@ -49,6 +55,18 @@ 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=لن تتمكن من الوصول إلى بياناتك بدون كلمة المرور الخاصة بك. هل تريد مفتاح استرداد في حالة فقدان كلمة المرور الخاصة بك؟
|
||||
@@ -56,7 +74,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=• تغيير أي ملفات داخل هذا الدليل أو
|
||||
@@ -72,13 +90,17 @@ 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=احذف الحافظة
|
||||
|
||||
@@ -89,34 +111,69 @@ 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.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.
|
||||
@@ -152,11 +209,50 @@ 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بنية المخزن عادية.
|
||||
health.result.fixStateFilter.notFixable=غير قابل للإصلاح
|
||||
health.result.fixStateFilter.fixing=يتم الإصلاح…
|
||||
health.result.fixStateFilter.fixed=تم الإصلاح
|
||||
health.result.fixStateFilter.fixFailed=فشل الإصلاح
|
||||
## Fix Application
|
||||
health.fix.fixBtn=إصلاح
|
||||
health.fix.successTip=تم الإصلاح بنجاح
|
||||
health.fix.failTip=فشل الإصلاح، راجع السجل للحصول على التفاصيل
|
||||
|
||||
# Preferences
|
||||
preferences.title=تفضيلات
|
||||
@@ -196,6 +292,8 @@ 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
|
||||
@@ -215,7 +313,7 @@ main.vaultlist.contextMenu.unlock=فتح…
|
||||
main.vaultlist.contextMenu.unlockNow=افتح الان
|
||||
main.vaultlist.contextMenu.vaultoptions=إظهار خيارات المخزن
|
||||
main.vaultlist.contextMenu.reveal=اظهار القرص
|
||||
main.vaultlist.addVaultBtn=أضِف مخزنًا
|
||||
main.vaultlist.addVaultBtn=إضافة
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=شكرا لاختيار Cryptomator لحماية ملفاتك. إذا كنت بحاجة إلى أية مساعدة، تحقق من دليل وتعليمات الإستخدام:
|
||||
@@ -263,10 +361,11 @@ 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
|
||||
@@ -315,4 +414,6 @@ passwordStrength.messageLabel.4=قوية جداً
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=قفل و خروج
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -20,6 +20,8 @@ error.description=Cryptomator не чакаў такога павароту. Т
|
||||
error.hyperlink.lookup=Шукаць гэтую памылку
|
||||
error.hyperlink.report=Паведаміць пра гэтую памылку
|
||||
error.technicalDetails=Падрабязнасці:
|
||||
error.existingSolutionDescription=Cryptomator не чакаў такога, але мы знайшлі, як можна выправіць гэтую хібу. Калі ласка, скарыстайся спасылкаю.
|
||||
error.hyperlink.solution=Паглядзець на рашэнне
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Скарбніца
|
||||
@@ -35,9 +37,6 @@ traymenu.vault.reveal=Паказаць
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Дадаць скарбніцу
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Стварыць новую скарбніцу
|
||||
addvaultwizard.welcome.existingButton=Адчыніць існуючую скарбніцу
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Абраць назву для скарбніцы
|
||||
@@ -59,6 +58,7 @@ 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=Бяз гэтага пароля ты ня зможаш атрымаць доступ да сваіх даных. Ці хочаш ты мець ключ аднаўлення на выпадак, калі ты згубіш свой пароль?
|
||||
@@ -126,7 +126,6 @@ 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" ды абяры звязак ключоў у наладах.
|
||||
@@ -193,11 +192,15 @@ 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=Я прачытала і зразумела інфармацыю зверху
|
||||
@@ -270,8 +273,10 @@ 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=Аўтаматычны выбар пункту мантажавання
|
||||
@@ -345,9 +350,10 @@ main.vaultlist.contextMenu.unlock=Адамкнуць…
|
||||
main.vaultlist.contextMenu.unlockNow=Разамкнуць зараз
|
||||
main.vaultlist.contextMenu.vaultoptions=Паказаць параметры скарбніцы
|
||||
main.vaultlist.contextMenu.reveal=Паказаць дыск
|
||||
main.vaultlist.addVaultBtn=Дадаць скарбніцу
|
||||
main.vaultlist.addVaultBtn=Дадаць
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Дзякуй, што ты абраў Cryptomator для абароны тваіх файлаў. Калі табе патрэбна дапамога, калі ласка, паглядзі нашы інструкцыі:
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=ЗАМКНЁНА
|
||||
main.vaultDetail.unlockBtn=Адамкнуць…
|
||||
@@ -386,6 +392,7 @@ 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. Пстрыкні па "Паказаць"; каб адчыніць том у тваім файлавым мэнэджары.
|
||||
@@ -426,6 +433,7 @@ vaultOptions.masterkey.recoveryKeyExplanation=Ключ аднаўлення –
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=Паказаць ключ аднаўлення
|
||||
vaultOptions.masterkey.recoverPasswordBtn=Скінуць пароль
|
||||
## Hub
|
||||
vaultOptions.hub=Аднаўленне
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@@ -437,6 +445,7 @@ recoveryKey.display.StorageHints=Захоўвай іх у бяспечным м
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Скінуць пароль
|
||||
recoveryKey.recover.prompt=Увядзі ключ аднаўлення для "%s":
|
||||
recoveryKey.recover.correctKey=Гэта валідны ключ аднаўлення
|
||||
recoveryKey.recover.wrongKey=Гэты ключ аднаўлення належыць іншай скарбніцы
|
||||
recoveryKey.recover.invalidKey=Несапраўдны ключ аднаўлення
|
||||
@@ -448,6 +457,10 @@ 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=Увядзі новы пароль
|
||||
@@ -470,4 +483,6 @@ quit.lockAndQuitBtn=Замкнуць ды вайсці
|
||||
# Forced Quit
|
||||
quit.forced.message=Некаторыя скарбніцы не магчыма замкнуць
|
||||
quit.forced.description=Замыканне скарбніц было заблакавана праз дзеючыя аперацыі альбо праз адчыненыя файлы. Ты можаш прымусова замкнуць скарбніцы, але гэта можа прывесці да страты незахаваных даных.
|
||||
quit.forced.forceAndQuitBtn=Прымусіць і выйсці
|
||||
quit.forced.forceAndQuitBtn=Прымусіць і выйсці
|
||||
|
||||
# Update Reminder
|
||||
@@ -35,9 +35,6 @@ traymenu.vault.reveal=Разкриване
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Добавяне на хранилище
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Ново хранилище
|
||||
addvaultwizard.welcome.existingButton=Отваряне на хранилище
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Изберете име на хранилището
|
||||
@@ -59,6 +56,7 @@ 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=Без парола няма да имате достъп до данните си. Желаете ли да бъде създаден ключ за възстановяване, в случай че загубите паролата си?
|
||||
@@ -118,17 +116,40 @@ 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
|
||||
@@ -140,6 +161,7 @@ hub.noKeychain.openBtn=Към настройките
|
||||
## Success
|
||||
migration.success.unlockNow=Отключване сега
|
||||
## Missing file system capabilities
|
||||
migration.error.missingFileSystemCapabilities.title=Неподдържана файлова система
|
||||
## Impossible
|
||||
|
||||
# Health Check
|
||||
@@ -166,7 +188,9 @@ 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 -->
|
||||
@@ -189,7 +213,6 @@ main.vaultlist.contextMenu.unlock=Отключване…
|
||||
main.vaultlist.contextMenu.unlockNow=Отключване сега
|
||||
main.vaultlist.contextMenu.vaultoptions=Настройки на хранилището
|
||||
main.vaultlist.contextMenu.reveal=Разкриване на диска
|
||||
main.vaultlist.addVaultBtn=Добавяне на хранилище
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
@@ -230,4 +253,6 @@ vaultOptions.masterkey.changePasswordBtn=Промяна на парола
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -33,9 +33,6 @@ traymenu.vault.lock=লক করুন
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=ভোল্ট যুক্ত করুন
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=নতুন ভোল্ট তৈরি করুন
|
||||
addvaultwizard.welcome.existingButton=বিদ্যমান কোনো ভোল্ট খুলুন
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=ভোল্ট এর একটি নাম দেন
|
||||
@@ -57,6 +54,7 @@ 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=পাসওয়ার্ড ছাড়া আপনি আপনার তথ্যগুলো ব্যবহার করতে পারবেন না. তাই আপনি কি একটি পুনরুদ্ধার চাবি চান যদি আপনি পাসওয়ার্ড হারিয়ে ফেলেন?
|
||||
@@ -138,7 +136,6 @@ lock.forced.retryBtn=পুনরায় চেষ্টা করুন
|
||||
main.closeBtn.tooltip=বন্ধ করুন
|
||||
## Vault List
|
||||
main.vaultlist.contextMenu.lock=লক করুন
|
||||
main.vaultlist.addVaultBtn=ভোল্ট যুক্ত করুন
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
@@ -172,4 +169,6 @@ vaultOptions.mount.mountPoint.directoryPickerButton=নির্বাচন ক
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -31,9 +31,6 @@ traymenu.vault.reveal=Otkrij
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Dodaj sef
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Kreiraj novi sef
|
||||
addvaultwizard.welcome.existingButton=Otvori postojeći sef
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Izaberi naziv za sef
|
||||
@@ -49,6 +46,7 @@ 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?
|
||||
@@ -218,7 +216,6 @@ main.vaultlist.contextMenu.unlock=Otključaj…
|
||||
main.vaultlist.contextMenu.unlockNow=Otključaj sada
|
||||
main.vaultlist.contextMenu.vaultoptions=Pokaži opcije sefa
|
||||
main.vaultlist.contextMenu.reveal=Otkrij pogon
|
||||
main.vaultlist.addVaultBtn=Dodaj sef
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Hvala što ste izabrali Cryptomator za zaštitu podataka. Ako vam je potrebna pomoć, pogledajte naše vodiče za početak:
|
||||
@@ -314,4 +311,6 @@ passwordStrength.messageLabel.4=Veoma sigurno
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=Zaključaj i zatvori
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -20,6 +20,8 @@ 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
|
||||
@@ -35,9 +37,6 @@ traymenu.vault.reveal=Mostra
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Afegir una caixa forta
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Crea una caixa forta nova
|
||||
addvaultwizard.welcome.existingButton=Obri una caixa forta existent
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Introduiu el nom de la caixa forta
|
||||
@@ -59,6 +58,7 @@ 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?
|
||||
@@ -126,7 +126,6 @@ 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.
|
||||
@@ -349,7 +348,7 @@ main.vaultlist.contextMenu.unlock=Desbloca…
|
||||
main.vaultlist.contextMenu.unlockNow=Desbloqueja ara
|
||||
main.vaultlist.contextMenu.vaultoptions=Opcions de la caixa forta
|
||||
main.vaultlist.contextMenu.reveal=Mostra la unitat
|
||||
main.vaultlist.addVaultBtn=Afegir una caixa forta
|
||||
main.vaultlist.addVaultBtn=Afegir
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Gràcies per escollir Cryptomator per protegir els vostres fitxers. Si vos cal ajuda, llegiu les nostres guies per donar els Primers passos:
|
||||
@@ -476,4 +475,6 @@ 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
|
||||
quit.forced.forceAndQuitBtn=Forçar i sortir
|
||||
|
||||
# Update Reminder
|
||||
@@ -20,6 +20,9 @@ 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
|
||||
@@ -35,9 +38,6 @@ traymenu.vault.reveal=Zobrazit
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Přidat trezor
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Vytvořit nový trezor
|
||||
addvaultwizard.welcome.existingButton=Otevřít existující trezor
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Zvolte jméno trezoru
|
||||
@@ -59,6 +59,12 @@ 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?
|
||||
@@ -123,11 +129,18 @@ 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í
|
||||
@@ -142,6 +155,7 @@ 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
|
||||
@@ -219,6 +233,11 @@ 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á
|
||||
@@ -250,6 +269,9 @@ 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
|
||||
@@ -272,21 +294,27 @@ 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
|
||||
@@ -310,7 +338,7 @@ main.vaultlist.contextMenu.unlock=Odemknout…
|
||||
main.vaultlist.contextMenu.unlockNow=Odemknout nyní
|
||||
main.vaultlist.contextMenu.vaultoptions=Zobrazit možnosti trezoru
|
||||
main.vaultlist.contextMenu.reveal=Zobrazit jednotku
|
||||
main.vaultlist.addVaultBtn=Přidat trezor
|
||||
main.vaultlist.addVaultBtn=Přidat
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Děkujeme, že jste si vybrali Cryptomator pro ochranu vašich souborů. Pokud potřebujete pomoc, podívejte se na naše návody:
|
||||
@@ -324,12 +352,16 @@ 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
|
||||
@@ -375,6 +407,7 @@ 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
|
||||
@@ -383,6 +416,9 @@ 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
|
||||
@@ -399,6 +435,7 @@ 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
|
||||
|
||||
@@ -418,4 +455,15 @@ passwordStrength.messageLabel.4=velmi silné
|
||||
quit.title=Ukončit aplikaci
|
||||
quit.lockAndQuitBtn=Uzamknout a zavřít
|
||||
|
||||
# Forced Quit
|
||||
# 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
|
||||
@@ -20,6 +20,8 @@ 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
|
||||
@@ -35,9 +37,6 @@ traymenu.vault.reveal=Vis
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Tilføj boks
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Opret ny boks
|
||||
addvaultwizard.welcome.existingButton=Open eksisterende boks
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Vælg et navn til boksen
|
||||
@@ -59,6 +58,12 @@ 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?
|
||||
@@ -126,7 +131,6 @@ 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.
|
||||
@@ -154,7 +158,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
|
||||
@@ -351,7 +355,7 @@ main.vaultlist.contextMenu.unlock=Lås op…
|
||||
main.vaultlist.contextMenu.unlockNow=Lås op nu
|
||||
main.vaultlist.contextMenu.vaultoptions=Vis boksindstillinger
|
||||
main.vaultlist.contextMenu.reveal=Vis drev
|
||||
main.vaultlist.addVaultBtn=Tilføj boks
|
||||
main.vaultlist.addVaultBtn=Tilføj
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Tak fordi du valgte Cryptomator til at beskytte dine filer. Hvis du har brug for hjælp, så tjek vores guider for at komme i gang:
|
||||
@@ -434,6 +438,9 @@ 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
|
||||
@@ -445,6 +452,7 @@ 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
|
||||
@@ -456,6 +464,11 @@ 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
|
||||
@@ -478,4 +491,12 @@ 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
|
||||
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
|
||||
@@ -20,6 +20,11 @@ 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
|
||||
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Anzeigen
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Tresor hinzufügen
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Neuen Tresor erstellen
|
||||
addvaultwizard.welcome.existingButton=Bestehenden Tresor öffnen
|
||||
## New
|
||||
addvaultwizard.new.title=Neuen Tresor hinzufügen
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Wähle einen Namen für den Tresor
|
||||
addvaultwizard.new.namePrompt=Tresorname
|
||||
@@ -59,6 +62,12 @@ 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?
|
||||
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Dies ist der Zugangsort deines Tresors.
|
||||
addvault.new.readme.accessLocation.3=Alle zu diesem Laufwerk hinzugefügten Dateien werden von Cryptomator verschlüsselt. Du kannst mit diesem arbeiten wie mit jedem anderen Laufwerk bzw. Ordner. Dies ist lediglich eine unverschlüsselte Ansicht des Laufwerkinhalts; auf deiner Festplatte bleiben deine Dateien weiterhin verschlüsselt.
|
||||
addvault.new.readme.accessLocation.4=Du kannst diese Datei löschen.
|
||||
## Existing
|
||||
addvaultwizard.existing.title=Bestehenden Tresor hinzufügen
|
||||
addvaultwizard.existing.instruction=Wähle die Datei „vault.cryptomator“ deines bestehenden Tresors aus. Falls nur eine Datei mit der Bezeichnung „masterkey.cryptomator“ vorhanden ist, nutze stattdessen diese.
|
||||
addvaultwizard.existing.chooseBtn=Durchsuchen …
|
||||
addvaultwizard.existing.filePickerTitle=Tresordatei auswählen
|
||||
@@ -123,10 +133,14 @@ 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 an benutzerdefinierten Pfad eingehängt werden
|
||||
unlock.error.customPath.message=Tresor kann nicht in 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. 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
|
||||
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
|
||||
## 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.
|
||||
@@ -155,7 +169,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 für deine Cryptomator Hub-Instanz ist ungültig. Bitte informiere einen Hub-Administrator, um die Lizenz zu aktualisieren oder zu erneuern.
|
||||
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.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -172,8 +186,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=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.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.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
|
||||
@@ -280,9 +294,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 Einhängepunkt Auswahl
|
||||
preferences.volume.feature.mountAuto=Automatische Auswahl des Einhängepunkts
|
||||
preferences.volume.feature.mountToDir=Benutzerdefiniertes Verzeichnis als Einhängepunkt
|
||||
preferences.volume.feature.mountToDriveLetter=Laufwerkbuchstaben als Einhängepunkt
|
||||
preferences.volume.feature.mountToDriveLetter=Laufwerksbuchstabe als Einhängepunkt
|
||||
preferences.volume.feature.mountFlags=Benutzerdefinierte Einhänge-Optionen
|
||||
preferences.volume.feature.readOnly=Schreibgeschütztes Einhängen
|
||||
## Updates
|
||||
@@ -334,7 +348,7 @@ stats.write.accessCount=Schreibzugriffe: %d
|
||||
|
||||
## Accesses
|
||||
stats.access.current=Zugriffe: %d
|
||||
stats.access.total=Gesamte Zugriffe: %d
|
||||
stats.access.total=Gesamtzugriffe: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
@@ -351,7 +365,9 @@ main.vaultlist.contextMenu.unlock=Entsperren …
|
||||
main.vaultlist.contextMenu.unlockNow=Jetzt entsperren
|
||||
main.vaultlist.contextMenu.vaultoptions=Tresoroptionen anzeigen
|
||||
main.vaultlist.contextMenu.reveal=Laufwerk anzeigen
|
||||
main.vaultlist.addVaultBtn=Tresor hinzufügen
|
||||
main.vaultlist.addVaultBtn=Hinzufügen
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Neuer Tresor...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Bestehender Tresor...
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Danke, dass du zum Schutz deiner Dateien Cryptomator gewählt hast. Falls du Hilfe brauchst, schau dir unsere Anleitungen an:
|
||||
@@ -423,9 +439,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=Ausgewähltes Verzeichnis verwenden
|
||||
vaultOptions.mount.mountPoint.custom=Gewähltes Verzeichnis verwenden
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Durchsuchen …
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Verzeichnis wählen
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Wähle ein Verzeichnis
|
||||
## Master Key
|
||||
vaultOptions.masterkey=Passwort
|
||||
vaultOptions.masterkey.changePasswordBtn=Passwort ändern
|
||||
@@ -436,7 +452,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 einen passwortgeschützten Tresor umwandeln
|
||||
vaultOptions.hub.convertBtn=In passwortgeschützten Tresor umwandeln
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@@ -448,7 +464,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
|
||||
@@ -460,11 +476,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 konvertieren
|
||||
convertVault.title=Tresor umwandeln
|
||||
convertVault.convert.convertBtn.before=Konvertieren
|
||||
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.
|
||||
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.
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=Gib ein neues Passwort ein
|
||||
@@ -487,4 +503,12 @@ 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
|
||||
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
|
||||
@@ -20,6 +20,11 @@ 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=Κρύπτη
|
||||
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Αποκάλυψη
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Προσθήκη Κρύπτης
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Δημιουργία Νέας Κρύπτης
|
||||
addvaultwizard.welcome.existingButton=Άνοιγμα Υπάρχοντος Κρύπτης
|
||||
## New
|
||||
addvaultwizard.new.title=Προσθήκη Νέας Κρύπτης
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Διαλέξτε ένα όνομα για την κρύπτη
|
||||
addvaultwizard.new.namePrompt=Όνομα Κρύπτης
|
||||
@@ -59,6 +62,12 @@ 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=Δεν θα μπορείτε να έχετε πρόσβαση στα δεδομένα σας χωρίς τον κωδικό σας. Θέλετε να δημιουργηθεί ένα κλειδί ανάκτησης στην περίπτωση που χάσετε τον κωδικό σας;
|
||||
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Αυτή είναι η τοποθεσία
|
||||
addvault.new.readme.accessLocation.3=Κάθε αρχείο που θα προστεθεί σε αυτό τον τόμο θα κωδικοποιηθεί από το Cryptomator. Μπορείτε να το επεξεργαστείτε όπως θα κάνατε σε κάθε δίσκο/φάκελο. Αυτή είναι μόνο για αποκρυπτογραφημένη μορφή των περιεχομένων του, τα αρχεία σας μένουν κωδικοποιημένα στον σκληρό σας δίσκο συνέχεια.
|
||||
addvault.new.readme.accessLocation.4=Μπορείτε ελεύθερα να αφαιρέσετε το αρχείο.
|
||||
## Existing
|
||||
addvaultwizard.existing.title=Προσθήκη Υπάρχοντος Κρύπτης
|
||||
addvaultwizard.existing.instruction=Επιλέξτε το αρχείο "vault.cryptomator" της υπάρχοντος κρύπτης. Αν υπάρχει μόνο ένα αρχείο με όνομα "masterkey.cryptomator", επιλέξτε αυτό.
|
||||
addvaultwizard.existing.chooseBtn=Επιλογή…
|
||||
addvaultwizard.existing.filePickerTitle=Επιλέξτε Αρχείο Κρύπτης
|
||||
@@ -126,7 +136,11 @@ unlock.success.revealBtn=Αποκάλυψη εικονικού δίσκου
|
||||
unlock.error.customPath.message=Αδυναμία προσάρτησης της κρύπτης στην προσαρμοσμένη διαδρομή
|
||||
unlock.error.customPath.description.notSupported=Εάν θέλετε να συνεχίσετε να χρησιμοποιείτε την προσαρμοσμένη διαδρομή, μεταβείτε στις προτιμήσεις και επιλέξτε έναν τύπο τόμου που την υποστηρίζει. Διαφορετικά, μεταβείτε στις επιλογές της κρύπτης και επιλέξτε ένα υποστηριζόμενο σημείο προσάρτησης.
|
||||
unlock.error.customPath.description.notExists=Η προσαρμοσμένη διαδρομή προσάρτησης δεν υπάρχει. Είτε δημιουργήστε την στο τοπικό σύστημα αρχείων σας είτε αλλάξτε την στις επιλογές κρύπτης.
|
||||
unlock.error.customPath.description.generic=Έχετε επιλέξει μια προσαρμοσμένη διαδρομή προσάρτησης για αυτή την κρύπτη, αλλά η χρήση της απέτυχε με το μήνυμα: %s
|
||||
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=Για να ξεκλειδώσετε τις κρύπτες Hub, απαιτείται ένα κλειδί συσκευής, το οποίο ασφαλίζεται με χρήση μπρελόκ. Για να συνεχίσετε, ενεργοποιήστε το "%s" και επιλέξτε ένα keychain στις προτιμήσεις.
|
||||
@@ -351,7 +365,9 @@ main.vaultlist.contextMenu.unlock=Ξεκλείδωμα…
|
||||
main.vaultlist.contextMenu.unlockNow=Ξεκλείδωμα τώρα
|
||||
main.vaultlist.contextMenu.vaultoptions=Εμφάνιση επιλογών Vault
|
||||
main.vaultlist.contextMenu.reveal=Αποκάλυψη εικονικού δίσκου
|
||||
main.vaultlist.addVaultBtn=Προσθήκη Κρύπτης
|
||||
main.vaultlist.addVaultBtn=Προσθήκη
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Νέα Κρύπτη...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Υπάρχουσα Κρύπτη...
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Ευχαριστούμε που επιλέξατε το Cryptomator για να προστατεύσετε τα αρχεία σας. Αν χρειάζεστε οποιαδήποτε βοήθεια, ελέγξτε τους οδηγούς για αρχάριους:
|
||||
@@ -487,4 +503,12 @@ quit.lockAndQuitBtn=Κλείδωμα και Έξοδος
|
||||
# Forced Quit
|
||||
quit.forced.message=Δεν ήταν δυνατό να κλειδωθούν ορισμένες κρύπτες
|
||||
quit.forced.description=Το κλείδωμα κρυπτών αποκλείστηκε από εκκρεμείς ενέργειες ή από ανοιχτά αρχεία. Μπορείτε να αναγκάσετε το κλείδωμα εναπομείναντων θησαυροφυλάκων, ωστόσο η διακοπή I/O μπορεί να οδηγήσει στην απώλεια μη αποθηκευμένων δεδομένων.
|
||||
quit.forced.forceAndQuitBtn=Εξαναγκασμός και Έξοδος
|
||||
quit.forced.forceAndQuitBtn=Εξαναγκασμός και Έξοδος
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Έλεγχος Ενημερώσεων
|
||||
updateReminder.message=Έλεγχος για ενημερώσεις;
|
||||
updateReminder.description=Μείνετε ενημερωμένοι με νέες δυνατότητες, διορθώσεις σφαλμάτων και βελτιώσεις ασφάλειας. Συνιστούμε τον αυτόματο έλεγχο για ενημερώσεις.
|
||||
updateReminder.notNow=Όχι Τώρα
|
||||
updateReminder.yesOnce=Ναι, Μία Φορά
|
||||
updateReminder.yesAutomatically=Ναι, Αυτόματα
|
||||
@@ -20,6 +20,11 @@ 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
|
||||
@@ -35,9 +40,6 @@ traymenu.vault.reveal=Revelar
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Añadir bóveda
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Crear bóveda nueva
|
||||
addvaultwizard.welcome.existingButton=Abrir bóveda existente
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Elegir un nombre para la bóveda
|
||||
@@ -59,6 +61,12 @@ 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?
|
||||
@@ -126,7 +134,11 @@ 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.generic=Seleccionó una ruta de montaje personalizada para esta bóveda, pero falló al usarla con el mensaje: %s
|
||||
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
|
||||
## 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.
|
||||
@@ -164,7 +176,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
|
||||
@@ -351,7 +363,7 @@ main.vaultlist.contextMenu.unlock=Desbloquear…
|
||||
main.vaultlist.contextMenu.unlockNow=Desbloquear ahora
|
||||
main.vaultlist.contextMenu.vaultoptions=Mostrar opciones de la bóveda
|
||||
main.vaultlist.contextMenu.reveal=Revelar unidad
|
||||
main.vaultlist.addVaultBtn=Añadir bóveda
|
||||
main.vaultlist.addVaultBtn=Añadir
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Gracias por elegir Cryptomator para proteger sus archivos. En caso de necesitar ayuda, revise nuestras guías:
|
||||
@@ -487,4 +499,12 @@ 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
|
||||
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
|
||||
@@ -30,9 +30,6 @@ traymenu.vault.reveal=ظاهر
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=اضافه کردن گاوصندوق
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=ساخت گاوصندوق جدید
|
||||
addvaultwizard.welcome.existingButton=باز کردن گاوصندوق موجود
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=یک نام برای گاوصندوق انتخاب کنید
|
||||
@@ -43,6 +40,7 @@ addvaultwizard.new.directoryPickerLabel=مکان سفارشی
|
||||
addvaultwizard.new.directoryPickerButton=انتخاب کنید…
|
||||
addvaultwizard.new.fileAlreadyExists=در حال حاضر یک فایل یا پوشه با همین نام وجود دارد
|
||||
addvaultwizard.new.validCharacters.numbers=اعداد
|
||||
### Expert Settings
|
||||
### Password
|
||||
### Information
|
||||
## Existing
|
||||
@@ -111,7 +109,6 @@ main.closeBtn.tooltip=ببند
|
||||
main.supporterCertificateMissing.tooltip=لطفا کمک مالی در نظر بگیرند
|
||||
## Vault List
|
||||
main.vaultlist.contextMenu.lock=قفل
|
||||
main.vaultlist.addVaultBtn=اضافه کردن گاوصندوق
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
@@ -145,4 +142,6 @@ vaultOptions.mount.mountPoint.directoryPickerButton=انتخاب کنید…
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -20,6 +20,8 @@ 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
|
||||
@@ -35,9 +37,6 @@ traymenu.vault.reveal=Paljasta
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Lisää Vault
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Luo Uusi Vault
|
||||
addvaultwizard.welcome.existingButton=Avaa Olemassaoleva Vault
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Anna uusi nimi Vaultille
|
||||
@@ -59,6 +58,7 @@ 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?
|
||||
@@ -126,7 +126,6 @@ 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.
|
||||
@@ -178,13 +177,28 @@ 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
|
||||
@@ -216,7 +230,6 @@ main.preferencesBtn.tooltip=Asetukset
|
||||
main.vaultlist.contextMenu.lock=Lukitse
|
||||
main.vaultlist.contextMenu.unlockNow=Avaa Nyt
|
||||
main.vaultlist.contextMenu.reveal=Paljasta Asema
|
||||
main.vaultlist.addVaultBtn=Lisää Vault
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
@@ -255,4 +268,6 @@ vaultOptions.masterkey.changePasswordBtn=Vaihda salasana
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -20,6 +20,7 @@ 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
|
||||
@@ -35,9 +36,6 @@ traymenu.vault.reveal=Ipakita
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Magdagdag ng Vault
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Gumawa ng Bagong Vault
|
||||
addvaultwizard.welcome.existingButton=Magbukas ng Umiiral na Vault
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Pangalanan ang vault
|
||||
@@ -49,6 +47,8 @@ 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
|
||||
@@ -69,6 +69,7 @@ removeVault.confirmBtn=Itangal ang vault
|
||||
# Change Password
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.message=Nakalimutan ang iyong password?
|
||||
|
||||
# Unlock
|
||||
unlock.savePassword=Maalala ang password
|
||||
@@ -135,7 +136,6 @@ main.closeBtn.tooltip=Isara
|
||||
main.preferencesBtn.tooltip=Mga Kagustuhan
|
||||
## Vault List
|
||||
main.vaultlist.contextMenu.lock=I-lock
|
||||
main.vaultlist.addVaultBtn=Magdagdag ng Vault
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
@@ -169,4 +169,7 @@ vaultOptions.mount.mountPoint.directoryPickerButton=Mamili…
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.message=I-tsek kung may bagong update?
|
||||
@@ -20,6 +20,11 @@ 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 trouver une solution à ce problème en ligne. Cela enverra une requête à notre base de données de problèmes à partir de votre adresse IP.
|
||||
error.dismiss=Ignorer
|
||||
error.lookUpSolution=Rechercher la solution
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Coffre
|
||||
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Révéler
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Ajouter un coffre
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Créer un nouveau coffre
|
||||
addvaultwizard.welcome.existingButton=Ouvrir un coffre existant
|
||||
## New
|
||||
addvaultwizard.new.title=Ajouter un nouveau coffre
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Choisir un nom pour le coffre
|
||||
addvaultwizard.new.namePrompt=Nom du coffre
|
||||
@@ -59,6 +62,12 @@ 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 d’accéder à vos données sans mot de passe. Souhaitez-vous créer une clé de secours en cas d'oubli du mot passe ?
|
||||
@@ -69,7 +78,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 les fichiers dans ce répertoire ni
|
||||
addvault.new.readme.storageLocation.4=• Modifier n'importe quel fichier dans ce répertoire ou
|
||||
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.
|
||||
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Ceci est le chemin d'accès de votre coffre
|
||||
addvault.new.readme.accessLocation.3=Tous les fichiers ajoutés à ce volume seront chiffrés par Cryptomator. Vous pouvez l'utiliser comme n'importe quel lecteur/répertoire. Ceci est seulement une vue déchiffrée de son contenu, vos fichiers restent chiffrés dans votre disque dur en permanence.
|
||||
addvault.new.readme.accessLocation.4=Vous pouvez supprimer ce fichier.
|
||||
## Existing
|
||||
addvaultwizard.existing.title=Ajouter un coffre existant
|
||||
addvaultwizard.existing.instruction=Choisissez le fichier « vault.cryptomator » de votre volume existant. Si seul le fichier « masterkey.cryptomator » est présent, sélectionnez celui-là.
|
||||
addvaultwizard.existing.chooseBtn=Choisir...
|
||||
addvaultwizard.existing.filePickerTitle=Sélectionnez le fichier correspondant au volume chiffré
|
||||
@@ -126,7 +136,11 @@ 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.generic=Vous avez sélectionné un chemin de montage personnalisé pour ce coffre, mais son utilisation a échoué avec le message : %s
|
||||
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 déverrouiller n'a 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
|
||||
## 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.
|
||||
@@ -351,7 +365,9 @@ main.vaultlist.contextMenu.unlock=Déverrouiller…
|
||||
main.vaultlist.contextMenu.unlockNow=Déverrouiller maintenant
|
||||
main.vaultlist.contextMenu.vaultoptions=Afficher les options du volume chiffré
|
||||
main.vaultlist.contextMenu.reveal=Afficher le lecteur
|
||||
main.vaultlist.addVaultBtn=Ajouter un volume chiffré
|
||||
main.vaultlist.addVaultBtn=Ajouter
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Nouveau coffre...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Coffre existant...
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Merci d'avoir choisi Cryptomator pour protéger vos fichiers. Si vous avez besoin d'aide, consultez nos guides de démarrage :
|
||||
@@ -435,7 +451,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 basé sur un 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 à mot de passe en cas d'urgence.
|
||||
vaultOptions.hub.convertBtn=Convertir en coffre-fort basé sur mot de passe
|
||||
|
||||
# Recovery Key
|
||||
@@ -448,7 +464,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
|
||||
@@ -487,4 +503,12 @@ 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
|
||||
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
|
||||
@@ -22,10 +22,10 @@ error.message=Produciuse un erro
|
||||
# Tray Menu
|
||||
|
||||
# Add Vault Wizard
|
||||
## Welcome
|
||||
## New
|
||||
### Name
|
||||
### Location
|
||||
### Expert Settings
|
||||
### Password
|
||||
### Information
|
||||
## Existing
|
||||
@@ -120,4 +120,6 @@ main.closeBtn.tooltip=Pechar
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -35,9 +35,6 @@ traymenu.vault.reveal=חשוף
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=הוספת כספת
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=צור כספת חדשה
|
||||
addvaultwizard.welcome.existingButton=פתיחת כספת קיימת
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=בחירת שם עבור הכספת
|
||||
@@ -59,6 +56,7 @@ 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=לא תיהיה אפשרות לקבל גישה למידע שלך בלי הסיסמה שלך. האם תרצה/י מפתח שחזור למקרה ותאבד/י את הסיסמה שלך?
|
||||
@@ -126,7 +124,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
|
||||
unlock.error.customPath.description.hideawayNotDir=הקובץ הזמני, הנסתר %3$s עבור פתיחה לא ניתן להסרה. יש לבדוק את הקובץ ולמחוק אותו ידנית.
|
||||
## Hub
|
||||
hub.noKeychain.message=לא ניתן לגשת למפתח המכשיר
|
||||
hub.noKeychain.description=כדאי לשחרר כספות האב נדרש מפתח מכשיר שיאובטח בצרור מפתחות. כדאי להמשיך, אפשר ״%s״ ובחר את צרור המפתחות בהעדפות.
|
||||
@@ -351,7 +349,7 @@ main.vaultlist.contextMenu.unlock=שחרר נעילה…
|
||||
main.vaultlist.contextMenu.unlockNow=בטל נעילה כעת
|
||||
main.vaultlist.contextMenu.vaultoptions=הצג את אפשרויות הכספת
|
||||
main.vaultlist.contextMenu.reveal=חשוף את הכונן
|
||||
main.vaultlist.addVaultBtn=יצירת כספת
|
||||
main.vaultlist.addVaultBtn=הוספה
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=תודה שבחרת ב- Cryptomator להגן על הקבצים שלך. אם אתה זקוק לסיוע, אנא עיין במדריכים שלנו:
|
||||
@@ -479,4 +477,6 @@ quit.lockAndQuitBtn=נעילה ויציאה
|
||||
# Forced Quit
|
||||
quit.forced.message=חלק מה vaults לא היו ניתנים לנעילה
|
||||
quit.forced.description=נעילה כספות נחסמה על ידי תהליכים ממתינים או קבצים פתוחים. אתה יכול לנעול את הכספת בכוח, אולם הפרעה לפעולת קריאה וכתיבה עשויה לגרום לאובדן מידע לא שמור.
|
||||
quit.forced.forceAndQuitBtn=נעילה בכח ויציאה
|
||||
quit.forced.forceAndQuitBtn=נעילה בכח ויציאה
|
||||
|
||||
# Update Reminder
|
||||
@@ -35,9 +35,6 @@ traymenu.vault.reveal=प्रत्यक्ष करें
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=वाउल्ट डालें
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=नया वाउल्ट बनाएं
|
||||
addvaultwizard.welcome.existingButton=मौजूदा वाउल्ट खोलें
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=वाउल्ट के लिए नाम चुनें
|
||||
@@ -57,6 +54,7 @@ addvaultwizard.new.invalidName=तिजोरी के लिए इस ना
|
||||
addvaultwizard.new.validName=आप इस नाम का उपयोग कर सकते हैं
|
||||
addvaultwizard.new.validCharacters.message=नाम के लिए केवल इन वर्णों का उपयोग कर सकते हैं
|
||||
addvaultwizard.new.validCharacters.numbers=नंबर
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=वॉल्ट बनाएं
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=आप अपने पासवर्ड के बिना अपने डेटा तक नहीं पहुंच पाएंगे। क्या आप उस वक़्त के लिए एक पुनर्प्राप्ति कुंजी चाहते हैं जब आप अपना पासवर्ड खो देते हैं?
|
||||
@@ -211,7 +209,6 @@ main.vaultlist.contextMenu.unlock=अनलॉक करें...
|
||||
main.vaultlist.contextMenu.unlockNow=अब अनलॉक करें
|
||||
main.vaultlist.contextMenu.vaultoptions=वॉल्ट के विकल्प दिखाए
|
||||
main.vaultlist.contextMenu.reveal=फोल्डर खोलें
|
||||
main.vaultlist.addVaultBtn=वाउल्ट डालें
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Cryptomator को अपनी फाइल्स सिराक्षित रखने को चुनने के लिए धन्यवाद। अगर आपको सहायता चाइये, तो हमारी गेटिंग स्टार्टेड गाइगाइड्स देखिये:
|
||||
@@ -277,4 +274,6 @@ passwordStrength.messageLabel.4=बहुत मजबूत
|
||||
quit.title=एप्लीकेशन को बंद करें
|
||||
|
||||
# Forced Quit
|
||||
quit.forced.message=कुछ वॉल्ट्स लॉक नहीं हो पायी
|
||||
quit.forced.message=कुछ वॉल्ट्स लॉक नहीं हो पायी
|
||||
|
||||
# Update Reminder
|
||||
@@ -35,9 +35,6 @@ traymenu.vault.reveal=Otkrij
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Dodaj trezor
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Izradi novi trezor
|
||||
addvaultwizard.welcome.existingButton=Otvori postojeći trezor
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Odaberi ime za trezor
|
||||
@@ -53,6 +50,7 @@ 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?
|
||||
@@ -276,7 +274,7 @@ main.vaultlist.contextMenu.unlock=Otključaj…
|
||||
main.vaultlist.contextMenu.unlockNow=Otključaj sada
|
||||
main.vaultlist.contextMenu.vaultoptions=Prikaži opcije trezora
|
||||
main.vaultlist.contextMenu.reveal=Otkrij pogon
|
||||
main.vaultlist.addVaultBtn=Dodaj trezor
|
||||
main.vaultlist.addVaultBtn=Dodaj
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Hvala što ste odabrali Cryptomator za zaštitu Vaših datoteka. Ukoliko trebate pomoć, provjerite naše vodiče za početak rada:
|
||||
@@ -378,4 +376,6 @@ passwordStrength.messageLabel.4=Vrlo jaka
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=Zaključaj i napusti
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -20,6 +20,8 @@ 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
|
||||
@@ -35,9 +37,6 @@ traymenu.vault.reveal=Megmutatás
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Széf hozzáadása
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Új széf létrehozása
|
||||
addvaultwizard.welcome.existingButton=Meglévő széf megnyitása
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Válasszon egy nevet az új széf számára
|
||||
@@ -59,6 +58,12 @@ 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?
|
||||
@@ -126,7 +131,10 @@ 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.generic=Egyéni csatolási útvonalat választott ehhez a széfhez, de használatakor ez a hibaüzenet érkezett: %s
|
||||
unlock.error.customPath.description.inUse=A meghajtó betűjele vagy a csatolási útvonal: "%s" már foglalt.
|
||||
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
|
||||
## 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.
|
||||
@@ -351,7 +359,7 @@ main.vaultlist.contextMenu.unlock=Feloldás…
|
||||
main.vaultlist.contextMenu.unlockNow=Azonnali feloldás
|
||||
main.vaultlist.contextMenu.vaultoptions=Széf beállítások
|
||||
main.vaultlist.contextMenu.reveal=Széf megjelenítése
|
||||
main.vaultlist.addVaultBtn=Széf hozzáadása
|
||||
main.vaultlist.addVaultBtn=Hozzáadás
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Köszönjük, hogy a Cryptomator programot választotta a fájlai védelmére. Ha segítségre van szüksége, akkor olvassa el a kezdő útmutatónk lépéseit:
|
||||
@@ -487,4 +495,12 @@ 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
|
||||
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
|
||||
@@ -35,9 +35,6 @@ traymenu.vault.reveal=Perlihatkan
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Tambah Vault
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Buat Vault Baru
|
||||
addvaultwizard.welcome.existingButton=Buka Vault yang Tersedia
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Beri nama untuk vault berikut
|
||||
@@ -53,6 +50,7 @@ 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?
|
||||
@@ -276,7 +274,6 @@ main.vaultlist.contextMenu.unlock=Buka Kunci…
|
||||
main.vaultlist.contextMenu.unlockNow=Buka Kunci Sekarang
|
||||
main.vaultlist.contextMenu.vaultoptions=Tampilkan Opsi Vault
|
||||
main.vaultlist.contextMenu.reveal=Buka Drive
|
||||
main.vaultlist.addVaultBtn=Tambah Vault
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Terima kasih telah memilih Cryptomator untuk melindungi file Anda. Jika Anda memerlukan bantuan, lihat panduan awal kami:
|
||||
@@ -378,4 +375,6 @@ passwordStrength.messageLabel.4=Sangat kuat
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=Kunci dan Keluar
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -20,6 +20,11 @@ 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
|
||||
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Mostra
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Aggiungi Cassaforte
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Crea Nuova Cassaforte
|
||||
addvaultwizard.welcome.existingButton=Apri Cassaforte Esistente
|
||||
## New
|
||||
addvaultwizard.new.title=Aggiungi una Nuova Cassaforte
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Scegli un nome per la cassaforte
|
||||
addvaultwizard.new.namePrompt=Nome della Cassaforte
|
||||
@@ -59,6 +62,12 @@ 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?
|
||||
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Questa è la posizione d'accesso della tua
|
||||
addvault.new.readme.accessLocation.3=Ogni file aggiunto a questo volume sarà crittografato da Cryptomator. Puoi lavorarci come su ogni altra unità/cartella. Questa è solo una vista decrittografata del suo contenuto, i tuoi file restano sempre crittografati sul tuo disco rigido.
|
||||
addvault.new.readme.accessLocation.4=Sentiti libero di rimuovere questo file.
|
||||
## Existing
|
||||
addvaultwizard.existing.title=Aggiungi una Cassaforte Esistente
|
||||
addvaultwizard.existing.instruction=Scegliere il file "vault.cryptomator" della tua cassaforte. Se esiste solo un file chiamato "masterkey.cryptomator", allora scegli quello.
|
||||
addvaultwizard.existing.chooseBtn=Scegli…
|
||||
addvaultwizard.existing.filePickerTitle=Seleziona file cassaforte
|
||||
@@ -126,7 +136,11 @@ 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.generic=Hai selezionato un percorso di montaggio personalizzato per questa cassaforte, ma il suo utilizzo è fallito col messaggio: %s
|
||||
unlock.error.customPath.description.inUse=La lettera di unità o il percorso di montaggio selezionato "%s" è già in uso.
|
||||
unlock.error.customPath.description.hideawayNotDir=Impossibile rimuovere il file temporaneo nascosto "%3$s" utilizzato per lo sblocco. Controllare il file e quindi eliminarlo 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
|
||||
## 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.
|
||||
@@ -351,7 +365,9 @@ main.vaultlist.contextMenu.unlock=Sblocca…
|
||||
main.vaultlist.contextMenu.unlockNow=Sblocca Ora
|
||||
main.vaultlist.contextMenu.vaultoptions=Mostra le Opzioni della Cassaforte
|
||||
main.vaultlist.contextMenu.reveal=Rivela Unità
|
||||
main.vaultlist.addVaultBtn=Aggiungi Cassaforte
|
||||
main.vaultlist.addVaultBtn=Aggiungi
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Nuova Cassaforte...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Cassaforte esistente...
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Grazie per aver scelto Cryptomator per proteggere i tuoi file. Se necessiti d'assistenza, dai un'occhiata alle nostre guide per iniziare:
|
||||
@@ -487,4 +503,12 @@ 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
|
||||
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
|
||||
@@ -16,10 +16,15 @@ 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=金庫
|
||||
@@ -35,9 +40,6 @@ traymenu.vault.reveal=表示
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=金庫を追加
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=新しい金庫を作成
|
||||
addvaultwizard.welcome.existingButton=すでにある金庫を開く
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=金庫の名前を入力してください
|
||||
@@ -59,6 +61,12 @@ 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=データにアクセスするにはパスワードが必須です。パスワードを紛失したときのためにリカバリーキーは必要ですか?
|
||||
@@ -126,7 +134,11 @@ unlock.success.revealBtn=ドライブを表示
|
||||
unlock.error.customPath.message=カスタム パスに金庫をマウントできません
|
||||
unlock.error.customPath.description.notSupported=カスタム パスを使い続けたい場合、環境設定に移動してサポートしているボリューム タイプを選択してください。もしくは、金庫のオプションに移動してサポートされるマウント ポイントを選択してください。
|
||||
unlock.error.customPath.description.notExists=カスタム マウント パスが存在していません。ローカル ファイルシステムで作成するか、金庫のオプションで変更してください。
|
||||
unlock.error.customPath.description.generic=この金庫のカスタム マウント パスを選択しましたが、次のメッセージで失敗しました: %s
|
||||
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" を有効にし環境設定からキーチェーンを選択します。
|
||||
@@ -351,7 +363,7 @@ main.vaultlist.contextMenu.unlock=解錠...
|
||||
main.vaultlist.contextMenu.unlockNow=今すぐ解錠
|
||||
main.vaultlist.contextMenu.vaultoptions=金庫のオプションを表示
|
||||
main.vaultlist.contextMenu.reveal=ドライブを表示
|
||||
main.vaultlist.addVaultBtn=金庫を追加
|
||||
main.vaultlist.addVaultBtn=追加
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=ファイルを保護するために Cryptomator を選んでいただきありがとうございます。ヘルプが必要であれば、スタートガイドをご覧ください:
|
||||
@@ -435,6 +447,8 @@ vaultOptions.masterkey.showRecoveryKeyBtn=回復キーを表示
|
||||
vaultOptions.masterkey.recoverPasswordBtn=パスワードをリセット
|
||||
## Hub
|
||||
vaultOptions.hub=回復
|
||||
vaultOptions.hub.convertInfo=緊急時にはリカバリキーを利用して Hub 金庫からパスワードで解錠できる金庫に変換できます。
|
||||
vaultOptions.hub.convertBtn=パスワードに基づいた金庫に変換
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@@ -446,6 +460,7 @@ recoveryKey.display.StorageHints=十分に安全な場所に保存してくだ
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=パスワードをリセット
|
||||
recoveryKey.recover.prompt="%s" のリカバリーキーを入力してください:
|
||||
recoveryKey.recover.correctKey=有効な回復キー
|
||||
recoveryKey.recover.wrongKey=この回復キーは別の金庫に属しています
|
||||
recoveryKey.recover.invalidKey=この回復キーは有効ではありません
|
||||
@@ -461,6 +476,7 @@ convertVault.title=金庫を変換
|
||||
convertVault.convert.convertBtn.before=変換
|
||||
convertVault.convert.convertBtn.processing=変換中…
|
||||
convertVault.success.message=変換完了
|
||||
convertVault.hubToPassword.success.description=Hub へアクセスせずに選択したパスワードで金庫を解錠できるようになりました。
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=新しいパスワードを入力してください
|
||||
@@ -483,4 +499,12 @@ quit.lockAndQuitBtn=施錠して終了
|
||||
# Forced Quit
|
||||
quit.forced.message=一部の金庫を施錠できませんでした
|
||||
quit.forced.description=保留中の操作か、開かれたファイルによって、金庫の施錠が中断されました。残りの金庫を強制的に施錠することはできますが、I/O を中断すると保存されていないデータを失う可能性があります。
|
||||
quit.forced.forceAndQuitBtn=強制的に終了
|
||||
quit.forced.forceAndQuitBtn=強制的に終了
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=更新の確認
|
||||
updateReminder.message=更新を確認するか
|
||||
updateReminder.description=自動的に更新をチェックして、新機能、バグ修正、セキュリティの改善などを入手するのをお勧めします。
|
||||
updateReminder.notNow=また後で
|
||||
updateReminder.yesOnce=はい、一度だけ
|
||||
updateReminder.yesAutomatically=自動的に行う
|
||||
@@ -35,9 +35,6 @@ traymenu.vault.reveal=표시
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Vault 추가
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=새 Vault 생성
|
||||
addvaultwizard.welcome.existingButton=기존 Vault 열기
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=새 Vault의 이름을 입력하십시요
|
||||
@@ -59,6 +56,7 @@ 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=비밀번호가 없으면 데이터에 접근할 수 없습니다. 비밀번호를 잊었을 때를 대비한 복구 키를 원하십니까?
|
||||
@@ -133,10 +131,15 @@ hub.register.registerBtn=확인
|
||||
### Registration Success
|
||||
### Registration Failed
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=액세스 거부
|
||||
hub.unauthorized.description=귀하의 기기는 아직 이 저장소에 액세스할 수 있는 권한이 없습니다. Vault 소유자에게 승인을 요청하세요.
|
||||
### License Exceeded
|
||||
hub.invalidLicense.message=Hub 라이선스가 잘못되었습니다.
|
||||
hub.invalidLicense.description=Cryptomator Hub 인스턴스에 잘못된 라이선스가 있습니다. 라이센스를 업그레이드하거나 갱신하려면 허브 관리자에게 알리십시오.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.message=잠금 실패
|
||||
lock.forced.description=대기 중인 작동이나 파일이 열려있어 "%s"를 잠그는데 실패하였습니다. 이 Vault를 강제로 잠글 수 있으나, 입/출력의 중단은 저장되지 않은 데이터의 유실을 초래할 수 있습니다.
|
||||
lock.forced.retryBtn=재시도
|
||||
lock.forced.forceBtn=강제 잠금
|
||||
@@ -177,6 +180,7 @@ migration.impossible.moreInfo=Vault를 이전 버전으로 계속 열수 있습
|
||||
health.title="%s"의 상태 검사
|
||||
health.intro.header=상태 검사
|
||||
health.intro.text=상태 검사는 Vault의 내부 구조의 문제점을 점검하고 해결할 수 있는 기능입니다. 다음 사항을 유의하시기 바랍니다:
|
||||
health.intro.remarkFix=모든 문제를 해결할 수 있는 것은 아닙니다.
|
||||
health.intro.remarkBackup=데이터가 손상된 경우 백업만이 유일한 해결책입니다.
|
||||
health.intro.affirmation=나는 위 정보를 읽고 정말 이해했습니다.
|
||||
## Start Failure
|
||||
@@ -185,6 +189,7 @@ health.fail.ioError=설정 파일에 접근하는 중 에러가 발생했습니
|
||||
health.fail.parseError=Vault 설정을 파싱하는 중 에러가 발생했습니다.
|
||||
health.fail.moreInfo=더 많은 정보
|
||||
## Check Selection
|
||||
health.checkList.description=검사할 항목을 왼쪽 목록에서 선택하거나 아래 버튼을 사용하세요.
|
||||
health.checkList.selectAllButton=모든 항목 선택
|
||||
health.checkList.deselectAllButton=모든 항목 선택 해제
|
||||
health.check.runBatchBtn=선택된 검사항목 실행
|
||||
@@ -194,6 +199,8 @@ health.check.detail.checkScheduled=검사가 예약되었습니다.
|
||||
health.check.detail.checkRunning=검사가 현재 실행중입니다...
|
||||
health.check.detail.checkSkipped=선택된 검사항목이 없습니다.
|
||||
health.check.detail.checkFinished=검사가 성공적으로 완료되었습니다.
|
||||
health.check.detail.checkFinishedAndFound=검사가 완료되었습니다. 검사 결과를 확인해주세요.
|
||||
health.check.detail.checkCancelled=검사가 취소되었습니다
|
||||
health.check.detail.listFilters.label=필터
|
||||
health.check.exportBtn=보고서 내보내기
|
||||
## Result view
|
||||
@@ -227,9 +234,12 @@ preferences.interface.showMinimizeButton=최소화 버튼 표시
|
||||
preferences.interface.showTrayIcon=트레이 아이콘 보기 (재시작 필요)
|
||||
## Volume
|
||||
preferences.volume=가상 드라이브
|
||||
preferences.volume.type=볼륨 유형
|
||||
preferences.volume.type.automatic=자동
|
||||
preferences.volume.tcp.port=TCP 포트
|
||||
preferences.volume.supportedFeatures=현재 선택한 볼륨 타입은 다음과 같은 기능들을 지원합니다:
|
||||
preferences.volume.feature.mountFlags=사용자 정의 마운트 설정
|
||||
preferences.volume.feature.readOnly=읽기 전용 마운트
|
||||
## Updates
|
||||
preferences.updates=업데이트
|
||||
preferences.updates.currentVersion=현재 버전: %s
|
||||
@@ -264,9 +274,11 @@ stats.read.accessCount=총 읽기 횟수: %d
|
||||
stats.write.throughput.idle=쓰기: 대기중
|
||||
stats.write.throughput.mibs=쓰기: %.2f MiB/s
|
||||
stats.write.total.data.none=데이터 기록됨: -
|
||||
stats.write.total.data.kib=데이터 쓰기: %.1f KiB
|
||||
stats.write.total.data.mib=데이터 쓰기: %.1f MiB
|
||||
stats.write.total.data.gib=데이터 쓰기: %.1f GiB
|
||||
stats.encr.total.data.none=데이터 암호화: -
|
||||
stats.encr.total.data.kib=데이터 암호화: %.1f KiB
|
||||
stats.encr.total.data.mib=데이터 암호화: %.1f MiB
|
||||
stats.encr.total.data.gib=데이터 암호화: %.1f GiB
|
||||
stats.write.accessCount=총 쓰기 횟수: %d
|
||||
@@ -288,7 +300,7 @@ main.vaultlist.contextMenu.unlock=잠금해제...
|
||||
main.vaultlist.contextMenu.unlockNow=지금 잠금해제
|
||||
main.vaultlist.contextMenu.vaultoptions=Vault 옵션 보기
|
||||
main.vaultlist.contextMenu.reveal=드라이브 표시
|
||||
main.vaultlist.addVaultBtn=Vault 추가
|
||||
main.vaultlist.addVaultBtn=추가
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=파일을 보호하기 위해 Cryptomator를 선택해주셔서 감사합니다. 만약 다른 도움이 필요하시면, 시작안내서를 참조하시기 바랍니다.
|
||||
@@ -302,10 +314,12 @@ main.vaultDetail.passwordSavedInKeychain=비밀번호 저장됨
|
||||
main.vaultDetail.unlockedStatus=잠금해제됨
|
||||
main.vaultDetail.accessLocation=이 Vault의 내용은 다음의 경로에서 접근할 수 있습니다:
|
||||
main.vaultDetail.revealBtn=드라이브 표시
|
||||
main.vaultDetail.copyUri=URI 복사
|
||||
main.vaultDetail.lockBtn=잠금
|
||||
main.vaultDetail.bytesPerSecondRead=읽기:
|
||||
main.vaultDetail.bytesPerSecondWritten=쓰기:
|
||||
main.vaultDetail.throughput.idle=대기
|
||||
main.vaultDetail.throughput.kbps=%.1f KiB/s
|
||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||
main.vaultDetail.stats=Vault 통계
|
||||
### Missing
|
||||
@@ -362,6 +376,7 @@ vaultOptions.masterkey.recoveryKeyExplanation=복구 키는 비밀번호를 잊
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=복구 키 표시
|
||||
vaultOptions.masterkey.recoverPasswordBtn=비밀번호 재설정
|
||||
## Hub
|
||||
vaultOptions.hub=복구
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@@ -373,6 +388,7 @@ recoveryKey.display.StorageHints=매우 안전한곳에 보관하십시요. 예
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=비밀번호 바꾸기
|
||||
recoveryKey.recover.prompt="%s"의 복구키를 입력하십시요:
|
||||
recoveryKey.recover.correctKey=올바른 복구 키 입니다
|
||||
recoveryKey.recover.wrongKey=이 복구 키는 다른 vault의 키입니다
|
||||
recoveryKey.recover.invalidKey=해당 복구 키는 유효하지 않습니다
|
||||
@@ -402,4 +418,7 @@ quit.title=앱 종료
|
||||
quit.message=잠금 해제된 vault들이 존재합니다
|
||||
quit.lockAndQuitBtn=Vault 잠금 후 종료하기
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
quit.forced.forceAndQuitBtn=Vault 강제 잠금 후 종료하기
|
||||
|
||||
# Update Reminder
|
||||
@@ -35,9 +35,6 @@ traymenu.vault.reveal=Atklāt
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Pievienot glabātuvi
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Izveidot jaunu glabātuvi
|
||||
addvaultwizard.welcome.existingButton=Atvērt esošu glabātuvi
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Izvēlies glabātuves nosaukumu
|
||||
@@ -55,6 +52,7 @@ 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?
|
||||
@@ -189,7 +187,6 @@ main.vaultlist.emptyList.onboardingInstruction=Spied šeit, lai pievienotu glab
|
||||
main.vaultlist.contextMenu.lock=Aizslēgt
|
||||
main.vaultlist.contextMenu.unlockNow=Atslēgt tagad
|
||||
main.vaultlist.contextMenu.reveal=Atklāt disku
|
||||
main.vaultlist.addVaultBtn=Pievienot glabātuvi
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Paldies, ka izvēlējāties Cryptomator lai aizsargātu jūsu datus. Ja jums nepieciešama palīdzība, iepazīstieties ar mūsu darba sākšanas ceļvežiem:
|
||||
@@ -275,4 +272,6 @@ passwordStrength.messageLabel.4=Ļoti stipra
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=Aizslēgt un aizvērt
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -2,21 +2,60 @@
|
||||
|
||||
# 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
|
||||
## Welcome
|
||||
addvaultwizard.title=Додај сеф
|
||||
## 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
|
||||
@@ -26,6 +65,7 @@
|
||||
# Forget Password
|
||||
|
||||
# Unlock
|
||||
unlock.unlockBtn=Отклучи
|
||||
## Select
|
||||
## Success
|
||||
## Failure
|
||||
@@ -59,6 +99,7 @@ hub.register.registerBtn=Потврди
|
||||
## Fix Application
|
||||
|
||||
# Preferences
|
||||
preferences.title=Поставки
|
||||
## General
|
||||
## Interface
|
||||
## Volume
|
||||
@@ -76,11 +117,15 @@ hub.register.registerBtn=Потврди
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Затвори
|
||||
main.preferencesBtn.tooltip=Поставки
|
||||
## Vault List
|
||||
main.vaultlist.contextMenu.lock=Заклучи
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
### Unlocked
|
||||
main.vaultDetail.lockBtn=Заклучи
|
||||
### Missing
|
||||
### Needs Migration
|
||||
### Error
|
||||
@@ -89,8 +134,10 @@ hub.register.registerBtn=Потврди
|
||||
|
||||
# Vault Options
|
||||
## General
|
||||
vaultOptions.general.vaultName=Име на сеф
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Избор…
|
||||
## Master Key
|
||||
## Hub
|
||||
|
||||
@@ -107,4 +154,6 @@ hub.register.registerBtn=Потврди
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -20,6 +20,11 @@ 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
|
||||
error.lookupPermissionMessage=Cryptomator kan finne en løsning for problemet på nettet. Dette vil sende en forespørsel til problemdatabasen vår fra IP-adressen din.
|
||||
error.dismiss=Avvis
|
||||
error.lookUpSolution=Finn løsning
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Hvelv
|
||||
@@ -35,9 +40,6 @@ traymenu.vault.reveal=Gjør synlig
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Legg til hvelv
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Opprett et nytt hvelv
|
||||
addvaultwizard.welcome.existingButton=Åpne et eksisterende hvelv
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Navngi hvelvet
|
||||
@@ -59,6 +61,12 @@ 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
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Aktiver ekspertinnstillinger
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Angi en verdi mellom 36 og 220 (standard 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Åpne dokumentasjonen for å lære mer.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maksimal lengde på krypterte filnavn
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Gyldig
|
||||
### 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?
|
||||
@@ -121,12 +129,16 @@ 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=Gjør enheten synlig
|
||||
unlock.success.revealBtn=Vis enheten
|
||||
## 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
|
||||
unlock.error.customPath.description.inUse=Stasjonsbokstaven eller egendefinert monteringsbane%s" er allerede i bruk.
|
||||
unlock.error.customPath.description.hideawayNotDir=Den midlertidige, skjulte filen "%3$ssom brukes til å låse opp kunne ikke fjernes. Kontroller filen og slett den manuelt.
|
||||
unlock.error.customPath.description.couldNotBeCleaned=Hvelvet ditt kan ikke monteres i banen "%s". Prøv igjen eller velg en annen sti.
|
||||
unlock.error.customPath.description.notEmptyDir=Tilpasset monterings sti "%s" er ikke en tom mappe. Velg en tom mappe og prøv igjen.
|
||||
unlock.error.customPath.description.generic=Du har valgt en egendefinert monterings sti for dette hvelvet, men bruk av den mislyktes med meldingen: %2$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.
|
||||
@@ -274,8 +286,10 @@ 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
|
||||
@@ -348,8 +362,8 @@ 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=Gjør enheten synlig
|
||||
main.vaultlist.addVaultBtn=Legg til hvelv
|
||||
main.vaultlist.contextMenu.reveal=Vis enheten
|
||||
main.vaultlist.addVaultBtn=Legg til
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Takk for at du valgte Cryptomator for å beskytte filene dine. Hvis du trenger hjelp, sjekk ut våre guider for å komme i gang:
|
||||
@@ -362,7 +376,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=Gjør enheten synlig
|
||||
main.vaultDetail.revealBtn=Vis enheten
|
||||
main.vaultDetail.copyUri=Kopier URI
|
||||
main.vaultDetail.lockBtn=Lås
|
||||
main.vaultDetail.bytesPerSecondRead=Lesehastighet:
|
||||
@@ -407,20 +421,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=Gjør enheten synlig
|
||||
vaultOptions.general.actionAfterUnlock.reveal=Vis enheten
|
||||
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 driv-innstillinger
|
||||
vaultOptions.mount.linkToPreferences=Åpne virtuelle drev-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 enhetsbokstav
|
||||
vaultOptions.mount.mountPoint.driveLetter=Bruk tildelt drevbokstav
|
||||
vaultOptions.mount.mountPoint.custom=Bruk valgt mappe
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Velg…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Velg en mappe
|
||||
@@ -432,6 +446,9 @@ 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.convertInfo=Du kan bruke gjenopprettingsnøkkelen for å konvertere dette Hub-hvelvet til et passordbasert hvelv i en nødsituasjon.
|
||||
vaultOptions.hub.convertBtn=Konverter til passordbasert hvelv
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@@ -443,6 +460,7 @@ 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
|
||||
@@ -454,6 +472,11 @@ 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
|
||||
convertVault.hubToPassword.success.description=Du kan nå låse opp hvelvet med det valgte passordet uten å ha behov for Hub-tilgang.
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=Skriv inn et nytt passord
|
||||
@@ -476,4 +499,12 @@ 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
|
||||
quit.forced.forceAndQuitBtn=Tvinge og avslutte
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Oppdateringssjekk
|
||||
updateReminder.message=Se etter oppdateringer?
|
||||
updateReminder.description=Hold deg oppdatert med nye funksjoner, feilrettinger og sikkerhetsforbedringer. Vi anbefaler å se etter oppdateringer automatisk.
|
||||
updateReminder.notNow=Ikke nå
|
||||
updateReminder.yesOnce=Ja, en gang
|
||||
updateReminder.yesAutomatically=Ja, automatisk
|
||||
@@ -20,6 +20,11 @@ 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
|
||||
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Toon
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Kluis toevoegen
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Nieuwe Kluis Aanmaken
|
||||
addvaultwizard.welcome.existingButton=Open Bestaande Kluis
|
||||
## New
|
||||
addvaultwizard.new.title=Nieuwe kluis toevoegen
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Kies een naam voor de kluis
|
||||
addvaultwizard.new.namePrompt=Kluisnaam
|
||||
@@ -59,6 +62,12 @@ 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?
|
||||
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Dit is de opslaglocatie van uw kluis.
|
||||
addvault.new.readme.accessLocation.3=Alle bestanden die aan dit volume worden toegevoegd zullen worden versleuteld door Cryptomator. U kunt deze bestanden gebruiken zoals in elke andere map/schijf. Dit is alleen een ontsleutelde weergave van de inhoud, uw bestanden blijven ten alle tijden versleuteld op uw harde schijf.
|
||||
addvault.new.readme.accessLocation.4=Voel je vrij om dit bestand te verwijderen.
|
||||
## Existing
|
||||
addvaultwizard.existing.title=Bestaande kluis toevoegen
|
||||
addvaultwizard.existing.instruction=Kies het "vault.cryptomator"-bestand van uw bestaande kluis. Indien er enkel een bestand genaamd "masterkey.cryptomator" anwezig is, kies deze dan in de plaats.
|
||||
addvaultwizard.existing.chooseBtn=Kies…
|
||||
addvaultwizard.existing.filePickerTitle=Kies kluisbestand
|
||||
@@ -126,7 +136,11 @@ 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.generic=Je hebt een aangepast koppel pad geselecteerd voor deze kluis, maar het gebruik ervan is mislukt met het bericht: %s
|
||||
unlock.error.customPath.description.inUse=De schijfletter of aangepaste pad "%s" is al in gebruik.
|
||||
unlock.error.customPath.description.hideawayNotDir=Het tijdelijk verborgen bestand "%3$s" gebruikt voor de ontgrendeling 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
|
||||
## 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.
|
||||
@@ -351,7 +365,9 @@ main.vaultlist.contextMenu.unlock=Ontgrendelen…
|
||||
main.vaultlist.contextMenu.unlockNow=Nu Ontgrendelen
|
||||
main.vaultlist.contextMenu.vaultoptions=Laat kluisinstellingen zien
|
||||
main.vaultlist.contextMenu.reveal=Toon Schijf
|
||||
main.vaultlist.addVaultBtn=Kluis toevoegen
|
||||
main.vaultlist.addVaultBtn=Toevoegen
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Nieuwe kluis...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Bestaande kluis...
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Bedankt dat u Cryptomator heeft gekozen om uw bestanden te beschermen. Voor assistentie verwijzen we u naar de starthandleidingen:
|
||||
@@ -487,4 +503,12 @@ 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
|
||||
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
|
||||
@@ -29,9 +29,6 @@ traymenu.vault.reveal=Gjer synleg
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Legg til kvelv
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Opprett ein ny kvelv
|
||||
addvaultwizard.welcome.existingButton=Opn ein eksisterande kvelv
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Vel eit namn på kvelven
|
||||
@@ -43,6 +40,7 @@ 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?
|
||||
@@ -182,7 +180,6 @@ main.vaultlist.contextMenu.lock=Lås
|
||||
main.vaultlist.contextMenu.unlock=Lås opp…
|
||||
main.vaultlist.contextMenu.unlockNow=Lås opp no
|
||||
main.vaultlist.contextMenu.reveal=Gjer eininga synleg
|
||||
main.vaultlist.addVaultBtn=Legg til kvelv
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Takk for at du valde Cryptomator for å verna filene dine. Viss du treng hjelp, sjekk ut guidane våre for å komma i gang:
|
||||
@@ -273,4 +270,6 @@ passwordStrength.messageLabel.4=Veldig sterkt
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=Lås og avslutt
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -30,9 +30,6 @@ traymenu.vault.reveal=ਦਿਖਾਓ
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=ਵਾਲਟ ਜੋੜੋ
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=ਨਵਾਂ ਵਾਲਟ ਬਣਾਓ
|
||||
addvaultwizard.welcome.existingButton=ਮੌਜੂਦਾ ਵਾਲਟ ਖੋਲ੍ਹੋ
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=ਵਾਲਟ ਲਈ ਨਾਂ ਚੁਣੋ
|
||||
@@ -44,6 +41,7 @@ addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=ਪਸੰਦੀਦਾ ਟਿਕਾਣਾ
|
||||
addvaultwizard.new.directoryPickerButton=…ਚੁਣੋ
|
||||
addvaultwizard.new.directoryPickerTitle=ਡਾਇਰੈਕਟਰੀ ਚੁਣੋ
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=ਵਾਲਟ ਬਣਾਓ
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=ਤੁਸੀਂ ਬਿਨਾਂ ਪਾਸਵਰਡ ਦੇ ਆਪਣੇ ਡਾਟੇ ਨੂੰ ਇਸਤੇਮਾਲ ਨਹੀਂ ਕਰ ਸਕੋਗੇ। ਕੀ ਤੁਸੀਂ ਰਿਕਵਰੀ ਕੁੰਜੀ ਚਾਹੋਗੇ, ਜੇ ਕਿਤੇ ਤੁਸੀਂ ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਜਾਓ?
|
||||
@@ -209,7 +207,6 @@ main.vaultlist.contextMenu.lock=ਲਾਕ ਕਰੋ
|
||||
main.vaultlist.contextMenu.unlock=ਅਣ-ਲਾਕ ਕਰੋ…
|
||||
main.vaultlist.contextMenu.unlockNow=ਹੁਣੇ ਅਣ-ਲਾਕ ਕਰੋ
|
||||
main.vaultlist.contextMenu.reveal=ਡਰਾਇਵ ਦਿਖਾਓ
|
||||
main.vaultlist.addVaultBtn=ਵਾਲਟ ਜੋੜੋ
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=ਆਪਣੀਆਂ ਫਾਇਲਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰਨ ਲਈ Cryptomator ਚੁਣਨ ਵਾਸਤੇ ਧੰਨਵਾਦ ਹੈ। ਜੇ ਤੁਹਾਨੂੰ ਮਦਦ ਚਾਹੀਦੀ ਹੋਵੇ ਤਾਂ ਸਾਡੀਆਂ ਸ਼ੁਰੂਆਤੀ ਗਾਈਡਾਂ ਵੇਖੋ:
|
||||
@@ -305,4 +302,6 @@ passwordStrength.messageLabel.4=ਬਹੁਤ ਮਜ਼ਬੂਤ
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=ਲਾਕ ਕਰੋ ਤੇ ਬਾਹਰ ਜਾਓ
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
@@ -20,6 +20,11 @@ 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
|
||||
error.lookupPermissionMessage=Cryptomator może wyszukać rozwiązanie tego problemu online. To wyśle żądanie do naszej bazy danych problemów z Twojego adresu IP.
|
||||
error.dismiss=Odrzuć
|
||||
error.lookUpSolution=Szukaj rozwiązania
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Sejf
|
||||
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Odkryj
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Dodaj sejf
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Utwórz nowy sejf
|
||||
addvaultwizard.welcome.existingButton=Otwórz istniejący sejf
|
||||
## New
|
||||
addvaultwizard.new.title=Dodaj nowy sejf
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Wybierz nazwę sejfu
|
||||
addvaultwizard.new.namePrompt=Nazwa sejfu
|
||||
@@ -59,6 +62,12 @@ 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?
|
||||
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Tu są przechowywane pliki Twojego sejfu.
|
||||
addvault.new.readme.accessLocation.3=Wszystkie pliki dodane tutaj zostaną zaszyfrowane przez Cryptomator. Możesz tu wykonywać operacje jak na każdym innym dysku czy katalogu. To jest jedynie odszyfrowany podgląd Twoich plików, wszystkie pozostają cały czas zaszyfrowane na Twoim dysku twardym.
|
||||
addvault.new.readme.accessLocation.4=Jeśli chcesz możesz spokojnie usunąć ten plik.
|
||||
## Existing
|
||||
addvaultwizard.existing.title=Dodaj istniejący sejf
|
||||
addvaultwizard.existing.instruction=Wybierz plik "vault.cryptomator" w istniejącym sejfie. Jeśli istnieje tylko plik "masterkey.cryptomator", wybierz ten plik.
|
||||
addvaultwizard.existing.chooseBtn=Wybierz…
|
||||
addvaultwizard.existing.filePickerTitle=Wybierz plik sejfu
|
||||
@@ -126,7 +136,10 @@ 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.generic=Wybrałeś niestandardową ścieżkę montowania dla tego sejfu, ale użycie jej nie powiodło się z wiadomością: %s
|
||||
unlock.error.customPath.description.inUse=Litera dysku lub podana ścieżka montowania "%s" jest już w użyciu.
|
||||
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
|
||||
## 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.
|
||||
@@ -307,29 +320,29 @@ stats.title=Statystyki dla %s
|
||||
stats.cacheHitRate=Trafność cache
|
||||
## Read
|
||||
stats.read.throughput.idle=Odczyt: bezczynny
|
||||
stats.read.throughput.kibs=Odczyt: %.2f kiB/s
|
||||
stats.read.throughput.mibs=Odczyt: %.2f kiB/s
|
||||
stats.read.throughput.kibs=Odczyt: %.2f KiB/s
|
||||
stats.read.throughput.mibs=Odczyt: %.2f MiB/s
|
||||
stats.read.total.data.none=Dane odczytywane: -
|
||||
stats.read.total.data.kib=Odczyt danych: %.1f KiB
|
||||
stats.read.total.data.mib=Odczyt danych: %.1f kiB
|
||||
stats.read.total.data.gib=Odczyt danych: %.1f kiB
|
||||
stats.read.total.data.mib=Odczyt danych: %.1f MiB
|
||||
stats.read.total.data.gib=Odczyt danych: %.1f GiB
|
||||
stats.decr.total.data.none=Dane odszyfrowane: -
|
||||
stats.decr.total.data.kib=Dane odszyfrowane: %.1f KiB
|
||||
stats.decr.total.data.mib=Dane odszyfrowane: %.1f kiB
|
||||
stats.decr.total.data.gib=Dane odszyfrowane: %.1f kiB
|
||||
stats.decr.total.data.mib=Dane odszyfrowane: %.1f MiB
|
||||
stats.decr.total.data.gib=Dane odszyfrowane: %.1f GiB
|
||||
stats.read.accessCount=Całkowite odczyty: %d
|
||||
## Write
|
||||
stats.write.throughput.idle=Zapis: bezczynny
|
||||
stats.write.throughput.kibs=Zapis: %.2f KiB/s
|
||||
stats.write.throughput.mibs=Zapis: %.2f kiB/s
|
||||
stats.write.throughput.mibs=Zapis: %.2f MiB/s
|
||||
stats.write.total.data.none=Zapisane dane: -
|
||||
stats.write.total.data.kib=Zapis danych: %.1f KiB
|
||||
stats.write.total.data.mib=Zapisane dane: %.1f MiB
|
||||
stats.write.total.data.gib=Zapisane dane: %.1f kiB
|
||||
stats.write.total.data.gib=Zapisane dane: %.1f GiB
|
||||
stats.encr.total.data.none=Dane odszyfrowane: -
|
||||
stats.encr.total.data.kib=Dane zaszyfrowane: %.1f KiB
|
||||
stats.encr.total.data.mib=Dane odszyfrowane: %.1f kiB
|
||||
stats.encr.total.data.gib=Dane odszyfrowane: %.1f kiB
|
||||
stats.encr.total.data.mib=Dane odszyfrowane: %.1f MiB
|
||||
stats.encr.total.data.gib=Dane odszyfrowane: %.1f GiB
|
||||
stats.write.accessCount=Całkowity zapis: %d
|
||||
|
||||
## Accesses
|
||||
@@ -351,7 +364,9 @@ main.vaultlist.contextMenu.unlock=Odblokuj…
|
||||
main.vaultlist.contextMenu.unlockNow=Odblokuj teraz
|
||||
main.vaultlist.contextMenu.vaultoptions=Pokaż opcje sejfu
|
||||
main.vaultlist.contextMenu.reveal=Otwórz lokalizację
|
||||
main.vaultlist.addVaultBtn=Dodaj sejf
|
||||
main.vaultlist.addVaultBtn=Dodaj
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Nowy sejf...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Istniejący sejf...
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Dziękujemy za wybranie programu Cryptomator do ochrony plików. Jeśli potrzebujesz pomocy, sprawdź nasze przewodniki:
|
||||
@@ -487,4 +502,12 @@ 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ź
|
||||
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
|
||||
@@ -20,6 +20,11 @@ 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
|
||||
error.lookupPermissionMessage=O Cryptomator pode procurar uma solução on-line para este problema. Isso enviará uma solicitação do problema à nossa base de dados a partir do seu endereço IP.
|
||||
error.dismiss=Ignorar
|
||||
error.lookUpSolution=Procure solução
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Cofre
|
||||
@@ -35,9 +40,6 @@ traymenu.vault.reveal=Revelar
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Adicionar Cofre
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Criar Novo Cofre
|
||||
addvaultwizard.welcome.existingButton=Abrir Cofre Existente
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Escolha um nome para o cofre
|
||||
@@ -59,6 +61,12 @@ 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?
|
||||
@@ -70,8 +78,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 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.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.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".
|
||||
@@ -111,7 +119,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=Destrancar
|
||||
unlock.unlockBtn=Desbloquear
|
||||
## 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.
|
||||
@@ -124,6 +132,13 @@ 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.
|
||||
unlock.error.customPath.description.inUse=A letra da unidade ou o caminho de montagem personalizado "%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=Não foi possível montar o seu cofre no caminho "%s". Tente novamente ou escolha um caminho diferente.
|
||||
unlock.error.customPath.description.notEmptyDir=O caminho de montagem personalizado "%s" não é uma pasta vazia. Escolha uma pasta vazia e tente novamente.
|
||||
unlock.error.customPath.description.generic=Selecionou um caminho de montagem personalizado para este cofre, mas o seu uso falhou com a mensagem: %2$s
|
||||
## 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.
|
||||
@@ -138,11 +153,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 de Dispositivo
|
||||
hub.registerSuccess.message=Nome do 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
|
||||
@@ -176,7 +191,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=Destrancar agora
|
||||
migration.success.unlockNow=Desbloquear 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.
|
||||
@@ -223,6 +238,10 @@ 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
|
||||
@@ -274,6 +293,12 @@ 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
|
||||
@@ -307,19 +332,18 @@ 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=Trancar
|
||||
main.vaultlist.contextMenu.lock=Bloquear
|
||||
main.vaultlist.contextMenu.unlock=Desbloquear…
|
||||
main.vaultlist.contextMenu.unlockNow=Destrancar agora
|
||||
main.vaultlist.contextMenu.unlockNow=Desbloquear agora
|
||||
main.vaultlist.contextMenu.vaultoptions=Mostrar opções do Cofre
|
||||
main.vaultlist.contextMenu.reveal=Revelar unidade
|
||||
main.vaultlist.addVaultBtn=Adicionar Cofre
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Obrigado por escolher Cryptomator para proteger os seus ficheiros. Se precisar de alguma ajuda, veja os nossos guias introdutórios:
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=BLOQUEADO
|
||||
main.vaultDetail.unlockBtn=Desbloquear…
|
||||
main.vaultDetail.unlockNowBtn=Destrancar agora
|
||||
main.vaultDetail.unlockNowBtn=Desbloquear agora
|
||||
main.vaultDetail.optionsBtn=Opções do Cofre
|
||||
main.vaultDetail.passwordSavedInKeychain=Palavra-passe guardada
|
||||
### Unlocked
|
||||
@@ -327,7 +351,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=Trancar
|
||||
main.vaultDetail.lockBtn=Bloquear
|
||||
main.vaultDetail.bytesPerSecondRead=Ler:
|
||||
main.vaultDetail.bytesPerSecondWritten=Escrever:
|
||||
main.vaultDetail.throughput.idle=inativo
|
||||
@@ -367,8 +391,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=Destrancar o cofre ao iniciar o Cryptomator
|
||||
vaultOptions.general.actionAfterUnlock=Após destrancar com sucesso
|
||||
vaultOptions.general.unlockAfterStartup=Desbloquear o cofre ao iniciar o Cryptomator
|
||||
vaultOptions.general.actionAfterUnlock=Após desbloquear com sucesso
|
||||
vaultOptions.general.actionAfterUnlock.ignore=Não fazer nada
|
||||
vaultOptions.general.actionAfterUnlock.reveal=Revelar unidade
|
||||
vaultOptions.general.actionAfterUnlock.ask=Perguntar
|
||||
@@ -417,6 +441,7 @@ 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
|
||||
@@ -439,4 +464,12 @@ 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
|
||||
quit.forced.forceAndQuitBtn=Forçar e Sair
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Verificação de Atualização
|
||||
updateReminder.message=Verificar atualizações?
|
||||
updateReminder.description=Fique atualizado com novos recursos, correções de erros e melhorias de segurança. Recomendamos verificar automaticamente se há atualizações.
|
||||
updateReminder.notNow=Agora não
|
||||
updateReminder.yesOnce=Sim, Uma Vez
|
||||
updateReminder.yesAutomatically=Sim, Automaticamente
|
||||
@@ -10,16 +10,21 @@ generic.button.choose=Escolha…
|
||||
generic.button.close=Fechar
|
||||
generic.button.copy=Copiar
|
||||
generic.button.copied=Copiado!
|
||||
generic.button.done=Pronto
|
||||
generic.button.done=Concluído
|
||||
generic.button.next=Próximo
|
||||
generic.button.print=Imprimir
|
||||
|
||||
# Error
|
||||
error.message=Erro %s
|
||||
error.description=Oops! Cryptomator não esperava que isso acontecesse. Você pode procurar soluções existentes para este erro. Ou se isso ainda não foi reportado como erro, fique à vontade para fazê-lo.
|
||||
error.description=O Cryptomator encontrou um erro inesperado. Você pode procurar soluções pré-existentes na internet ou até mesmo reportar como bug.
|
||||
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
|
||||
error.lookupPermissionMessage=O Cryptomator pode procurar uma solução online. Isso enviará um pedido ao nosso banco de problemas a partir do seu endereço IP.
|
||||
error.dismiss=Ignorar
|
||||
error.lookUpSolution=Procurar solução
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Cofre
|
||||
@@ -35,30 +40,33 @@ traymenu.vault.reveal=Exibir
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Adicionar Cofre
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Criar Um Novo Cofre
|
||||
addvaultwizard.welcome.existingButton=Abrir Cofre Existente
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Escolha um nome para o cofre
|
||||
addvaultwizard.new.namePrompt=Nome do Cofre
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Onde o Cryptomator deve armazenar os arquivos encriptados do seu cofre?
|
||||
addvaultwizard.new.locationInstruction=Onde o Cryptomator deve armazenar os arquivos criptografados do seu cofre?
|
||||
addvaultwizard.new.locationLabel=Local de armazenamento
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Local Personalizado
|
||||
addvaultwizard.new.directoryPickerButton=Escolher…
|
||||
addvaultwizard.new.directoryPickerTitle=Selecionar Diretório
|
||||
addvaultwizard.new.fileAlreadyExists=Um arquivo ou diretório com o nome do cofre já existe
|
||||
addvaultwizard.new.fileAlreadyExists=Já existe um arquivo ou diretório com esse nome
|
||||
addvaultwizard.new.locationDoesNotExist=Um diretório no caminho especificado não existe ou não pode ser acessado
|
||||
addvaultwizard.new.locationIsNotWritable=Sem acesso de escrita no caminho especificado
|
||||
addvaultwizard.new.locationIsOk=Localização adequada para o seu cofre
|
||||
addvaultwizard.new.locationIsNotWritable=Não há acesso de escrita nesse caminho
|
||||
addvaultwizard.new.locationIsOk=Local adequado para o seu cofre
|
||||
addvaultwizard.new.invalidName=Nome do cofre inválido
|
||||
addvaultwizard.new.validName=Nome do cofre válido
|
||||
addvaultwizard.new.validCharacters.message=O nome do cofre pode conter os seguintes caracteres:
|
||||
addvaultwizard.new.validCharacters.chars=Caracteres de texto (exemplo: a, ж ou 수)
|
||||
addvaultwizard.new.validCharacters.chars=Caracteres de palavra (por exemplo, a, ж or 수)
|
||||
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 criptografados
|
||||
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?
|
||||
@@ -79,7 +87,7 @@ addvault.new.readme.storageLocation.10=Se precisar de ajuda, visite a documenta
|
||||
addvault.new.readme.accessLocation.fileName=BEM-VINDO.rtf
|
||||
addvault.new.readme.accessLocation.1=🔐️ VOLUME ENCRIPTADO 🔐️
|
||||
addvault.new.readme.accessLocation.2=Este é o local de acesso ao seu cofre.
|
||||
addvault.new.readme.accessLocation.3=Todos os arquivos adicionados a este volume serão encriptados pelo Cryptomator. Você pode trabalhar nele tal como em qualquer outra unidade/pasta. Esta é apenas uma visão não encriptada do seu conteúdo, seus arquivos permanecem encriptados em seu disco rígido o tempo todo.
|
||||
addvault.new.readme.accessLocation.3=Todos os arquivos adicionados a este volume serão criptografados de forma transparente pelo Cryptomator. Você pode trabalhar nele como se fosse qualquer unidade/pasta. Esta é apenas uma visão não criptografada do seu conteúdo, mas seus arquivos permanecem criptografados na sua unidade o tempo todo.
|
||||
addvault.new.readme.accessLocation.4=Fique à vontade para apagar este arquivo.
|
||||
## Existing
|
||||
addvaultwizard.existing.instruction=Escolha o arquivo "vault.cryptomator" do seu cofre existente. Se existir apenas um arquivo chamado "masterkey.cryptomator", selecione outro.
|
||||
@@ -110,12 +118,12 @@ forgetPassword.confirmBtn=Esquecer Senha
|
||||
# Unlock
|
||||
unlock.title=Desbloquear "%s"
|
||||
unlock.passwordPrompt=Digite a senha para "%s":
|
||||
unlock.savePassword=Lembrar senha
|
||||
unlock.savePassword=Lembrar Senha
|
||||
unlock.unlockBtn=Desbloquear
|
||||
## Select
|
||||
unlock.chooseMasterkey.message=Arquivo de chave mestra — “masterkey” — não encontrado
|
||||
unlock.chooseMasterkey.description=Não foi possível encontrar o arquivo Masterkey deste cofre no local esperado. Por favor selecione manualmente o arquivo contendo a chave.
|
||||
unlock.chooseMasterkey.filePickerTitle=Selecionar Arquivo Masterkey
|
||||
unlock.chooseMasterkey.message=Arquivo "masterkey" não encontrado
|
||||
unlock.chooseMasterkey.description=Não encontrei o arquivo "masterkey" para o cofre "%s". Por favor selecione manualmente o arquivo contendo a chave.
|
||||
unlock.chooseMasterkey.filePickerTitle=Selecionar arquivo "masterkey"
|
||||
unlock.chooseMasterkey.filePickerMimeDesc=Chave mestra do Cryptomator
|
||||
## Success
|
||||
unlock.success.message=Desbloqueado com sucesso
|
||||
@@ -126,7 +134,11 @@ 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.generic=Você selecionou um caminho de montagem personalizado para este cofre, mas ao usá-lo ocorreu uma falha com a mensagem: %s
|
||||
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 e temporário "%3$s" usado para desbloquear não pôde ser removido. 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
|
||||
## 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.
|
||||
@@ -199,8 +211,8 @@ migration.impossible.moreInfo=O cofre ainda pode ser aberto com uma versão mais
|
||||
# Health Check
|
||||
## Start
|
||||
health.title=Exame de saúde de "%s"
|
||||
health.intro.header=Status de saúde
|
||||
health.intro.text=O Health Check é uma coleção de verificações para detectar e possivelmente corrigir problemas na estrutura interna do seu cofre. Lembre-se de:
|
||||
health.intro.header=Verificação de Saúde
|
||||
health.intro.text=A Verificação de Saúde é um grupo de verificações que detectam e tentam corrigir problemas na estrutura interna do cofre. Lembre-se de:
|
||||
health.intro.remarkSync=Certifique-se de que todos os dispositivos estejam completamente sincronizados, isso resolve a maioria dos problemas.
|
||||
health.intro.remarkFix=Nem todos os problemas podem ser corrigidos.
|
||||
health.intro.remarkBackup=Se os dados estiverem corrompidos, apenas um backup poderá ajudar.
|
||||
@@ -214,38 +226,38 @@ health.fail.moreInfo=Mais informações
|
||||
health.checkList.description=Selecione as verificações na lista esquerda ou use os botões abaixo.
|
||||
health.checkList.selectAllButton=Selecionar Todas as Verificações
|
||||
health.checkList.deselectAllButton=Desfazer seleção de todas as planilhas
|
||||
health.check.runBatchBtn=Executar as Verificações Selecionadas
|
||||
health.check.runBatchBtn=Executar Verificações
|
||||
## Detail view
|
||||
health.check.detail.noSelectedCheck=Para obter os resultados, selecione uma verificação de saúde completada na lista à esquerda.
|
||||
health.check.detail.noSelectedCheck=Para ver os resultados, selecione uma verificação na lista à esquerda.
|
||||
health.check.detail.checkScheduled=A verificação está programada.
|
||||
health.check.detail.checkRunning=A verificação está atualmente em execução…
|
||||
health.check.detail.checkSkipped=A verificação não foi selecionada para ser executada.
|
||||
health.check.detail.checkFinished=A verificação foi concluída com sucesso.
|
||||
health.check.detail.checkFinishedAndFound=A verificação terminou em execução. Por favor, reveja os resultados.
|
||||
health.check.detail.checkFailed=A verificação foi encerrada devido a um erro.
|
||||
health.check.detail.checkRunning=A verificação está rodando…
|
||||
health.check.detail.checkSkipped=A verificação não foi selecionada para execução.
|
||||
health.check.detail.checkFinished=A verificação terminou com sucesso.
|
||||
health.check.detail.checkFinishedAndFound=A verificação terminou. Verifique os resultados.
|
||||
health.check.detail.checkFailed=A verificação encerrou devido a um erro.
|
||||
health.check.detail.checkCancelled=A verificação foi cancelada.
|
||||
health.check.detail.listFilters.label=Filtro
|
||||
health.check.detail.fixAllSpecificBtn=Reparar todo tipo
|
||||
health.check.detail.fixAllSpecificBtn=Reparar todos deste tipo
|
||||
health.check.exportBtn=Exportar Relatório
|
||||
## Result view
|
||||
health.result.severityFilter.all=Severidade - Todos
|
||||
health.result.severityFilter.good=Bom
|
||||
health.result.severityFilter.info=Informação
|
||||
health.result.severityFilter.all=Gravidade - Todas
|
||||
health.result.severityFilter.good=Bom estado
|
||||
health.result.severityFilter.info=Info
|
||||
health.result.severityFilter.warn=Aviso
|
||||
health.result.severityFilter.crit=Crítico
|
||||
health.result.severityTip.good=Gravidade: Boa\nestrutura do cofre normal.
|
||||
health.result.severityTip.info=Gravidade: Informação\nestrutura de cofre intacta, correção sugerida.
|
||||
health.result.severityTip.warn=Gravidade: Aviso\nestrutura de cofre corrompida, correção altamente aconselhável.
|
||||
health.result.severityTip.crit=Gravidade: Estrutura Crítica\ndo cofre corrompida, perda de dados determinada.
|
||||
health.result.severityTip.info=Gravidade: Info\nEstrutura de cofre intacta, correção sugerida.
|
||||
health.result.severityTip.warn=Gravidade: Aviso\nEstrutura de cofre corrompida, correção altamente aconselhada.
|
||||
health.result.severityTip.crit=Gravidade: Crítica\nEstrutura do cofre corrompida, haverá perda de dados.
|
||||
health.result.fixStateFilter.all=Estado de reparo - Todos
|
||||
health.result.fixStateFilter.fixable=Corrigível
|
||||
health.result.fixStateFilter.notFixable=Não corrigível
|
||||
health.result.fixStateFilter.fixing=Corrigindo…
|
||||
health.result.fixStateFilter.fixed=Corrigido
|
||||
health.result.fixStateFilter.fixable=Reparável
|
||||
health.result.fixStateFilter.notFixable=Não reparável
|
||||
health.result.fixStateFilter.fixing=Reparando…
|
||||
health.result.fixStateFilter.fixed=Reparado
|
||||
health.result.fixStateFilter.fixFailed=Reparo falhou
|
||||
## Fix Application
|
||||
health.fix.fixBtn=Corrigir
|
||||
health.fix.successTip=Consertado com sucesso
|
||||
health.fix.fixBtn=Reparar
|
||||
health.fix.successTip=Reparado
|
||||
health.fix.failTip=Falha na correção, consulte o log para obter detalhes
|
||||
|
||||
# Preferences
|
||||
@@ -256,8 +268,8 @@ preferences.general.startHidden=Ocultar janela ao iniciar o Cryptomator
|
||||
preferences.general.autoCloseVaults=Bloquear cofres abertos automaticamente ao sair do aplicativo
|
||||
preferences.general.debugLogging=Ativar log de debug
|
||||
preferences.general.debugDirectory=Mostrar arquivos de log
|
||||
preferences.general.autoStart=Iniciar o Cryptomator durante inicialização do sistema
|
||||
preferences.general.keychainBackend=Armazenar senhas no
|
||||
preferences.general.autoStart=Iniciar o Cryptomator ao inicializar o sistema
|
||||
preferences.general.keychainBackend=Armazenar senhas com
|
||||
## Interface
|
||||
preferences.interface=Interface
|
||||
preferences.interface.theme=Aparência
|
||||
@@ -314,27 +326,27 @@ stats.read.total.data.kib=Dados lidos: %.1f GiB
|
||||
stats.read.total.data.mib=Dados lidos: %.1f MiB
|
||||
stats.read.total.data.gib=Dados lidos: %.1f GiB
|
||||
stats.decr.total.data.none=Dados descriptografados: -
|
||||
stats.decr.total.data.kib=Dados descriptografados: %.1f GiB
|
||||
stats.decr.total.data.kib=Dados descriptografados: %.1f KiB
|
||||
stats.decr.total.data.mib=Dados descriptografados: %.1f MiB
|
||||
stats.decr.total.data.gib=Dados descriptografados: %.1f GiB
|
||||
stats.read.accessCount=Total de leituras: %d
|
||||
stats.read.accessCount=Leituras totais: %d
|
||||
## Write
|
||||
stats.write.throughput.idle=Escrita: ociosa
|
||||
stats.write.throughput.kibs=Escrita: %.2f MiB/s
|
||||
stats.write.throughput.mibs=Escrita: %.2f MiB/s
|
||||
stats.write.throughput.idle=Gravação: ociosa
|
||||
stats.write.throughput.kibs=Gravação: %.2f KiB/s
|
||||
stats.write.throughput.mibs=Gravação: %.2f MiB/s
|
||||
stats.write.total.data.none=Dados gravados: -
|
||||
stats.write.total.data.kib=Dados gravados: %.1f kiB
|
||||
stats.write.total.data.kib=Dados gravados: %.1f KiB
|
||||
stats.write.total.data.mib=Dados gravados: %.1f MiB
|
||||
stats.write.total.data.gib=Dados gravados: %.1f GiB
|
||||
stats.encr.total.data.none=Dados criptografados: -
|
||||
stats.encr.total.data.kib=Dados encriptados: %.1f KiB
|
||||
stats.encr.total.data.kib=Dados criptografados: %.1f KiB
|
||||
stats.encr.total.data.mib=Dados criptografados: %.1f MiB
|
||||
stats.encr.total.data.gib=Dados criptografados: %.1f GiB
|
||||
stats.write.accessCount=Total gravado: %d
|
||||
stats.write.accessCount=Gravações totais: %d
|
||||
|
||||
## Accesses
|
||||
stats.access.current=Acesso: %d
|
||||
stats.access.total=Total de acessos: %d
|
||||
stats.access.total=Acessos totais: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
@@ -342,7 +354,7 @@ main.closeBtn.tooltip=Fechar
|
||||
main.minimizeBtn.tooltip=Minimizar
|
||||
main.preferencesBtn.tooltip=Preferências
|
||||
main.debugModeEnabled.tooltip=Modo de depuração ativado
|
||||
main.supporterCertificateMissing.tooltip=Por favor, considere doar para esse projeto
|
||||
main.supporterCertificateMissing.tooltip=Por favor doe
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Clique aqui para adicionar um cofre
|
||||
main.vaultlist.contextMenu.remove=Remover…
|
||||
@@ -351,7 +363,7 @@ main.vaultlist.contextMenu.unlock=Desbloquear…
|
||||
main.vaultlist.contextMenu.unlockNow=Desbloquear Agora
|
||||
main.vaultlist.contextMenu.vaultoptions=Exibir Opções de Cofre
|
||||
main.vaultlist.contextMenu.reveal=Revelar Volume
|
||||
main.vaultlist.addVaultBtn=Adicionar Cofre
|
||||
main.vaultlist.addVaultBtn=Adicionar
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Obrigado por escolher o Cryptomator para proteger seus arquivos. Se precisar de ajuda, confira nossos guias de introdução:
|
||||
@@ -368,19 +380,19 @@ main.vaultDetail.revealBtn=Revelar Volume
|
||||
main.vaultDetail.copyUri=Copiar URI
|
||||
main.vaultDetail.lockBtn=Bloquear
|
||||
main.vaultDetail.bytesPerSecondRead=Leitura:
|
||||
main.vaultDetail.bytesPerSecondWritten=Escrita:
|
||||
main.vaultDetail.bytesPerSecondWritten=Gravação:
|
||||
main.vaultDetail.throughput.idle=ocioso
|
||||
main.vaultDetail.throughput.kbps=%.1f KiB/s
|
||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||
main.vaultDetail.stats=Estatísticas do Cofre
|
||||
main.vaultDetail.locateEncryptedFileBtn=Localizar Arquivo Criptografado
|
||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=Escolha um arquivo do seu cofre para localizar sua versão criptografada
|
||||
main.vaultDetail.encryptedPathsCopied=Caminhos copiados para área de transferência!
|
||||
main.vaultDetail.encryptedPathsCopied=Caminhos copiados para a Área de Transferência!
|
||||
main.vaultDetail.filePickerTitle=Selecione o Arquivo No Cofre
|
||||
### Missing
|
||||
main.vaultDetail.missing.info=O Cryptomator não conseguiu encontrar um cofre neste caminho.
|
||||
main.vaultDetail.missing.info=O Cryptomator não encontrou um cofre neste caminho.
|
||||
main.vaultDetail.missing.recheck=Verificar novamente
|
||||
main.vaultDetail.missing.remove=Remover da lista de Cofres…
|
||||
main.vaultDetail.missing.remove=Remover da lista de cofres…
|
||||
main.vaultDetail.missing.changeLocation=Alterar Localização do Cofre…
|
||||
### Needs Migration
|
||||
main.vaultDetail.migrateButton=Atualizar Cofre
|
||||
@@ -487,4 +499,12 @@ 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
|
||||
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
|
||||
@@ -20,6 +20,11 @@ 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
|
||||
error.lookupPermissionMessage=Cryptomator poate căuta online o soluție pentru această problemă. O cerere va fi trimisa către baza noastră de date de la adresa ta IP.
|
||||
error.dismiss=Renunță
|
||||
error.lookUpSolution=Caută soluția
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Seif
|
||||
@@ -35,9 +40,6 @@ traymenu.vault.reveal=Afişare
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Adaugă un seif
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Creează seif nou
|
||||
addvaultwizard.welcome.existingButton=Deschide un seif existent
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Alege un nume pentru seif
|
||||
@@ -59,6 +61,12 @@ 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?
|
||||
@@ -126,7 +134,6 @@ 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.
|
||||
@@ -154,6 +161,8 @@ 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
|
||||
@@ -272,9 +281,17 @@ 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
|
||||
@@ -297,21 +314,27 @@ 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
|
||||
@@ -335,7 +358,7 @@ main.vaultlist.contextMenu.unlock=Deblochează…
|
||||
main.vaultlist.contextMenu.unlockNow=Deblochează acum
|
||||
main.vaultlist.contextMenu.vaultoptions=Arată opțiunile seifului
|
||||
main.vaultlist.contextMenu.reveal=Dezvăluie unitatea
|
||||
main.vaultlist.addVaultBtn=Adaugă un seif
|
||||
main.vaultlist.addVaultBtn=Adaugă
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Vă mulțumim că ați ales Cryptomator pentru a vă proteja fișierele. Dacă aveți nevoie de asistență, verificați ghidurile noastre de pornire:
|
||||
@@ -349,12 +372,18 @@ 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
|
||||
@@ -393,13 +422,17 @@ 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
|
||||
@@ -408,6 +441,9 @@ 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
|
||||
@@ -419,6 +455,7 @@ 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ă
|
||||
@@ -430,6 +467,11 @@ 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ă
|
||||
@@ -452,4 +494,12 @@ 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
|
||||
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
|
||||
@@ -20,6 +20,11 @@ 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=Хранилище
|
||||
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Показать
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Добавить хранилище
|
||||
## Welcome
|
||||
addvaultwizard.welcome.newButton=Создать хранилище
|
||||
addvaultwizard.welcome.existingButton=Открыть имеющееся хранилище
|
||||
## New
|
||||
addvaultwizard.new.title=Добавить новое хранилище
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Выберите имя для хранилища
|
||||
addvaultwizard.new.namePrompt=Имя хранилища
|
||||
@@ -59,6 +62,12 @@ 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=Вы не сможете получить доступ к своим данным без пароля. Хотите создать ключ для восстановления на случай утери пароля?
|
||||
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Это место доступа к ваш
|
||||
addvault.new.readme.accessLocation.3=Любые файлы, добавленные в этот том, будут зашифрованы Cryptomator. Вы можете работать с ним как с любым другим диском или папкой. Здесь отображается только расшифрованное содержимое тома, ваши файлы остаются зашифрованными на жёстком диске постоянно.
|
||||
addvault.new.readme.accessLocation.4=Этот файл можно удалить.
|
||||
## Existing
|
||||
addvaultwizard.existing.title=Добавить существующее хранилище
|
||||
addvaultwizard.existing.instruction=Выберите файл "vault.cryptomator" существующего хранилища. Если имеется только файл "masterkey.cryptomator", выберите его.
|
||||
addvaultwizard.existing.chooseBtn=Выбрать…
|
||||
addvaultwizard.existing.filePickerTitle=Выберите файл хранилища
|
||||
@@ -126,7 +136,11 @@ unlock.success.revealBtn=Показать диск
|
||||
unlock.error.customPath.message=Невозможно смонтировать хранилище по указанному пути
|
||||
unlock.error.customPath.description.notSupported=Если вы хотите продолжить использование пользовательского пути, перейдите в настройки и выберите тип тома, который его поддерживает. В противном случае, перейдите в настройки хранилища и выберите поддерживаемую точку монтирования.
|
||||
unlock.error.customPath.description.notExists=Пользовательский путь монтирования не существует. Либо создайте его в локальной файловой системе, либо измените в параметрах хранилища.
|
||||
unlock.error.customPath.description.generic=Вы выбрали свой путь монтирования этого хранилища, но его нельзя использовать: %s
|
||||
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" и выберите связку ключей в настройках.
|
||||
@@ -151,7 +165,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=Лицензия хаба недействительна
|
||||
@@ -351,7 +365,9 @@ main.vaultlist.contextMenu.unlock=Разблокировать…
|
||||
main.vaultlist.contextMenu.unlockNow=Разблокировать
|
||||
main.vaultlist.contextMenu.vaultoptions=Параметры хранилища
|
||||
main.vaultlist.contextMenu.reveal=Показать диск
|
||||
main.vaultlist.addVaultBtn=Добавить хранилище
|
||||
main.vaultlist.addVaultBtn=Добавить
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Новое хранилище...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Существующее хранилище...
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Благодарим за выбор Cryptomator для защиты ваших файлов. Если требуется помощь, ознакомьтесь с документацией по началу работы:
|
||||
@@ -487,4 +503,12 @@ quit.lockAndQuitBtn=Заблокировать и выйти
|
||||
# Forced Quit
|
||||
quit.forced.message=Некоторые хранилища не могут быть заблокированы
|
||||
quit.forced.description=Блокировка хранилищ была прервана из-за отложенной операции или открытых файлов. Вы можете заблокировать оставшиеся хранилища принудительно, однако прерывание ввода-вывода может привести к потере несохранённых данных.
|
||||
quit.forced.forceAndQuitBtn=Заблокировать и выйти
|
||||
quit.forced.forceAndQuitBtn=Заблокировать и выйти
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Проверка обновлений
|
||||
updateReminder.message=Проверить обновления?
|
||||
updateReminder.description=Будьте в курсе новых возможностей, исправлений ошибок и улучшений безопасности. Мы рекомендуем автоматически проверять наличие обновлений.
|
||||
updateReminder.notNow=Не сейчас
|
||||
updateReminder.yesOnce=Да, один раз
|
||||
updateReminder.yesAutomatically=Да, автоматически
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user