mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-05-15 17:21:27 +00:00
Compare commits
67 Commits
1.7.0-beta
...
1.7.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
36da26c6b9 | ||
|
|
33e1cb3131 | ||
|
|
ed4b433df0 | ||
|
|
d2ece543c8 | ||
|
|
4bb2df7d8f | ||
|
|
4d5c6ca29a | ||
|
|
f0d597ba73 | ||
|
|
310329d0b5 | ||
|
|
30f86a7f2a | ||
|
|
5237dc8cae | ||
|
|
67ff4da05b | ||
|
|
947eb11198 | ||
|
|
c6a9af1a04 | ||
|
|
0ddf221e26 | ||
|
|
3f2b5ccde9 | ||
|
|
3d0b6dde28 | ||
|
|
45534b0a2b | ||
|
|
6d906beeb8 | ||
|
|
e577c64c35 | ||
|
|
b848e78372 | ||
|
|
39e9395b4b | ||
|
|
ca3157cc70 | ||
|
|
f94c1f07d6 | ||
|
|
d43f197c11 | ||
|
|
67e566832c | ||
|
|
6f5a88af1d | ||
|
|
210b891616 | ||
|
|
20e820c903 | ||
|
|
5307e93c1b | ||
|
|
e221019b57 | ||
|
|
eeaaced976 | ||
|
|
d246b54268 | ||
|
|
e94572960e | ||
|
|
2d1c59bea9 | ||
|
|
921cbd6439 | ||
|
|
f811144ffa | ||
|
|
2ecc711f50 | ||
|
|
cfcc8782ef | ||
|
|
a1379bac40 | ||
|
|
fe3f2b5bd3 | ||
|
|
7fc07ae02c | ||
|
|
2a70e2f0f4 | ||
|
|
ffe0302fba | ||
|
|
c5b86bc355 | ||
|
|
5f86473e3e | ||
|
|
a91c74b6eb | ||
|
|
76949d6ccb | ||
|
|
71a09eae67 | ||
|
|
8087fcecfb | ||
|
|
29c73e1bc8 | ||
|
|
8bbdb69cda | ||
|
|
e9ee15dcd5 | ||
|
|
03f6e0a33c | ||
|
|
c5b21b0d8c | ||
|
|
c5c5e297b7 | ||
|
|
24839985e9 | ||
|
|
a7b2802f34 | ||
|
|
c85d0b4beb | ||
|
|
3dff3a8664 | ||
|
|
5b0bbf539b | ||
|
|
1ff7c40fd9 | ||
|
|
d0875ef49e | ||
|
|
e35ed9af72 | ||
|
|
ac43efe149 | ||
|
|
202a2ea79f | ||
|
|
c19a86a348 | ||
|
|
539dcaa85a |
15
.github/ISSUE_TEMPLATE/bug.yml
vendored
15
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -37,12 +37,17 @@ body:
|
||||
id: volume-type
|
||||
attributes:
|
||||
label: Volume Type
|
||||
description: What is selected under Settings → Virtual Drive?
|
||||
multiple: true
|
||||
description: What volume type is selected under Settings → Virtual Drive?
|
||||
options:
|
||||
- FUSE
|
||||
- Dokany
|
||||
- WebDAV
|
||||
- WinFsp
|
||||
- WinFsp (Local Drive)
|
||||
- FUSE-T
|
||||
- macFUSE
|
||||
- WebDAV (Windows Explorer)
|
||||
- WebDAV (AppleScript)
|
||||
- WebDAV (gio)
|
||||
- WebDAV (HTTP Address)
|
||||
- Dokany (1.5)
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
|
||||
4
.github/workflows/debian.yml
vendored
4
.github/workflows/debian.yml
vendored
@@ -20,8 +20,8 @@ on:
|
||||
|
||||
env:
|
||||
JAVA_VERSION: 19
|
||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/19/openjfx-19_linux-x64_bin-jmods.zip'
|
||||
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/19/openjfx-19_linux-aarch64_bin-jmods.zip'
|
||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/19.0.2.1/openjfx-19.0.2.1_linux-x64_bin-jmods.zip'
|
||||
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/19.0.2.1/openjfx-19.0.2.1_linux-aarch64_bin-jmods.zip'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
10
.github/workflows/mac-dmg.yml
vendored
10
.github/workflows/mac-dmg.yml
vendored
@@ -30,10 +30,12 @@ jobs:
|
||||
architecture: x64
|
||||
output-suffix: x64
|
||||
xcode-path: '/Applications/Xcode_13.2.1.app'
|
||||
fuse-lib: macFUSE
|
||||
- os: [self-hosted, macOS, ARM64]
|
||||
architecture: aarch64
|
||||
output-suffix: arm64
|
||||
xcode-path: '/Applications/Xcode_13.2.1.app'
|
||||
fuse-lib: FUSE-T
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup Java
|
||||
@@ -177,7 +179,7 @@ jobs:
|
||||
run: |
|
||||
mkdir dmg
|
||||
mv Cryptomator.app dmg
|
||||
cp dist/mac/dmg/resources/macFUSE.webloc dmg
|
||||
cp dist/mac/dmg/resources/${{ matrix.fuse-lib }}.webloc dmg
|
||||
ls -l dmg
|
||||
- name: Install create-dmg
|
||||
run: |
|
||||
@@ -188,14 +190,14 @@ jobs:
|
||||
create-dmg
|
||||
--volname Cryptomator
|
||||
--volicon "dist/mac/dmg/resources/Cryptomator-Volume.icns"
|
||||
--background "dist/mac/dmg/resources/Cryptomator-background.tiff"
|
||||
--background "dist/mac/dmg/resources/Cryptomator-${{ matrix.fuse-lib }}-background.tiff"
|
||||
--window-pos 400 100
|
||||
--window-size 640 694
|
||||
--icon-size 128
|
||||
--icon "Cryptomator.app" 128 245
|
||||
--hide-extension "Cryptomator.app"
|
||||
--icon "macFUSE.webloc" 320 501
|
||||
--hide-extension "macFUSE.webloc"
|
||||
--icon "${{ matrix.fuse-lib }}.webloc" 320 501
|
||||
--hide-extension "${{ matrix.fuse-lib }}.webloc"
|
||||
--app-drop-link 512 245
|
||||
--eula "dist/mac/dmg/resources/license.rtf"
|
||||
--icon ".background" 128 758
|
||||
|
||||
6
.github/workflows/win-exe.yml
vendored
6
.github/workflows/win-exe.yml
vendored
@@ -156,7 +156,7 @@ jobs:
|
||||
--name Cryptomator
|
||||
--vendor "Skymatic GmbH"
|
||||
--copyright "(C) 2016 - 2023 Skymatic GmbH"
|
||||
--app-version "${{ needs.get-version.outputs.semVerNum }}"
|
||||
--app-version "${{ needs.get-version.outputs.semVerNum }}.${{ needs.get-version.outputs.revNum}}"
|
||||
--win-menu
|
||||
--win-dir-chooser
|
||||
--win-shortcut-prompt
|
||||
@@ -243,13 +243,14 @@ jobs:
|
||||
shell: pwsh
|
||||
- name: Download WinFsp
|
||||
run: |
|
||||
$winfspUrl= (Select-String -Path ".\dist\win\bundle\resources\winfsp-download.url" -Pattern 'https:.*').Matches.Value
|
||||
$winfspUrl = (Select-String -Path ".\dist\win\bundle\resources\winFspMetaData.wxi" -Pattern '<\?define BundledWinFspDownloadLink="(.+)".*?>').Matches.Groups[1].Value
|
||||
curl --output dist/win/bundle/resources/winfsp.msi -L $winfspUrl
|
||||
shell: pwsh
|
||||
- name: Compile to wixObj file
|
||||
run: >
|
||||
"${WIX}/bin/candle.exe" dist/win/bundle/bundleWithWinfsp.wxs
|
||||
-ext WixBalExtension
|
||||
-ext WixUtilExtension
|
||||
-out dist/win/bundle/
|
||||
-dBundleVersion="${{ needs.get-version.outputs.semVerNum }}.${{ needs.get-version.outputs.revNum }}"
|
||||
-dBundleVendor="Skymatic GmbH"
|
||||
@@ -261,6 +262,7 @@ jobs:
|
||||
run: >
|
||||
"${WIX}/bin/light.exe" -b dist/win/ dist/win/bundle/bundleWithWinfsp.wixobj
|
||||
-ext WixBalExtension
|
||||
-ext WixUtilExtension
|
||||
-out installer/unsigned/Cryptomator-Installer.exe
|
||||
- name: Detach burn engine in preparation to sign
|
||||
run: >
|
||||
|
||||
10
.idea/compiler.xml
generated
10
.idea/compiler.xml
generated
@@ -14,10 +14,10 @@
|
||||
<option name="dagger.fastInit" value="enabled" />
|
||||
<option name="dagger.formatGeneratedSource" value="enabled" />
|
||||
<processorPath useClasspath="false">
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.44/dagger-compiler-2.44.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.44/dagger-2.44.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.45/dagger-compiler-2.45.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.45/dagger-2.45.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-producers/2.44/dagger-producers-2.44.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-producers/2.45/dagger-producers-2.45.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/guava/guava/31.0.1-jre/guava-31.0.1-jre.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" />
|
||||
@@ -26,14 +26,16 @@
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-spi/2.44/dagger-spi-2.44.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-spi/2.45/dagger-spi-2.45.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/devtools/ksp/symbol-processing-api/1.7.0-1.0.6/symbol-processing-api-1.7.0-1.0.6.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.7.0/kotlin-stdlib-1.7.0.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.7.0/kotlin-stdlib-common-1.7.0.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/squareup/javapoet/1.13.0/javapoet-1.13.0.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/squareup/kotlinpoet/1.11.0/kotlinpoet-1.11.0.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.7.0/kotlin-stdlib-jdk8-1.7.0.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.7.0/kotlin-stdlib-jdk7-1.7.0.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/1.6.10/kotlin-reflect-1.6.10.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/googlejavaformat/google-java-format/1.5/google-java-format-1.5.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/javac-shaded/9-dev-r4023-3/javac-shaded-9-dev-r4023-3.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/net/ltgt/gradle/incap/incap/0.2/incap-0.2.jar" />
|
||||
|
||||
@@ -74,7 +74,7 @@ Download native binaries of Cryptomator on [cryptomator.org](https://cryptomator
|
||||
|
||||
### Consistency
|
||||
|
||||
- HMAC over file contents to recognize changed ciphertext before decryption
|
||||
- Authenticated encryption is used for file content to recognize changed ciphertext before decryption
|
||||
- I/O operations are transactional and atomic, if the filesystems support it
|
||||
- Each file contains all information needed for decryption (except for the key of course), no common metadata means no [SPOF](http://en.wikipedia.org/wiki/Single_point_of_failure)
|
||||
|
||||
|
||||
@@ -66,6 +66,8 @@
|
||||
</content_rating>
|
||||
|
||||
<releases>
|
||||
<release date="2023-03-03" version="1.7.1"/>
|
||||
<release date="2023-03-01" version="1.7.0"/>
|
||||
<release date="2022-12-14" version="1.6.17"/>
|
||||
<release date="2022-12-06" version="1.6.16"/>
|
||||
<release date="2022-10-06" version="1.6.15"/>
|
||||
|
||||
2
dist/linux/debian/control
vendored
2
dist/linux/debian/control
vendored
@@ -12,7 +12,7 @@ Package: cryptomator
|
||||
Architecture: any
|
||||
Section: utils
|
||||
Priority: optional
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, libfuse3-3
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, fuse3
|
||||
Recommends: gvfs-backends, gvfs-fuse, gnome-keyring
|
||||
XB-AppName: Cryptomator
|
||||
XB-Category: Utility;Security;FileTools;
|
||||
|
||||
9
dist/mac/dmg/build.sh
vendored
9
dist/mac/dmg/build.sh
vendored
@@ -27,6 +27,7 @@ MAIN_JAR_GLOB="cryptomator-*.jar"
|
||||
MODULE_AND_MAIN_CLASS="org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator"
|
||||
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"
|
||||
|
||||
# check preconditions
|
||||
if [ -z "${JAVA_HOME}" ]; then echo "JAVA_HOME not set. Run using JAVA_HOME=/path/to/jdk ./build.sh"; exit 1; fi
|
||||
@@ -125,20 +126,20 @@ fi
|
||||
# prepare dmg contents
|
||||
mkdir dmg
|
||||
mv ${APP_NAME}.app dmg
|
||||
cp resources/macFUSE.webloc dmg
|
||||
cp resources/${FUSE_LIB}.webloc dmg
|
||||
|
||||
# create dmg
|
||||
create-dmg \
|
||||
--volname ${APP_NAME} \
|
||||
--volicon "resources/${APP_NAME}-Volume.icns" \
|
||||
--background "resources/${APP_NAME}-background.tiff" \
|
||||
--background "resources/${APP_NAME}-${FUSE_LIB}-background.tiff" \
|
||||
--window-pos 400 100 \
|
||||
--window-size 640 694 \
|
||||
--icon-size 128 \
|
||||
--icon "${APP_NAME}.app" 128 245 \
|
||||
--hide-extension "${APP_NAME}.app" \
|
||||
--icon "macFUSE.webloc" 320 501 \
|
||||
--hide-extension "macFUSE.webloc" \
|
||||
--icon "${FUSE_LIB}.webloc" 320 501 \
|
||||
--hide-extension "${FUSE_LIB}.webloc" \
|
||||
--app-drop-link 512 245 \
|
||||
--eula "resources/license.rtf" \
|
||||
--icon ".background" 128 758 \
|
||||
|
||||
BIN
dist/mac/dmg/resources/Cryptomator-FUSE-T-background.tiff
vendored
Normal file
BIN
dist/mac/dmg/resources/Cryptomator-FUSE-T-background.tiff
vendored
Normal file
Binary file not shown.
8
dist/mac/dmg/resources/FUSE-T.webloc
vendored
Normal file
8
dist/mac/dmg/resources/FUSE-T.webloc
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>URL</key>
|
||||
<string>https://www.fuse-t.org/</string>
|
||||
</dict>
|
||||
</plist>
|
||||
8
dist/win/build.ps1
vendored
8
dist/win/build.ps1
vendored
@@ -129,7 +129,7 @@ $Env:JP_WIXWIZARD_RESOURCES = "$buildDir\resources"
|
||||
--name $AppName `
|
||||
--vendor $Vendor `
|
||||
--copyright $copyright `
|
||||
--app-version "$semVerNo" `
|
||||
--app-version "$semVerNo.$revisionNo" `
|
||||
--win-menu `
|
||||
--win-dir-chooser `
|
||||
--win-shortcut-prompt `
|
||||
@@ -153,7 +153,7 @@ $Env:JP_WIXWIZARD_RESOURCES = "$buildDir\resources"
|
||||
# download Winfsp
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
$ProgressPreference = 'SilentlyContinue' # disables Invoke-WebRequest's progress bar, which slows down downloads to a few bytes/s
|
||||
$winfspMsiUrl= (Select-String -Path ".\bundle\resources\winfsp-download.url" -Pattern 'https:.*').Matches.Value
|
||||
$winfspMsiUrl= (Select-String -Path ".\bundle\resources\winFspMetaData.wxi" -Pattern '<\?define BundledWinFspDownloadLink="(.+)".*?>').Matches.Groups[1].Value
|
||||
Write-Output "Downloading ${winfspMsiUrl}..."
|
||||
Invoke-WebRequest $winfspMsiUrl -OutFile ".\bundle\resources\winfsp.msi" # redirects are followed by default
|
||||
|
||||
@@ -161,11 +161,11 @@ Invoke-WebRequest $winfspMsiUrl -OutFile ".\bundle\resources\winfsp.msi" # redir
|
||||
Copy-Item ".\installer\$AppName-*.msi" -Destination ".\bundle\resources\$AppName.msi"
|
||||
|
||||
# create bundle including winfsp
|
||||
& "$env:WIX\bin\candle.exe" .\bundle\bundleWithWinfsp.wxs -ext WixBalExtension -out bundle\ `
|
||||
& "$env:WIX\bin\candle.exe" .\bundle\bundleWithWinfsp.wxs -ext WixBalExtension -ext WixUtilextension -out bundle\ `
|
||||
-dBundleVersion="$semVerNo.$revisionNo" `
|
||||
-dBundleVendor="$Vendor" `
|
||||
-dBundleCopyright="$copyright" `
|
||||
-dAboutUrl="$AboutUrl" `
|
||||
-dHelpUrl="$HelpUrl" `
|
||||
-dUpdateUrl="$UpdateUrl"
|
||||
& "$env:WIX\bin\light.exe" -b . .\bundle\BundlewithWinfsp.wixobj -ext WixBalExtension -out installer\$AppName-Installer.exe
|
||||
& "$env:WIX\bin\light.exe" -b . .\bundle\BundlewithWinfsp.wixobj -ext WixBalExtension -ext WixUtilextension -out installer\$AppName-Installer.exe
|
||||
20
dist/win/bundle/bundleWithWinfsp.wxs
vendored
20
dist/win/bundle/bundleWithWinfsp.wxs
vendored
@@ -1,13 +1,31 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
|
||||
<!-- see https://wixtoolset.org/documentation/manual/v3/xsd/wix/bundle.html-->
|
||||
<!-- Attributes explicitly not used:
|
||||
Condition - the single msi files have their own install conditions, no need to copy them here
|
||||
-->
|
||||
|
||||
<Bundle Name="Cryptomator" UpgradeCode="29eea626-2e5b-4449-b5f8-4602925ddf7b" Version="$(var.BundleVersion)" Manufacturer="$(var.BundleVendor)"
|
||||
AboutUrl="$(var.AboutUrl)" HelpUrl="$(var.HelpUrl)" UpdateUrl="$(var.UpdateUrl)" Copyright="$(var.BundleCopyright)" IconSourceFile="bundle\resources\Cryptomator.ico">
|
||||
|
||||
<!-- detect outdated WinFsp installations -->
|
||||
<?include "resources\winFspMetaData.wxi" ?>
|
||||
<util:ProductSearch
|
||||
Variable="InstalledWinFspVersion"
|
||||
Result="version"
|
||||
UpgradeCode="82F812D9-4083-4EF1-8BC8-0F1EDA05B46B"
|
||||
/>
|
||||
<!-- Note: The bundle engine takes the Message format literaly -->
|
||||
<bal:Condition Message=
|
||||
"The WinFsp driver used by Cryptomator is outdated and must be removed before the installation.
|
||||
|
||||
1. Open the view of installed apps
|
||||
2. Search for "WinFsp"
|
||||
3. Uninstall the listed application
|
||||
4. Reboot your device
|
||||
5. Restart this installer">(InstalledWinFspVersion = v0.0.0.0) OR ($(var.BundledWinFspVersion) <= InstalledWinFspVersion)</bal:Condition>
|
||||
|
||||
<!-- for definition of the standard themes, see https://github.com/wixtoolset/wix3/blob/master/src/ext/BalExtension/wixstdba/Resources/-->
|
||||
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLargeLicense">
|
||||
<!-- see https://wixtoolset.org/documentation/manual/v3/xsd/bal/wixstandardbootstrapperapplication.html -->
|
||||
|
||||
3
dist/win/bundle/customBootstrapperTheme.xml
vendored
3
dist/win/bundle/customBootstrapperTheme.xml
vendored
@@ -10,6 +10,7 @@
|
||||
<Font Id="2" Height="-22" Weight="500" Foreground="666666">Segoe UI</Font>
|
||||
<Font Id="3" Height="-12" Weight="500" Foreground="000000" Background="FFFFFF">Segoe UI</Font>
|
||||
<Font Id="4" Height="-12" Weight="500" Foreground="ff0000" Background="FFFFFF" Underline="yes">Segoe UI</Font>
|
||||
<Font Id="5" Height="-12" Weight="700" Foreground="000000" Background="FFFFFF">Segoe UI</Font>
|
||||
|
||||
<Image X="11" Y="11" Width="64" Height="64" ImageFile="logo.png" />
|
||||
<Text X="80" Y="11" Width="-11" Height="64" FontId="1" DisablePrefix="yes">#(loc.Title)</Text>
|
||||
@@ -82,7 +83,7 @@
|
||||
<Text Name="FailureUninstallHeader" X="185" Y="50" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureUninstallHeader)</Text>
|
||||
<Text Name="FailureRepairHeader" X="185" Y="50" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureRepairHeader)</Text>
|
||||
<Hypertext Name="FailureLogFileLink" X="185" Y="121" Width="-11" Height="68" FontId="3" TabStop="yes" HideWhenDisabled="yes">#(loc.FailureHyperlinkLogText)</Hypertext>
|
||||
<Hypertext Name="FailureMessageText" X="185" Y="-115" Width="-11" Height="80" FontId="3" TabStop="yes" HideWhenDisabled="yes" />
|
||||
<Hypertext Name="FailureMessageText" X="185" Y="-80" Width="-11" Height="140" FontId="5" TabStop="yes" HideWhenDisabled="yes" />
|
||||
<Text Name="FailureRestartText" X="185" Y="-57" Width="-11" Height="80" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureRestartText)</Text>
|
||||
<Button Name="FailureRestartButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.FailureRestartButton)</Button>
|
||||
<Button Name="FailureCloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.FailureCloseButton)</Button>
|
||||
|
||||
7
dist/win/bundle/resources/winFspMetaData.wxi
vendored
Normal file
7
dist/win/bundle/resources/winFspMetaData.wxi
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<!-- A version number MUST be prefixed with letter "v", otherwise it is considered a normal string -->
|
||||
<?define BundledWinFspVersion="v1.12.22309" ?>
|
||||
<?define BundledWinFspDownloadLink="https://github.com/winfsp/winfsp/releases/download/v1.12.22339/winfsp-1.12.22339.msi" ?> <!-- Only used by external build scripts -->
|
||||
</Include>
|
||||
@@ -1,2 +0,0 @@
|
||||
[InternetShortcut]
|
||||
URL=https://github.com/winfsp/winfsp/releases/download/v1.12/winfsp-1.12.22301.msi
|
||||
16
dist/win/contrib/version170-migrate-settings.ps1
vendored
16
dist/win/contrib/version170-migrate-settings.ps1
vendored
@@ -7,19 +7,9 @@
|
||||
|
||||
#Get all active, local user profiles
|
||||
$profileList = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
|
||||
$localUsers = Get-LocalUser | Where-Object {$_.Enabled} | ForEach-Object { $_.Name}
|
||||
|
||||
Get-ChildItem $profileList | ForEach-Object { $_.GetValue("ProfileImagePath") } | Where-Object {
|
||||
$profileNameMatches = ($_ | Select-String -Pattern "\\([^\\]+)$").Matches
|
||||
if($profileNameMatches.Count -eq 1) {
|
||||
#check if the last path part is contained in the local user name list
|
||||
#otherwise do not touch it
|
||||
return $localUsers.Contains($profileNameMatches[0].Groups[1].Value)
|
||||
} else {
|
||||
return $false;
|
||||
}
|
||||
} | ForEach-Object {
|
||||
$settingsPath = "$_\AppData\Roaming\Cryptomator\settings.json"
|
||||
Get-ChildItem $profileList | ForEach-Object {
|
||||
$profilePath = $_.GetValue("ProfileImagePath")
|
||||
$settingsPath = "$profilePath\AppData\Roaming\Cryptomator\settings.json"
|
||||
if(!(Test-Path -Path $settingsPath -PathType Leaf)) {
|
||||
#No settings file, nothing to do.
|
||||
return;
|
||||
|
||||
8
dist/win/resources/main.wxs
vendored
8
dist/win/resources/main.wxs
vendored
@@ -54,7 +54,7 @@
|
||||
Property="JP_UPGRADABLE_FOUND"
|
||||
Maximum="$(var.JpAppVersion)"
|
||||
MigrateFeatures="yes"
|
||||
IncludeMaximum="$(var.JpUpgradeVersionOnlyDetectUpgrade)" />
|
||||
IncludeMaximum="yes" /> <!-- TODO: check if this needs to be set to yes-->
|
||||
<UpgradeVersion
|
||||
OnlyDetect="$(var.JpUpgradeVersionOnlyDetectDowngrade)"
|
||||
Property="JP_DOWNGRADABLE_FOUND"
|
||||
@@ -143,11 +143,11 @@
|
||||
CloseMessage="no"
|
||||
RebootPrompt="no"
|
||||
PromptToContinue="yes"
|
||||
Description="A running instance of $(var.JpAppName) is found. Please close it to continue."
|
||||
Description="A running instance of $(var.JpAppName) is found, using files marked for update. Please close it to continue."
|
||||
Property="FOUNDRUNNINGAPP"
|
||||
>
|
||||
</util:CloseApplication>
|
||||
<CustomAction Id="FailOnRunningApp" Impersonate="no" ExeCommand="[SystemFolder]\cmd.exe /c "exit 1"" Directory="INSTALLDIR" Execute="immediate" Return="check" />
|
||||
<CustomAction Id="FailOnRunningApp" Error="Installation aborted, because files marked for update are used by a running instance of $(var.JpAppName)."/>
|
||||
|
||||
<?ifdef JpIcon ?>
|
||||
<Property Id="ARPPRODUCTICON" Value="JpARPPRODUCTICON"/>
|
||||
@@ -182,7 +182,7 @@
|
||||
<Custom Action="WixCloseApplications" Before="InstallValidate"></Custom>
|
||||
<Custom Action="FailOnRunningApp" After="WixCloseApplications" >FOUNDRUNNINGAPP</Custom>
|
||||
|
||||
<RemoveExistingProducts After="InstallValidate"/>
|
||||
<RemoveExistingProducts After="InstallValidate"/> <!-- Moved from CostInitialize, due to WixCloseApplications -->
|
||||
|
||||
<Custom Action="PatchWebDAV" After="InstallFiles">NOT Installed OR REINSTALL</Custom>
|
||||
<Custom Action="V170MigrateSettings" After="InstallFiles">NOT Installed OR REINSTALL</Custom>
|
||||
|
||||
38
pom.xml
38
pom.xml
@@ -3,7 +3,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>cryptomator</artifactId>
|
||||
<version>1.7.0-SNAPSHOT</version>
|
||||
<version>1.7.1</version>
|
||||
<name>Cryptomator Desktop App</name>
|
||||
|
||||
<organization>
|
||||
@@ -30,43 +30,43 @@
|
||||
<!-- cryptomator dependencies -->
|
||||
<cryptomator.cryptolib.version>2.1.1</cryptomator.cryptolib.version>
|
||||
<cryptomator.cryptofs.version>2.6.1</cryptomator.cryptofs.version>
|
||||
<cryptomator.integrations.version>1.2.0-beta4</cryptomator.integrations.version>
|
||||
<cryptomator.integrations.win.version>1.2.0-beta2</cryptomator.integrations.win.version>
|
||||
<cryptomator.integrations.mac.version>1.2.0-beta2</cryptomator.integrations.mac.version>
|
||||
<cryptomator.integrations.linux.version>1.2.0-beta1</cryptomator.integrations.linux.version>
|
||||
<cryptomator.fuse.version>2.0.0-beta5</cryptomator.fuse.version>
|
||||
<cryptomator.dokany.version>2.0.0-beta2</cryptomator.dokany.version>
|
||||
<cryptomator.webdav.version>2.0.0-beta4</cryptomator.webdav.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.0</cryptomator.integrations.linux.version>
|
||||
<cryptomator.fuse.version>2.0.2</cryptomator.fuse.version>
|
||||
<cryptomator.dokany.version>2.0.0</cryptomator.dokany.version>
|
||||
<cryptomator.webdav.version>2.0.1</cryptomator.webdav.version>
|
||||
|
||||
<!-- 3rd party dependencies -->
|
||||
<commons-lang3.version>3.12.0</commons-lang3.version>
|
||||
<dagger.version>2.44</dagger.version>
|
||||
<dagger.version>2.45</dagger.version>
|
||||
<easybind.version>2.2</easybind.version>
|
||||
<guava.version>31.1-jre</guava.version>
|
||||
<gson.version>2.9.1</gson.version>
|
||||
<javafx.version>19</javafx.version>
|
||||
<jwt.version>4.2.1</jwt.version>
|
||||
<nimbus-jose.version>9.25.4</nimbus-jose.version>
|
||||
<logback.version>1.4.4</logback.version>
|
||||
<slf4j.version>2.0.3</slf4j.version>
|
||||
<gson.version>2.10.1</gson.version>
|
||||
<javafx.version>19.0.2.1</javafx.version>
|
||||
<jwt.version>4.3.0</jwt.version>
|
||||
<nimbus-jose.version>9.31</nimbus-jose.version>
|
||||
<logback.version>1.4.5</logback.version>
|
||||
<slf4j.version>2.0.6</slf4j.version>
|
||||
<tinyoauth2.version>0.5.1</tinyoauth2.version>
|
||||
<zxcvbn.version>1.7.0</zxcvbn.version>
|
||||
|
||||
<!-- test dependencies -->
|
||||
<junit.jupiter.version>5.9.1</junit.jupiter.version>
|
||||
<mockito.version>4.8.0</mockito.version>
|
||||
<junit.jupiter.version>5.9.2</junit.jupiter.version>
|
||||
<mockito.version>5.1.1</mockito.version>
|
||||
<hamcrest.version>2.2</hamcrest.version>
|
||||
|
||||
<!-- build-time dependencies -->
|
||||
<jetbrains.annotations.version>23.0.0</jetbrains.annotations.version>
|
||||
<dependency-check.version>7.4.4</dependency-check.version>
|
||||
<dependency-check.version>8.1.0</dependency-check.version>
|
||||
<jacoco.version>0.8.8</jacoco.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<!-- Cryptomator Libs -->
|
||||
<dependency>
|
||||
<!-- needed due to https://github.com/cryptomator/cryptolib/issues/34-->
|
||||
<!-- needed due to https://github.com/cryptomator/cryptolib/issues/34 -->
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>cryptolib</artifactId>
|
||||
<version>${cryptomator.cryptolib.version}</version>
|
||||
|
||||
@@ -16,6 +16,7 @@ import org.cryptomator.common.settings.SettingsProvider;
|
||||
import org.cryptomator.common.vaults.VaultComponent;
|
||||
import org.cryptomator.common.vaults.VaultListModule;
|
||||
import org.cryptomator.cryptolib.common.MasterkeyFileAccess;
|
||||
import org.cryptomator.integrations.revealpath.RevealPathService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -26,6 +27,7 @@ import java.net.InetSocketAddress;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.Comparator;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.SynchronousQueue;
|
||||
@@ -83,6 +85,13 @@ public abstract class CommonsModule {
|
||||
return new SemVerComparator();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static Optional<RevealPathService> provideRevealPathService() {
|
||||
return RevealPathService.get().findFirst();
|
||||
}
|
||||
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static Settings provideSettings(SettingsProvider settingsProvider) {
|
||||
|
||||
@@ -14,7 +14,6 @@ import javafx.beans.value.ObservableValue;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
|
||||
import static org.cryptomator.integrations.mount.MountCapability.MOUNT_AS_DRIVE_LETTER;
|
||||
import static org.cryptomator.integrations.mount.MountCapability.MOUNT_TO_EXISTING_DIR;
|
||||
@@ -60,7 +59,7 @@ public class Mounter {
|
||||
case READ_ONLY -> builder.setReadOnly(vaultSettings.usesReadOnlyMode().get());
|
||||
case MOUNT_FLAGS -> {
|
||||
var mountFlags = vaultSettings.mountFlags().get();
|
||||
if( mountFlags == null || mountFlags.isBlank()) {
|
||||
if (mountFlags == null || mountFlags.isBlank()) {
|
||||
builder.setMountFlags(service.getDefaultMountFlags());
|
||||
} else {
|
||||
builder.setMountFlags(mountFlags);
|
||||
@@ -81,9 +80,10 @@ public class Mounter {
|
||||
var canMountToDriveLetter = service.hasCapability(MOUNT_AS_DRIVE_LETTER);
|
||||
var canMountToParent = service.hasCapability(MOUNT_WITHIN_EXISTING_PARENT);
|
||||
var canMountToDir = service.hasCapability(MOUNT_TO_EXISTING_DIR);
|
||||
var canMountToSystem = service.hasCapability(MOUNT_TO_SYSTEM_CHOSEN_PATH);
|
||||
|
||||
if (userChosenMountPoint == null) {
|
||||
if (service.hasCapability(MOUNT_TO_SYSTEM_CHOSEN_PATH)) {
|
||||
if (canMountToSystem) {
|
||||
// no need to set a mount point
|
||||
} else if (canMountToDriveLetter) {
|
||||
builder.setMountpoint(driveLetters.getFirstDesiredAvailable().orElseThrow()); //TODO: catch exception and translate
|
||||
@@ -105,8 +105,11 @@ public class Mounter {
|
||||
}
|
||||
try {
|
||||
builder.setMountpoint(userChosenMountPoint);
|
||||
} catch (IllegalArgumentException e) {
|
||||
var configNotSupported = (!canMountToDriveLetter && mpIsDriveLetter) || (!canMountToDir && !mpIsDriveLetter) || (!canMountToParent && !mpIsDriveLetter);
|
||||
} catch (IllegalArgumentException | UnsupportedOperationException e) {
|
||||
var configNotSupported = (!canMountToDriveLetter && mpIsDriveLetter) //mounting as driveletter, albeit not supported
|
||||
|| (!canMountToDir && !mpIsDriveLetter) //mounting to directory, albeit not supported
|
||||
|| (!canMountToParent && !mpIsDriveLetter) //
|
||||
|| (!canMountToDir && !canMountToParent && !canMountToSystem && !canMountToDriveLetter);
|
||||
if (configNotSupported) {
|
||||
throw new MountPointNotSupportedException(e.getMessage());
|
||||
} else if (canMountToDir && !canMountToParent && !Files.exists(userChosenMountPoint)) {
|
||||
|
||||
@@ -37,30 +37,30 @@ public class SettingsJsonAdapter extends TypeAdapter<Settings> {
|
||||
@Override
|
||||
public void write(JsonWriter out, Settings value) throws IOException {
|
||||
out.beginObject();
|
||||
out.name("lastWrittenByVersion").value(env.getAppVersion()+env.getBuildNumber().map("-"::concat).orElse(""));
|
||||
out.name("writtenByVersion").value(env.getAppVersion() + env.getBuildNumber().map("-"::concat).orElse(""));
|
||||
out.name("directories");
|
||||
writeVaultSettingsArray(out, value.getDirectories());
|
||||
out.name("askedForUpdateCheck").value(value.askedForUpdateCheck().get());
|
||||
out.name("checkForUpdatesEnabled").value(value.checkForUpdates().get());
|
||||
out.name("startHidden").value(value.startHidden().get());
|
||||
out.name("autoCloseVaults").value(value.autoCloseVaults().get());
|
||||
out.name("port").value(value.port().get());
|
||||
out.name("numTrayNotifications").value(value.numTrayNotifications().get());
|
||||
out.name("checkForUpdatesEnabled").value(value.checkForUpdates().get());
|
||||
out.name("debugMode").value(value.debugMode().get());
|
||||
out.name("theme").value(value.theme().get().name());
|
||||
out.name("uiOrientation").value(value.userInterfaceOrientation().get().name());
|
||||
out.name("displayConfiguration").value((value.displayConfigurationProperty().get()));
|
||||
out.name("keychainProvider").value(value.keychainProvider().get());
|
||||
out.name("useKeychain").value(value.useKeychain().get());
|
||||
out.name("language").value((value.languageProperty().get()));
|
||||
out.name("licenseKey").value(value.licenseKey().get());
|
||||
out.name("mountService").value(value.mountService().get());
|
||||
out.name("numTrayNotifications").value(value.numTrayNotifications().get());
|
||||
out.name("port").value(value.port().get());
|
||||
out.name("showMinimizeButton").value(value.showMinimizeButton().get());
|
||||
out.name("showTrayIcon").value(value.showTrayIcon().get());
|
||||
out.name("startHidden").value(value.startHidden().get());
|
||||
out.name("theme").value(value.theme().get().name());
|
||||
out.name("uiOrientation").value(value.userInterfaceOrientation().get().name());
|
||||
out.name("useKeychain").value(value.useKeychain().get());
|
||||
out.name("windowHeight").value((value.windowHeightProperty().get()));
|
||||
out.name("windowWidth").value((value.windowWidthProperty().get()));
|
||||
out.name("windowXPosition").value((value.windowXPositionProperty().get()));
|
||||
out.name("windowYPosition").value((value.windowYPositionProperty().get()));
|
||||
out.name("windowWidth").value((value.windowWidthProperty().get()));
|
||||
out.name("windowHeight").value((value.windowHeightProperty().get()));
|
||||
out.name("displayConfiguration").value((value.displayConfigurationProperty().get()));
|
||||
out.name("language").value((value.languageProperty().get()));
|
||||
out.name("mountService").value(value.mountService().get());
|
||||
out.endObject();
|
||||
}
|
||||
|
||||
@@ -82,33 +82,34 @@ public class SettingsJsonAdapter extends TypeAdapter<Settings> {
|
||||
while (in.hasNext()) {
|
||||
String name = in.nextName();
|
||||
switch (name) {
|
||||
case "writtenByVersion" -> in.skipValue(); //noop
|
||||
case "directories" -> settings.getDirectories().addAll(readVaultSettingsArray(in));
|
||||
case "askedForUpdateCheck" -> settings.askedForUpdateCheck().set(in.nextBoolean());
|
||||
case "checkForUpdatesEnabled" -> settings.checkForUpdates().set(in.nextBoolean());
|
||||
case "startHidden" -> settings.startHidden().set(in.nextBoolean());
|
||||
case "autoCloseVaults" -> settings.autoCloseVaults().set(in.nextBoolean());
|
||||
case "port" -> settings.port().set(in.nextInt());
|
||||
case "numTrayNotifications" -> settings.numTrayNotifications().set(in.nextInt());
|
||||
case "checkForUpdatesEnabled" -> settings.checkForUpdates().set(in.nextBoolean());
|
||||
case "debugMode" -> settings.debugMode().set(in.nextBoolean());
|
||||
case "theme" -> settings.theme().set(parseUiTheme(in.nextString()));
|
||||
case "uiOrientation" -> settings.userInterfaceOrientation().set(parseUiOrientation(in.nextString()));
|
||||
case "keychainProvider" -> settings.keychainProvider().set(in.nextString());
|
||||
case "useKeychain" -> settings.useKeychain().set(in.nextBoolean());
|
||||
case "licenseKey" -> settings.licenseKey().set(in.nextString());
|
||||
case "showMinimizeButton" -> settings.showMinimizeButton().set(in.nextBoolean());
|
||||
case "showTrayIcon" -> settings.showTrayIcon().set(in.nextBoolean());
|
||||
case "windowXPosition" -> settings.windowXPositionProperty().set(in.nextInt());
|
||||
case "windowYPosition" -> settings.windowYPositionProperty().set(in.nextInt());
|
||||
case "windowWidth" -> settings.windowWidthProperty().set(in.nextInt());
|
||||
case "windowHeight" -> settings.windowHeightProperty().set(in.nextInt());
|
||||
case "displayConfiguration" -> settings.displayConfigurationProperty().set(in.nextString());
|
||||
case "keychainProvider" -> settings.keychainProvider().set(in.nextString());
|
||||
case "language" -> settings.languageProperty().set(in.nextString());
|
||||
case "licenseKey" -> settings.licenseKey().set(in.nextString());
|
||||
case "mountService" -> {
|
||||
var token = in.peek();
|
||||
if (JsonToken.STRING == token) {
|
||||
settings.mountService().set(in.nextString());
|
||||
}
|
||||
}
|
||||
case "numTrayNotifications" -> settings.numTrayNotifications().set(in.nextInt());
|
||||
case "port" -> settings.port().set(in.nextInt());
|
||||
case "showMinimizeButton" -> settings.showMinimizeButton().set(in.nextBoolean());
|
||||
case "showTrayIcon" -> settings.showTrayIcon().set(in.nextBoolean());
|
||||
case "startHidden" -> settings.startHidden().set(in.nextBoolean());
|
||||
case "theme" -> settings.theme().set(parseUiTheme(in.nextString()));
|
||||
case "uiOrientation" -> settings.userInterfaceOrientation().set(parseUiOrientation(in.nextString()));
|
||||
case "useKeychain" -> settings.useKeychain().set(in.nextBoolean());
|
||||
case "windowHeight" -> settings.windowHeightProperty().set(in.nextInt());
|
||||
case "windowWidth" -> settings.windowWidthProperty().set(in.nextInt());
|
||||
case "windowXPosition" -> settings.windowXPositionProperty().set(in.nextInt());
|
||||
case "windowYPosition" -> settings.windowYPositionProperty().set(in.nextInt());
|
||||
//1.6.x legacy
|
||||
case "preferredVolumeImpl" -> volumeImpl = in.nextString();
|
||||
//legacy end
|
||||
@@ -134,7 +135,7 @@ public class SettingsJsonAdapter extends TypeAdapter<Settings> {
|
||||
if (volumeImpl.equals("Dokany")) {
|
||||
return "org.cryptomator.frontend.dokany.mount.DokanyMountProvider";
|
||||
} else if (volumeImpl.equals("FUSE")) {
|
||||
if(SystemUtils.IS_OS_WINDOWS) {
|
||||
if (SystemUtils.IS_OS_WINDOWS) {
|
||||
return "org.cryptomator.frontend.fuse.mount.WinFspNetworkMountProvider";
|
||||
} else if (SystemUtils.IS_OS_MAC) {
|
||||
return "org.cryptomator.frontend.fuse.mount.MacFuseMountProvider";
|
||||
@@ -142,7 +143,7 @@ public class SettingsJsonAdapter extends TypeAdapter<Settings> {
|
||||
return "org.cryptomator.frontend.fuse.mount.LinuxFuseMountProvider";
|
||||
}
|
||||
} else {
|
||||
if(SystemUtils.IS_OS_WINDOWS) {
|
||||
if (SystemUtils.IS_OS_WINDOWS) {
|
||||
return "org.cryptomator.frontend.webdav.mount.WindowsMounter";
|
||||
} else if (SystemUtils.IS_OS_MAC) {
|
||||
return "org.cryptomator.frontend.webdav.mount.MacAppleScriptMounter";
|
||||
|
||||
@@ -316,18 +316,29 @@ public class Vault {
|
||||
|
||||
/**
|
||||
* Gets from the cleartext path its ciphertext counterpart.
|
||||
* The cleartext path has to start from the vault root (by starting with "/").
|
||||
*
|
||||
* @return Local os path to the ciphertext resource
|
||||
* @throws IOException if an I/O error occurs
|
||||
* @throws IllegalStateException if the vault is not unlocked
|
||||
*/
|
||||
public Path getCiphertextPath(String cleartextPath) throws IOException {
|
||||
if (!cleartextPath.startsWith("/")) {
|
||||
throw new IllegalArgumentException("Input path must be absolute from vault root by starting with \"/\".");
|
||||
public Path getCiphertextPath(Path cleartextPath) throws IOException {
|
||||
if (!state.getValue().equals(VaultState.Value.UNLOCKED)) {
|
||||
throw new IllegalStateException("Vault is not unlocked");
|
||||
}
|
||||
var fs = cryptoFileSystem.get();
|
||||
var cryptoPath = fs.getPath(cleartextPath);
|
||||
return fs.getCiphertextPath(cryptoPath);
|
||||
var osPathSeparator = cleartextPath.getFileSystem().getSeparator();
|
||||
var cryptoFsPathSeparator = fs.getSeparator();
|
||||
|
||||
if (getMountPoint() instanceof Mountpoint.WithPath mp) {
|
||||
var absoluteCryptoFsPath = cryptoFsPathSeparator + mp.path().relativize(cleartextPath).toString();
|
||||
if (!cryptoFsPathSeparator.equals(osPathSeparator)) {
|
||||
absoluteCryptoFsPath = absoluteCryptoFsPath.replace(osPathSeparator, cryptoFsPathSeparator);
|
||||
}
|
||||
var cryptoPath = fs.getPath(absoluteCryptoFsPath);
|
||||
return fs.getCiphertextPath(cryptoPath);
|
||||
} else {
|
||||
throw new UnsupportedOperationException("URI mount points not supported.");
|
||||
}
|
||||
}
|
||||
|
||||
public VaultConfigCache getVaultConfigCache() {
|
||||
|
||||
@@ -29,9 +29,13 @@ public class ErrorController implements FxController {
|
||||
OS: %s / %s
|
||||
App: %s / %s
|
||||
|
||||
<!-- ✏️ Please describe what happened as accurately as possible. -->
|
||||
<!-- ✏ 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! -->
|
||||
|
||||
<!-- ❗ If the description or the detail text is missing, the discussion will be deleted. -->
|
||||
""";
|
||||
|
||||
private final Application application;
|
||||
|
||||
@@ -15,7 +15,7 @@ public enum FxmlFile {
|
||||
HEALTH_CHECK_LIST("/fxml/health_check_list.fxml"), //
|
||||
HUB_NO_KEYCHAIN("/fxml/hub_no_keychain.fxml"), //
|
||||
HUB_AUTH_FLOW("/fxml/hub_auth_flow.fxml"), //
|
||||
HUB_LICENSE_EXCEEDED("/fxml/hub_license_exceeded.fxml"), //
|
||||
HUB_INVALID_LICENSE("/fxml/hub_invalid_license.fxml"), //
|
||||
HUB_RECEIVE_KEY("/fxml/hub_receive_key.fxml"), //
|
||||
HUB_REGISTER_DEVICE("/fxml/hub_register_device.fxml"), //
|
||||
HUB_REGISTER_SUCCESS("/fxml/hub_register_success.fxml"), //
|
||||
|
||||
@@ -42,6 +42,7 @@ public enum FontAwesome5Icon {
|
||||
PLUS("\uF067"), //
|
||||
PRINT("\uF02F"), //
|
||||
QUESTION("\uF128"), //
|
||||
QUESTION_CIRCLE("\uf059"), //
|
||||
REDO("\uF01E"), //
|
||||
SEARCH("\uF002"), //
|
||||
SPINNER("\uF110"), //
|
||||
|
||||
@@ -102,10 +102,10 @@ public abstract class HubKeyLoadingModule {
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.HUB_LICENSE_EXCEEDED)
|
||||
@FxmlScene(FxmlFile.HUB_INVALID_LICENSE)
|
||||
@KeyLoadingScoped
|
||||
static Scene provideLicenseExceededScene(@KeyLoading FxmlLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.HUB_LICENSE_EXCEEDED);
|
||||
static Scene provideInvalidLicenseScene(@KeyLoading FxmlLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.HUB_INVALID_LICENSE);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@@ -162,8 +162,8 @@ public abstract class HubKeyLoadingModule {
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(LicenseExceededController.class)
|
||||
abstract FxController bindLicenseExceededController(LicenseExceededController controller);
|
||||
@FxControllerKey(InvalidLicenseController.class)
|
||||
abstract FxController bindInvalidLicenseController(InvalidLicenseController controller);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
|
||||
@@ -7,12 +7,12 @@ import javax.inject.Inject;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
public class LicenseExceededController implements FxController {
|
||||
public class InvalidLicenseController implements FxController {
|
||||
|
||||
private final Stage window;
|
||||
|
||||
@Inject
|
||||
public LicenseExceededController(@KeyLoading Stage window) {
|
||||
public InvalidLicenseController(@KeyLoading Stage window) {
|
||||
this.window = window;
|
||||
}
|
||||
|
||||
@@ -42,11 +42,11 @@ public class ReceiveKeyController implements FxController {
|
||||
private final Lazy<Scene> registerDeviceScene;
|
||||
private final Lazy<Scene> unauthorizedScene;
|
||||
private final URI vaultBaseUri;
|
||||
private final Lazy<Scene> licenseExceededScene;
|
||||
private final Lazy<Scene> invalidLicenseScene;
|
||||
private final HttpClient httpClient;
|
||||
|
||||
@Inject
|
||||
public ReceiveKeyController(@KeyLoading Vault vault, ExecutorService executor, @KeyLoading Stage window, @Named("deviceId") String deviceId, @Named("bearerToken") AtomicReference<String> tokenRef, CompletableFuture<JWEObject> result, @FxmlScene(FxmlFile.HUB_REGISTER_DEVICE) Lazy<Scene> registerDeviceScene, @FxmlScene(FxmlFile.HUB_UNAUTHORIZED_DEVICE) Lazy<Scene> unauthorizedScene, @FxmlScene(FxmlFile.HUB_LICENSE_EXCEEDED) Lazy<Scene> licenseExceededScene) {
|
||||
public ReceiveKeyController(@KeyLoading Vault vault, ExecutorService executor, @KeyLoading Stage window, @Named("deviceId") String deviceId, @Named("bearerToken") AtomicReference<String> tokenRef, CompletableFuture<JWEObject> result, @FxmlScene(FxmlFile.HUB_REGISTER_DEVICE) Lazy<Scene> registerDeviceScene, @FxmlScene(FxmlFile.HUB_UNAUTHORIZED_DEVICE) Lazy<Scene> unauthorizedScene, @FxmlScene(FxmlFile.HUB_INVALID_LICENSE) Lazy<Scene> invalidLicenseScene) {
|
||||
this.window = window;
|
||||
this.deviceId = deviceId;
|
||||
this.bearerToken = Objects.requireNonNull(tokenRef.get());
|
||||
@@ -54,7 +54,7 @@ public class ReceiveKeyController implements FxController {
|
||||
this.registerDeviceScene = registerDeviceScene;
|
||||
this.unauthorizedScene = unauthorizedScene;
|
||||
this.vaultBaseUri = getVaultBaseUri(vault);
|
||||
this.licenseExceededScene = licenseExceededScene;
|
||||
this.invalidLicenseScene = invalidLicenseScene;
|
||||
this.window.addEventHandler(WindowEvent.WINDOW_HIDING, this::windowClosed);
|
||||
this.httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).executor(executor).build();
|
||||
}
|
||||
@@ -96,7 +96,7 @@ public class ReceiveKeyController implements FxController {
|
||||
}
|
||||
|
||||
private void licenseExceeded() {
|
||||
window.setScene(licenseExceededScene.get());
|
||||
window.setScene(invalidLicenseScene.get());
|
||||
}
|
||||
|
||||
private void needsDeviceRegistration() {
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.tobiasdiez.easybind.EasyBind;
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.integrations.mount.Mountpoint;
|
||||
import org.cryptomator.integrations.revealpath.RevealFailedException;
|
||||
@@ -54,6 +55,7 @@ public class VaultDetailUnlockedController implements FxController {
|
||||
private final VaultService vaultService;
|
||||
private final WrongFileAlertComponent.Builder wrongFileAlert;
|
||||
private final Stage mainWindow;
|
||||
private final Optional<RevealPathService> revealPathService;
|
||||
private final ResourceBundle resourceBundle;
|
||||
private final LoadingCache<Vault, VaultStatisticsComponent> vaultStats;
|
||||
private final VaultStatisticsComponent.Builder vaultStatsBuilder;
|
||||
@@ -67,12 +69,13 @@ public class VaultDetailUnlockedController implements FxController {
|
||||
public Button dropZone;
|
||||
|
||||
@Inject
|
||||
public VaultDetailUnlockedController(ObjectProperty<Vault> vault, FxApplicationWindows appWindows, VaultService vaultService, VaultStatisticsComponent.Builder vaultStatsBuilder, WrongFileAlertComponent.Builder wrongFileAlert, @MainWindow Stage mainWindow, ResourceBundle resourceBundle) {
|
||||
public VaultDetailUnlockedController(ObjectProperty<Vault> vault, FxApplicationWindows appWindows, VaultService vaultService, VaultStatisticsComponent.Builder vaultStatsBuilder, WrongFileAlertComponent.Builder wrongFileAlert, @MainWindow Stage mainWindow, Optional<RevealPathService> revealPathService, ResourceBundle resourceBundle) {
|
||||
this.vault = vault;
|
||||
this.appWindows = appWindows;
|
||||
this.vaultService = vaultService;
|
||||
this.wrongFileAlert = wrongFileAlert;
|
||||
this.mainWindow = mainWindow;
|
||||
this.revealPathService = revealPathService;
|
||||
this.resourceBundle = resourceBundle;
|
||||
this.vaultStats = CacheBuilder.newBuilder().weakValues().build(CacheLoader.from(this::buildVaultStats));
|
||||
this.vaultStatsBuilder = vaultStatsBuilder;
|
||||
@@ -99,7 +102,11 @@ public class VaultDetailUnlockedController implements FxController {
|
||||
|
||||
private void handleDragEvent(DragEvent event) {
|
||||
if (DragEvent.DRAG_OVER.equals(event.getEventType()) && event.getGestureSource() == null && event.getDragboard().hasFiles()) {
|
||||
event.acceptTransferModes(TransferMode.LINK);
|
||||
if(SystemUtils.IS_OS_WINDOWS || SystemUtils.IS_OS_MAC) {
|
||||
event.acceptTransferModes(TransferMode.LINK);
|
||||
} else {
|
||||
event.acceptTransferModes(TransferMode.ANY);
|
||||
}
|
||||
draggingOver.set(true);
|
||||
} else if (DragEvent.DRAG_DROPPED.equals(event.getEventType()) && event.getGestureSource() == null && event.getDragboard().hasFiles()) {
|
||||
List<Path> ciphertextPaths = event.getDragboard().getFiles().stream().map(File::toPath).map(this::getCiphertextPath).flatMap(Optional::stream).toList();
|
||||
@@ -164,12 +171,7 @@ public class VaultDetailUnlockedController implements FxController {
|
||||
return Optional.empty();
|
||||
}
|
||||
try {
|
||||
var accessPoint = mountPoint.getValue();
|
||||
var cleartextPath = path.toString().substring(accessPoint.length());
|
||||
if (!cleartextPath.startsWith("/")) {
|
||||
cleartextPath = "/" + cleartextPath;
|
||||
}
|
||||
return Optional.of(vault.get().getCiphertextPath(cleartextPath));
|
||||
return Optional.of(vault.get().getCiphertextPath(path));
|
||||
} catch (IOException e) {
|
||||
LOG.warn("Unable to get ciphertext path from path: {}", path, e);
|
||||
return Optional.empty();
|
||||
@@ -177,29 +179,21 @@ public class VaultDetailUnlockedController implements FxController {
|
||||
}
|
||||
|
||||
private void revealOrCopyPaths(List<Path> paths) {
|
||||
if (!revealPaths(paths)) {
|
||||
revealPathService.ifPresentOrElse(svc -> revealPaths(svc, paths), () -> {
|
||||
LOG.warn("No service provider to reveal files found.");
|
||||
copyPathsToClipboard(paths);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reveals the paths over the {@link RevealPathService} in the file system
|
||||
*
|
||||
* @param paths List of Paths to reveal
|
||||
* @return true, if at least one service provider was present, false otherwise
|
||||
*/
|
||||
private boolean revealPaths(List<Path> paths) {
|
||||
return RevealPathService.get().findAny().map(s -> {
|
||||
paths.forEach(path -> {
|
||||
try {
|
||||
s.reveal(path);
|
||||
} catch (RevealFailedException e) {
|
||||
LOG.error("Revealing ciphertext file failed.", e);
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}).orElse(false);
|
||||
private void revealPaths(RevealPathService service, List<Path> paths) {
|
||||
paths.forEach(path -> {
|
||||
try {
|
||||
LOG.debug("Revealing {}", path);
|
||||
service.reveal(path);
|
||||
} catch (RevealFailedException e) {
|
||||
LOG.error("Revealing ciphertext file failed.", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void copyPathsToClipboard(List<Path> paths) {
|
||||
|
||||
@@ -16,7 +16,7 @@ import javafx.fxml.FXML;
|
||||
public class WelcomeController implements FxController {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(WelcomeController.class);
|
||||
private static final String GETTING_STARTED_URI = "https://docs.cryptomator.org/en/1.6/desktop/getting-started/";
|
||||
private static final String GETTING_STARTED_URI = "https://docs.cryptomator.org/en/1.7/desktop/getting-started/";
|
||||
|
||||
private final Application application;
|
||||
private final BooleanBinding noVaultPresent;
|
||||
|
||||
@@ -10,7 +10,7 @@ import javafx.stage.Stage;
|
||||
|
||||
public class MigrationImpossibleController implements FxController {
|
||||
|
||||
private static final String HELP_URI = "https://docs.cryptomator.org/en/1.6/help/manual-migration/";
|
||||
private static final String HELP_URI = "https://docs.cryptomator.org/en/1.7/help/manual-migration/";
|
||||
|
||||
private final Application application;
|
||||
private final Stage window;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.cryptomator.ui.preferences;
|
||||
|
||||
import dagger.Lazy;
|
||||
import org.cryptomator.common.ObservableUtil;
|
||||
import org.cryptomator.common.settings.Settings;
|
||||
import org.cryptomator.integrations.mount.MountCapability;
|
||||
@@ -7,6 +8,7 @@ import org.cryptomator.integrations.mount.MountService;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javafx.application.Application;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.BooleanExpression;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
@@ -21,6 +23,8 @@ import java.util.ResourceBundle;
|
||||
@PreferencesScoped
|
||||
public class VolumePreferencesController implements FxController {
|
||||
|
||||
private static final String DOCS_MOUNTING_URL = "https://docs.cryptomator.org/en/1.7/desktop/vault-mounting/";
|
||||
|
||||
private final Settings settings;
|
||||
private final ObservableValue<MountService> selectedMountService;
|
||||
private final ResourceBundle resourceBundle;
|
||||
@@ -29,14 +33,16 @@ public class VolumePreferencesController implements FxController {
|
||||
private final ObservableValue<Boolean> mountToDriveLetterSupported;
|
||||
private final ObservableValue<Boolean> mountFlagsSupported;
|
||||
private final ObservableValue<Boolean> readonlySupported;
|
||||
private final Lazy<Application> application;
|
||||
private final List<MountService> mountProviders;
|
||||
public ChoiceBox<MountService> volumeTypeChoiceBox;
|
||||
public TextField loopbackPortField;
|
||||
public Button loopbackPortApplyButton;
|
||||
|
||||
@Inject
|
||||
VolumePreferencesController(Settings settings, List<MountService> mountProviders, ResourceBundle resourceBundle) {
|
||||
VolumePreferencesController(Settings settings, Lazy<Application> application, List<MountService> mountProviders, ResourceBundle resourceBundle) {
|
||||
this.settings = settings;
|
||||
this.application = application;
|
||||
this.mountProviders = mountProviders;
|
||||
this.resourceBundle = resourceBundle;
|
||||
|
||||
@@ -141,4 +147,8 @@ public class VolumePreferencesController implements FxController {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
public void openDocs() {
|
||||
application.get().getHostServices().showDocument(DOCS_MOUNTING_URL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.google.common.base.CharMatcher;
|
||||
import com.google.common.base.Strings;
|
||||
import dagger.Lazy;
|
||||
import org.cryptomator.common.Nullable;
|
||||
import org.cryptomator.common.ObservableUtil;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.cryptofs.VaultConfig;
|
||||
import org.cryptomator.cryptofs.VaultConfigLoadException;
|
||||
@@ -15,9 +16,10 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.BooleanBinding;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.TextArea;
|
||||
@@ -38,11 +40,16 @@ public class RecoveryKeyRecoverController implements FxController {
|
||||
private final Vault vault;
|
||||
private final VaultConfig.UnverifiedVaultConfig unverifiedVaultConfig;
|
||||
private final StringProperty recoveryKey;
|
||||
private final ObservableValue<Boolean> recoveryKeyCorrect;
|
||||
private final ObservableValue<Boolean> recoveryKeyWrong;
|
||||
private final ObservableValue<Boolean> recoveryKeyInvalid;
|
||||
private final RecoveryKeyFactory recoveryKeyFactory;
|
||||
private final BooleanBinding validRecoveryKey;
|
||||
private final ObjectProperty<RecoveryKeyState> recoveryKeyState;
|
||||
private final Lazy<Scene> resetPasswordScene;
|
||||
private final AutoCompleter autoCompleter;
|
||||
|
||||
private volatile boolean isWrongKey;
|
||||
|
||||
public TextArea textarea;
|
||||
|
||||
@Inject
|
||||
@@ -53,14 +60,18 @@ public class RecoveryKeyRecoverController implements FxController {
|
||||
this.unverifiedVaultConfig = unverifiedVaultConfig;
|
||||
this.recoveryKey = recoveryKey;
|
||||
this.recoveryKeyFactory = recoveryKeyFactory;
|
||||
this.validRecoveryKey = Bindings.createBooleanBinding(this::isValidRecoveryKey, recoveryKey);
|
||||
this.resetPasswordScene = resetPasswordScene;
|
||||
this.autoCompleter = new AutoCompleter(recoveryKeyFactory.getDictionary());
|
||||
this.recoveryKeyState = new SimpleObjectProperty<>();
|
||||
this.recoveryKeyCorrect = ObservableUtil.mapWithDefault(recoveryKeyState, RecoveryKeyState.CORRECT::equals, false);
|
||||
this.recoveryKeyWrong = ObservableUtil.mapWithDefault(recoveryKeyState, RecoveryKeyState.WRONG::equals, false);
|
||||
this.recoveryKeyInvalid = ObservableUtil.mapWithDefault(recoveryKeyState, RecoveryKeyState.INVALID::equals, false);
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void initialize() {
|
||||
recoveryKey.bind(textarea.textProperty());
|
||||
textarea.textProperty().addListener(((observable, oldValue, newValue) -> validateRecoveryKey()));
|
||||
}
|
||||
|
||||
private TextFormatter.Change filterTextChange(TextFormatter.Change change) {
|
||||
@@ -107,6 +118,12 @@ public class RecoveryKeyRecoverController implements FxController {
|
||||
window.setScene(resetPasswordScene.get());
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks, if vault config is signed with the given key.
|
||||
*
|
||||
* @param key byte array of possible signing key
|
||||
* @return true, if vault config is signed with this key
|
||||
*/
|
||||
private boolean checkKeyAgainstVaultConfig(byte[] key) {
|
||||
try {
|
||||
var config = unverifiedVaultConfig.verify(key, unverifiedVaultConfig.allegedVaultVersion());
|
||||
@@ -114,6 +131,7 @@ public class RecoveryKeyRecoverController implements FxController {
|
||||
return true;
|
||||
} catch (VaultKeyInvalidException e) {
|
||||
LOG.debug("Provided recovery key does not match vault config signature.");
|
||||
isWrongKey = true;
|
||||
return false;
|
||||
} catch (VaultConfigLoadException e) {
|
||||
LOG.error("Failed to parse vault config", e);
|
||||
@@ -121,25 +139,64 @@ public class RecoveryKeyRecoverController implements FxController {
|
||||
}
|
||||
}
|
||||
|
||||
private void validateRecoveryKey() {
|
||||
isWrongKey = false;
|
||||
var valid = recoveryKeyFactory.validateRecoveryKey(recoveryKey.get(), unverifiedVaultConfig != null ? this::checkKeyAgainstVaultConfig : null);
|
||||
if (valid) {
|
||||
recoveryKeyState.set(RecoveryKeyState.CORRECT);
|
||||
} else if (isWrongKey) { //set via side effect in checkKeyAgainstVaultConfig()
|
||||
recoveryKeyState.set(RecoveryKeyState.WRONG);
|
||||
} else {
|
||||
recoveryKeyState.set(RecoveryKeyState.INVALID);
|
||||
}
|
||||
}
|
||||
|
||||
/* Getter/Setter */
|
||||
|
||||
public Vault getVault() {
|
||||
return vault;
|
||||
}
|
||||
|
||||
public BooleanBinding validRecoveryKeyProperty() {
|
||||
return validRecoveryKey;
|
||||
}
|
||||
|
||||
public boolean isValidRecoveryKey() {
|
||||
if (unverifiedVaultConfig != null) {
|
||||
return recoveryKeyFactory.validateRecoveryKey(recoveryKey.get(), this::checkKeyAgainstVaultConfig);
|
||||
} else {
|
||||
return recoveryKeyFactory.validateRecoveryKey(recoveryKey.get());
|
||||
}
|
||||
}
|
||||
|
||||
public TextFormatter getRecoveryKeyTextFormatter() {
|
||||
return new TextFormatter<>(this::filterTextChange);
|
||||
}
|
||||
|
||||
public ObservableValue<Boolean> recoveryKeyInvalidProperty() {
|
||||
return recoveryKeyInvalid;
|
||||
}
|
||||
|
||||
public boolean isRecoveryKeyInvalid() {
|
||||
return recoveryKeyInvalid.getValue();
|
||||
}
|
||||
|
||||
public ObservableValue<Boolean> recoveryKeyCorrectProperty() {
|
||||
return recoveryKeyCorrect;
|
||||
}
|
||||
|
||||
public boolean isRecoveryKeyCorrect() {
|
||||
return recoveryKeyCorrect.getValue();
|
||||
}
|
||||
|
||||
public ObservableValue<Boolean> recoveryKeyWrongProperty() {
|
||||
return recoveryKeyWrong;
|
||||
}
|
||||
|
||||
public boolean isRecoveryKeyWrong() {
|
||||
return recoveryKeyWrong.getValue();
|
||||
}
|
||||
|
||||
private enum RecoveryKeyState {
|
||||
/**
|
||||
* Recovery key is a valid key and belongs to this vault
|
||||
*/
|
||||
CORRECT,
|
||||
/**
|
||||
* Recovery key is a valid key, but does not belong to this vault
|
||||
*/
|
||||
WRONG,
|
||||
/**
|
||||
* Recovery key is not a valid key.
|
||||
*/
|
||||
INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import java.io.UncheckedIOException;
|
||||
@WrongFileAlertScoped
|
||||
public class WrongFileAlertController implements FxController {
|
||||
|
||||
private static final String DOCUMENTATION_URI = "https://docs.cryptomator.org/en/1.6/desktop/accessing-vaults/";
|
||||
private static final String DOCUMENTATION_URI = "https://docs.cryptomator.org/en/1.7/desktop/accessing-vaults/";
|
||||
|
||||
private final Application app;
|
||||
private final Stage window;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<?import javafx.scene.shape.Circle?>
|
||||
<HBox xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:controller="org.cryptomator.ui.keyloading.hub.LicenseExceededController"
|
||||
fx:controller="org.cryptomator.ui.keyloading.hub.InvalidLicenseController"
|
||||
minWidth="400"
|
||||
maxWidth="400"
|
||||
minHeight="145"
|
||||
@@ -33,12 +33,12 @@
|
||||
</StackPane>
|
||||
</Group>
|
||||
<VBox HBox.hgrow="ALWAYS">
|
||||
<Label styleClass="label-large" text="%hub.licenseExceeded.message" wrapText="true" textAlignment="LEFT">
|
||||
<Label styleClass="label-large" text="%hub.invalidLicense.message" wrapText="true" textAlignment="LEFT">
|
||||
<padding>
|
||||
<Insets bottom="6" top="6"/>
|
||||
</padding>
|
||||
</Label>
|
||||
<Label text="%hub.licenseExceeded.description" wrapText="true"/>
|
||||
<Label text="%hub.invalidLicense.description" wrapText="true"/>
|
||||
|
||||
<Region VBox.vgrow="ALWAYS" minHeight="18"/>
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="+C">
|
||||
@@ -5,10 +5,12 @@
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.ChoiceBox?>
|
||||
<?import javafx.scene.control.Hyperlink?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.control.Separator?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.control.Tooltip?>
|
||||
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:controller="org.cryptomator.ui.preferences.VolumePreferencesController"
|
||||
@@ -20,6 +22,14 @@
|
||||
<HBox spacing="12" alignment="CENTER_LEFT">
|
||||
<Label text="%preferences.volume.type"/>
|
||||
<ChoiceBox fx:id="volumeTypeChoiceBox"/>
|
||||
<Hyperlink contentDisplay="GRAPHIC_ONLY" onAction="#openDocs">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="QUESTION_CIRCLE" styleClass="glyph-icon-muted"/>
|
||||
</graphic>
|
||||
<tooltip>
|
||||
<Tooltip text="%preferences.volume.docsTooltip" showDelay="100ms"/>
|
||||
</tooltip>
|
||||
</Hyperlink>
|
||||
</HBox>
|
||||
|
||||
<HBox spacing="12" alignment="CENTER_LEFT" visible="${controller.loopbackPortSupported}" managed="${controller.loopbackPortSupported}">
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
<?import javafx.scene.control.TextArea?>
|
||||
<?import javafx.scene.layout.Region?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.layout.StackPane?>
|
||||
<?import javafx.scene.Group?>
|
||||
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:controller="org.cryptomator.ui.recoverykey.RecoveryKeyRecoverController"
|
||||
@@ -25,12 +27,28 @@
|
||||
|
||||
<TextArea wrapText="true" prefRowCount="4" fx:id="textarea" textFormatter="${controller.recoveryKeyTextFormatter}" onKeyPressed="#onKeyPressed"/>
|
||||
|
||||
<!-- TODO: add Label when the recovery key is not valid -->
|
||||
<Label text="%recoveryKey.recover.validKey" graphicTextGap="6" contentDisplay="LEFT" visible="${controller.validRecoveryKey}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="CHECK"/>
|
||||
</graphic>
|
||||
</Label>
|
||||
<StackPane>
|
||||
<Label text="Just some Filler" visible="false" graphicTextGap="6">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="ANCHOR"/>
|
||||
</graphic>
|
||||
</Label>
|
||||
<Label text="%recoveryKey.recover.correctKey" graphicTextGap="6" contentDisplay="LEFT" visible="${(!textarea.text.empty) && controller.recoveryKeyCorrect}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="CHECK"/>
|
||||
</graphic>
|
||||
</Label>
|
||||
<Label text="%recoveryKey.recover.wrongKey" graphicTextGap="6" contentDisplay="LEFT" visible="${(!textarea.text.empty) && controller.recoveryKeyWrong}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="TIMES" styleClass="glyph-icon-red"/>
|
||||
</graphic>
|
||||
</Label>
|
||||
<Label text="%recoveryKey.recover.invalidKey" graphicTextGap="6" contentDisplay="LEFT" visible="${(!textarea.text.empty) && controller.recoveryKeyInvalid}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="TIMES" styleClass="glyph-icon-red"/>
|
||||
</graphic>
|
||||
</Label>
|
||||
</StackPane>
|
||||
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
|
||||
@@ -38,7 +56,7 @@
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="+CX">
|
||||
<buttons>
|
||||
<Button text="%generic.button.cancel" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#close"/>
|
||||
<Button text="%generic.button.next" ButtonBar.buttonData="NEXT_FORWARD" defaultButton="true" onAction="#recover" disable="${!controller.validRecoveryKey}"/>
|
||||
<Button text="%generic.button.next" ButtonBar.buttonData="NEXT_FORWARD" defaultButton="true" onAction="#recover" disable="${!controller.recoveryKeyCorrect}"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
</VBox>
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
<?import javafx.scene.control.ToggleGroup?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.text.Text?>
|
||||
<?import javafx.scene.text.TextFlow?>
|
||||
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
@@ -26,8 +25,8 @@
|
||||
</padding>
|
||||
<children>
|
||||
<TextFlow>
|
||||
<Text text="%vaultOptions.mount.info" styleClass="label"/>
|
||||
<Text text=" "/>
|
||||
<Label text="%vaultOptions.mount.info"/>
|
||||
<Label text=" "/>
|
||||
<Hyperlink styleClass="hyperlink-underline" text="%vaultOptions.mount.linkToPreferences" onAction="#openVolumePreferences" wrapText="true"/>
|
||||
</TextFlow>
|
||||
<CheckBox fx:id="readOnlyCheckbox" text="%vaultOptions.mount.readonly" visible="${controller.readOnlySupported}" managed="${controller.readOnlySupported}"/>
|
||||
|
||||
@@ -155,9 +155,8 @@ hub.registerFailed.description=An error was thrown in the naming process. For mo
|
||||
hub.unauthorized.message=Access denied
|
||||
hub.unauthorized.description=Your device has not yet been authorized to access this vault. Ask the vault owner to authorize it.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=License exceeded
|
||||
hub.licenseExceeded.description=Cryptomator Hub has given access to more users than its license permits. Please contact your Hub admin to upgrade the license or a vault admin to remove users from vaults.
|
||||
|
||||
hub.invalidLicense.message=Hub License invalid
|
||||
hub.invalidLicense.description=Your Cryptomator Hub instance has an invalid license. Please inform a Hub administrator to upgrade or renew the license.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -278,6 +277,7 @@ preferences.interface.showTrayIcon=Show tray icon (requires restart)
|
||||
preferences.volume=Virtual Drive
|
||||
preferences.volume.type=Volume Type (requires restart)
|
||||
preferences.volume.type.automatic=Automatic
|
||||
preferences.volume.docsTooltip=Open the documentation to learn more about the different volume types.
|
||||
preferences.volume.tcp.port=TCP Port
|
||||
preferences.volume.supportedFeatures=The chosen volume type supports the following features:
|
||||
preferences.volume.feature.mountAuto=Automatic mount point selection
|
||||
@@ -446,7 +446,9 @@ recoveryKey.display.StorageHints=Keep it somewhere very secure, e.g.:\n • Stor
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Reset Password
|
||||
recoveryKey.recover.prompt=Enter your recovery key for "%s":
|
||||
recoveryKey.recover.validKey=This is a valid recovery key
|
||||
recoveryKey.recover.correctKey=This recovery key is correct
|
||||
recoveryKey.recover.wrongKey=This recovery key belongs to a different vault
|
||||
recoveryKey.recover.invalidKey=This recovery key is not valid
|
||||
recoveryKey.printout.heading=Cryptomator Recovery Key\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Reset
|
||||
|
||||
@@ -113,7 +113,6 @@ hub.register.registerBtn=تأكيد
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.description=تم حظر قفل "%s" بواسطة العمليات المعلقة أو الملفات المفتوحة. يمكنك فرض قفل هذا المخزن، ولكن مقاطعة عمليات الادخال والاخراج I/O قد تؤدي لفقدان البيانات غير المحفوظة.
|
||||
@@ -296,7 +295,7 @@ recoveryKey.display.StorageHints=حافظ عليه في مكان ما آمن ج
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.prompt=أدخل مفتاح الاسترداد الخاص لـ "%s":
|
||||
recoveryKey.recover.validKey=هذا مفتاح استرداد صالح
|
||||
recoveryKey.recover.correctKey=هذا مفتاح استرداد صالح
|
||||
recoveryKey.printout.heading=مفتاح استرداد Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
### Recovery Key Password Reset Success
|
||||
|
||||
@@ -147,8 +147,6 @@ hub.registerFailed.description=Падчас прысваення імя адбы
|
||||
hub.unauthorized.message=Адмова ў доступе
|
||||
hub.unauthorized.description=Тваёй прыладзе ў дадзены момант не дазволена мець доступ да гэтай скрабніцы. Запытайся ўладальніка скрабніцы за дазволам.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Ліцэнзія пратэрмінаваная
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -370,7 +368,7 @@ recoveryKey.display.StorageHints=Захоўвай іх у бяспечным м
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Скінуць пароль
|
||||
recoveryKey.recover.prompt=Увядзі свой ключ аднаўлення для "%s":
|
||||
recoveryKey.recover.validKey=Гэта валідны ключ аднаўлення
|
||||
recoveryKey.recover.correctKey=Гэта валідны ключ аднаўлення
|
||||
recoveryKey.printout.heading=Ключ аднаўлення Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Скінуць
|
||||
|
||||
@@ -97,7 +97,6 @@ hub.register.registerBtn=নিশ্চিত করুন
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.retryBtn=পুনরায় চেষ্টা করুন
|
||||
|
||||
@@ -113,7 +113,6 @@ hub.register.registerBtn=Potvrdi
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.description=Zaključavanje "%s" blokirano je operacijama na čekanju ili otvorenim datotekama. Možete prisilno zaključati ovaj sef, međutim prekid U / I-a može rezultirati gubitkom nespremljenih podataka.
|
||||
@@ -301,7 +300,7 @@ recoveryKey.display.StorageHints=Pohranite ga negdje vrlo sigurno, npr.:\n • S
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.prompt=Unesite ključ za oporavak za "%s":
|
||||
recoveryKey.recover.validKey=Ključ za oporavak je ispravan
|
||||
recoveryKey.recover.correctKey=Ključ za oporavak je ispravan
|
||||
recoveryKey.printout.heading=Cryptomator Ključ za oporavak za \n"%s"\n
|
||||
### Reset Password
|
||||
### Recovery Key Password Reset Success
|
||||
|
||||
@@ -154,9 +154,6 @@ hub.registerFailed.description=S'ha produït un error en el procés de nomenamen
|
||||
hub.unauthorized.message=Accés denegat
|
||||
hub.unauthorized.description=El vostre dispositiu no ha estat encara autoritzat a accedir a aquesta caixa forta. Demaneu autorització al propietari.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Llicència caducada
|
||||
hub.licenseExceeded.description=Cryptomator Hub ha donat accés a més usuaris dels permesos en la llicència. Si us plau contacteu amb l'administrador del Hub per actualitzar la llicència o amb l'administrador de la caixa forta per treure usuaris.
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -445,7 +442,7 @@ recoveryKey.display.StorageHints=Conserveu-la en un lloc molt segur. P. ex.:\n
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Canviar contrasenya
|
||||
recoveryKey.recover.prompt=Introduïu la vostra clau de recuperació de "%s":
|
||||
recoveryKey.recover.validKey=La clau de recuperació és vàlida
|
||||
recoveryKey.recover.correctKey=La clau de recuperació és vàlida
|
||||
recoveryKey.printout.heading=Clau de recuperació de Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Reinicia
|
||||
|
||||
@@ -142,9 +142,6 @@ hub.registerFailed.message=Pojmenování zařízení se nezdařilo
|
||||
hub.unauthorized.message=Přístup odepřen
|
||||
hub.unauthorized.description=Vaše zařízení dosud nebylo oprávněno k přístupu k tomuto trezoru. Požádejte vlastníka trezoru, aby jej autorizoval.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Licence byla překročena
|
||||
hub.licenseExceeded.description=Cryptomator Hub poskytl přístup více uživatelům, než jsou jeho licenční povolení. Obraťte se na správce Hubu pro aktualizaci licence nebo správce trezoru pro odstranění uživatelů z trezoru.
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -405,7 +402,7 @@ recoveryKey.display.StorageHints=Uchovejte ho někde velmi bezpečně, např.\n
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Resetovat heslo
|
||||
recoveryKey.recover.prompt=Zadejte váš obnovovací klíč pro "%s":
|
||||
recoveryKey.recover.validKey=Toto je platný obnovovací klíč
|
||||
recoveryKey.recover.correctKey=Toto je platný obnovovací klíč
|
||||
recoveryKey.printout.heading=Obnovovací klíč Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Resetovat
|
||||
|
||||
@@ -123,6 +123,10 @@ unlock.success.description=Indholdet i boksen "%s" er nu tilgængeligt der hvor
|
||||
unlock.success.rememberChoice=Husk mit valg. Spørg ikke igen
|
||||
unlock.success.revealBtn=Vis drev
|
||||
## Failure
|
||||
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.
|
||||
@@ -150,9 +154,6 @@ 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.licenseExceeded.message=Licens overskredet
|
||||
hub.licenseExceeded.description=Cryptomator Hub har givet adgang til flere brugere end licensen tillader. Kontakt venligst din Hub administrator for at opgradere din licens eller en boks administrator for at fjerne brugere fra bokse.
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -251,7 +252,7 @@ preferences.title=Præferencer
|
||||
preferences.general=Generelt
|
||||
preferences.general.startHidden=Skjul vinduet når Cryptomator starter
|
||||
preferences.general.autoCloseVaults=Lås åbne bokse automatisk, når programmet afsluttes
|
||||
preferences.general.debugLogging=Aktiver fejllogning
|
||||
preferences.general.debugLogging=Aktivér fejllogning
|
||||
preferences.general.debugDirectory=Vis logfiler
|
||||
preferences.general.autoStart=Start Cryptomator automatisk ved opstart
|
||||
preferences.general.keychainBackend=Gem adgangskoder med
|
||||
@@ -271,7 +272,15 @@ preferences.interface.showMinimizeButton=Vis knap til minimering
|
||||
preferences.interface.showTrayIcon=Vis ikon i system-bakken (kræver genstart)
|
||||
## Volume
|
||||
preferences.volume=Virtuelt drev
|
||||
preferences.volume.type=Drev type (kræver genstart)
|
||||
preferences.volume.type.automatic=Automatisk
|
||||
preferences.volume.tcp.port=TCP port
|
||||
preferences.volume.supportedFeatures=Den valgte type drev understøtter følgende funktioner:
|
||||
preferences.volume.feature.mountAuto=Automatisk valg af monteringspunkt
|
||||
preferences.volume.feature.mountToDir=Brugerdefineret mappe som monteringspunkt
|
||||
preferences.volume.feature.mountToDriveLetter=Enhedsbogstav som monteringspunkt
|
||||
preferences.volume.feature.mountFlags=Brugerdefinerede monteringsindstillinger
|
||||
preferences.volume.feature.readOnly=Skrivebeskyttet montering
|
||||
## Updates
|
||||
preferences.updates=Opdateringer
|
||||
preferences.updates.currentVersion=Nuværende version: %s
|
||||
@@ -352,6 +361,7 @@ main.vaultDetail.passwordSavedInKeychain=Adgangskode gemt
|
||||
main.vaultDetail.unlockedStatus=LÅST OP
|
||||
main.vaultDetail.accessLocation=Boksens indhold er tilgængeligt her:
|
||||
main.vaultDetail.revealBtn=Vis drev
|
||||
main.vaultDetail.copyUri=Kopiér URI
|
||||
main.vaultDetail.lockBtn=Lås
|
||||
main.vaultDetail.bytesPerSecondRead=Læser:
|
||||
main.vaultDetail.bytesPerSecondWritten=Skriver:
|
||||
@@ -359,6 +369,10 @@ main.vaultDetail.throughput.idle=afventer
|
||||
main.vaultDetail.throughput.kbps=%.1f kiB/s
|
||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||
main.vaultDetail.stats=Boks statistik
|
||||
main.vaultDetail.locateEncryptedFileBtn=Find Krypteret Fil
|
||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=Vælg en fil fra din boks for at finde dens krypterede modpart
|
||||
main.vaultDetail.encryptedPathsCopied=Stier kopieret!
|
||||
main.vaultDetail.filePickerTitle=Vælg fil inde i boks
|
||||
### Missing
|
||||
main.vaultDetail.missing.info=Cryptomator kunne ikke finde en boks på denne sti.
|
||||
main.vaultDetail.missing.recheck=Kontrollér igen
|
||||
@@ -373,10 +387,10 @@ main.vaultDetail.error.reload=Genindlæs
|
||||
main.vaultDetail.error.windowTitle=Fejl ved indlæsning af boks
|
||||
|
||||
# Wrong File Alert
|
||||
wrongFileAlert.title=Sådan krypteres filer
|
||||
wrongFileAlert.title=Sådan krypterer du filer
|
||||
wrongFileAlert.message=Forsøgte du at kryptere disse filer?
|
||||
wrongFileAlert.description=For kryptering af filer, skal du bruge det drev som Cryptomator har lavet i din stifinder.
|
||||
wrongFileAlert.instruction.0=For at kryptere filer, gør følgende:
|
||||
wrongFileAlert.description=Til dette formål opretter Cryptomator et drev i din filhåndtering.
|
||||
wrongFileAlert.instruction.0=Følg disse trin for at kryptere filer:
|
||||
wrongFileAlert.instruction.1=1. Lås din boks op.
|
||||
wrongFileAlert.instruction.2=2. Klik på "Vis drev" for at åbne drevet i din stifinder.
|
||||
wrongFileAlert.instruction.3=3. Tilføj filer til drevet.
|
||||
@@ -397,13 +411,17 @@ vaultOptions.general.startHealthCheckBtn=Start sunhedstjek
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=Montering
|
||||
vaultOptions.mount.info=Valgmulighederne afhænger af den valgte type drev.
|
||||
vaultOptions.mount.linkToPreferences=Åbn virtuelle drev præferencer
|
||||
vaultOptions.mount.readonly=Skrivebeskyttet
|
||||
vaultOptions.mount.customMountFlags=Brugerdefinerede monterings-flag
|
||||
vaultOptions.mount.winDriveLetterOccupied=optaget
|
||||
vaultOptions.mount.mountPoint=Monterings-sted
|
||||
vaultOptions.mount.mountPoint.auto=Vælg automatisk en passende placering
|
||||
vaultOptions.mount.mountPoint.driveLetter=Brug et ledigt drevbogstav
|
||||
vaultOptions.mount.mountPoint.custom=Brug en valgt mappe
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Vælg…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Vælg en mappe
|
||||
## Master Key
|
||||
vaultOptions.masterkey=Adgangskode
|
||||
vaultOptions.masterkey.changePasswordBtn=Skift adgangskode
|
||||
@@ -424,7 +442,7 @@ recoveryKey.display.StorageHints=Opbevar den et meget sikkert sted, som fx:\n
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Nulstil adgangskode
|
||||
recoveryKey.recover.prompt=Indtast din gendannelsesnøgle for "%s":
|
||||
recoveryKey.recover.validKey=Dette er en gyldig gendannelsesnøgle
|
||||
recoveryKey.recover.correctKey=Dette er en gyldig gendannelsesnøgle
|
||||
recoveryKey.printout.heading=Cryptomator gendannelsesnøgle\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Nulstil
|
||||
@@ -437,11 +455,11 @@ newPassword.promptText=Skriv en ny adgangskode
|
||||
newPassword.reenterPassword=Bekræft ny adgangskode
|
||||
newPassword.passwordsMatch=Adgangskoderne er ens!
|
||||
newPassword.passwordsDoNotMatch=Adgangskoder stemmer ikke overens
|
||||
passwordStrength.messageLabel.tooShort=Angiv mindst %d tegn
|
||||
passwordStrength.messageLabel.0=Meget dårlig
|
||||
passwordStrength.messageLabel.1=Dårlig
|
||||
passwordStrength.messageLabel.tooShort=Brug mindst %d tegn
|
||||
passwordStrength.messageLabel.0=Meget svag
|
||||
passwordStrength.messageLabel.1=Svag
|
||||
passwordStrength.messageLabel.2=Rimelig
|
||||
passwordStrength.messageLabel.3=God
|
||||
passwordStrength.messageLabel.3=Stærk
|
||||
passwordStrength.messageLabel.4=Meget god
|
||||
|
||||
# Quit
|
||||
|
||||
@@ -123,6 +123,10 @@ unlock.success.description=Der Inhalt des Tresors „%s“ ist nun über dessen
|
||||
unlock.success.rememberChoice=Auswahl merken und nicht mehr fragen
|
||||
unlock.success.revealBtn=Laufwerk anzeigen
|
||||
## Failure
|
||||
unlock.error.customPath.message=Tresor kann nicht an benutzerdefinierten Pfad eingehängt werden
|
||||
unlock.error.customPath.description.notSupported=Wenn du den benutzerdefinierten Pfad weiter verwenden möchtest, gehe bitte in die Einstellungen und wähle einen Laufwerkstyp, der ihn unterstützt. Andernfalls gehe zu den Tresoroptionen und wähle einen unterstützten Einhängepunkt.
|
||||
unlock.error.customPath.description.notExists=Der benutzerdefinierte Einhängepfad existiert nicht. Erstelle ihn entweder in deinem lokalen Dateisystem oder ändere ihn in den Tresoreinstellungen.
|
||||
unlock.error.customPath.description.generic=Du hast einen benutzerdefinierten Einhängepfad für diesen Tresor ausgewählt, aber die Verwendung ist fehlgeschlagen. Fehlermeldung: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Zugriff auf Geräteschlüssel nicht möglich
|
||||
hub.noKeychain.description=Um Hub Tresore zu entsperren, wird ein Geräteschlüssel benötigt, der mit einem Schlüsselbund gesichert ist. Um fortzufahren, aktiviere “%s” und wähle einen Schlüsselbund in den Einstellungen.
|
||||
@@ -150,9 +154,8 @@ hub.registerFailed.description=Während der Namensvergabe wurde ein Fehler ausge
|
||||
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.licenseExceeded.message=Lizenz überschritten
|
||||
hub.licenseExceeded.description=Im Cryptomator Hub wurden mehr Benutzern Zugriff gewährt, als dessen Lizenz erlaubt. Bitte kontaktiere deinen Hub-Administrator für ein Lizenz-Upgrade oder einen Tresor-Administrator, um Benutzer aus Tresoren zu entfernen.
|
||||
|
||||
hub.invalidLicense.message=Hub-Lizenz ungültig
|
||||
hub.invalidLicense.description=Die Lizenz deiner Cryptomator-Hub-Instanz ist ungültig. Bitte informiere deinen Hub-Administrator, um die Lizenz zu aktualisieren oder zu erneuern.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -241,8 +244,8 @@ health.result.fixStateFilter.fixing=Wird repariert …
|
||||
health.result.fixStateFilter.fixed=Repariert
|
||||
health.result.fixStateFilter.fixFailed=Reparatur gescheitert
|
||||
## Fix Application
|
||||
health.fix.fixBtn=Beheben
|
||||
health.fix.successTip=Fehlerbehebung erfolgreich
|
||||
health.fix.fixBtn=Reparieren
|
||||
health.fix.successTip=Reparatur erfolgreich
|
||||
health.fix.failTip=Reparatur fehlgeschlagen, siehe Protokoll für Details
|
||||
|
||||
# Preferences
|
||||
@@ -270,8 +273,17 @@ preferences.interface.interfaceOrientation.rtl=Von rechts nach links
|
||||
preferences.interface.showMinimizeButton=Schaltfläche zum Minimieren anzeigen
|
||||
preferences.interface.showTrayIcon=Symbol im Infobereich anzeigen (Neustart erforderlich)
|
||||
## Volume
|
||||
preferences.volume=Tresorlaufwerk
|
||||
preferences.volume=Virtuelles Laufwerk
|
||||
preferences.volume.type=Laufwerkstyp (Neustart erforderlich)
|
||||
preferences.volume.type.automatic=Automatisch
|
||||
preferences.volume.docsTooltip=Öffne die Dokumentation, um mehr über die verschiedenen Laufwerkstypen zu erfahren.
|
||||
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.mountToDir=Benutzerdefiniertes Verzeichnis als Einhängepunkt
|
||||
preferences.volume.feature.mountToDriveLetter=Laufwerkbuchstaben als Einhängepunkt
|
||||
preferences.volume.feature.mountFlags=Benutzerdefinierte Einhänge-Optionen
|
||||
preferences.volume.feature.readOnly=Schreibgeschütztes Einhängen
|
||||
## Updates
|
||||
preferences.updates=Updates
|
||||
preferences.updates.currentVersion=Aktuelle Version: %s
|
||||
@@ -352,6 +364,7 @@ main.vaultDetail.passwordSavedInKeychain=Passwort gespeichert
|
||||
main.vaultDetail.unlockedStatus=ENTSPERRT
|
||||
main.vaultDetail.accessLocation=Deine Tresorinhalte sind hier erreichbar:
|
||||
main.vaultDetail.revealBtn=Laufwerk anzeigen
|
||||
main.vaultDetail.copyUri=URI kopieren
|
||||
main.vaultDetail.lockBtn=Sperren
|
||||
main.vaultDetail.bytesPerSecondRead=Leserate:
|
||||
main.vaultDetail.bytesPerSecondWritten=Schreibrate:
|
||||
@@ -359,6 +372,10 @@ main.vaultDetail.throughput.idle=inaktiv
|
||||
main.vaultDetail.throughput.kbps=%.1f kiB/s
|
||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||
main.vaultDetail.stats=Tresorstatistik
|
||||
main.vaultDetail.locateEncryptedFileBtn=Verschlüsselte Datei finden
|
||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=Wähle eine Datei aus deinem Tresor aus, um das verschlüsselte Gegenstück zu finden
|
||||
main.vaultDetail.encryptedPathsCopied=Pfade in Zwischenablage kopiert!
|
||||
main.vaultDetail.filePickerTitle=Datei im Tresor auswählen
|
||||
### Missing
|
||||
main.vaultDetail.missing.info=Cryptomator konnte keinen Tresor mit diesem Pfad finden.
|
||||
main.vaultDetail.missing.recheck=Erneut prüfen
|
||||
@@ -397,13 +414,17 @@ vaultOptions.general.startHealthCheckBtn=Integritätsprüfung starten
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=Laufwerk
|
||||
vaultOptions.mount.info=Die Optionen hängen vom gewählten Laufwerkstyp ab.
|
||||
vaultOptions.mount.linkToPreferences=Einstellungen für virtuelles Laufwerk öffnen
|
||||
vaultOptions.mount.readonly=Schreibgeschützt
|
||||
vaultOptions.mount.customMountFlags=Benutzerdefinierte Einhänge-Optionen
|
||||
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.directoryPickerButton=Durchsuchen …
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Verzeichnis wählen
|
||||
## Master Key
|
||||
vaultOptions.masterkey=Passwort
|
||||
vaultOptions.masterkey.changePasswordBtn=Passwort ändern
|
||||
@@ -424,7 +445,9 @@ recoveryKey.display.StorageHints=Bewahre ihn möglichst sicher auf, z. B.\n •
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Passwort zurücksetzen
|
||||
recoveryKey.recover.prompt=Gib deinen Wiederherstellungsschlüssel für „%s“ ein:
|
||||
recoveryKey.recover.validKey=Dies ist ein gültiger Wiederherstellungsschlüssel
|
||||
recoveryKey.recover.correctKey=Dies ist ein gültiger Wiederherstellungsschlüssel
|
||||
recoveryKey.recover.wrongKey=Dieser Wiederherstellungsschlüssel gehört zu einem anderen Tresor
|
||||
recoveryKey.recover.invalidKey=Dieser Wiederherstellungsschlüssel ist ungültig
|
||||
recoveryKey.printout.heading=Cryptomator-Wiederherstellungsschlüssel\n„%s“\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Zurücksetzen
|
||||
|
||||
@@ -154,9 +154,8 @@ hub.registerFailed.description=Παρουσιάστηκε σφάλμα στη δ
|
||||
hub.unauthorized.message=Δεν επιτρέπεται η πρόσβαση
|
||||
hub.unauthorized.description=Η συσκευή σας δεν έχει ακόμη εξουσιοδοτηθεί να έχει πρόσβαση σε αυτή την κρύπτη. Ζητήστε από τον κάτοχο της κρύπτης να την εξουσιοδοτήσει.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Υπέρβαση άδειας
|
||||
hub.licenseExceeded.description=Το Cryptomator Hub έχει δώσει πρόσβαση σε περισσότερους χρήστες από ότι επιτρέπει η άδειά του. Παρακαλούμε επικοινωνήστε με το Hub admin για να αναβαθμίσετε την άδεια ή έναν διαχειριστή κρύπτης για να αφαιρέσετε τους χρήστες από τις κρύπτες.
|
||||
|
||||
hub.invalidLicense.message=Μη έγκυρη Άδεια Hub
|
||||
hub.invalidLicense.description=Η συνεδρία σας στο Cryptomator Hub έχει μη έγκυρη άδεια χρήσης. Ενημερώστε έναν διαχειριστή του Hub για να αναβαθμίσει ή να ανανεώσει την άδεια χρήσης.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -277,6 +276,7 @@ preferences.interface.showTrayIcon=Εμφάνιση εικονιδίου tray (
|
||||
preferences.volume=Εικονικός δίσκος
|
||||
preferences.volume.type=Τύπος Τόμου (απαιτείται επανεκκίνηση)
|
||||
preferences.volume.type.automatic=Αυτόματα
|
||||
preferences.volume.docsTooltip=Ανοίξτε τις οδηγίες για να μάθετε περισσότερα σχετικά με τους διαφορετικούς τύπους τόμων.
|
||||
preferences.volume.tcp.port=Θύρα TCP
|
||||
preferences.volume.supportedFeatures=Ο επιλεγμένος τύπος τόμου υποστηρίζει τις ακόλουθες δυνατότητες:
|
||||
preferences.volume.feature.mountAuto=Αυτόματη επιλογή σημείου προσάρτησης
|
||||
@@ -445,7 +445,9 @@ recoveryKey.display.StorageHints=Φυλάξτε κάπου που θα είνα
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Επαναφορά Κωδικού Πρόσβασης
|
||||
recoveryKey.recover.prompt=Εισάγετε το κλειδί ανάκτησης για "%s":
|
||||
recoveryKey.recover.validKey=Αυτό είναι ένα έγκυρο κλειδί ανάκτησης
|
||||
recoveryKey.recover.correctKey=Αυτό το κλειδί ανάκτησης είναι έγκυρο
|
||||
recoveryKey.recover.wrongKey=Αυτό το κλειδί ανάκτησης ανήκει σε διαφορετική κρύπτη
|
||||
recoveryKey.recover.invalidKey=Αυτό το κλειδί ανάκτησης δεν είναι έγκυρο
|
||||
recoveryKey.printout.heading=Κλειδί ανάκτησης Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Επαναφορά
|
||||
|
||||
@@ -154,9 +154,8 @@ hub.registerFailed.description=Ocurrió un error en el nombramiento. Para más d
|
||||
hub.unauthorized.message=Acceso denegado
|
||||
hub.unauthorized.description=Su dispositivo aún no ha sido autorizado para acceder a esta bóveda. Pídale al propietario de la bóveda que lo autorice.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Licencia excedida
|
||||
hub.licenseExceeded.description=Cryptomator Hub ha dado acceso a más usuarios de los que permite su licencia. Póngase en contacto con su administrador de Hub para actualizar la licencia o un administrador de la bóveda para eliminar usuarios de la misma.
|
||||
|
||||
hub.invalidLicense.message=Licencia del Hub inválida
|
||||
hub.invalidLicense.description=Su instancia del Hub de Cryptomator tiene una licencia inválida. Informe a un administrador del Hub para actualizar o renovar la licencia.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -277,6 +276,7 @@ preferences.interface.showTrayIcon=Mostrar ícono de bandeja (requiere reiniciar
|
||||
preferences.volume=Unidad virtual
|
||||
preferences.volume.type=Tipo de volumen (requiere reiniciar)
|
||||
preferences.volume.type.automatic=Automático
|
||||
preferences.volume.docsTooltip=Abra la documentación para saber más sobre los diferentes tipos de volumen.
|
||||
preferences.volume.tcp.port=Puerto TCP
|
||||
preferences.volume.supportedFeatures=El tipo de volumen elegido admite las siguientes funciones:
|
||||
preferences.volume.feature.mountAuto=Selección automática del punto de montaje
|
||||
@@ -445,7 +445,9 @@ recoveryKey.display.StorageHints=Manténgala en algún lugar seguro, p.ej.:\n
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Restablecer contraseña
|
||||
recoveryKey.recover.prompt=Ingresar la clave de recuperación para "%s":
|
||||
recoveryKey.recover.validKey=Esta es una clave de recuperación válida
|
||||
recoveryKey.recover.correctKey=Esta es una clave de recuperación válida
|
||||
recoveryKey.recover.wrongKey=Esta clave de recuperación pertenece a una bóveda diferente
|
||||
recoveryKey.recover.invalidKey=Esta clave de recuperación no es válida
|
||||
recoveryKey.printout.heading=Clave de recuperación de Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=## Reiniciar contraseña\nrecoveryKey.recover.resetBtn
|
||||
|
||||
@@ -69,7 +69,6 @@ unlock.unlockBtn=بازکردن قفل
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.retryBtn=تلاش مجدد
|
||||
|
||||
@@ -75,7 +75,6 @@ unlock.unlockBtn=I-unlock
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.retryBtn=Subukan muli
|
||||
|
||||
@@ -124,8 +124,8 @@ unlock.success.rememberChoice=Se souvenir de mon choix et ne plus me le demander
|
||||
unlock.success.revealBtn=Révéler le lecteur
|
||||
## Failure
|
||||
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 supporte. 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.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
|
||||
## Hub
|
||||
hub.noKeychain.message=Impossible d'accéder à la clé du périphérique
|
||||
@@ -154,9 +154,8 @@ hub.registerFailed.description=Le processus de nommage a retourné une erreur. P
|
||||
hub.unauthorized.message=Accès refusé
|
||||
hub.unauthorized.description=Votre appareil n'a pas encore été autorisé à accéder à ce coffre. Demandez au propriétaire du coffre de l'autoriser.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Licence dépassée
|
||||
hub.licenseExceeded.description=Cryptomator Hub a donné accès à plus d'utilisateurs qu'autorisé par la licence. Veuillez contacter votre administrateur Hub pour étendre la licence ou un administrateur de coffre pour supprimer des utilisateurs des coffres.
|
||||
|
||||
hub.invalidLicense.message=Licence de Hub invalide
|
||||
hub.invalidLicense.description=Votre instance Cryptomator Hub a une licence invalide. Veuillez informer un administrateur Hub pour la mettre à niveau ou la renouveler.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -275,13 +274,14 @@ preferences.interface.showMinimizeButton=Afficher le bouton Réduire
|
||||
preferences.interface.showTrayIcon=Montrer l'icône de service (redémarrage nécessaire)
|
||||
## Volume
|
||||
preferences.volume=Disque virtuel
|
||||
preferences.volume.type=Type de volume (nécessite un redémarrage)
|
||||
preferences.volume.type=Type de volume (redémarrage requis)
|
||||
preferences.volume.type.automatic=Automatique
|
||||
preferences.volume.docsTooltip=Consultez la documentation pour en savoir plus sur les différents types de volumes.
|
||||
preferences.volume.tcp.port=Port TCP
|
||||
preferences.volume.supportedFeatures=Le type de volume choisi prend en charge les fonctionnalités suivantes :
|
||||
preferences.volume.feature.mountAuto=Sélection automatique de point de montage
|
||||
preferences.volume.feature.mountAuto=Sélection automatique du point de montage
|
||||
preferences.volume.feature.mountToDir=Répertoire personnalisé comme point de montage
|
||||
preferences.volume.feature.mountToDriveLetter=Lettre du lecteur comme point de montage
|
||||
preferences.volume.feature.mountToDriveLetter=Lettre de lecteur comme point de montage
|
||||
preferences.volume.feature.mountFlags=Options de montage personnalisées
|
||||
preferences.volume.feature.readOnly=Montage en lecture seule
|
||||
## Updates
|
||||
@@ -353,7 +353,7 @@ main.vaultlist.contextMenu.reveal=Afficher le lecteur
|
||||
main.vaultlist.addVaultBtn=Ajouter un volume chiffré
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Merci d'avoir choisi Cryptomateur pour protéger vos fichiers. Si vous avez besoin d'aide, consultez nos guides de démarrage :
|
||||
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 :
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=VERROUILLÉ
|
||||
main.vaultDetail.unlockBtn=Déverrouiller…
|
||||
@@ -424,7 +424,7 @@ vaultOptions.mount.mountPoint.auto=Choisir automatiquement un emplacement approp
|
||||
vaultOptions.mount.mountPoint.driveLetter=Utiliser la lettre du lecteur assignée
|
||||
vaultOptions.mount.mountPoint.custom=Utiliser le répertoire choisi
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Choisir...
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Choisissez un dossier
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Choisissez un répertoire
|
||||
## Master Key
|
||||
vaultOptions.masterkey=Mot de passe
|
||||
vaultOptions.masterkey.changePasswordBtn=Modifier le mot de passe
|
||||
@@ -445,7 +445,9 @@ recoveryKey.display.StorageHints=Gardez-la dans un endroit sûr, par ex. :\n •
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Réinitialiser le mot de passe
|
||||
recoveryKey.recover.prompt=Entrez votre clé de récupération pour "%s":
|
||||
recoveryKey.recover.validKey=Cette clé de récupération est valide
|
||||
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
|
||||
recoveryKey.printout.heading=Clé de récupération Cryptomator "%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Réinitialiser
|
||||
|
||||
@@ -50,7 +50,6 @@ error.message=Produciuse un erro
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.retryBtn=Tentar de novo
|
||||
|
||||
@@ -123,37 +123,60 @@ unlock.success.description=הנעילה ל-"%s" בוטלה בהצלחה! הכס
|
||||
unlock.success.rememberChoice=זכור בחירה, אל תראה שוב
|
||||
unlock.success.revealBtn=חשוף את הכונן
|
||||
## Failure
|
||||
unlock.error.customPath.message=כשלון בקישור הכספת לנתיב הידני שהוגדר
|
||||
unlock.error.customPath.description.notSupported=אם ברצונך להשתמש בנתיב ידני, אנא גש להעדפות ובחר סוג volume שתומך בכך. אחרת, לך לאפשרויות הכספת ובחר אפשרות יעד קישור נתמך.
|
||||
unlock.error.customPath.description.notExists=יעד הקישור הידני לא קיים. או שתיצור אותו במערכת הקבצים המקומית או שנה אותו באפשרויות הכספת.
|
||||
unlock.error.customPath.description.generic=אתה בחרת באפשרות יעד קישור ידני לכספת זו, אבל השימוש בו נכשל עם ההודעה: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=לא ניתן לגשת למפתח המכשיר
|
||||
hub.noKeychain.description=כדאי לשחרר כספות האב נדרש מפתח מכשיר שיאובטח בצרור מפתחות. כדאי להמשיך, אפשר ״%s״ ובחר את צרור המפתחות בהעדפות.
|
||||
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״ נחסמה על ידי פעולות ממתינות או קבצים פתוחים. אתה יכול לנעול את הכספת בכוח, אולם הפרעה לפעולת קריאה וכתיבה עשויה לגרום לאובדן מידע לא שמור.
|
||||
lock.forced.retryBtn=נסה שנית
|
||||
lock.forced.forceBtn=הכרח נעילה
|
||||
## Failure
|
||||
lock.fail.message=נעילת הכספת נשכלה.
|
||||
lock.fail.description=לא ניתן היה לנעול את הכספת ״%s״. וודא שכל העבודה הלא שמורה נשמרת במקום אחר ושפעולות קריאה/כתיבה חשובות מסתיימות. כדי לסגור את הכספת, הרוג את התהליך של Cryptomator.
|
||||
|
||||
# Migration
|
||||
migration.title=שדרג הכספת
|
||||
## Start
|
||||
migration.start.header=שדרג הכספת
|
||||
migration.start.text=כדי לפתוח את הכספת ״%s״ בגרסה החדשה הזו של Cryptomator, צריך לשדרג את הכספת לגרסה חדשה יותר. לפני שתעשה זאת, כדאי שתדע:
|
||||
migration.start.remarkUndone=פעולת השדרוג אינה הפיכה.
|
||||
migration.start.remarkVersions=גרסאות ישנות יותר של Cryptomator לא יוכלו לפתוח את הכספת המשודרגת.
|
||||
migration.start.remarkCanRun=עליך לוודא שכל מכשיר ממנו אתה ניגש לכספת יכול להפעיל את גרסה זו של Cryptomator.
|
||||
migration.start.remarkSynced=עליך לוודא שהכספת שלך מסונכרנת במלואה במכשיר זה ובמכשירים האחרים, לפני שדרוגה.
|
||||
migration.start.confirm=קראתי והבנתי את המידע לעיל
|
||||
## Run
|
||||
migration.run.enterPassword=הכנס/י סיסמה עבור "%s"
|
||||
migration.run.startMigrationBtn=העבר הכספת
|
||||
@@ -170,22 +193,60 @@ 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=קראתי והבנתי את המידע לעיל
|
||||
## 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.severityTip.info=חומרה: מידע\nמבנה כספת קיים, תיקון מומלץ.
|
||||
health.result.severityTip.warn=חומרה: אזהרה\nמבנה כספת שגוי, מומלץ מאוד לתקן.
|
||||
health.result.severityTip.crit=חומרה: קריטי\nמבנה כספת שגוי, אומת אובדן מידע.
|
||||
health.result.fixStateFilter.all=מצב תיקון - הכל
|
||||
health.result.fixStateFilter.fixable=בר תיקון
|
||||
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=העדפות
|
||||
@@ -210,16 +271,31 @@ preferences.interface.interfaceOrientation=כיוון ממשק
|
||||
preferences.interface.interfaceOrientation.ltr=משמאל לימין
|
||||
preferences.interface.interfaceOrientation.rtl=מימין לשמאל
|
||||
preferences.interface.showMinimizeButton=הצג כפתור מזעור
|
||||
preferences.interface.showTrayIcon=הצג צלמית בשורה מטה (דורש הפעלה מחדש)
|
||||
## Volume
|
||||
preferences.volume=כונן וירטואלי
|
||||
preferences.volume.type=סוג volume (דורש הפעלה מחדש)
|
||||
preferences.volume.type.automatic=אוטומטי
|
||||
preferences.volume.docsTooltip=בכדי ללמוד עוד על סוגי volume ניתן לקרוא את הדוקומנטציה.
|
||||
preferences.volume.tcp.port=פורט TCP
|
||||
preferences.volume.supportedFeatures=סוג ה- volume שבחרת תומך ביכולות הבאות:
|
||||
preferences.volume.feature.mountAuto=נבחרה בחירת נקודת קישור אוטומטית
|
||||
preferences.volume.feature.mountToDir=הגדרת תיקיה כנקודת קישור
|
||||
preferences.volume.feature.mountToDriveLetter=אות כונן כנקודת קישור
|
||||
preferences.volume.feature.mountFlags=בחירת אפשרויות לקישור
|
||||
preferences.volume.feature.readOnly=קישור במצב קריאה בלבד
|
||||
## Updates
|
||||
preferences.updates=עדכונים
|
||||
preferences.updates.currentVersion=הגרסה הנוכחית: %s
|
||||
preferences.updates.autoUpdateCheck=בצע בדיקת עדכונים אוטומטית
|
||||
preferences.updates.checkNowBtn=בדוק כעת
|
||||
preferences.updates.updateAvailable=שדרוג לגרסה %s זמין.
|
||||
## Contribution
|
||||
preferences.contribute=תמוך בנו
|
||||
preferences.contribute.registeredFor=אישור על תמיכה על שם %s
|
||||
preferences.contribute.noCertificate=תמכו ב-Cryptomator וקבלו תעודת תמיכה. זה כמו מפתח רישוי רק לאנשים מדהימים שמשתמשים בתוכנה חופשית. ;-)
|
||||
preferences.contribute.getCertificate=עדיין אין לכם אחד? לימדו כיצד אתם יכולים להשיג אותו.
|
||||
preferences.contribute.promptText=הדבק את קוד תעודת התומך כאן
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -233,41 +309,95 @@ stats.read.throughput.idle=קריאה: ללא פעילות
|
||||
stats.read.throughput.kibs=קריאה: %.2f kiB/s
|
||||
stats.read.throughput.mibs=קריאה: %.2f MiB/s
|
||||
stats.read.total.data.none=מידע שנקרא: -
|
||||
stats.read.total.data.kib=מידע שנקרא: %.1f קילובייט
|
||||
stats.read.total.data.mib=מידע שנקרא: %.1f מגהבייט
|
||||
stats.read.total.data.gib=מידע שנקרא: %.1f גיגהבייט
|
||||
stats.decr.total.data.none=מידע שפוענח: -
|
||||
stats.decr.total.data.kib=מידע שפוענח: %.1fקילובייט
|
||||
stats.decr.total.data.mib=מידע שפוענח: %.1f מגהבייט
|
||||
stats.decr.total.data.gib=מידע שפוענח: %.1f גיגהבייט
|
||||
stats.read.accessCount=מספר קריאות כולל: %d
|
||||
## Write
|
||||
stats.write.throughput.idle=כתיבה: ללא פעילות
|
||||
stats.write.throughput.kibs=כתיבה: %.2f קילובייט/שניה
|
||||
stats.write.throughput.mibs=כתיבה: %.2f מגהבייט/שניה
|
||||
stats.write.total.data.none=מידע שנכתב: -
|
||||
stats.write.total.data.kib=מידע שנכתב: %.1f קילובייט
|
||||
stats.write.total.data.mib=מידע שנכתב: %.1f מגהבייט
|
||||
stats.write.total.data.gib=מידע שנכתב: %.1f גיגהבייט
|
||||
stats.encr.total.data.none=מידע שהוצפן: -
|
||||
stats.encr.total.data.kib=מידע שהוצפן: %.1fקילובייט
|
||||
stats.encr.total.data.mib=מידע שהוצפן: %.1f מגהבייט
|
||||
stats.encr.total.data.gib=מידע שהוצפן: %.1f גיגהבייט
|
||||
stats.write.accessCount=מספר כתיבות כולל: %d
|
||||
|
||||
## Accesses
|
||||
stats.access.current=גישה: %d
|
||||
stats.access.total=מספר גישות כולל: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=סגור
|
||||
main.minimizeBtn.tooltip=מזער
|
||||
main.preferencesBtn.tooltip=העדפות
|
||||
main.debugModeEnabled.tooltip=מצב דיבאג מופעל
|
||||
main.supporterCertificateMissing.tooltip=תרומתך תתקבל בברכה
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=לחץ כאן להוספת כספת
|
||||
main.vaultlist.contextMenu.remove=הסר…
|
||||
main.vaultlist.contextMenu.lock=נעילה
|
||||
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 להגן על הקבצים שלך. אם אתה זקוק לסיוע, אנא עיין במדריכים שלנו:
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=נעול
|
||||
main.vaultDetail.unlockBtn=שחרר נעילה…
|
||||
main.vaultDetail.unlockNowBtn=בטל נעילה כעת
|
||||
main.vaultDetail.optionsBtn=אפשרויות הכספת
|
||||
main.vaultDetail.passwordSavedInKeychain=הסיסמה נשמרה
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=לא נעול
|
||||
main.vaultDetail.accessLocation=תוכן הכספת שלך נגיש כאן:
|
||||
main.vaultDetail.revealBtn=חשוף את הכונן
|
||||
main.vaultDetail.copyUri=העתק קישור כתובת
|
||||
main.vaultDetail.lockBtn=נעילה
|
||||
main.vaultDetail.bytesPerSecondRead=קריאה:
|
||||
main.vaultDetail.bytesPerSecondWritten=כתיבה:
|
||||
main.vaultDetail.throughput.idle=ללא פעילות
|
||||
main.vaultDetail.throughput.kbps=%.1f קילוביט לשניה
|
||||
main.vaultDetail.throughput.mbps=%.1f מגהביט לשניה
|
||||
main.vaultDetail.stats=סטטיסטיקת הכספת
|
||||
main.vaultDetail.locateEncryptedFileBtn=מצא קבצים מוצפנים
|
||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=בחר קובץ מהכספת שלך על מנת לאתר את הקובץ התואם המוצפן
|
||||
main.vaultDetail.encryptedPathsCopied=הנתיבים הועתקו ללוח!
|
||||
main.vaultDetail.filePickerTitle=בחר קובץ בתוך הכספת
|
||||
### Missing
|
||||
main.vaultDetail.missing.info=Cryptomator לא הצליח למצוא כספת בנתיב זה.
|
||||
main.vaultDetail.missing.recheck=בדיקה נוספת
|
||||
main.vaultDetail.missing.remove=הסר מרשימה הכספות…
|
||||
main.vaultDetail.missing.changeLocation=שנה את מיקום הכספת…
|
||||
### Needs Migration
|
||||
main.vaultDetail.migrateButton=שדרג הכספת
|
||||
main.vaultDetail.migratePrompt=צריך לשדרג את הכספת שלך לגרסה חדשה לפני שניתן לגשת אליה
|
||||
### Error
|
||||
main.vaultDetail.error.info=ארעה שגיאה בהעלאת הכספת מהדיסק.
|
||||
main.vaultDetail.error.reload=ריענון
|
||||
main.vaultDetail.error.windowTitle=שגיאה בטעינת הכספת
|
||||
|
||||
# Wrong File Alert
|
||||
wrongFileAlert.title=איך להצפין קבצים
|
||||
wrongFileAlert.message=האם ניסית להצפין את הקבצים האלו?
|
||||
wrongFileAlert.description=לצורך כך, Cryptomator מספקת volume במנהל הקבצים של המערכת.
|
||||
wrongFileAlert.instruction.0=כדי להצפין את הקבצים, בצע את השלבים הבאים:
|
||||
wrongFileAlert.instruction.1=1. פתחו את הכספת.
|
||||
wrongFileAlert.instruction.2=2. לחץ על ״הצג״ לפתיחת ה- volume במנהל הקבצים.
|
||||
wrongFileAlert.instruction.3=3. הוסף את הקבצים שלך ל- volume הזה.
|
||||
wrongFileAlert.link=לסיוע נוסף, בקר ב-
|
||||
|
||||
# Vault Options
|
||||
## General
|
||||
@@ -275,17 +405,32 @@ vaultOptions.general=כללי
|
||||
vaultOptions.general.vaultName=שם הכספת
|
||||
vaultOptions.general.autoLock.lockAfterTimePart1=נעילה לאחר חוסר שימוש של
|
||||
vaultOptions.general.autoLock.lockAfterTimePart2=דקות
|
||||
vaultOptions.general.unlockAfterStartup=פתח את הכספת בהפעלה של Cryptomator
|
||||
vaultOptions.general.actionAfterUnlock=לאחר שחרור נעילה מוצלח
|
||||
vaultOptions.general.actionAfterUnlock.ignore=אל תעשה דבר
|
||||
vaultOptions.general.actionAfterUnlock.reveal=חשוף את הכונן
|
||||
vaultOptions.general.actionAfterUnlock.ask=שאל
|
||||
vaultOptions.general.startHealthCheckBtn=התחל בדיקת בריאות
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=קישור
|
||||
vaultOptions.mount.info=האפשרויות תלויות בסוג ה- volume הנבחר.
|
||||
vaultOptions.mount.linkToPreferences=פתח את העדפות הכונן הוירטואלי
|
||||
vaultOptions.mount.readonly=קריאה בלבד
|
||||
vaultOptions.mount.customMountFlags=דגלים ידנים לקישור
|
||||
vaultOptions.mount.winDriveLetterOccupied=בשימוש
|
||||
vaultOptions.mount.mountPoint=נקודת עיגון
|
||||
vaultOptions.mount.mountPoint.auto=בחר אוטומטית מיקום מתאים
|
||||
vaultOptions.mount.mountPoint.driveLetter=השתמש באות הכונן המוקצאת
|
||||
vaultOptions.mount.mountPoint.custom=השתמש בתיקיה שנבחרה
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=בחר...
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=בחר תיקיה
|
||||
## Master Key
|
||||
vaultOptions.masterkey=סיסמה
|
||||
vaultOptions.masterkey.changePasswordBtn=שנה סיסמה
|
||||
vaultOptions.masterkey.forgetSavedPasswordBtn=שכח סיסמה שמורה
|
||||
vaultOptions.masterkey.recoveryKeyExplanation=מפתח שחזור הינו הדרך היחידה לשחזור הגישה לכספת אם תאבד את הסיסמה.
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=הצג את מפתח השחזור
|
||||
vaultOptions.masterkey.recoverPasswordBtn=איפוס סיסמה
|
||||
|
||||
|
||||
@@ -295,9 +440,14 @@ recoveryKey.display.title=הצגת מפתח השחזור
|
||||
recoveryKey.create.message=דרושה סיסמה
|
||||
recoveryKey.create.description=נא להזין את הססמא ל "%s" בכדי להציג את מפתח השחזור.
|
||||
recoveryKey.display.description=המפתח שחזור שלהלן ניתן לשימוש בכדי לשחזר גישה ל "%s":
|
||||
recoveryKey.display.StorageHints=שמור אותו במקום מאוד בטוח, לדוגמה:\n • שמור אותו במנהל סיסמאות\n • שמור אותו בדיסק און קי\n • הדפס אותו על נייר
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=איפוס סיסמה
|
||||
recoveryKey.recover.prompt=הקש את מפתח השחזור שלך עבור ״%s״:
|
||||
recoveryKey.recover.correctKey=מפתח ה recovery נכון
|
||||
recoveryKey.recover.wrongKey=מפתח ה recovery שייך ל vault אחר
|
||||
recoveryKey.recover.invalidKey=מפתח ה recovery שגוי
|
||||
recoveryKey.printout.heading=מפתח שחזור של Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=איפוס
|
||||
@@ -306,6 +456,11 @@ recoveryKey.recover.resetSuccess.message=איפוס סיסמה הצליח
|
||||
recoveryKey.recover.resetSuccess.description=ניתן לפתוח את הכספת עם הסיסמה החדשה.
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=הקש סיסמה חדשה
|
||||
newPassword.reenterPassword=לאימות, הקש שוב את הסיסמא החדשה
|
||||
newPassword.passwordsMatch=הסיסמאות תואמות!
|
||||
newPassword.passwordsDoNotMatch=הסיסמאות אינם תואמות
|
||||
passwordStrength.messageLabel.tooShort=השתמש בלפחות %d תווים
|
||||
passwordStrength.messageLabel.0=חלשה מאוד
|
||||
passwordStrength.messageLabel.1=חלשה
|
||||
passwordStrength.messageLabel.2=סבירה
|
||||
@@ -315,8 +470,10 @@ passwordStrength.messageLabel.4=חזקה מאוד
|
||||
# Quit
|
||||
quit.title=יציאה
|
||||
quit.message=קיימים vaults פתוחים
|
||||
quit.description=נא אשר שאתה רוצה לצאת. Cryptomator יבצע נעילה מסודרת של כל הכספות הפתוחות למניעת אובדן מידע.
|
||||
quit.lockAndQuitBtn=נעילה ויציאה
|
||||
|
||||
# Forced Quit
|
||||
quit.forced.message=חלק מה vaults לא היו ניתנים לנעילה
|
||||
quit.forced.description=נעילה כספות נחסמה על ידי תהליכים ממתינים או קבצים פתוחים. אתה יכול לנעול את הכספת בכוח, אולם הפרעה לפעולת קריאה וכתיבה עשויה לגרום לאובדן מידע לא שמור.
|
||||
quit.forced.forceAndQuitBtn=נעילה בכח ויציאה
|
||||
@@ -128,7 +128,6 @@ hub.register.registerBtn=पुष्टि करें
|
||||
hub.unauthorized.message=प्रवेश अस्वीकृत
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.message=लॉक करना विफल हुआ
|
||||
|
||||
@@ -123,7 +123,6 @@ hub.register.registerBtn=Potvrdi
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.message=Zaključavanje neuspješno
|
||||
@@ -365,7 +364,7 @@ recoveryKey.display.StorageHints=Držite ga na sigurnom mjestu, npr.:\n • Pohr
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.prompt=Unesite ključ za oporavak za "%s":
|
||||
recoveryKey.recover.validKey=Ovo je valjani ključ za oporavak
|
||||
recoveryKey.recover.correctKey=Ovo je valjani ključ za oporavak
|
||||
recoveryKey.printout.heading=Cryptomator-ov ključ za oporavak\n"%s"\n
|
||||
### Reset Password
|
||||
### Recovery Key Password Reset Success
|
||||
|
||||
@@ -105,7 +105,7 @@ unlock.savePassword=Jelszó megjegyzése
|
||||
unlock.unlockBtn=Feloldás
|
||||
## Select
|
||||
unlock.chooseMasterkey.description=Nem található a tároló kulcsfájlja a várt helyen. Kérjük válassza ki a kulcsfájlt manuálisan.
|
||||
unlock.chooseMasterkey.filePickerTitle=Kulcsfájl kiválasztása
|
||||
unlock.chooseMasterkey.filePickerTitle=Mesterkulcs fájl kiválasztása
|
||||
## Success
|
||||
unlock.success.description="%s" sikreresen feloldásra került! Mostmár hozzáférhet a virtuális trezorhoz.
|
||||
unlock.success.rememberChoice=Jegyezze meg a választást és ne mutassa többet
|
||||
@@ -115,12 +115,13 @@ unlock.success.revealBtn=Széf megjelenítése
|
||||
### Waiting
|
||||
### Receive Key
|
||||
### Register Device
|
||||
hub.register.occupiedMsg=Ez a név már használatban van
|
||||
hub.register.registerBtn=Megerősítés
|
||||
### Registration Success
|
||||
### Registration Failed
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.message=A lezárás sikertelen volt
|
||||
@@ -362,7 +363,9 @@ recoveryKey.display.StorageHints=Tartsa nagyon biztonságos helyen. pl.:\n •T
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.prompt=Írja be a visszaállítási kulcsát a következőhöz "%s":
|
||||
recoveryKey.recover.validKey=Ez egy érvényes visszaállítási kulcs
|
||||
recoveryKey.recover.correctKey=Ez a visszaállítási kulcs érvényes
|
||||
recoveryKey.recover.wrongKey=Ez a visszaállítási kulcs egy másik széfhez tartozik
|
||||
recoveryKey.recover.invalidKey=Ez a visszaállítási kulcs nem érvényes
|
||||
recoveryKey.printout.heading=Cryptomator visszaállítási kulcs\n"%s"\n
|
||||
### Reset Password
|
||||
### Recovery Key Password Reset Success
|
||||
|
||||
@@ -123,7 +123,6 @@ hub.register.registerBtn=Konfirmasi
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.message=Gagal mengunci
|
||||
@@ -365,7 +364,7 @@ recoveryKey.display.StorageHints=Simpan di tempat yang sangat aman, misal.:\n
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.prompt=Masukkan kunci pemulihan untuk "%s":
|
||||
recoveryKey.recover.validKey=Ini adalah kunci pemulihan yang valid
|
||||
recoveryKey.recover.correctKey=Ini adalah kunci pemulihan yang valid
|
||||
recoveryKey.printout.heading=Kunci Pemulihan Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
### Recovery Key Password Reset Success
|
||||
|
||||
@@ -154,9 +154,6 @@ hub.registerFailed.description=Si è verificato un errore nel processo di nomina
|
||||
hub.unauthorized.message=Accesso negato
|
||||
hub.unauthorized.description=Il tuo dispositivo non è ancora stato autorizzato ad accedere a questa cassaforte. Chiedi al proprietario della cassaforte di autorizzarlo.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Licenza scaduta
|
||||
hub.licenseExceeded.description=Cryptomator Hub ha dato accesso a più utenti rispetto ai suoi permessi di licenza. Contatta il tuo amministratore Hub per aggiornare la licenza o un amministratore del vault per rimuovere gli utenti dalle cassaforte.
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -445,7 +442,7 @@ recoveryKey.display.StorageHints=Mantienilo da qualche parte molto sicuro, ad es
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Reimposta Password
|
||||
recoveryKey.recover.prompt=Inserisci la tua chiave di recupero per "%s":
|
||||
recoveryKey.recover.validKey=Questa è una chiave di recupero valida
|
||||
recoveryKey.recover.correctKey=Questa è una chiave di recupero valida
|
||||
recoveryKey.printout.heading=Chiave di recupero Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Reimposta
|
||||
|
||||
@@ -126,6 +126,7 @@ unlock.success.revealBtn=ドライブを表示
|
||||
unlock.error.customPath.message=カスタム パスに金庫をマウントできません
|
||||
unlock.error.customPath.description.notSupported=カスタム パスを使い続けたい場合、環境設定に移動してサポートしているボリューム タイプを選択してください。もしくは、金庫のオプションに移動してサポートされるマウント ポイントを選択してください。
|
||||
unlock.error.customPath.description.notExists=カスタム マウント パスが存在していません。ローカル ファイルシステムで作成するか、金庫のオプションで変更を加えてください。
|
||||
unlock.error.customPath.description.generic=この金庫のカスタム・マウント・パスを選択しましたが、その使用は次のメッセージで失敗しました: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=デバイス キーにアクセスできません
|
||||
hub.noKeychain.description=ハブ金庫を解錠するには、キーチェーンが保護するデバイス キーが必要です。続行するには、"%s" を有効にし環境設定からキーチェーンを選択します。
|
||||
@@ -153,9 +154,8 @@ hub.registerFailed.description=デバイス名登録中にエラーが発生し
|
||||
hub.unauthorized.message=アクセスが拒否されました
|
||||
hub.unauthorized.description=お使いのデバイスはまだこの金庫にアクセスする権限がありません。金庫のオーナーに権限を与えてもらってください。
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=ライセンス数が不足しています
|
||||
hub.licenseExceeded.description=Cryptomator Hubがライセンスの許可よりも多くのユーザーにアクセス権を与えています。ハブ管理者にライセンスをアップグレードするよう連絡するか,金庫の管理者に金庫からユーザーを削除するよう連絡してください。
|
||||
|
||||
hub.invalidLicense.message=ハブライセンスが無効です
|
||||
hub.invalidLicense.description=Cryptomator ハブインスタンスに無効なライセンスがあります。ライセンスをアップグレードまたは更新するには、ハブ管理者に連絡してください。
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -171,8 +171,11 @@ lock.fail.description=金庫 "%s" を施錠できませんでした。保存さ
|
||||
migration.title=金庫をアップグレード
|
||||
## Start
|
||||
migration.start.header=金庫をアップグレード
|
||||
migration.start.text=Cryptomatorのこの新しいバージョンであなたの金庫「%s」を開くには、金庫を新しい形式にアップグレードする必要があります。これを行う前に、次のことを知っておく必要があります:
|
||||
migration.start.remarkUndone=このアップグレードは取り消すことができません。
|
||||
migration.start.remarkVersions=古い Cryptomator では、アップグレードされた金庫を開くことができなくなります。
|
||||
migration.start.remarkCanRun=あなたが金庫にアクセスするすべてのデバイスは、Cryptomatorのこのバージョンを実行できることを確認する必要があります。
|
||||
migration.start.remarkSynced=アップグレードする前に、このデバイスと他のデバイスで、金庫が完全に同期されていることを確認する必要があります。
|
||||
migration.start.confirm=上記の情報を理解しました。
|
||||
## Run
|
||||
migration.run.enterPassword="%s" のパスワードを入力してください
|
||||
@@ -273,7 +276,12 @@ preferences.interface.showTrayIcon=トレイアイコンを表示 (再起動が
|
||||
preferences.volume=仮想ドライブ
|
||||
preferences.volume.type=ボリューム タイプ (再起動が必要)
|
||||
preferences.volume.type.automatic=自動
|
||||
preferences.volume.docsTooltip=異なるボリュームタイプの詳細については、ドキュメントを確認してください。
|
||||
preferences.volume.tcp.port=TCP ポート
|
||||
preferences.volume.supportedFeatures=選択されたボリュームタイプは、以下の機能をサポートしています。
|
||||
preferences.volume.feature.mountAuto=マウント先の自動選択
|
||||
preferences.volume.feature.mountToDir=カスタムディレクトリをマウント先に指定
|
||||
preferences.volume.feature.mountToDriveLetter=ドライブレターをマウント先に指定
|
||||
preferences.volume.feature.mountFlags=カスタム マウント オプション
|
||||
preferences.volume.feature.readOnly=読み取り専用マウント
|
||||
## Updates
|
||||
@@ -367,6 +375,7 @@ main.vaultDetail.stats=金庫の統計情報
|
||||
main.vaultDetail.locateEncryptedFileBtn=暗号化されたファイルの場所
|
||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=暗号化された金庫のファイルを選択してください
|
||||
main.vaultDetail.encryptedPathsCopied=パスをクリップボードにコピーしました!
|
||||
main.vaultDetail.filePickerTitle=金庫内のファイルを選択
|
||||
### Missing
|
||||
main.vaultDetail.missing.info=Cryptomator はこの場所に金庫を見つけることができませんでした。
|
||||
main.vaultDetail.missing.recheck=再確認
|
||||
@@ -405,6 +414,7 @@ vaultOptions.general.startHealthCheckBtn=正常性チェックを開始
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=マウント
|
||||
vaultOptions.mount.info=オプションは、選択されたボリュームタイプによって異なります。
|
||||
vaultOptions.mount.linkToPreferences=仮想ドライブの環境設定を開く
|
||||
vaultOptions.mount.readonly=読み取り専用
|
||||
vaultOptions.mount.customMountFlags=カスタム マウント フラグ
|
||||
@@ -435,7 +445,9 @@ recoveryKey.display.StorageHints=十分に安全な場所に保存してくだ
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=パスワードをリセット
|
||||
recoveryKey.recover.prompt="%s" の回復キーを入力してください:
|
||||
recoveryKey.recover.validKey=有効な回復キー
|
||||
recoveryKey.recover.correctKey=有効な回復キー
|
||||
recoveryKey.recover.wrongKey=この回復キーは別の金庫に属しています
|
||||
recoveryKey.recover.invalidKey=この回復キーは有効ではありません
|
||||
recoveryKey.printout.heading=Cryptomator 回復キー\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=リセット
|
||||
|
||||
@@ -121,7 +121,6 @@ hub.register.registerBtn=확인
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.description=대기 중인 작동이나 파일이 열려있어 "%s"를 잠그는데 실패하였습니다. 이 Vault를 강제로 잠글 수 있으나, 입/출력의 중단은 저장되지 않은 데이터의 유실을 초래할 수 있습니다.
|
||||
@@ -352,7 +351,7 @@ recoveryKey.display.StorageHints=매우 안전한곳에 보관하십시요. 예
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.prompt="%s"의 복구키를 입력하십시요:
|
||||
recoveryKey.recover.validKey=올바른 복구 키 입니다
|
||||
recoveryKey.recover.correctKey=올바른 복구 키 입니다
|
||||
recoveryKey.printout.heading=Cryptomator 복구 키\n"%s"\n
|
||||
### Reset Password
|
||||
### Recovery Key Password Reset Success
|
||||
|
||||
@@ -117,7 +117,6 @@ hub.register.registerBtn=Apstiprināt
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
## Failure
|
||||
@@ -255,7 +254,7 @@ recoveryKey.display.StorageHints=Glabājiet to drošā vietā, piemēram:\n
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.prompt=Ievadiet "%s" atjaunošanas atslēgu:
|
||||
recoveryKey.recover.validKey=Šī ir derīga atjaunošanas atslēga
|
||||
recoveryKey.recover.correctKey=Šī ir derīga atjaunošanas atslēga
|
||||
recoveryKey.printout.heading=Cryptomator atjaunošanas atslēga\n"%s" \n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Atiestatīt
|
||||
|
||||
@@ -39,7 +39,6 @@ hub.register.registerBtn=Потврди
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
## Failure
|
||||
|
||||
@@ -154,9 +154,6 @@ hub.registerFailed.description=Under navngivingsprosessen oppsto det en feilmeld
|
||||
hub.unauthorized.message=Ingen tilgang
|
||||
hub.unauthorized.description=Enheten din har ikke blitt autorisert til å få tilgang til dette hvelvet ennå. Spør hvelveieren om å tillate det.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Lisensen overskredet
|
||||
hub.licenseExceeded.description=Cryptomator Hub har gitt tilgang til flere brukere enn lisensen dens tillater. Vennligst kontakt Hub-administratoren din for å få oppgradert lisensen eller få en hvelv-administrator til å fjerne brukere fra hvelv.
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -277,6 +274,7 @@ preferences.interface.showTrayIcon=Vis verktøykasseikon (krever omstart)
|
||||
preferences.volume=Virtuell enhet
|
||||
preferences.volume.type=Volumtype (krever omstart)
|
||||
preferences.volume.type.automatic=Automatisk
|
||||
preferences.volume.docsTooltip=Åpne dokumentasjonen for å lære mer om de forskjellige volumtypene.
|
||||
preferences.volume.tcp.port=TCP Port
|
||||
preferences.volume.supportedFeatures=Valgt volumtype støtter følgende funksjoner:
|
||||
preferences.volume.feature.mountAuto=Valg av automatisk monteringspunkt
|
||||
@@ -445,7 +443,9 @@ recoveryKey.display.StorageHints=Oppbevar den et veldig sikkert sted, f.eks. ved
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Nullstill passordet
|
||||
recoveryKey.recover.prompt=Skriv inn gjenopprettingsnøkkelen for "%s":
|
||||
recoveryKey.recover.validKey=Dette er en gyldig gjenopprettingsnøkkel
|
||||
recoveryKey.recover.correctKey=Gjenopprettingsnøkkelen er gyldig
|
||||
recoveryKey.recover.wrongKey=Gjenopprettingsnøkkelen tilhører et annet hvelv
|
||||
recoveryKey.recover.invalidKey=Gjennopprettingsnøkkelen er ugyldig
|
||||
recoveryKey.printout.heading=Cryptomator-gjenopprettingsnøkkel\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Nullstill
|
||||
|
||||
@@ -154,9 +154,8 @@ hub.registerFailed.description=Er is een fout in het naamproces geworpen. Kijk i
|
||||
hub.unauthorized.message=Toegang geweigerd
|
||||
hub.unauthorized.description=Uw apparaat is nog niet gemachtigd om toegang te krijgen tot deze kluis. Vraag de eigenaar van de kluis om toestemming te geven.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Licentie vervallen
|
||||
hub.licenseExceeded.description=Cryptomator Hub heeft toegang gegeven aan meer gebruikers dan er licentievergunningen zijn. Neem contact op met uw Hub beheerder om de licentie of een kluisbeheerder te upgraden om gebruikers uit kluizen te verwijderen.
|
||||
|
||||
hub.invalidLicense.message=Hub Licentie ongeldig
|
||||
hub.invalidLicense.description=Uw Cryptomator Hub installatie heeft een ongeldige licentie. Informeer een Hub administrator om de licentie te upgraden of te verlengen.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -277,6 +276,7 @@ preferences.interface.showTrayIcon=Pictogram in systeemvak weergeven (herstart v
|
||||
preferences.volume=Virtuele schijf
|
||||
preferences.volume.type=Type Volume (herstart vereist)
|
||||
preferences.volume.type.automatic=Automatisch
|
||||
preferences.volume.docsTooltip=Open de documentatie om meer te weten te komen over de verschillende volume types.
|
||||
preferences.volume.tcp.port=TCP-poort
|
||||
preferences.volume.supportedFeatures=Het gekozen volume type ondersteunt de volgende functies:
|
||||
preferences.volume.feature.mountAuto=Automatische koppelpunt selectie
|
||||
@@ -445,7 +445,9 @@ recoveryKey.display.StorageHints=Bewaar het op een veilige plek, bv:\n • Bewaa
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Wachtwoord resetten
|
||||
recoveryKey.recover.prompt=Voer uw herstelsleutel in voor "%s":
|
||||
recoveryKey.recover.validKey=Dit is een geldige herstelsleutel
|
||||
recoveryKey.recover.correctKey=Deze herstelsleutel is geldig
|
||||
recoveryKey.recover.wrongKey=Deze herstelsleutel behoort tot een andere kluis
|
||||
recoveryKey.recover.invalidKey=Deze herstelsleutel is niet geldig
|
||||
recoveryKey.printout.heading=Cryptomator herstelsleutel\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Resetten
|
||||
|
||||
@@ -104,7 +104,6 @@ unlock.success.revealBtn=Gjer eininga synleg
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
## Failure
|
||||
@@ -255,7 +254,6 @@ recoveryKey.display.StorageHints=Ta vare på han ein veldig sikker stad, t.d. ve
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.prompt=Skriv inn gjenopprettingsnøkkelen for "%s":
|
||||
recoveryKey.recover.validKey=Dette er ein gyldig gjenopprettingsnøkkel
|
||||
recoveryKey.printout.heading=Cryptomator-gjenopprettingsnøkkel\n"%s"\n
|
||||
### Reset Password
|
||||
### Recovery Key Password Reset Success
|
||||
|
||||
@@ -106,7 +106,6 @@ unlock.success.revealBtn=ਡਰਾਇਵ ਦਿਖਾਓ
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.description=ਬਾਕੀ ਰਹਿੰਦੀਆਂ ਕਾਰਵਾਈਆਂ ਜਾਂ ਫ਼ਾਈਲਾਂ ਖੁੱਲ੍ਹਣ ਕਰਕੇ "%s" ਲਾਕ ਕਰਨ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ। ਤੁਸੀਂ ਇਸ ਵਾਲਟ ਨੂੰ ਧੱਕੇ ਨਾਲ ਲਾਕ ਕਰ ਸਕਦੇ ਹੋ, ਪਰ I/O ਵਿੱਚ ਰੁਕਾਵਟ ਪਾਉਣ ਨਾਲ ਨਾ-ਸੰਭਾਲਿਆ ਡਾਟਾ ਖਤਮ ਹੋ ਜਾ ਸਕਦਾ ਹੈ।
|
||||
@@ -292,7 +291,7 @@ recoveryKey.display.StorageHints=ਇਸ ਨੂੰ ਕਿਸੇ ਥਾਂ ਬਹ
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.prompt='%s" ਲਈ ਆਪਣਾ ਰਿਕਵਰੀ ਕੁੰਜੀ ਦਿਓ:
|
||||
recoveryKey.recover.validKey=ਇਹ ਜਾਇਜ਼ ਰਿਕਰਵੀ ਕੁੰਜੀ ਹੈ
|
||||
recoveryKey.recover.correctKey=ਇਹ ਜਾਇਜ਼ ਰਿਕਰਵੀ ਕੁੰਜੀ ਹੈ
|
||||
recoveryKey.printout.heading=Cryptomator ਰਿਕਵਰੀ ਕੁੰਜੀ\n"%s"\n
|
||||
### Reset Password
|
||||
### Recovery Key Password Reset Success
|
||||
|
||||
@@ -124,7 +124,7 @@ unlock.success.rememberChoice=Zapamiętaj wybór, nie pokazuj tego ponownie
|
||||
unlock.success.revealBtn=Pokaż Dysk
|
||||
## Failure
|
||||
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 woluminu, który ją obsługuje. W przeciwnym razie przejdź do opcji sejfu i wybierz obsługiwany punkt montowania.
|
||||
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
|
||||
## Hub
|
||||
@@ -154,9 +154,8 @@ hub.registerFailed.description=Wystąpił błąd podczas ustawiania nazwy. Aby u
|
||||
hub.unauthorized.message=Brak dostępu
|
||||
hub.unauthorized.description=Twoje urządzenie nie zostało jeszcze upoważnione do dostępu do tego sejfu. Poproś właściciela sejfu o autoryzację.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Przekroczono licencję
|
||||
hub.licenseExceeded.description=Cryptomator Hub dał dostęp większej ilości użytkowników, niż pozwala na to licencja. Proszę skontaktować się z administratorem Hub, aby ulepszyć licencję lub z administratorem sejfu, aby usunąć użytkowników z sejfu.
|
||||
|
||||
hub.invalidLicense.message=Nieważna licencja Huba
|
||||
hub.invalidLicense.description=Twoja instancja Hub ma nieprawidłową licencję. Poproś administratora Hub o uaktualnienie lub odnowienie licencji.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -275,10 +274,11 @@ preferences.interface.showMinimizeButton=Pokaż przycisk minimalizacji
|
||||
preferences.interface.showTrayIcon=Pokaż ikonę zasobnika (wymaga restartu)
|
||||
## Volume
|
||||
preferences.volume=Dysk wirtualny
|
||||
preferences.volume.type=Typ woluminu (wymaga ponownego uruchomienia)
|
||||
preferences.volume.type=Typ udziału (wymaga ponownego uruchomienia)
|
||||
preferences.volume.type.automatic=Automatyczny
|
||||
preferences.volume.docsTooltip=Sprawdź dokumentację, aby dowiedzieć się więcej o różnych typach udziałów.
|
||||
preferences.volume.tcp.port=Port TCP
|
||||
preferences.volume.supportedFeatures=Wybrany typ woluminu obsługuje następujące funkcje:
|
||||
preferences.volume.supportedFeatures=Wybrany typ udziału obsługuje następujące funkcje:
|
||||
preferences.volume.feature.mountAuto=Automatyczny wybór punktu montowania
|
||||
preferences.volume.feature.mountToDir=Niestandardowy katalog jako punkt montowania
|
||||
preferences.volume.feature.mountToDriveLetter=Litera dysku jako punkt montowania
|
||||
@@ -372,6 +372,10 @@ main.vaultDetail.throughput.idle=bezczynny
|
||||
main.vaultDetail.throughput.kbps=%.1f kiB/s
|
||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||
main.vaultDetail.stats=Statystyki sejfu
|
||||
main.vaultDetail.locateEncryptedFileBtn=Zlokalizuj zaszyfrowany plik
|
||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=Wybierz plik z sejfu, aby zlokalizować jego zaszyfrowany odpowiednik
|
||||
main.vaultDetail.encryptedPathsCopied=Ścieżki skopiowane do schowka!
|
||||
main.vaultDetail.filePickerTitle=Wybierz plik wewnątrz sejfu
|
||||
### Missing
|
||||
main.vaultDetail.missing.info=Cryptomator nie mógł znaleźć sejfu w tej lokalizacji.
|
||||
main.vaultDetail.missing.recheck=Ponów próbę
|
||||
@@ -410,7 +414,7 @@ vaultOptions.general.startHealthCheckBtn=Rozpocznij Test Spójności
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=Montowanie
|
||||
vaultOptions.mount.info=Opcje zależą od wybranego typu woluminu.
|
||||
vaultOptions.mount.info=Opcje zależą od wybranego typu udziału.
|
||||
vaultOptions.mount.linkToPreferences=Otwórz ustawienia dysku wirtualnego
|
||||
vaultOptions.mount.readonly=Tylko do odczytu
|
||||
vaultOptions.mount.customMountFlags=Własne flagi montowania udziału
|
||||
@@ -441,7 +445,9 @@ recoveryKey.display.StorageHints=Trzymaj go w bezpiecznym miejscu, np.\n • Prz
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Resetuj hasło
|
||||
recoveryKey.recover.prompt=Wprowadź swój klucz odzyskiwania dla "%s":
|
||||
recoveryKey.recover.validKey=To jest prawidłowy klucz odzyskiwania
|
||||
recoveryKey.recover.correctKey=To jest prawidłowy klucz odzyskiwania
|
||||
recoveryKey.recover.wrongKey=Ten klucz należy do innego sejfu
|
||||
recoveryKey.recover.invalidKey=Ten klucz jest nieprawidłowy
|
||||
recoveryKey.printout.heading=Cryptomator - Klucz odzyskiwania "%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Resetuj
|
||||
|
||||
@@ -123,6 +123,7 @@ unlock.success.description="%s" desbloqueado com sucesso! O seu cofre está agor
|
||||
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
|
||||
## 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.
|
||||
@@ -150,9 +151,8 @@ hub.registerFailed.description=Houve um erro no processo de nomear. Para mais de
|
||||
hub.unauthorized.message=Acesso negado
|
||||
hub.unauthorized.description=O seu dispositivo ainda não foi autorizado a aceder a este cofre. Peça ao proprietário do cofre para o autorizar.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Licença excedida
|
||||
hub.licenseExceeded.description=O Hub do Cryptomator deu acesso a mais utilizadores do que as suas licenças de licença. Entre em contacto com o administrador do Hub para atualizar a licença ou um administrador do cofre para remover utilizadores dos cofres.
|
||||
|
||||
hub.invalidLicense.message=Licença Hub inválida
|
||||
hub.invalidLicense.description=O pedido do seu Cryptomator Hub tem uma licença inválida. Informe um administrador do Hub para atualizar ou renovar a licença.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
|
||||
@@ -154,9 +154,6 @@ hub.registerFailed.description=Ocorreu um erro no processo de nomeação do disp
|
||||
hub.unauthorized.message=Acesso negado
|
||||
hub.unauthorized.description=Seu dispositivo ainda não foi autorizado a acessar este cofre. Peça ao proprietário ou a um administrador deste cofre para autorizá-lo.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=No. de licenças excedido
|
||||
hub.licenseExceeded.description=O Cryptomator Hub deu acesso a mais usuários do que sua licença de uso permite. Entre em contato com o administrador do seu Cryptomator Hub para ele atualizar o número de licenças ou com um administrador do cofre para remover usuários dos cofres.
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -445,7 +442,7 @@ recoveryKey.display.StorageHints=Mantenha-a em um lugar bem seguro, por exemplo:
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Redefinir Senha
|
||||
recoveryKey.recover.prompt=Digite sua chave de recuperação para "%s":
|
||||
recoveryKey.recover.validKey=Esta é uma chave de recuperação válida
|
||||
recoveryKey.recover.correctKey=Esta é uma chave de recuperação válida
|
||||
recoveryKey.printout.heading=Chave de Recuperação do Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Redefinir
|
||||
|
||||
@@ -123,6 +123,10 @@ unlock.success.description=Deblocat "%s" cu succes! Seiful dvs. este acum accesi
|
||||
unlock.success.rememberChoice=Ține minte alegerea, nu mai arăta asta din nou
|
||||
unlock.success.revealBtn=Dezvăluie partiția
|
||||
## Failure
|
||||
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.
|
||||
@@ -150,9 +154,6 @@ hub.registerFailed.description=O eroare a fost întâmpinata în procesul de den
|
||||
hub.unauthorized.message=Acces respins
|
||||
hub.unauthorized.description=Dispozitivul dvs. nu a fost autorizat să acceseze acest seif. Solicitați proprietarului seifului să va autorizeze accesul.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Numărul de licențe a fost depășit
|
||||
hub.licenseExceeded.description=Cryptomator Hub a permis accesul la mai mulți utilizatori decât licența permite. Vă rugăm să contactați administratorul Hub-ului dumneavoastră pentru a actualiza licența sau un administrator de seif pentru a elimina utilizatorii din seifuri.
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -271,7 +272,10 @@ preferences.interface.showMinimizeButton=Arată butonul de minimizare
|
||||
preferences.interface.showTrayIcon=Arată tray icon (necesită repornire)
|
||||
## Volume
|
||||
preferences.volume=Unitate virtuală
|
||||
preferences.volume.type=Tip unitate de stocare (necesită repornire)
|
||||
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.tcp.port=Portul TCP
|
||||
## Updates
|
||||
preferences.updates=Actualizări
|
||||
preferences.updates.currentVersion=Versiunea actuală: %s
|
||||
@@ -424,7 +428,9 @@ recoveryKey.display.StorageHints=Păstrați cheia de recuperare undeva foarte si
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Resetează Parola
|
||||
recoveryKey.recover.prompt=Introduceți cheia de recuperare pentru "%s:
|
||||
recoveryKey.recover.validKey=Aceasta este o cheie de recuperare validă
|
||||
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ă
|
||||
recoveryKey.printout.heading=Cheia de recuperare Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Resetează
|
||||
|
||||
@@ -123,7 +123,7 @@ unlock.success.description=Разблокировка "%s" успешно вып
|
||||
unlock.success.rememberChoice=Запомнить выбор и больше не спрашивать
|
||||
unlock.success.revealBtn=Показать диск
|
||||
## Failure
|
||||
unlock.error.customPath.message=Невозможно смонтировать хранилище на указанный путь
|
||||
unlock.error.customPath.message=Невозможно смонтировать хранилище по указанному пути
|
||||
unlock.error.customPath.description.notSupported=Если вы хотите продолжить использование пользовательского пути, перейдите в настройки и выберите тип тома, который его поддерживает. В противном случае, перейдите в настройки хранилища и выберите поддерживаемую точку монтирования.
|
||||
unlock.error.customPath.description.notExists=Пользовательский путь монтирования не существует. Либо создайте его в локальной файловой системе, либо измените в параметрах хранилища.
|
||||
unlock.error.customPath.description.generic=Вы выбрали свой путь монтирования этого хранилища, но его нельзя использовать: %s
|
||||
@@ -154,9 +154,8 @@ hub.registerFailed.description=Ошибка присвоения имени. Б
|
||||
hub.unauthorized.message=Нет доступа
|
||||
hub.unauthorized.description=Устройство ещё не авторизовано для доступа к этому хранилищу. Попросите владельца хранилища разрешить его.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Срок действия лицензии истёк
|
||||
hub.licenseExceeded.description=Cryptomator Hub предоставил доступ большему количеству пользователей, чем разрешено лицензией. Обратитесь к администратору Hub для обновления лицензии или администратора хранилища, чтобы удалить пользователей из хранилищ.
|
||||
|
||||
hub.invalidLicense.message=Лицензия хаба недействительна
|
||||
hub.invalidLicense.description=У вашего хаба Cryptomator неверная лицензия. Попросите администратора хаба обновить или продлить лицензию.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -277,12 +276,13 @@ preferences.interface.showTrayIcon=Показывать значок в пане
|
||||
preferences.volume=Виртуальный диск
|
||||
preferences.volume.type=Тип тома (требуется перезапуск)
|
||||
preferences.volume.type.automatic=Автоматически
|
||||
preferences.volume.docsTooltip=Откройте документацию, чтобы узнать больше о различных типах томов.
|
||||
preferences.volume.tcp.port=Порт TCP
|
||||
preferences.volume.supportedFeatures=Выбранный тип тома поддерживает следующие функции:
|
||||
preferences.volume.feature.mountAuto=Выбор точки автомонтирования
|
||||
preferences.volume.feature.mountToDir=Своя папка как точка монтирования
|
||||
preferences.volume.feature.mountToDriveLetter=Буква диска как точка монтирования
|
||||
preferences.volume.feature.mountFlags=Настройки монтирования
|
||||
preferences.volume.feature.mountFlags=Параметры монтирования
|
||||
preferences.volume.feature.readOnly=Монтирование только для чтения
|
||||
## Updates
|
||||
preferences.updates=Обновления
|
||||
@@ -445,7 +445,9 @@ recoveryKey.display.StorageHints=Храните его в надёжном ме
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Сброс пароля
|
||||
recoveryKey.recover.prompt=Введите ключ восстановления для "%s":
|
||||
recoveryKey.recover.validKey=Это действительный ключ восстановления
|
||||
recoveryKey.recover.correctKey=Это действительный ключ восстановления
|
||||
recoveryKey.recover.wrongKey=Этот ключ восстановления от другого хранилища
|
||||
recoveryKey.recover.invalidKey=Этот ключ восстановления недействителен
|
||||
recoveryKey.printout.heading=Ключ восстановления Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Сброс
|
||||
|
||||
@@ -54,7 +54,6 @@ unlock.unlockBtn=අගුළුහරින්න
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
## Failure
|
||||
|
||||
@@ -123,6 +123,7 @@ unlock.success.description=Odomknutie "%s" úspešné! Váš trezor je už prís
|
||||
unlock.success.rememberChoice=Zapamätať voľbu, už viac nezobrazovať
|
||||
unlock.success.revealBtn=Odkryť disk
|
||||
## Failure
|
||||
unlock.error.customPath.message=Nie je možné namapovať trezor na uživateĺskej ceste
|
||||
## Hub
|
||||
hub.noKeychain.message=Nemôžem pristúpiť ku kľúču zariadenia
|
||||
hub.noKeychain.description=V poradí odomknutia Hub trezorov, je požadovaný kľúč zariadenia ktorý je zabezpečený použitím keychain. K vykonaniu povoľte "%s" a zvoľte keychain v nastaveniach.
|
||||
@@ -150,9 +151,8 @@ hub.registerFailed.description=Vznikla chyba počas pomenovávacieho procesu. Pr
|
||||
hub.unauthorized.message=Prístup zamietnutý
|
||||
hub.unauthorized.description=Vaše zaradenie zatiaľ ešte nebolo autorizované pre pristúp tohto trezora. Požiadajte majiteľa trezora o autorizovanie.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Licencia prekročená
|
||||
hub.licenseExceeded.description=Cryptomator Hub má prístup pre viac užívateľov ako povoľuje licencia. Prosím kontaktujte svojho Hub administrátora pre aktualizovanie licencie alebo admina trezoru pre odstránenie užívateľov z trezorov.
|
||||
|
||||
hub.invalidLicense.message=Neplatná licencia Hub-u
|
||||
hub.invalidLicense.description=Vaša inštancia Cryptomator Hub-u má neplatnú licenciu. Prosím informujte Hub administrátora pre aktualizáciu alebo obnovenie licencie.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -272,6 +272,7 @@ preferences.interface.showTrayIcon=Ukázať ikonu na sytémovej lište (vyžaduj
|
||||
## Volume
|
||||
preferences.volume=Virtuálny disk
|
||||
preferences.volume.type.automatic=Automaticky
|
||||
preferences.volume.docsTooltip=Pre viac informácií ohľadne iných typov volume otvorte dokumentáciu.
|
||||
preferences.volume.tcp.port=TCP port
|
||||
preferences.volume.feature.mountFlags=Vlastné parametre mapovania
|
||||
preferences.volume.feature.readOnly=Mapovanie len na čítanie
|
||||
@@ -436,7 +437,9 @@ recoveryKey.display.StorageHints=Uchovávajte ho na bezpečnom mieste, ako napr.
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Resetovanie hesla
|
||||
recoveryKey.recover.prompt=Zadajte Váš kľúč obnovy pre "%s":
|
||||
recoveryKey.recover.validKey=Toto je platný kľúč obnovy
|
||||
recoveryKey.recover.correctKey=Toto je platný kľúč obnovy
|
||||
recoveryKey.recover.wrongKey=Tento kľúč obnovy patrí inému trezoru
|
||||
recoveryKey.recover.invalidKey=Toto je neplatný kľúč obnovy
|
||||
recoveryKey.printout.heading=Kľúč obnovy Cryptomator-a\n "%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Resetovať
|
||||
|
||||
@@ -54,7 +54,6 @@ error.technicalDetails=Podrobnosti:
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.retryBtn=Poizkusi znova
|
||||
@@ -79,6 +78,7 @@ lock.forced.retryBtn=Poizkusi znova
|
||||
## General
|
||||
## Interface
|
||||
## Volume
|
||||
preferences.volume.docsTooltip=Informacije o različnih podatkovnih nosilcih najdete v navodilih.
|
||||
## Updates
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
@@ -117,6 +117,9 @@ main.vaultDetail.locateEncryptedFileBtn=Poišči šifrirano datoteko
|
||||
## Display Recovery Key
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.correctKey=Obnovitveni ključ je pravilen
|
||||
recoveryKey.recover.wrongKey=Ta obnovitveni ključ se ujema z drugim trezorjem
|
||||
recoveryKey.recover.invalidKey=Obnovitveni ključ ni pravilen
|
||||
### Reset Password
|
||||
### Recovery Key Password Reset Success
|
||||
|
||||
|
||||
@@ -111,7 +111,6 @@ unlock.success.revealBtn=Otvori disk
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.description=Zaključavanje "%s" je blokirano operacijama na čekanju ili otvorenim datotekama. Možete prisilno zaključati ovaj sef, međutim prekid "I/O" operacija može rezultirati gubitkom nesačuvanih podataka.
|
||||
@@ -304,7 +303,7 @@ recoveryKey.display.StorageHints=Чувајте га на веома сигур
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.prompt=Унесите резервни кључ за "%s":
|
||||
recoveryKey.recover.validKey=Ово је исправан резервни кључ
|
||||
recoveryKey.recover.correctKey=Ово је исправан резервни кључ
|
||||
recoveryKey.printout.heading=Cryptomator Резервни Кључ\n"%s"\n
|
||||
### Reset Password
|
||||
### Recovery Key Password Reset Success
|
||||
|
||||
@@ -104,7 +104,6 @@ unlock.success.revealBtn=Otvori disk
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
## Failure
|
||||
|
||||
@@ -154,9 +154,8 @@ hub.registerFailed.description=Ett fel uppstod i namngivningsprocessen. För mer
|
||||
hub.unauthorized.message=Åtkomst nekad
|
||||
hub.unauthorized.description=Din enhet har ännu inte behörighet att komma åt detta valv. Be valvägaren att godkänna det.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Licensen överskriden
|
||||
hub.licenseExceeded.description=Cryptomator Hub har gett tillgång till fler användare än licensen medger. Kontakta din Hub-administratör för att uppgradera licensen eller en valvadministratör för att minska antalet användare i valv.
|
||||
|
||||
hub.invalidLicense.message=Din Hub-licens är ogiltig
|
||||
hub.invalidLicense.description=Din Cryptomator Hub-instans har en ogiltig licens. Vänligen informera en Hub administratör för att uppgradera eller förnya licensen.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -277,6 +276,7 @@ preferences.interface.showTrayIcon=Visa ikon i aktivitetsfältet (kräver omstar
|
||||
preferences.volume=Virtuell enhet
|
||||
preferences.volume.type=Volymtyp (kräver omstart)
|
||||
preferences.volume.type.automatic=Automatiskt
|
||||
preferences.volume.docsTooltip=Öppna dokumentationen för att läsa mer om de olika volymtyperna.
|
||||
preferences.volume.tcp.port=TCP-port
|
||||
preferences.volume.supportedFeatures=Den valda volymtypen stöder följande funktioner:
|
||||
preferences.volume.feature.mountAuto=Automatiskt val av monteringspunkt
|
||||
@@ -437,7 +437,9 @@ recoveryKey.display.StorageHints=Spara den på en säker plats, t.ex:\n • I en
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Återställ lösenord
|
||||
recoveryKey.recover.prompt=Ange din återställningsnyckel för "%s":
|
||||
recoveryKey.recover.validKey=Detta är en giltig återställningsnyckel
|
||||
recoveryKey.recover.correctKey=Denna återställningsnyckel är korrekt
|
||||
recoveryKey.recover.wrongKey=Denna återställningsnyckel tillhör ett annat valv
|
||||
recoveryKey.recover.invalidKey=Denna återställningsnyckel är ogiltig
|
||||
recoveryKey.printout.heading=Cryptomator återställningsnyckel\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Återställ
|
||||
|
||||
@@ -147,9 +147,6 @@ hub.registerFailed.description=Hitilafu imetupwa katika mchakato wa kumtaja. Kwa
|
||||
hub.unauthorized.message=Ufikiaji umekataliwa
|
||||
hub.unauthorized.description=Kifaa chako bado hakijaidhinishwa kufikia kuba hii. Uliza mwenye kuba aidhinishe.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Leseni imepitwa
|
||||
hub.licenseExceeded.description=Cryptomator Hub imetoa ufikiaji kwa watumiaji zaidi ya vibali vyake vya leseni. Tafadhali wasiliana na msimamizi wako wa Hub ili kuboresha leseni au msimamizi wa kuba ili kuondoa watumiaji kwenye kuba.
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -397,7 +394,7 @@ recoveryKey.display.StorageHints=Weka mahali salama sana, kwa mfano:\n • Hifad
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Fufua Neno la siri
|
||||
recoveryKey.recover.prompt=Ingiza ufunguo wako wa kurejesha kwa "%s":
|
||||
recoveryKey.recover.validKey=Hii ni ufunguo halali wa kurejesha
|
||||
recoveryKey.recover.correctKey=Hii ni ufunguo halali wa kurejesha
|
||||
recoveryKey.printout.heading=Ufunguo wa Urejeshaji wa Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Weka upya
|
||||
|
||||
@@ -126,7 +126,6 @@ unlock.success.revealBtn=இயக்ககத்தை வெளிப்பட
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.message=பூட்டுதல் தோல்வியடைந்தது
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.retryBtn=మళ్ళీ చేయండి
|
||||
|
||||
@@ -97,7 +97,6 @@ unlock.unlockBtn=ปลดล็อก
|
||||
### Unauthorized
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
## Failure
|
||||
|
||||
@@ -150,9 +150,6 @@ hub.registerFailed.description=İsimlendirme işleminde bir hata oluştu. Daha f
|
||||
hub.unauthorized.message=Erişim engellendi
|
||||
hub.unauthorized.description=Cihazınıza henüz bu kasaya erişim yetkisi verilmedi. Kasa sahibinden yetkilendirmesini isteyin.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Lisans aşıldı
|
||||
hub.licenseExceeded.description=Cryptomator Hub, lisansının izin verdiğinden daha fazla kullanıcıya erişim sağladı. Lisansı yükseltmek için lütfen Hub yöneticinizle veya kullanıcıları kasalardan kaldırmak için bir kasa yöneticisiyle iletişime geçin.
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -428,7 +425,7 @@ recoveryKey.display.StorageHints=Bunu çok güvenli bir yerde saklayın, örneğ
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Şifreyi Sıfırla
|
||||
recoveryKey.recover.prompt="%s" için kurtarma anahtarınızı girin:
|
||||
recoveryKey.recover.validKey=Bu geçerli bir kurtarma anahtarı
|
||||
recoveryKey.recover.correctKey=Bu geçerli bir kurtarma anahtarı
|
||||
recoveryKey.printout.heading=Cryptomator Kurtarma Anahtarı\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Sıfırla
|
||||
|
||||
@@ -146,9 +146,6 @@ hub.registerFailed.description=Виникла помилка у процесі
|
||||
hub.unauthorized.message=У доступі відмовлено
|
||||
hub.unauthorized.description=Ваш пристрій ще не має прав доступу до цього vault. Попросіть власника vault надати їх.
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=Кількість користувачів перевищено
|
||||
hub.licenseExceeded.description=Cryptomator Hub надав доступ більшій кількості користувачів, ніж дозволяє ліцензія. Будь ласка, зверніться до адміністратора вашого Hub, щоб покращити ліцензію або адміністратора vault, щоб видалити користувачів з vaults.
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
|
||||
@@ -145,7 +145,6 @@ hub.unauthorized.message=Truy cập bị từ chối
|
||||
hub.unauthorized.description=Thiết bị của bạn chưa được phép truy cập vault này. Yêu cầu chủ sở hữu cấp phép.
|
||||
### License Exceeded
|
||||
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.message=Khóa thất bại
|
||||
@@ -375,7 +374,7 @@ recoveryKey.display.StorageHints=Giữ ở một nơi rất an toàn, ví dụ:\
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Đặt lại Mật khẩu
|
||||
recoveryKey.recover.prompt=Nhập khóa khôi phục của bạn cho "%s":
|
||||
recoveryKey.recover.validKey=Đây là khóa khôi phục hợp lệ
|
||||
recoveryKey.recover.correctKey=Đây là khóa khôi phục hợp lệ
|
||||
recoveryKey.printout.heading=Khóa Khôi phục Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Đặt lại
|
||||
|
||||
@@ -15,7 +15,7 @@ generic.button.next=下一步
|
||||
generic.button.print=打印
|
||||
|
||||
# Error
|
||||
error.message=错误 %s
|
||||
error.message=发生错误
|
||||
error.description=糟糕!Cryptomator 未料到会发生这种情况。您可以查找该错误的现有解决方案;或者,如果是新错误,请随时向我们报告。
|
||||
error.hyperlink.lookup=查找该错误
|
||||
error.hyperlink.report=报告该错误
|
||||
@@ -61,7 +61,7 @@ addvaultwizard.new.validCharacters.numbers=位数
|
||||
addvaultwizard.new.validCharacters.dashes=连字符 (%s) 或下划线 (%s)
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=创建保险库
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=如果没有密码,您将无法访问您的数据。您想要一个恢复密钥来以防您丢失密码吗?
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=如果丢失密码,您将无法访问您的数据。您想要创建一个恢复密钥以防您丢失密码吗?
|
||||
addvaultwizard.new.generateRecoveryKeyChoice.yes=好的,有备无患
|
||||
addvaultwizard.new.generateRecoveryKeyChoice.no=不,谢谢。我不会丢失密码的
|
||||
### Information
|
||||
@@ -72,9 +72,9 @@ addvault.new.readme.storageLocation.3=请勿
|
||||
addvault.new.readme.storageLocation.4=• 更改此目录内的任何文件或者
|
||||
addvault.new.readme.storageLocation.5=• 将任何文件粘贴到此目录内以进行加密
|
||||
addvault.new.readme.storageLocation.6=如果你想要加密文件并查看保险库的内容,请执行以下操作:
|
||||
addvault.new.readme.storageLocation.7=1. 将此保险库添加到Cryptomator
|
||||
addvault.new.readme.storageLocation.8=2. 在Cryptomator中解锁保险库
|
||||
addvault.new.readme.storageLocation.9=3. 通过点击“显示”按钮打开访问路径
|
||||
addvault.new.readme.storageLocation.7=1. 将此保险库添加到Cryptomator;
|
||||
addvault.new.readme.storageLocation.8=2. 在Cryptomator中解锁保险库;
|
||||
addvault.new.readme.storageLocation.9=3. 通过点击“显示”按钮打开访问路径。
|
||||
addvault.new.readme.storageLocation.10=如果您需要帮助,请阅读文档: %s
|
||||
addvault.new.readme.accessLocation.fileName=欢迎.rtf
|
||||
addvault.new.readme.accessLocation.1=🔐️ 加密卷 🔐️
|
||||
@@ -140,33 +140,32 @@ hub.receive.message=正在处理响应…
|
||||
hub.receive.description=Cryptomator 正在接收和处理来自 Hub 的响应,请稍等
|
||||
### Register Device
|
||||
hub.register.message=设备名称(必填)
|
||||
hub.register.description=这似乎是设备的首次 Hub 访问。为了识别它以进行访问授权,您需要命名此设备
|
||||
hub.register.description=这似乎是设备的首次 Hub 访问。为了识别它以进行访问授权,您需要命名此设备。
|
||||
hub.register.nameLabel=设备名称
|
||||
hub.register.occupiedMsg=名称已被占用
|
||||
hub.register.registerBtn=确认
|
||||
hub.register.registerBtn=确定
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=设备命名成功
|
||||
hub.registerSuccess.description=要访问保险库,设备需得到保险库所有者的授权
|
||||
hub.registerSuccess.description=要访问保险库,设备需得到保险库所有者的授权。
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=设备命名失败
|
||||
hub.registerFailed.description=命名过程中出现错误,详情请查看应用程序日志
|
||||
hub.registerFailed.description=命名过程中出现错误,详情请查看应用程序日志。
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=拒绝访问
|
||||
hub.unauthorized.description=您的设备尚未授权访问此保险库,请联系保险库所有者
|
||||
hub.unauthorized.description=您的设备尚未授权访问此保险库,请联系保险库所有者,
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=许可证已逾期
|
||||
hub.licenseExceeded.description=Cryptomator Hub 允许访问的用户数量超过其许可证允许的数量,请联系您的 Hub 管理员升级许可证或联系保险库管理员删除用户
|
||||
|
||||
hub.invalidLicense.message=Hub 许可证无效
|
||||
hub.invalidLicense.description=此 Cryptomator Hub 实例许可证无效,请联系Hub管理员升级或者续订许可证。
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.message=锁定失败
|
||||
lock.forced.description=锁定 "%s" 被挂起的操作或使用中的文件中断。您可以强制锁定此保险库,不过请注意打断 I/O 可能导致未保存的数据丢失
|
||||
lock.forced.description=锁定 "%s" 因进行中的操作或已打开的文件而被阻止。您可以强制锁定此保险库,不过请注意中断读写可能导致未保存的数据丢失
|
||||
lock.forced.retryBtn=重试
|
||||
lock.forced.forceBtn=强制锁定
|
||||
## Failure
|
||||
lock.fail.message=锁定保险库失败
|
||||
lock.fail.description=保险库 "%s" 无法锁定。请确保在其他地方保存未保存的工作,以及重要的 "读/写" 操作已完成。为了顺利关闭保险库,请查杀 Cryptomator 进程
|
||||
lock.fail.description=保险库 "%s" 无法锁定。请确保已经保存其他地方未保存的工作,以及重要的读写操作已完成。为了顺利关闭保险库,请终止 Cryptomator 进程。
|
||||
|
||||
# Migration
|
||||
migration.title=升级保险库
|
||||
@@ -266,17 +265,18 @@ preferences.interface.theme.automatic=自动
|
||||
preferences.interface.theme.dark=深色
|
||||
preferences.interface.theme.light=浅色
|
||||
preferences.interface.unlockThemes=解锁暗黑模式
|
||||
preferences.interface.language=语言 (需重启)
|
||||
preferences.interface.language=语言(需重启)
|
||||
preferences.interface.language.auto=系统默认
|
||||
preferences.interface.interfaceOrientation=界面方向
|
||||
preferences.interface.interfaceOrientation.ltr=从左到右
|
||||
preferences.interface.interfaceOrientation.rtl=从右到左
|
||||
preferences.interface.showMinimizeButton=显示最小化按钮
|
||||
preferences.interface.showTrayIcon=显示托盘图标 (需重启)
|
||||
preferences.interface.showTrayIcon=显示托盘图标(需重启)
|
||||
## Volume
|
||||
preferences.volume=虚拟磁盘
|
||||
preferences.volume.type=卷类型(需重启)
|
||||
preferences.volume.type.automatic=自动
|
||||
preferences.volume.docsTooltip=打开文档以了解有关不同卷类型的更多信息
|
||||
preferences.volume.tcp.port=TCP 端口
|
||||
preferences.volume.supportedFeatures=选定的卷类型支持以下功能:
|
||||
preferences.volume.feature.mountAuto=自动选择挂载点
|
||||
@@ -292,7 +292,7 @@ preferences.updates.checkNowBtn=立即检查
|
||||
preferences.updates.updateAvailable=可更新到版本 %s
|
||||
## Contribution
|
||||
preferences.contribute=支持我们
|
||||
preferences.contribute.registeredFor=已注册署名 %s 的赞助者证书
|
||||
preferences.contribute.registeredFor=已为 %s 注册支持者证书
|
||||
preferences.contribute.noCertificate=支持 Cryptomator 并获得一份支持者证书。它类似于许可证密钥,特别之处是提供给使用免费软件的牛人的 ;-)
|
||||
preferences.contribute.getCertificate=还没有该证书吗?了解您如何获取
|
||||
preferences.contribute.promptText=在这里粘贴赞助者证书码
|
||||
@@ -353,7 +353,7 @@ main.vaultlist.contextMenu.reveal=显示驱动器
|
||||
main.vaultlist.addVaultBtn=添加保险库
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=感谢您使用 Cryptomator 来保护您的文件。如果您需要任何帮助,请查看正显示的快速开始指南:
|
||||
main.vaultDetail.welcomeOnboarding=感谢您使用 Cryptomator 来保护您的文件。如果您需要任何帮助,请查看我们的快速开始指南:
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=已锁定
|
||||
main.vaultDetail.unlockBtn=解锁…
|
||||
@@ -391,7 +391,7 @@ main.vaultDetail.error.windowTitle=加载保险库时出错
|
||||
|
||||
# Wrong File Alert
|
||||
wrongFileAlert.title=如何加密文件
|
||||
wrongFileAlert.message=您试图要加密这些文件吗?
|
||||
wrongFileAlert.message=您想要加密这些文件吗?
|
||||
wrongFileAlert.description=为了实现加密,Cryptomator 在系统文件管理器中提供一个卷
|
||||
wrongFileAlert.instruction.0=要加密文件,请遵循以下步骤:
|
||||
wrongFileAlert.instruction.1=1. 解锁您的保险库;
|
||||
@@ -405,7 +405,7 @@ vaultOptions.general=常规
|
||||
vaultOptions.general.vaultName=保险库名称
|
||||
vaultOptions.general.autoLock.lockAfterTimePart1=空闲超时
|
||||
vaultOptions.general.autoLock.lockAfterTimePart2=分钟后自动锁定
|
||||
vaultOptions.general.unlockAfterStartup=启动 Cryptomator 时解锁保险库 (此功能需先勾选保存密码)
|
||||
vaultOptions.general.unlockAfterStartup=启动 Cryptomator 时解锁保险库(此功能需先勾选保存密码)
|
||||
vaultOptions.general.actionAfterUnlock=解锁成功后的操作
|
||||
vaultOptions.general.actionAfterUnlock.ignore=什么也不做
|
||||
vaultOptions.general.actionAfterUnlock.reveal=显示驱动器
|
||||
@@ -429,7 +429,7 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=选择目录
|
||||
vaultOptions.masterkey=密码
|
||||
vaultOptions.masterkey.changePasswordBtn=更改密码
|
||||
vaultOptions.masterkey.forgetSavedPasswordBtn=忘记保存的密码
|
||||
vaultOptions.masterkey.recoveryKeyExplanation=忘记密码时,恢复密钥是你恢复保险库访问权限的唯一方式!!!
|
||||
vaultOptions.masterkey.recoveryKeyExplanation=忘记密码时,恢复密钥是你恢复保险库访问权限的唯一方式!
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=显示恢复密钥
|
||||
vaultOptions.masterkey.recoverPasswordBtn=重置密码
|
||||
|
||||
@@ -440,12 +440,14 @@ recoveryKey.display.title=显示恢复密钥
|
||||
recoveryKey.create.message=密码是必填的
|
||||
recoveryKey.create.description=输入您的密码以显示"%s"的恢复密钥:
|
||||
recoveryKey.display.description=下面的恢复密钥可用于恢复对"%s"的访问:
|
||||
recoveryKey.display.StorageHints=保存它到非常安全的某处,例如:\n • 使用密码管理器来保存\n • 将其保存在USB闪存盘\n • 打印在纸上
|
||||
recoveryKey.display.StorageHints=将它保存到非常安全的地方,例如:\n • 使用密码管理器来保存\n • 将其保存在U盘上\n • 在纸上打印
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=重置密码
|
||||
recoveryKey.recover.prompt=输入 "%s" 的恢复密钥:
|
||||
recoveryKey.recover.validKey=这是一个有效的恢复密钥
|
||||
recoveryKey.recover.correctKey=这是正确的恢复密钥
|
||||
recoveryKey.recover.wrongKey=此恢复密钥属于另一个保管库
|
||||
recoveryKey.recover.invalidKey=此恢复密钥无效
|
||||
recoveryKey.printout.heading=Cryptomator 恢复密钥\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=重置
|
||||
@@ -468,10 +470,10 @@ passwordStrength.messageLabel.4=非常强
|
||||
# Quit
|
||||
quit.title=退出程序
|
||||
quit.message=存在已解锁的保险库
|
||||
quit.description=请确认退出动作,Cryptomator 将会温和地锁定所有已解锁的保险库,以防止数据丢失
|
||||
quit.description=请确认退出动作,Cryptomator 将会适时地锁定所有已解锁的保险库,以防止数据丢失
|
||||
quit.lockAndQuitBtn=锁定并退出
|
||||
|
||||
# Forced Quit
|
||||
quit.forced.message=无法锁定某些保险库
|
||||
quit.forced.description=锁定保险库被挂起的操作或使用中的文件中断。您可以强制锁定剩余的保险库,不过请注意打断 I/O 可能导致未保存的数据丢失
|
||||
quit.forced.description=锁定保险库因进行中的操作或已打开的文件被阻止。您可以强制锁定剩余的保险库,不过请注意中断读写可能导致未保存的数据丢失
|
||||
quit.forced.forceAndQuitBtn=强制并退出
|
||||
@@ -123,7 +123,13 @@ 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.generic=已為加密庫設定了自定路徑,但是運作時出現錯誤:%s
|
||||
## Hub
|
||||
hub.noKeychain.message=無法訪問設備密鑰
|
||||
hub.noKeychain.openBtn=開啟偏好設定
|
||||
### Waiting
|
||||
hub.auth.message=等待認證中…
|
||||
hub.auth.description=您將被自動傳送到登入頁面。
|
||||
@@ -147,9 +153,8 @@ hub.registerFailed.description=命名過程中引發錯誤。有關詳細信息
|
||||
hub.unauthorized.message=拒絕存取
|
||||
hub.unauthorized.description=您的設備權限尚未允許存取加密庫,請聯絡加密庫擁有者
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=软件許可已滿額
|
||||
hub.licenseExceeded.description=Cryptomator Hub 的被授予授權的使用者的數量,多於許可證容許的使用者數量。 請聯絡 Cryptomator Hub 管理員升級授權,或聯絡加密庫管理員從加密庫移除使用者。
|
||||
|
||||
hub.invalidLicense.message=Hub 授權無效
|
||||
hub.invalidLicense.description=此 Cryptomator Hub 實例授權無效,請聯繫管理員升級或續訂授權。
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -165,6 +170,9 @@ lock.fail.description=加密庫「%s」無法被鎖定。請確保未存檔的
|
||||
migration.title=升級加密庫
|
||||
## Start
|
||||
migration.start.header=升級加密庫
|
||||
migration.start.text=若要開啟%s加密庫,需要將加密庫升級至新的格式。在此之前,您需要先了解以下的事項:
|
||||
migration.start.remarkUndone=此升級操作無法撤銷或回復。
|
||||
migration.start.remarkVersions=舊版 Cryptomator 將無法開啟已升級的加密庫。
|
||||
migration.start.confirm=我已閱讀並理解上述資訊
|
||||
## Run
|
||||
migration.run.enterPassword=輸入「%s」的密碼
|
||||
@@ -262,6 +270,7 @@ preferences.interface.showTrayIcon=顯示系統工作列圖示 (需重新啟動)
|
||||
## Volume
|
||||
preferences.volume=虛擬磁碟
|
||||
preferences.volume.type.automatic=自動
|
||||
preferences.volume.docsTooltip=閱讀文檔以了解各加密空間類型。
|
||||
## Updates
|
||||
preferences.updates=更新
|
||||
preferences.updates.currentVersion=目前版本:%s
|
||||
@@ -414,7 +423,9 @@ recoveryKey.display.StorageHints=請把它保存在非常安全的地方,例
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=重設密碼
|
||||
recoveryKey.recover.prompt=輸入「%s」的復原金鑰:
|
||||
recoveryKey.recover.validKey=這是有效的復原金鑰
|
||||
recoveryKey.recover.correctKey=這是有效的復原金鑰
|
||||
recoveryKey.recover.wrongKey=此復原金鑰屬於另一個加密庫
|
||||
recoveryKey.recover.invalidKey=此復原金鑰無效
|
||||
recoveryKey.printout.heading=Cryptomator 復原金鑰\n「%s」\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=重設
|
||||
|
||||
@@ -6,7 +6,7 @@ generic.button.apply=套用
|
||||
generic.button.back=上一頁
|
||||
generic.button.cancel=取消
|
||||
generic.button.change=修改
|
||||
generic.button.choose=選取…
|
||||
generic.button.choose=选择...
|
||||
generic.button.close=關閉
|
||||
generic.button.copy=複製
|
||||
generic.button.copied=已複製!
|
||||
@@ -15,9 +15,9 @@ generic.button.next=繼續
|
||||
generic.button.print=列印
|
||||
|
||||
# Error
|
||||
error.message=錯誤:%s
|
||||
error.message=出現錯誤
|
||||
error.description=糟糕!Cryptomator 發生了預期外的錯誤。您可以嘗試查找該錯誤的現有解決方案,如果是新錯誤,請隨時向我們報告。
|
||||
error.hyperlink.lookup=查找該錯誤
|
||||
error.hyperlink.lookup=查找錯誤
|
||||
error.hyperlink.report=回報錯誤
|
||||
error.technicalDetails=詳情:
|
||||
|
||||
@@ -62,11 +62,11 @@ addvaultwizard.new.validCharacters.dashes=連字符 (%s) 或下劃線 (%s)
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=新建加密檔案庫
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=若您遺失密碼將無法存取您的資料。您是否希望建立一組在您遺失密碼時可供復原的金鑰?
|
||||
addvaultwizard.new.generateRecoveryKeyChoice.yes=是,做好安全措施,以免後悔莫及。
|
||||
addvaultwizard.new.generateRecoveryKeyChoice.no=否,不用,我不會丟失密碼
|
||||
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=• 修改這個資料夾中的任何檔案或是
|
||||
@@ -85,9 +85,9 @@ addvault.new.readme.accessLocation.4=您可以放心移除這個檔案。
|
||||
addvaultwizard.existing.instruction=請選擇現有加密檔案庫中名為「vault.cryptomator」的檔案。如果只有一個名為「masterkey.cryptomator」的檔案,則選擇該檔案。
|
||||
addvaultwizard.existing.chooseBtn=選取…
|
||||
addvaultwizard.existing.filePickerTitle=選取加密檔案庫的檔案
|
||||
addvaultwizard.existing.filePickerMimeDesc=Cryptomator 加密庫
|
||||
addvaultwizard.existing.filePickerMimeDesc=Cryptomator 加密檔案庫
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions=已加入加密檔案庫「%s」。您需要將這個加密檔案庫解鎖以存取內容,或是您也可以之後再解鎖。
|
||||
addvaultwizard.success.nextStepsInstructions=已加入加密檔案庫 "%s"。您需要將這個加密檔案庫解鎖以存取內容,或是您也可以之後再解鎖。
|
||||
addvaultwizard.success.unlockNow=立即解鎖
|
||||
|
||||
# Remove Vault
|
||||
@@ -98,7 +98,7 @@ removeVault.confirmBtn=移除加密檔案庫
|
||||
|
||||
# Change Password
|
||||
changepassword.title=變更密碼
|
||||
changepassword.enterOldPassword=輸入「%s」目前的密碼
|
||||
changepassword.enterOldPassword=輸入 "%s" 目前的密碼
|
||||
changepassword.finalConfirmation=我明白如果忘記密碼將無法存取資料
|
||||
|
||||
# Forget Password
|
||||
@@ -109,13 +109,13 @@ forgetPassword.confirmBtn=忘記密碼
|
||||
|
||||
# Unlock
|
||||
unlock.title=解鎖 %s
|
||||
unlock.passwordPrompt=輸入「%s」的密碼:
|
||||
unlock.passwordPrompt=輸入 "%s" 的密碼:
|
||||
unlock.savePassword=記住密碼
|
||||
unlock.unlockBtn=解鎖
|
||||
## Select
|
||||
unlock.chooseMasterkey.message=未找到Masterkey檔案
|
||||
unlock.chooseMasterkey.message=未找到主金鑰文件
|
||||
unlock.chooseMasterkey.description=無法在其預期位置找到此加密檔案庫的主密鑰檔案。請手動選擇密鑰文件。
|
||||
unlock.chooseMasterkey.filePickerTitle=選擇主金鑰檔案
|
||||
unlock.chooseMasterkey.filePickerTitle=选择主金鑰文件
|
||||
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator 主密鑰
|
||||
## Success
|
||||
unlock.success.message=解鎖成功
|
||||
@@ -123,6 +123,10 @@ 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.generic=你選擇使用自訂的路徑來掛載此加密庫,但是掛載失敗,原因: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=無法讀取裝置金鑰
|
||||
hub.noKeychain.description=需要由鑰匙圈保護的裝置金鑰才能解鎖Hub加密檔案庫。請先至偏好設定中啟用「%s」並選擇一組鑰匙圈。
|
||||
@@ -150,9 +154,8 @@ hub.registerFailed.description=命名過程中出現錯誤。更多詳情,請
|
||||
hub.unauthorized.message=拒絕存取
|
||||
hub.unauthorized.description=您的設備權限尚未允許存取檔案庫,請聯絡檔案庫擁有者
|
||||
### License Exceeded
|
||||
hub.licenseExceeded.message=软件許可已滿額
|
||||
hub.licenseExceeded.description=Cryptomator Hub已授權的使用者已超過軟件許可的數量。請聯絡您的Hub管理員升級許可證或聯絡檔案庫管理員移除用戶。
|
||||
|
||||
hub.invalidLicense.message=Hub 授權無效
|
||||
hub.invalidLicense.description=此 Cryptomator Hub 實例授權無效,請聯繫管理員升級或續訂授權。
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@@ -161,7 +164,7 @@ lock.forced.description=仍有未完成的操作或開啟中的檔案以致無
|
||||
lock.forced.retryBtn=重試
|
||||
lock.forced.forceBtn=強制鎖定
|
||||
## Failure
|
||||
lock.fail.message=鎖定加密檔案庫失敗。
|
||||
lock.fail.message=鎖定加密檔案庫失敗
|
||||
lock.fail.description=加密檔案庫 "%s" 無法被鎖定。請確保未存檔的工作已儲存在別的地方以及重要的讀寫工作都已經完成。請強制結束 Cryptomator 以關閉加密檔案庫。
|
||||
|
||||
# Migration
|
||||
@@ -171,11 +174,12 @@ migration.start.header=升級加密檔案庫
|
||||
migration.start.text=為了在此新版的Cryptomator裡打開"%s"檔案庫,該檔案庫需要升級到新的格式。在此操作之前,您需要知道以下事項:
|
||||
migration.start.remarkUndone=此項升級無法還原。
|
||||
migration.start.remarkVersions=舊版的Cryptomator無法打開升級後的文库。
|
||||
migration.start.remarkCanRun=請確認所有可存取此加密庫的裝置都可以運行這個版本的Cryptomator.
|
||||
migration.start.remarkSynced=您必須確保您的檔案庫在升級之前已經完整地同步到此設備及您的其他設備。
|
||||
migration.start.confirm=我已閱讀並理解上述資訊
|
||||
## Run
|
||||
migration.run.enterPassword=輸入 "%s" 的密碼
|
||||
migration.run.startMigrationBtn=升級加密檔案庫
|
||||
migration.run.startMigrationBtn=迁移加密檔案庫
|
||||
migration.run.progressHint=這可能需要一點時間…
|
||||
## Success
|
||||
migration.success.nextStepsInstructions=已成功升級 "%s"。\n您現在可以解鎖您的加密檔案庫了。
|
||||
@@ -196,7 +200,7 @@ migration.impossible.moreInfo=此加密檔案庫仍可被舊版本開啟。如
|
||||
## Start
|
||||
health.title=對於"%s"的健康檢查
|
||||
health.intro.header=健康檢查
|
||||
health.intro.text=運行狀況檢查用於檢測並修復加密檔案庫內部結構中的問題。請記住:
|
||||
health.intro.text=運行狀況檢查包含一系列用於檢測並修復加密檔案庫內部結構中的問題的檢查。請記住:
|
||||
health.intro.remarkSync=確保所有設備完全同步,這可以解決大部分問題。
|
||||
health.intro.remarkFix=並非所有問題都可以解決。
|
||||
health.intro.remarkBackup=如果數據已損壞,則只有備份才有幫助。
|
||||
@@ -224,11 +228,16 @@ 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.severityFilter.crit=危急
|
||||
health.result.severityTip.good=程度: 良好\n加密庫結構完整
|
||||
health.result.severityTip.info=程度: 詳細\n加密庫結構完整,建議修復。
|
||||
health.result.severityTip.warn=嚴重性:警告\n檔案庫結構被破壞,強烈建議修復。
|
||||
health.result.severityTip.crit=嚴重性:嚴重\n檔案庫結構被破壞,數據已經丟失。
|
||||
health.result.fixStateFilter.all=修復狀態:全部
|
||||
health.result.fixStateFilter.all=修復狀態 - 全部
|
||||
health.result.fixStateFilter.fixable=可修復
|
||||
health.result.fixStateFilter.notFixable=無法修復
|
||||
health.result.fixStateFilter.fixing=修復中…
|
||||
@@ -258,14 +267,23 @@ preferences.interface.theme.light=亮色
|
||||
preferences.interface.unlockThemes=解鎖暗色模式
|
||||
preferences.interface.language=語言 (需要重新啟動)
|
||||
preferences.interface.language.auto=系統預設
|
||||
preferences.interface.interfaceOrientation=界面排版方向
|
||||
preferences.interface.interfaceOrientation=界面方向
|
||||
preferences.interface.interfaceOrientation.ltr=由左至右
|
||||
preferences.interface.interfaceOrientation.rtl=由右至左
|
||||
preferences.interface.showMinimizeButton=顯示最小化按鈕
|
||||
preferences.interface.showTrayIcon=顯示系統工作列圖示 (需要重新啟動)
|
||||
## Volume
|
||||
preferences.volume=虛擬磁碟
|
||||
preferences.volume.type.automatic=自動
|
||||
preferences.volume.type=磁區類別 (須重啟)
|
||||
preferences.volume.type.automatic=自动
|
||||
preferences.volume.docsTooltip=打開文檔以了解有關不同磁區類型更多信息。
|
||||
preferences.volume.tcp.port=TCP 埠
|
||||
preferences.volume.supportedFeatures=所選擇的磁區空間類別支援下列功能
|
||||
preferences.volume.feature.mountAuto=自動選擇掛載路徑
|
||||
preferences.volume.feature.mountToDir=使用自訂資料夾路徑來掛載
|
||||
preferences.volume.feature.mountToDriveLetter=使用硬盤符號來當掛載路徑
|
||||
preferences.volume.feature.mountFlags=自訂掛載選項
|
||||
preferences.volume.feature.readOnly=只讀取掛載 (無法變更)
|
||||
## Updates
|
||||
preferences.updates=更新
|
||||
preferences.updates.currentVersion=目前版本:%s
|
||||
@@ -353,9 +371,9 @@ main.vaultDetail.bytesPerSecondWritten=寫入:
|
||||
main.vaultDetail.throughput.idle=閒置
|
||||
main.vaultDetail.throughput.kbps=%.1f kiB/s
|
||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||
main.vaultDetail.stats=加密檔案庫統計數據
|
||||
main.vaultDetail.stats=加密檔案庫統計
|
||||
main.vaultDetail.locateEncryptedFileBtn=顯示加密檔案路徑
|
||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=從加密檔案庫中選擇一個檔案來顯示相對應的加密檔案路徑
|
||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=選擇要顯示對應加密檔案路徑的加密檔案庫檔案
|
||||
main.vaultDetail.encryptedPathsCopied=路徑已複製到剪貼簿
|
||||
main.vaultDetail.filePickerTitle=從加密檔案庫中選擇檔案
|
||||
### Missing
|
||||
@@ -374,7 +392,7 @@ main.vaultDetail.error.windowTitle=載入加密檔案庫時出錯
|
||||
# Wrong File Alert
|
||||
wrongFileAlert.title=如何加密檔案
|
||||
wrongFileAlert.message=您試著加密這些檔案嗎?
|
||||
wrongFileAlert.description=如果是這樣,Cryptomator 可以在您的檔案總管裡產生一個磁區。
|
||||
wrongFileAlert.description=为此,Cryptomator 在您的檔案管裡器產生一個磁區。
|
||||
wrongFileAlert.instruction.0=請依下列步驟加密檔案:
|
||||
wrongFileAlert.instruction.1=1. 解鎖您的加密檔案庫。
|
||||
wrongFileAlert.instruction.2=2. 點擊「顯示」可在檔案總管中檢視磁區。
|
||||
@@ -389,13 +407,15 @@ vaultOptions.general.autoLock.lockAfterTimePart1=空閒時鎖定
|
||||
vaultOptions.general.autoLock.lockAfterTimePart2=分鐘
|
||||
vaultOptions.general.unlockAfterStartup=啟動 Cryptomator 時解鎖加密檔案庫
|
||||
vaultOptions.general.actionAfterUnlock=成功解鎖後
|
||||
vaultOptions.general.actionAfterUnlock.ignore=不執行任何動作
|
||||
vaultOptions.general.actionAfterUnlock.ignore=無動作
|
||||
vaultOptions.general.actionAfterUnlock.reveal=顯示磁碟
|
||||
vaultOptions.general.actionAfterUnlock.ask=詢問
|
||||
vaultOptions.general.startHealthCheckBtn=開始健康檢查
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=掛載
|
||||
vaultOptions.mount.info=選項會依據掛載磁區類別而變更
|
||||
vaultOptions.mount.linkToPreferences=開啟虛擬硬盤設置
|
||||
vaultOptions.mount.readonly=唯讀
|
||||
vaultOptions.mount.customMountFlags=自訂掛載參數
|
||||
vaultOptions.mount.winDriveLetterOccupied=已使用
|
||||
@@ -409,7 +429,7 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=選擇一個路徑
|
||||
vaultOptions.masterkey=密碼
|
||||
vaultOptions.masterkey.changePasswordBtn=變更密碼
|
||||
vaultOptions.masterkey.forgetSavedPasswordBtn=清除已存密碼
|
||||
vaultOptions.masterkey.recoveryKeyExplanation=在您遺失密碼時,僅能以復原金鑰恢復存取。
|
||||
vaultOptions.masterkey.recoveryKeyExplanation=如果您遺失密碼,恢復金鑰是您唯一恢復對保險箱存取權限的方法。
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=顯示復原金鑰
|
||||
vaultOptions.masterkey.recoverPasswordBtn=重設密碼
|
||||
|
||||
@@ -417,16 +437,18 @@ vaultOptions.masterkey.recoverPasswordBtn=重設密碼
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
recoveryKey.display.title=顯示恢復金鑰
|
||||
recoveryKey.create.message=需要密碼
|
||||
recoveryKey.create.description=請輸入您的密碼以顯示 "%s" 的復原金鑰:
|
||||
recoveryKey.display.description=下方的復原金鑰可用來恢復 "%s" 的存取能力:
|
||||
recoveryKey.display.StorageHints=請把它保存在非常安全的地方,例如:\n • 使用密碼管理器保管\n • 存在 USB 隨身碟裡\n • 印在紙上
|
||||
recoveryKey.create.message=需要填寫密碼
|
||||
recoveryKey.create.description=請輸入您的密碼以顯示 "%s" 的恢復金鑰:
|
||||
recoveryKey.display.description=下方的恢復金鑰可用來恢復 "%s" 的存取能力:
|
||||
recoveryKey.display.StorageHints=請把它保存在安全的地方,例如:\n • 使用密碼管理器保管\n • 存在 USB 隨身碟裡\n • 列印在紙上
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=重設密碼
|
||||
recoveryKey.recover.prompt=輸入 "%s" 的復原金鑰:
|
||||
recoveryKey.recover.validKey=這是有效的復原金鑰
|
||||
recoveryKey.printout.heading=Cryptomator 復原金鑰\n"%s"\n
|
||||
recoveryKey.recover.prompt=輸入 "%s" 的恢復金鑰:
|
||||
recoveryKey.recover.correctKey=這是一個正確的恢復金鑰
|
||||
recoveryKey.recover.wrongKey=此恢復金鑰屬於不同的加密檔案庫
|
||||
recoveryKey.recover.invalidKey=這是一個無效的恢復金鑰
|
||||
recoveryKey.printout.heading=Cryptomator 恢復金鑰\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=重設
|
||||
### Recovery Key Password Reset Success
|
||||
@@ -437,7 +459,7 @@ recoveryKey.recover.resetSuccess.description=您可以用新設的密碼解鎖
|
||||
newPassword.promptText=輸入新密碼
|
||||
newPassword.reenterPassword=確認新密碼
|
||||
newPassword.passwordsMatch=密碼相符!
|
||||
newPassword.passwordsDoNotMatch=密碼不符
|
||||
newPassword.passwordsDoNotMatch=密碼不符!
|
||||
passwordStrength.messageLabel.tooShort=密碼長度至少需 %d 個字元
|
||||
passwordStrength.messageLabel.0=非常弱
|
||||
passwordStrength.messageLabel.1=弱
|
||||
@@ -446,12 +468,12 @@ passwordStrength.messageLabel.3=強
|
||||
passwordStrength.messageLabel.4=非常強
|
||||
|
||||
# Quit
|
||||
quit.title=結束應用程式
|
||||
quit.message=仍有已啟用的檔案庫
|
||||
quit.description=請確認結束動作。Cryptomator將會鎖定所有已開啟的檔案庫以防止資料流失。
|
||||
quit.title=結束程式
|
||||
quit.message=仍有已解鎖的檔案庫
|
||||
quit.description=請確認結束動作。Cryptomator將會適時地鎖定所有已解鎖的檔案庫以防止資料流失。
|
||||
quit.lockAndQuitBtn=鎖定並離開
|
||||
|
||||
# Forced Quit
|
||||
quit.forced.message=某些檔案庫無法鎖定
|
||||
quit.forced.description=仍有未完成的作業或開啟中的檔案以致無法鎖定。您可以強制鎖定這個檔案庫,不過中斷讀寫可能會導致資料遺失或未被儲存。
|
||||
quit.forced.description=因為進行中的操作或已經打開的檔案被阻止,無法鎖定加密檔案庫。您可以強制鎖定其餘的加密檔案庫,但請注意,中斷讀寫可能導致未保存的數據丟失。
|
||||
quit.forced.forceAndQuitBtn=強制並結束
|
||||
@@ -38,7 +38,7 @@
|
||||
<!-- Apache Commons-cli false positives below -->
|
||||
<suppress>
|
||||
<notes><![CDATA[
|
||||
False positive for commons-cli due, see https://github.com/jeremylong/DependencyCheck/pull/4148
|
||||
False positive for commons-cli due, see https://github.com/jeremylong/DependencyCheck/pull/4148
|
||||
]]></notes>
|
||||
<gav regex="true">^commons\-cli:commons\-cli:.*$</gav>
|
||||
<cpe>cpe:/a:apache:james</cpe>
|
||||
@@ -46,4 +46,22 @@
|
||||
<cpe>cpe:/a:spirit-project:spirit</cpe>
|
||||
<cpe>cpe:/a:apache:commons_net</cpe>
|
||||
</suppress>
|
||||
|
||||
<suppress>
|
||||
<notes><![CDATA[
|
||||
False positive for jackson-core-2.13.4.jar, see https://github.com/jeremylong/DependencyCheck/issues/5502
|
||||
]]></notes>
|
||||
<packageUrl regex="true">^pkg:maven/com\.fasterxml\.jackson\.core/jackson\-core@.*$</packageUrl>
|
||||
<cve>CVE-2022-45688</cve>
|
||||
</suppress>
|
||||
|
||||
<suppress>
|
||||
<notes><![CDATA[
|
||||
Suppress false positive, because com.google.common.io.Files.getTempDir() is not used
|
||||
]]></notes>
|
||||
<packageUrl regex="true">^pkg:maven/com\.google\.guava/guava@.*$</packageUrl>
|
||||
<vulnerabilityName>CVE-2020-8908</vulnerabilityName>
|
||||
<cve>CVE-2020-8908</cve>
|
||||
</suppress>
|
||||
|
||||
</suppressions>
|
||||
Reference in New Issue
Block a user