Merge branch 'develop' into release/1.6.0

# Conflicts:
#	pom.xml
This commit is contained in:
Armin Schrenk
2021-09-22 16:36:36 +02:00
108 changed files with 2543 additions and 944 deletions

View File

@@ -2,6 +2,11 @@ name: Installers and Release
on:
workflow_dispatch:
inputs:
semver:
description: 'SemVer'
required: true
default: '0.99.99-SNAPSHOT'
push:
tags: # see https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet
- '[0-9]+.[0-9]+.[0-9]+'
@@ -61,7 +66,7 @@ jobs:
target/libs
target/mods
target/LICENSE.txt
target/${{ matrix.launcher }}
target/launcher*
if-no-files-found: error
#
@@ -71,8 +76,9 @@ jobs:
name: Determine Version Metadata
runs-on: ubuntu-latest
outputs:
versionStr: ${{ steps.versions.outputs.versionStr }}
versionNum: ${{ steps.versions.outputs.versionNum }}
semVerNum: ${{ steps.versions.outputs.semVerNum }}
semVerStr: ${{ steps.versions.outputs.semVerStr }}
ppaVerStr: ${{ steps.versions.outputs.ppaVerStr }}
revNum: ${{ steps.versions.outputs.revNum }}
steps:
- uses: actions/checkout@v2
@@ -81,14 +87,19 @@ jobs:
- id: versions
run: |
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION_NUM=`echo ${GITHUB_REF##*/} | sed -E 's/([0-9]+\.[0-9]+\.[0-9]+).*/\1/'`
echo "::set-output name=versionStr::${GITHUB_REF##*/}"
echo "::set-output name=versionNum::${VERSION_NUM}"
SEM_VER_STR=${GITHUB_REF##*/}
else
echo "::set-output name=versionStr::SNAPSHOT"
echo "::set-output name=versionNum::99.0.0"
SEM_VER_STR=${{ github.event.inputs.semver }}
fi
echo "::set-output name=revNum::`git rev-list --count HEAD`"
SEM_VER_NUM=`echo ${SEM_VER_STR} | sed -E 's/([0-9]+\.[0-9]+\.[0-9]+).*/\1/'`
REVCOUNT=`git rev-list --count HEAD`
echo "::set-output name=semVerStr::${SEM_VER_STR}"
echo "::set-output name=semVerNum::${SEM_VER_NUM}"
echo "::set-output name=ppaVerStr::${SEM_VER_STR/-/\~}-${REVCOUNT}"
echo "::set-output name=revNum::${REVCOUNT}"
- uses: rubenesp87/semver-validation-action@0.0.6
with:
version: ${{ steps.versions.outputs.semVerStr }}
#
# Application Directory
@@ -104,9 +115,10 @@ jobs:
- os: ubuntu-latest
profile: linux
jpackageoptions: >
--app-version "${{ needs.metadata.outputs.versionNum }}.${{ needs.metadata.outputs.revNum }}"
--app-version "${{ needs.metadata.outputs.semVerNum }}.${{ needs.metadata.outputs.revNum }}"
--java-options "-Dfile.encoding=\"utf-8\""
--java-options "-Dcryptomator.logDir=\"~/.local/share/Cryptomator/logs\""
--java-options "-Dcryptomator.pluginDir=\"~/.local/share/Cryptomator/plugins\""
--java-options "-Dcryptomator.settingsPath=\"~/.config/Cryptomator/settings.json:~/.Cryptomator/settings.json\""
--java-options "-Dcryptomator.ipcSocketPath=\"~/.config/Cryptomator/ipc.socket\""
--java-options "-Dcryptomator.mountPointsDir=\"~/.local/share/Cryptomator/mnt\""
@@ -116,9 +128,10 @@ jobs:
- os: windows-latest
profile: win
jpackageoptions: >
--app-version "${{ needs.metadata.outputs.versionNum }}.${{ needs.metadata.outputs.revNum }}"
--app-version "${{ needs.metadata.outputs.semVerNum }}.${{ needs.metadata.outputs.revNum }}"
--java-options "-Dfile.encoding=\"utf-8\""
--java-options "-Dcryptomator.logDir=\"~/AppData/Roaming/Cryptomator\""
--java-options "-Dcryptomator.pluginDir=\"~/AppData/Roaming/Cryptomator/Plugins\""
--java-options "-Dcryptomator.settingsPath=\"~/AppData/Roaming/Cryptomator/settings.json\""
--java-options "-Dcryptomator.ipcSocketPath=\"~/AppData/Roaming/Cryptomator/ipc.socket\""
--java-options "-Dcryptomator.keychainPath=\"~/AppData/Roaming/Cryptomator/keychain.json\""
@@ -130,9 +143,10 @@ jobs:
- os: macos-latest
profile: mac
jpackageoptions: >
--app-version "${{ needs.metadata.outputs.versionNum }}"
--app-version "${{ needs.metadata.outputs.semVerNum }}"
--java-options "-Dfile.encoding=\"utf-8\""
--java-options "-Dcryptomator.logDir=\"~/Library/Logs/Cryptomator\""
--java-options "-Dcryptomator.pluginDir=\"~/Library/Application Support/Cryptomator/Plugins\""
--java-options "-Dcryptomator.settingsPath=\"~/Library/Application Support/Cryptomator/settings.json\""
--java-options "-Dcryptomator.ipcSocketPath=\"~/Library/Application Support/Cryptomator/ipc.socket\""
--java-options "-Dcryptomator.showTrayIcon=true"
@@ -175,6 +189,7 @@ jobs:
--copyright "(C) 2016 - 2021 Skymatic GmbH"
--java-options "-Xss5m"
--java-options "-Xmx256m"
--java-options "-Dcryptomator.appVersion=\"${{ needs.metadata.outputs.semVerStr }}\""
${{ matrix.jpackageoptions }}
- name: Create appdir.tar
run: tar -cvf appdir.tar appdir
@@ -185,6 +200,69 @@ jobs:
path: appdir.tar
if-no-files-found: error
#
# Linux PPA Source Package
#
ppa:
name: Upload source package to PPA
needs: [buildkit, metadata]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install build tools
run: |
sudo apt-get update
sudo apt-get install debhelper devscripts dput
- name: Download linux-buildkit
uses: actions/download-artifact@v2
with:
name: linux-buildkit
path: pkgdir
- name: create orig.tar.gz
run: tar -cJf cryptomator_${{ needs.metadata.outputs.ppaVerStr }}.orig.tar.xz -C pkgdir .
- name: patch and rename pkgdir
run: |
cp -r dist/linux/debian/ pkgdir
cp -r dist/linux/resources/ pkgdir
export RFC2822_TIMESTAMP=`date --rfc-2822`
envsubst '${VERSION_STR} ${VERSION_NUM} ${REVISION_NUM}' < dist/linux/debian/rules > pkgdir/debian/rules
envsubst '${VERSION_STR}' < dist/linux/debian/org.cryptomator.Cryptomator.desktop > pkgdir/debian/org.cryptomator.Cryptomator.desktop
envsubst '${PPA_VERSION} ${RFC2822_TIMESTAMP}' < dist/linux/debian/changelog > pkgdir/debian/changelog
find . -name "*.jar" >> pkgdir/debian/source/include-binaries
mv pkgdir cryptomator_${{ needs.metadata.outputs.ppaVerStr }}
env:
VERSION_STR: ${{ needs.metadata.outputs.semVerStr }}
VERSION_NUM: ${{ needs.metadata.outputs.semVerNum }}
REVISION_NUM: ${{ needs.metadata.outputs.revNum }}
PPA_VERSION: ${{ needs.metadata.outputs.ppaVerStr }}-0ppa1
- name: import gpg key 615D449FE6E6A235
run: |
echo "${GPG_PRIVATE_KEY}" | gpg --batch --quiet --import
echo "${GPG_PASSPHRASE}" | gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --dry-run --sign dist/linux/debian/rules
env:
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
- name: debuild
run: debuild -S -sa -d
env:
DEBSIGN_PROGRAM: gpg --batch --pinentry-mode loopback
DEBSIGN_KEYID: 615D449FE6E6A235
working-directory: cryptomator_${{ needs.metadata.outputs.ppaVerStr }}
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: linux-deb-source-package
path: |
cryptomator_*.dsc
cryptomator_*.orig.tar.xz
cryptomator_*.debian.tar.xz
cryptomator_*_source.changes
cryptomator_*_source.buildinfo
- name: dput to beta repo
run: dput ppa:sebastian-stenzel/cryptomator-beta cryptomator_${PPA_VERSION}_source.changes
env:
PPA_VERSION: ${{ needs.metadata.outputs.ppaVerStr }}-0ppa1
#
# Linux Cryptomator.AppImage
#
@@ -233,7 +311,7 @@ jobs:
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
- name: Build AppImage
run: >
./squashfs-root/AppRun Cryptomator.AppDir cryptomator-${{ needs.metadata.outputs.versionStr }}-x86_64.AppImage
./squashfs-root/AppRun Cryptomator.AppDir cryptomator-${{ needs.metadata.outputs.semVerStr }}-x86_64.AppImage
-u 'gh-releases-zsync|cryptomator|cryptomator|latest|cryptomator-*-x86_64.AppImage.zsync'
--sign --sign-key=615D449FE6E6A235 --sign-args="--batch --pinentry-mode loopback"
- name: Upload AppImage
@@ -263,10 +341,11 @@ jobs:
- name: Patch Cryptomator.app
run: |
mv appdir/Cryptomator.app Cryptomator.app
mv dist/mac/resources/Cryptomator-Vault.icns Cryptomator.app/Contents/Resources/
sed -i '' "s|###BUNDLE_SHORT_VERSION_STRING###|${VERSION_NO}|g" Cryptomator.app/Contents/Info.plist
sed -i '' "s|###BUNDLE_VERSION###|${REVISION_NO}|g" Cryptomator.app/Contents/Info.plist
env:
VERSION_NO: ${{ needs.metadata.outputs.versionNum }}
VERSION_NO: ${{ needs.metadata.outputs.semVerNum }}
REVISION_NO: ${{ needs.metadata.outputs.revNum }}
- name: Install codesign certificate
env:
@@ -368,7 +447,7 @@ jobs:
--icon ".VolumeIcon.icns" 512 758
Cryptomator-${VERSION_NO}.dmg dmg
env:
VERSION_NO: ${{ needs.metadata.outputs.versionNum }}
VERSION_NO: ${{ needs.metadata.outputs.semVerNum }}
- name: Install notarization credentials
env:
NOTARIZATION_KEYCHAIN_PROFILE: ${{ secrets.MACOS_NOTARIZATION_KEYCHAIN_PROFILE }}
@@ -397,6 +476,8 @@ jobs:
- name: Clean up notarization credentials
if: ${{ always() }}
run: security delete-keychain $RUNNER_TEMP/notarization.keychain-db
- name: Add possible alpha/beta tags to installer name
run: mv Cryptomator-*.dmg Cryptomator-${{ needs.metadata.outputs.semVerStr }}.dmg
- name: Upload mac-dmg
uses: actions/upload-artifact@v2
with:
@@ -449,12 +530,11 @@ jobs:
--name Cryptomator
--vendor "Skymatic GmbH"
--copyright "(C) 2016 - 2021 Skymatic GmbH"
--app-version "${{ needs.metadata.outputs.versionNum }}"
--app-version "${{ needs.metadata.outputs.semVerNum }}"
--win-menu
--win-dir-chooser
--resource-dir dist/win/resources
--license-file dist/win/resources/license.rtf
--file-associations dist/win/resources/FAencryptedData.properties
--file-associations dist/win/resources/FAvaultFile.properties
env:
JP_WIXWIZARD_RESOURCES: ${{ github.workspace }}/dist/win/resources # requires abs path, used in resources/main.wxs
@@ -467,6 +547,8 @@ jobs:
description: Cryptomator Installer
timestampUrl: 'http://timestamp.digicert.com'
folder: installer
- name: Add possible alpha/beta tags to installer name
run: mv installer/Cryptomator-*.msi installer/Cryptomator-${{ needs.metadata.outputs.semVerStr }}.msi
- name: Upload win-msi
uses: actions/upload-artifact@v2
with:
@@ -482,10 +564,14 @@ jobs:
runs-on: ubuntu-latest
needs: [metadata,linux-appimage,mac-dmg,win-msi]
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'cryptomator/cryptomator'
env:
APPIMAGE_SHA256_MSG: undefined
DMG_SHA256_MSG: undefined
MSI_SHA256_MSG: undefined
steps:
- uses: actions/checkout@v2
- name: Create tarball
run: git archive --prefix="cryptomator-${{ needs.metadata.outputs.versionStr }}/" -o "cryptomator-${{ needs.metadata.outputs.versionStr }}.tar.gz" ${{ github.ref }}
run: git archive --prefix="cryptomator-${{ needs.metadata.outputs.semVerStr }}/" -o "cryptomator-${{ needs.metadata.outputs.semVerStr }}.tar.gz" ${{ github.ref }}
- name: Download linux appimage
uses: actions/download-artifact@v2
with:
@@ -507,6 +593,14 @@ jobs:
env:
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
- name: Compute SHA256 checksums of release artifacts # sha256sum is split on the whitespace with sed and reorderd. env keys are file name extensions in uppercase
run: |
for FILE in `find . -name "*.AppImage" -o -name "*.dmg" -o -name "*.msi" -o -name "*.zsync" -o -name "*.tar.gz"`; do
CHECKSUM_MSG=$(sha256sum ${FILE})
VALUE=$(echo ${CHECKSUM_MSG} | sed 's/\([0-9,a-f]\{64\}\)[[:blank:]]\([Cc]ryptomator-.*$\)/\2: `\1`/' )
KEY=$(echo ${CHECKSUM_MSG} | sed 's/.*[[:blank:]].*\.\(.*$\)/\1/')
echo "{${KEY^^}_SHA256_MSG}={${VALUE}} >> $GITHUB_ENV
done
- name: Create release draft
uses: softprops/action-gh-release@v1
with:
@@ -527,3 +621,8 @@ jobs:
## Misc
---
:scroll: A complete list of closed issues is available [here](LINK)
---
Checksums of release artifacts:
* ${{ env.APPIMAGE_SHA256_MSG}}
* ${{ env.DMG_SHA256_MSG}}
* ${{ env.MSI_SHA_256_MSG}}

View File

@@ -2,7 +2,7 @@
<configuration default="false" name="Cryptomator Linux" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
<module name="cryptomator" />
<option name="VM_PARAMETERS" value="-Djdk.gtk.version=2 -Duser.language=en -Dcryptomator.settingsPath=&quot;~/.config/Cryptomator/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;~/.config/Cryptomator/ipc.socket&quot; -Dcryptomator.logDir=&quot;~/.local/share/Cryptomator/logs&quot; -Dcryptomator.mountPointsDir=&quot;~/.local/share/Cryptomator/mnt&quot; -Dcryptomator.showTrayIcon=true -Xss20m -Xmx512m" />
<option name="VM_PARAMETERS" value="-Djdk.gtk.version=2 -Duser.language=en -Dcryptomator.settingsPath=&quot;~/.config/Cryptomator/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;~/.config/Cryptomator/ipc.socket&quot; -Dcryptomator.logDir=&quot;~/.local/share/Cryptomator/logs&quot; -Dcryptomator.pluginDir=&quot;~/.local/share/Cryptomator/plugins&quot; -Dcryptomator.mountPointsDir=&quot;~/.local/share/Cryptomator/mnt&quot; -Dcryptomator.showTrayIcon=true -Xss20m -Xmx512m" />
<method v="2">
<option name="Make" enabled="true" />
</method>

View File

@@ -2,7 +2,7 @@
<configuration default="false" name="Cryptomator Linux Dev" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
<module name="cryptomator" />
<option name="VM_PARAMETERS" value="-Djdk.gtk.version=2 -Duser.language=en -Dcryptomator.settingsPath=&quot;~/.config/Cryptomator-Dev/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;~/.config/Cryptomator-Dev/ipc.socket&quot; -Dcryptomator.logDir=&quot;~/.local/share/Cryptomator-Dev/logs&quot; -Dcryptomator.mountPointsDir=&quot;~/.local/share/Cryptomator-Dev/mnt&quot; -Dcryptomator.showTrayIcon=true -Dfuse.experimental=&quot;true&quot; -Xss20m -Xmx512m" />
<option name="VM_PARAMETERS" value="-Djdk.gtk.version=2 -Duser.language=en -Dcryptomator.settingsPath=&quot;~/.config/Cryptomator-Dev/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;~/.config/Cryptomator-Dev/ipc.socket&quot; -Dcryptomator.logDir=&quot;~/.local/share/Cryptomator-Dev/logs&quot; -Dcryptomator.pluginDir=&quot;~/.local/share/Cryptomator-Dev/plugins&quot; -Dcryptomator.mountPointsDir=&quot;~/.local/share/Cryptomator-Dev/mnt&quot; -Dcryptomator.showTrayIcon=true -Dfuse.experimental=&quot;true&quot; -Xss20m -Xmx512m" />
<method v="2">
<option name="Make" enabled="true" />
</method>

View File

@@ -2,7 +2,7 @@
<configuration default="false" name="Cryptomator Windows" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
<module name="cryptomator" />
<option name="VM_PARAMETERS" value="-Duser.language=en -Dcryptomator.settingsPath=&quot;~/AppData/Roaming/Cryptomator/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;~/AppData/Roaming/Cryptomator/ipc.socket&quot; -Dcryptomator.logDir=&quot;~/AppData/Roaming/Cryptomator&quot; -Dcryptomator.keychainPath=&quot;~/AppData/Roaming/Cryptomator/keychain.json&quot; -Dcryptomator.mountPointsDir=&quot;~/Cryptomator&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m" />
<option name="VM_PARAMETERS" value="-Duser.language=en -Dcryptomator.settingsPath=&quot;~/AppData/Roaming/Cryptomator/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;~/AppData/Roaming/Cryptomator/ipc.socket&quot; -Dcryptomator.logDir=&quot;~/AppData/Roaming/Cryptomator&quot; -Dcryptomator.pluginDir=&quot;~/AppData/Roaming/Cryptomator/Plugins&quot; -Dcryptomator.keychainPath=&quot;~/AppData/Roaming/Cryptomator/keychain.json&quot; -Dcryptomator.mountPointsDir=&quot;~/Cryptomator&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m" />
<method v="2">
<option name="Make" enabled="true" />
</method>

View File

@@ -2,7 +2,7 @@
<configuration default="false" name="Cryptomator Windows Dev" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
<module name="cryptomator" />
<option name="VM_PARAMETERS" value="-Duser.language=en -Dcryptomator.settingsPath=&quot;~/AppData/Roaming/Cryptomator-Dev/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;~/AppData/Roaming/Cryptomator-Dev/ipc.socket&quot; -Dcryptomator.logDir=&quot;~/AppData/Roaming/Cryptomator-Dev&quot; -Dcryptomator.keychainPath=&quot;~/AppData/Roaming/Cryptomator-Dev/keychain.json&quot; -Dcryptomator.mountPointsDir=&quot;~/Cryptomator-Dev&quot; -Dfuse.experimental=&quot;true&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m" />
<option name="VM_PARAMETERS" value="-Duser.language=en -Dcryptomator.settingsPath=&quot;~/AppData/Roaming/Cryptomator-Dev/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;~/AppData/Roaming/Cryptomator-Dev/ipc.socket&quot; -Dcryptomator.logDir=&quot;~/AppData/Roaming/Cryptomator-Dev&quot; -Dcryptomator.pluginDir=&quot;~/AppData/Roaming/Cryptomator-Dev/Plugins&quot; -Dcryptomator.keychainPath=&quot;~/AppData/Roaming/Cryptomator-Dev/keychain.json&quot; -Dcryptomator.mountPointsDir=&quot;~/Cryptomator-Dev&quot; -Dfuse.experimental=&quot;true&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m" />
<method v="2">
<option name="Make" enabled="true" />
</method>

View File

@@ -5,7 +5,7 @@
</envs>
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
<module name="cryptomator" />
<option name="VM_PARAMETERS" value="-Duser.language=en -Dcryptomator.settingsPath=&quot;~/Library/Application Support/Cryptomator/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;~/Library/Application Support/Cryptomator/ipc.socket&quot; -Dcryptomator.logDir=&quot;~/Library/Logs/Cryptomator&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m -ea" />
<option name="VM_PARAMETERS" value="-Duser.language=en -Dcryptomator.settingsPath=&quot;~/Library/Application Support/Cryptomator/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;~/Library/Application Support/Cryptomator/ipc.socket&quot; -Dcryptomator.logDir=&quot;~/Library/Logs/Cryptomator&quot; -Dcryptomator.pluginDir=&quot;~/Library/Application Support/Cryptomator/Plugins&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m -ea" />
<method v="2">
<option name="Make" enabled="true" />
</method>

View File

@@ -5,7 +5,7 @@
</envs>
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
<module name="cryptomator" />
<option name="VM_PARAMETERS" value="-Duser.language=en -Dcryptomator.settingsPath=&quot;~/Library/Application Support/Cryptomator-Dev/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;~/Library/Application Support/Cryptomator-Dev/ipc.socket&quot; -Dcryptomator.logDir=&quot;~/Library/Logs/Cryptomator-Dev&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m -ea" />
<option name="VM_PARAMETERS" value="-Duser.language=en -Dcryptomator.settingsPath=&quot;~/Library/Application Support/Cryptomator-Dev/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;~/Library/Application Support/Cryptomator-Dev/ipc.socket&quot; -Dcryptomator.logDir=&quot;~/Library/Logs/Cryptomator-Dev&quot; -Dcryptomator.pluginDir=&quot;~/Library/Application Support/Cryptomator-Dev/Plugins&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m -ea" />
<method v="2">
<option name="Make" enabled="true" />
</method>

5
dist/linux/debian/changelog vendored Normal file
View File

@@ -0,0 +1,5 @@
cryptomator (${PPA_VERSION}) focal; urgency=low
* Full changelog can be found on https://github.com/cryptomator/cryptomator/releases
-- Cryptobot <releases@cryptomator.org> ${RFC2822_TIMESTAMP}

1
dist/linux/debian/compat vendored Normal file
View File

@@ -0,0 +1 @@
10

23
dist/linux/debian/control vendored Normal file
View File

@@ -0,0 +1,23 @@
Source: cryptomator
Maintainer: Cryptobot <releases@cryptomator.org>
Section: utils
Priority: optional
Build-Depends: debhelper (>=10), openjdk-16-jdk
Standards-Version: 4.5.0
Homepage: https://cryptomator.org
Vcs-Git: https://github.com/cryptomator/cryptomator.git
Vcs-browser: https://github.com/cryptomator/cryptomator
Package: cryptomator
Architecture: any
Section: utils
Priority: optional
Depends: ${shlibs:Depends}, ${misc:Depends}, libfuse2, xdg-utils, libjffi-jni
Recommends: gvfs-backends, gvfs-fuse, gnome-keyring
XB-AppName: Cryptomator
XB-Category: Utility;Security;FileTools;
Homepage: https://cryptomator.org
Description: Multi-platform client-side encryption of your cloud files.
Cryptomator provides free client-side AES encryption for your cloud files.
Create encrypted vaults, which get mounted as virtual volumes. Whatever
you save on one of these volumes will end up encrypted inside your vault.

39
dist/linux/debian/copyright vendored Normal file
View File

@@ -0,0 +1,39 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: cryptomator
Upstream-Contact: Cryptomator <info@cryptomator.org>
Source: https://cryptomator.org
Files: *
Copyright: 2016-2021 Skymatic GmbH
License: GPL-3+
Files: debian/org.cryptomator.Cryptomator.appdata.xml
Copyright: 2016-2021 Skymatic GmbH
License: FSFAP
License: GPL-3+
This program is free software: you can redistribute it
and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation, either
version 3 of the License, or (at your option) any later
version.
.
This program is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the GNU General Public License for more
details.
.
You should have received a copy of the GNU General Public
License along with this program. If not, see
<https://www.gnu.org/licenses/>.
.
On Debian systems, the full text of the GNU General Public
License version 3 can be found in the file
`/usr/share/common-licenses/GPL-3'.
License: FSFAP
Copying and distribution of this file, with or without modification, are
permitted in any medium without royalty provided the copyright notice and
this notice are preserved. This file is offered as-is, without any
warranty.

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="application/x-vnd.cryptomator-vault-metadata">
<comment>Cryptomator Vault Metadata</comment>
<glob pattern="*.cryptomator"/>
</mime-type>
</mime-info>

7
dist/linux/debian/cryptomator.install vendored Normal file
View File

@@ -0,0 +1,7 @@
cryptomator usr/lib
debian/cryptomator.sh usr/lib/cryptomator/bin
debian/org.cryptomator.Cryptomator.desktop usr/share/applications
debian/org.cryptomator.Cryptomator.svg usr/share/icons/hicolor/scalable/apps
debian/org.cryptomator.Cryptomator.png usr/share/icons/hicolor/512x512/apps
debian/org.cryptomator.Cryptomator.appdata.xml usr/share/metainfo
debian/cryptomator-vault.xml usr/share/mime/packages

1
dist/linux/debian/cryptomator.links vendored Normal file
View File

@@ -0,0 +1 @@
usr/lib/cryptomator/bin/cryptomator.sh usr/bin/cryptomator

6
dist/linux/debian/cryptomator.sh vendored Normal file
View File

@@ -0,0 +1,6 @@
#!/bin/sh
# fix for https://github.com/cryptomator/cryptomator/issues/1370
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/jni/libjffi-1.2.so
/usr/lib/cryptomator/bin/cryptomator

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2018 Armin Schrenk <armin.schrenk@zoho.eu> -->
<component type="desktop-application">
<id>org.cryptomator.Cryptomator</id>
<metadata_license>FSFAP</metadata_license>
<project_license>GPL-3.0-or-later</project_license>
<name>Cryptomator</name>
<summary>Multi-platform client-side encryption tool optimized for cloud storages</summary>
<description>
<p>
Cryptomator offers multi-platform transparent client-side encryption of your files in the cloud.
</p>
<p>
Features:
<ul>
<li>Works with Dropbox, Google Drive, OneDrive, ownCloud, Nextcloud and any other cloud storage service which synchronizes with a local directory</li>
<li>Open Source means: No backdoors, control is better than trust</li>
<li>Client-side: No accounts, no data shared with any online service</li>
<li>Totally transparent: Just work on the virtual drive as if it were a USB flash drive</li>
<li>AES encryption with 256-bit key length</li>
<li>File names get encrypted</li>
<li>Folder structure gets obfuscated</li>
<li>Use as many vaults in your Dropbox as you want, each having individual passwords</li>
<li>One thousand commits for the security of your data!! :tada:</li>
</ul>
</p>
<p>
Privacy:
<ul>
<li>256-bit keys (unlimited strength policy bundled with native binaries)</li>
<li>Scrypt key derivation</li>
<li>Cryptographically secure random numbers for salts, IVs and the masterkey of course</li>
<li>Sensitive data is wiped from the heap asap</li>
<li>Lightweight: Complexity kills security</li>
</ul>
</p>
<p>
Consistency:
<ul>
<li>HMAC over file contents to recognize changed ciphertext before decryption</li>
<li>I/O operations are transactional and atomic, if the filesystems support it</li>
<li>Each file contains all information needed for decryption (except for the key of course), no common metadata means no Single Point of Failure</li>
</ul>
</p>
</description>
<categories>
<category>Office</category>
<category>Security</category>
<category>FileTools</category>
<category>Java</category>
</categories>
<url type="homepage">http://cryptomator.org</url>
<url type="bugtracker">https://github.com/cryptomator/cryptomator/issues</url>
<url type="faq">https://community.cryptomator.org/c/kb/faq</url>
<url type="help">https://community.cryptomator.org/</url>
<url type="donation">https://cryptomator.org/</url>
<content_rating type="oars-1.0">
<content_attribute id="violence-cartoon">none</content_attribute>
<content_attribute id="drugs-alcohol">none</content_attribute>
<content_attribute id="sex-nudity">none</content_attribute>
<content_attribute id="language-profanity">none</content_attribute>
<content_attribute id="social-info">mild</content_attribute> <!-- update checker conencts to https://api.cryptomator.org/updates/latestVersion.json -->
</content_rating>
<project_group>Cryptomator</project_group>
<provides>
<binary>cryptomator</binary>
</provides>
<launchable type="desktop-id">org.cryptomator.Cryptomator.desktop</launchable>
</component>

View File

@@ -0,0 +1,11 @@
[Desktop Entry]
Name=Cryptomator
Version=${VERSION_STR}
Comment=Cloud Storage Encryption Utility
Exec=/usr/bin/cryptomator %f
Icon=org.cryptomator.Cryptomator
Terminal=false
Type=Application
Categories=Utility;Security;FileTools;
StartupWMClass=org.cryptomator.launcher.Cryptomator
MimeType=application/vnd.cryptomator.encrypted;application/x-vnd.cryptomator.vault-metadata;

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1 @@
<svg width="1110" height="1110" viewBox="0 0 1108.12 940.2" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg"><path d="m552.69 0c-169.1 0-262.45 143.46-262.45 283.52h524.9c0-140.06-105.33-283.52-262.45-283.52z" fill="#cfcfcf"/><path d="m552.69 53.2c-137.37 0-213.21 116.54-213.21 230.32l213.21 24.18 213.21-24.18c0-113.78-85.57-230.32-213.21-230.32z" fill="#585e62"/><path d="m89.8 739.52a20 20 0 0 1 -2.23-39.88 42.8 42.8 0 1 0 -42.22-21.82 20 20 0 0 1 -35 19.31 82.79 82.79 0 1 1 81.76 42.26 21.78 21.78 0 0 1 -2.31.13z" fill="#585e62"/><rect fill="#cfcfcf" height="144.19" rx="49.42" transform="matrix(.8902923 .45538953 -.45538953 .8902923 261.57 -5.69)" width="104.68" x="90.27" y="467.98"/><path d="m149.47 401.27h62.8a0 0 0 0 1 0 0v94.55a31.4 31.4 0 0 1 -31.4 31.4 31.4 31.4 0 0 1 -31.4-31.4v-94.55a0 0 0 0 1 0 0z" fill="#585e62" transform="matrix(.8902923 .45538953 -.45538953 .8902923 231.23 -31.44)"/><circle cx="222.59" cy="387.53" fill="#cfcfcf" r="75.05"/><path d="m258.09 321.8a75.09 75.09 0 0 0 -91.23 14.64 75.06 75.06 0 0 1 51.58 126.06 75.06 75.06 0 0 0 39.65-140.7z" fill="#b1b1b1"/><path d="m1018.31 739.52a22.09 22.09 0 0 1 -2.28-.13 82.8 82.8 0 1 1 81.77-42.26 20 20 0 1 1 -35-19.31 42.8 42.8 0 1 0 -42.23 21.82 20 20 0 0 1 -2.23 39.88z" fill="#585e62"/><rect fill="#cfcfcf" height="144.19" rx="49.42" transform="matrix(-.8902923 .45538953 -.45538953 -.8902923 2071.05 581.27)" width="104.68" x="913.18" y="467.98"/><path d="m927.25 401.27a31.4 31.4 0 0 1 31.4 31.4v94.55a0 0 0 0 1 0 0h-62.8a0 0 0 0 1 0 0v-94.55a31.4 31.4 0 0 1 31.4-31.4z" fill="#585e62" transform="matrix(-.8902923 .45538953 -.45538953 -.8902923 1964.18 455.35)"/><circle cx="885.53" cy="387.53" fill="#cfcfcf" r="75.05"/><path d="m850 321.8a75.08 75.08 0 0 1 91.22 14.64 75.06 75.06 0 0 0 -51.54 126.06 75.05 75.05 0 0 1 -39.68-140.7z" fill="#b1b1b1"/><path d="m248.78 940.2c-36.67 0-67-39.85-75.51-99.15-4.56-31.83-2.26-65.19 6.48-94 9.41-31 25.51-53.59 45.32-63.72a51.72 51.72 0 0 1 23.69-5.84h103.52v262.71z" fill="#585e62"/><path d="m351.43 940.2c-21.26 0-38.85-39.85-43.78-99.15-2.64-31.83-1.31-65.19 3.76-94 5.45-31 14.78-53.59 26.27-63.72 4.39-3.87 9-5.84 13.73-5.84s9.34 2 13.75 5.8l49.7 43.83c17.37 15.32 23.39 64 20.23 102-2.43 29.28-10 52.18-20.19 61.28l-49.69 43.82c-4.44 3.99-9.08 5.98-13.78 5.98z" fill="#585e62"/><path d="m360.57 699 49.65 43.79c11.18 9.9 17.78 47.45 14.78 83.91-2 24.27-7.83 41.95-14.77 48.13l-49.65 43.79c-18.58 16.38-37.79-19.43-42.83-80.07s6-123.1 24.58-139.51c6.15-5.42 12.5-5.04 18.24-.04z" fill="#35393b"/><path d="m850.73 940.2c36.66 0 67-39.85 75.51-99.15 4.56-31.83 2.26-65.19-6.48-94-9.41-31-25.51-53.59-45.32-63.72a51.72 51.72 0 0 0 -23.69-5.84h-103.53v262.71z" fill="#585e62"/><path d="m748.08 940.2c21.26 0 38.85-39.85 43.78-99.15 2.64-31.83 1.31-65.19-3.76-94-5.45-31-14.79-53.59-26.27-63.72-4.4-3.87-9-5.84-13.73-5.84s-9.34 2-13.76 5.8l-49.69 43.83c-17.38 15.32-23.39 64-20.23 102 2.43 29.28 10 52.18 20.19 61.28l49.68 43.82c4.45 3.99 9.09 5.98 13.79 5.98z" fill="#585e62"/><path d="m738.94 699-49.65 43.79c-11.19 9.86-17.8 47.41-14.77 83.87 2 24.27 7.83 41.95 14.77 48.13l49.65 43.79c18.61 16.41 37.78-19.43 42.82-80.07s-6-123.1-24.58-139.51c-6.18-5.38-12.5-5-18.24 0z" fill="#35393b"/><path d="m848.63 451.38a83.62 83.62 0 0 1 -.56-45.6c14.74-53.13 5.06-111.78 5.06-111.78-185.07-57.77-300.13-.48-300.13-.48s-114.79-57.64-300-.45c0 0-9.86 58.64 4.72 111.83a83.69 83.69 0 0 1 -.69 45.59c-5.14 17.57-10.72 44.5-10.77 78.8-.37 249 306 326.08 306 326.08s306.58-76.15 306.95-325.16c0-34.3-5.49-61.21-10.58-78.83z" fill="#cfcfcf"/><path d="m552.34 808.87c-50.72-15.87-261.7-93.25-261.42-279.51 0-29.65 4.89-52.42 9-66.31a128.3 128.3 0 0 0 .91-70c-6.2-22.58-6.9-47.13-6.17-65.29 40.48-10.23 80.2-15.37 118.41-15.32 75.66.12 119.86 21 120.3 21.17l20.39 10.23 19.24-10.32c.11 0 44.36-20.75 120-20.64 38.21.06 77.91 5.32 118.37 15.68.67 18.14-.1 42.71-6.37 65.27a128.33 128.33 0 0 0 .69 70c4 13.91 8.82 36.69 8.77 66.35-.28 187.06-211.26 263.09-262.12 278.69z" fill="#49b04a"/><path d="m610.15 478.76a57.46 57.46 0 1 0 -70.15 55.92l-32.29 135.47 44.67 12.85 44.71-12.71-31.84-135.57a57.46 57.46 0 0 0 44.9-55.96z" fill="#35393b"/><g fill="#49b04a"><path d="m454.94 131.08a60.64 60.64 0 0 0 -60.64 60.64h121.28a60.64 60.64 0 0 0 -60.64-60.64z"/><path d="m642.38 131.08a60.64 60.64 0 0 0 -60.64 60.64h121.26a60.64 60.64 0 0 0 -60.62-60.64z"/><circle cx="483.23" cy="229.43" r="11.52"/><circle cx="528.52" cy="229.43" r="11.52"/><circle cx="573.8" cy="229.43" r="11.52"/><circle cx="619.09" cy="229.43" r="11.52"/></g></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

44
dist/linux/debian/postinst vendored Normal file
View File

@@ -0,0 +1,44 @@
#!/bin/sh
# postinst script for Cryptomator
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <postinst> `configure' <most-recently-configured-version>
# * <old-postinst> `abort-upgrade' <new version>
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
# <new-version>
# * <postinst> `abort-remove'
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
# <failed-install-package> <version> `removing'
# <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
case "$1" in
configure)
echo Adding shortcut to the menu
if [ ! -d "/usr/share/desktop-directories" ]; then
mkdir -p /usr/share/desktop-directories
fi
xdg-desktop-menu install --novendor /usr/share/applications/org.cryptomator.Cryptomator.desktop
xdg-mime install /usr/share/mime/packages/cryptomator-vault.xml
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#
exit 0

42
dist/linux/debian/prerm vendored Normal file
View File

@@ -0,0 +1,42 @@
#!/bin/sh
# prerm script for Cryptomator
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <prerm> `remove'
# * <old-prerm> `upgrade' <new-version>
# * <new-prerm> `failed-upgrade' <old-version>
# * <conflictor's-prerm> `remove' `in-favour' <package> <new-version>
# * <deconfigured's-prerm> `deconfigure' `in-favour'
# <package-being-installed> <version> `removing'
# <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
case "$1" in
remove|upgrade|deconfigure)
echo Removing shortcut
xdg-desktop-menu uninstall --novendor /usr/share/applications/org.cryptomator.Cryptomator.desktop
xdg-mime uninstall /usr/share/mime/packages/cryptomator-vault.xml
;;
failed-upgrade)
;;
*)
echo "prerm called with unknown argument \`$1'" >&2
exit 1
;;
esac
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#
exit 0

53
dist/linux/debian/rules vendored Executable file
View File

@@ -0,0 +1,53 @@
#!/usr/bin/make -f
# -*- makefile -*-
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
%:
dh $@
override_dh_auto_clean:
rm -rf runtime
rm -rf cryptomator
rm -rf debian/cryptomator
override_dh_auto_build:
jlink \
--output runtime \
--add-modules java.base,java.desktop,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility \
--no-header-files \
--no-man-pages \
--strip-debug \
--compress=2
jpackage \
--type app-image \
--runtime-image runtime \
--input libs \
--module-path mods \
--module org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator \
--dest . \
--name cryptomator \
--vendor "Skymatic GmbH" \
--copyright "(C) 2016 - 2021 Skymatic GmbH" \
--java-options "-Xss5m" \
--java-options "-Xmx256m" \
--java-options "-Dfile.encoding=\"utf-8\"" \
--java-options "-Dcryptomator.logDir=\"~/.local/share/Cryptomator/logs\"" \
--java-options "-Dcryptomator.pluginDir=\"~/.local/share/Cryptomator/plugins\"" \
--java-options "-Dcryptomator.settingsPath=\"~/.config/Cryptomator/settings.json:~/.Cryptomator/settings.json\"" \
--java-options "-Dcryptomator.ipcSocketPath=\"~/.config/Cryptomator/ipc.socket\"" \
--java-options "-Dcryptomator.mountPointsDir=\"~/.local/share/Cryptomator/mnt\"" \
--java-options "-Dcryptomator.showTrayIcon=false" \
--java-options "-Dcryptomator.buildNumber=\"ppa-${REVISION_NUM}\"" \
--java-options "-Dcryptomator.appVersion=\"${VERSION_STR}\"" \
--app-version "${VERSION_NUM}.${REVISION_NUM}" \
--resource-dir resources \
--verbose
override_dh_fixperms:
dh_fixperms
chmod +x debian/cryptomator/usr/lib/cryptomator/bin/cryptomator.sh
# override_dh_strip:
# no-op

1
dist/linux/debian/source/format vendored Normal file
View File

@@ -0,0 +1 @@
3.0 (quilt)

View File

@@ -0,0 +1,2 @@
debian/org.cryptomator.Cryptomator.png
resources/cryptomator.png

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -84,7 +84,7 @@
</array>
<key>public.mime-type</key>
<array>
<string>application/x-vnd.cryptomator.vault-metadata</string>
<string>application/vnd.cryptomator.vault</string>
</array>
</dict>
</dict>

BIN
dist/win/resources/Cryptomator-Vault.ico vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

View File

@@ -1,4 +0,0 @@
mime-type=application/vnd.cryptomator.encrypted
extension=c9r,c9s
description=Cryptomator Encrypted Data
icon=resources/Cryptomator.ico

View File

@@ -1,4 +1,4 @@
mime-type=application/vnd.cryptomator.vault
extension=cryptomator
description=Cryptomator Vault File
icon=resources/Cryptomator.ico
icon=resources/Cryptomator-Vault.ico

View File

@@ -47,13 +47,38 @@
<CustomAction Id="JpDisallowDowngrade" Error="!(loc.DowngradeErrorMessage)" />
<?endif?>
<!-- Looking for legacy Cryptomator versions-->
<Property Id="OLDEXEINSTALLER">
<RegistrySearch Id="InnoSetupInstallation" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\Cryptomator_is1" Type="raw" Name="DisplayName" />
</Property>
<!-- Block installation if innosetup entry of Cryptomator is found -->
<!-- TODO: localize -->
<Condition Message="A lower version of [ProductName] is already installed. Uninstall it first and then start the setup again. Setup will now exit.">
<![CDATA[Installed OR NOT OLDEXEINSTALLER]]>
</Condition>
<!-- Standard required root -->
<Directory Id="TARGETDIR" Name="SourceDir"/>
<!-- Non-Opening ProgID -->
<DirectoryRef Id="INSTALLDIR">
<Component Win64="yes" Id="nonStartingProgID" >
<File Id="IconFileForEncryptedData" KeyPath="yes" Source="$(env.JP_WIXWIZARD_RESOURCES)\Cryptomator-Vault.ico" Name="Cryptomator-Vault.ico"></File>
<ProgId Id="Cryptomator.Encrypted.1" Description="Cryptomator Encrypted Data" Icon="IconFileForEncryptedData" IconIndex="0">
<Extension Id="c9r" Advertise="no" ContentType="application/vnd.cryptomator.encrypted">
<MIME ContentType="application/vnd.cryptomator.encrypted" Default="yes"></MIME>
</Extension>
<Extension Id="c9s" Advertise="no" ContentType="application/vnd.cryptomator.encrypted"/>
</ProgId>
</Component>
</DirectoryRef>
<Feature Id="DefaultFeature" Title="!(loc.MainFeatureTitle)" Level="1">
<ComponentGroupRef Id="Shortcuts"/>
<ComponentGroupRef Id="Files"/>
<ComponentGroupRef Id="FileAssociations"/>
<!-- Ref to additional ProgIDs -->
<ComponentRef Id="nonStartingProgID" />
</Feature>
<?ifdef JpInstallDirChooser ?>

View File

@@ -27,14 +27,14 @@
<nonModularGroupIds>com.github.serceman,com.github.jnr,org.ow2.asm,net.java.dev.jna,org.apache.jackrabbit,org.apache.httpcomponents,de.swiesend,org.purejava,com.github.hypfvieh</nonModularGroupIds>
<!-- cryptomator dependencies -->
<cryptomator.cryptofs.version>2.1.0-beta11</cryptomator.cryptofs.version>
<cryptomator.cryptofs.version>2.1.0-beta13</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.0.0-rc1</cryptomator.integrations.version>
<cryptomator.integrations.win.version>1.0.0-beta2</cryptomator.integrations.win.version>
<cryptomator.integrations.mac.version>1.0.0-beta2</cryptomator.integrations.mac.version>
<cryptomator.integrations.linux.version>1.0.0-beta1</cryptomator.integrations.linux.version>
<cryptomator.fuse.version>1.3.2</cryptomator.fuse.version>
<cryptomator.dokany.version>1.3.1</cryptomator.dokany.version>
<cryptomator.webdav.version>1.2.5</cryptomator.webdav.version>
<cryptomator.dokany.version>1.3.2</cryptomator.dokany.version>
<cryptomator.webdav.version>1.2.6</cryptomator.webdav.version>
<!-- 3rd party dependencies -->
<javafx.version>16</javafx.version>

View File

@@ -36,8 +36,10 @@ public class Environment {
LOG.debug("cryptomator.ipcSocketPath: {}", System.getProperty("cryptomator.ipcSocketPath"));
LOG.debug("cryptomator.keychainPath: {}", System.getProperty("cryptomator.keychainPath"));
LOG.debug("cryptomator.logDir: {}", System.getProperty("cryptomator.logDir"));
LOG.debug("cryptomator.pluginDir: {}", System.getProperty("cryptomator.pluginDir"));
LOG.debug("cryptomator.mountPointsDir: {}", System.getProperty("cryptomator.mountPointsDir"));
LOG.debug("cryptomator.minPwLength: {}", System.getProperty("cryptomator.minPwLength"));
LOG.debug("cryptomator.appVersion: {}", System.getProperty("cryptomator.appVersion"));
LOG.debug("cryptomator.buildNumber: {}", System.getProperty("cryptomator.buildNumber"));
LOG.debug("cryptomator.showTrayIcon: {}", System.getProperty("cryptomator.showTrayIcon"));
LOG.debug("fuse.experimental: {}", Boolean.getBoolean("fuse.experimental"));
@@ -63,10 +65,18 @@ public class Environment {
return getPath("cryptomator.logDir").map(this::replaceHomeDir);
}
public Optional<Path> getPluginDir() {
return getPath("cryptomator.pluginDir").map(this::replaceHomeDir);
}
public Optional<Path> getMountPointsDir() {
return getPath("cryptomator.mountPointsDir").map(this::replaceHomeDir);
}
public Optional<String> getAppVersion() {
return Optional.ofNullable(System.getProperty("cryptomator.appVersion"));
}
public Optional<String> getBuildNumber() {
return Optional.ofNullable(System.getProperty("cryptomator.buildNumber"));
}

View File

@@ -0,0 +1,121 @@
package org.cryptomator.common;
import com.google.common.base.Strings;
import com.google.common.base.Throwables;
import java.util.Locale;
import java.util.Objects;
import java.util.stream.IntStream;
import java.util.stream.Stream;
/**
* Holds a throwable and provides a human-readable {@link #toString() three-component string representation}
* aiming to allow documentation and lookup of same or similar errors.
*/
public class ErrorCode {
private final static int A_PRIME = 31;
private final static int SEED = 0xdeadbeef;
public final static String DELIM = ":";
private final static int LATEST_FRAME = 1;
private final static int ALL_FRAMES = Integer.MAX_VALUE;
private final Throwable throwable;
private final Throwable rootCause;
private final int rootCauseSpecificFrames;
private ErrorCode(Throwable throwable, Throwable rootCause, int rootCauseSpecificFrames) {
this.throwable = Objects.requireNonNull(throwable);
this.rootCause = Objects.requireNonNull(rootCause);
this.rootCauseSpecificFrames = rootCauseSpecificFrames;
}
// visible for testing
String methodCode() {
return format(traceCode(rootCause, LATEST_FRAME));
}
// visible for testing
String rootCauseCode() {
return format(traceCode(rootCause, rootCauseSpecificFrames));
}
// visible for testing
String throwableCode() {
return format(traceCode(throwable, ALL_FRAMES));
}
/**
* Produces an error code consisting of three {@value DELIM}-separated components.
* <p>
* A full match of the error code indicates the exact same throwable (to the extent possible
* without hash collisions). A partial match of the first or second component indicates related problems
* with the same root cause.
*
* @return A three-part error code
*/
@Override
public String toString() {
return methodCode() + DELIM + rootCauseCode() + DELIM + throwableCode();
}
/**
* Deterministically creates an error code from the stack trace of the given <code>cause</code>.
* <p>
* The code consists of three parts separated by {@value DELIM}:
* <ul>
* <li>The first part depends on the root cause and the method that threw it</li>
* <li>The second part depends on the root cause and its stack trace</li>
* <li>The third part depends on all the cause hierarchy</li>
* </ul>
* <p>
* Parts may be identical if the cause is the root cause or the root cause has just one single item in its stack trace.
*
* @param throwable The exception
* @return A three-part error code
*/
public static ErrorCode of(Throwable throwable) {
var causalChain = Throwables.getCausalChain(throwable);
if (causalChain.size() > 1) {
var rootCause = causalChain.get(causalChain.size() - 1);
var parentOfRootCause = causalChain.get(causalChain.size() - 2);
var rootSpecificFrames = nonOverlappingFrames(parentOfRootCause.getStackTrace(), rootCause.getStackTrace());
return new ErrorCode(throwable, rootCause, rootSpecificFrames);
} else {
return new ErrorCode(throwable, throwable, ALL_FRAMES);
}
}
private String format(int value) {
// Cut off highest 12 bits (only leave 20 least significant bits) and XOR rest with cutoff
value = (value & 0xfffff) ^ (value >>> 20);
return Strings.padStart(Integer.toString(value, 32).toUpperCase(Locale.ROOT), 4, '0');
}
private int traceCode(Throwable e, int frameCount) {
int result = SEED;
if (e.getCause() != null) {
result = traceCode(e.getCause(), frameCount);
}
result = result * A_PRIME + e.getClass().getName().hashCode();
var stack = e.getStackTrace();
for (int i = 0; i < Math.min(stack.length, frameCount); i++) {
result = result * A_PRIME + stack[i].getClassName().hashCode();
result = result * A_PRIME + stack[i].getMethodName().hashCode();
}
return result;
}
private static int nonOverlappingFrames(StackTraceElement[] frames, StackTraceElement[] enclosingFrames) {
// Compute the number of elements in `frames` not contained in `enclosingFrames` by iterating backwards
// Result should usually be equal to the difference in size of both traces
var i = reverseStream(enclosingFrames).iterator();
return (int) reverseStream(frames).dropWhile(f -> i.hasNext() && i.next().equals(f)).count();
}
private static <T> Stream<T> reverseStream(T[] array) {
return IntStream.rangeClosed(1, array.length).mapToObj(i -> array[array.length - i]);
}
}

View File

@@ -0,0 +1,66 @@
package org.cryptomator.common;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.FileVisitOption;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
@Singleton
public class PluginClassLoader extends URLClassLoader {
private static final Logger LOG = LoggerFactory.getLogger(PluginClassLoader.class);
private static final String NAME = "PluginClassLoader";
private static final String JAR_SUFFIX = ".jar";
@Inject
public PluginClassLoader(Environment env) {
super(NAME, env.getPluginDir().map(PluginClassLoader::findJars).orElse(new URL[0]), PluginClassLoader.class.getClassLoader());
}
private static URL[] findJars(Path path) {
if (!Files.isDirectory(path)) {
return new URL[0];
} else {
try {
var visitor = new JarVisitor();
Files.walkFileTree(path, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, visitor);
return visitor.urls.toArray(URL[]::new);
} catch (IOException e) {
LOG.warn("Failed to scan plugin dir " + path, e);
return new URL[0];
}
}
}
private static final class JarVisitor extends SimpleFileVisitor<Path> {
private final List<URL> urls = new ArrayList<>();
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
if (attrs.isRegularFile() && file.getFileName().toString().toLowerCase().endsWith(JAR_SUFFIX)) {
try {
urls.add(file.toUri().toURL());
} catch (MalformedURLException e) {
LOG.warn("Failed to create URL for jar file {}", file);
}
}
return FileVisitResult.CONTINUE;
}
}
}

View File

@@ -2,6 +2,7 @@ package org.cryptomator.common.keychain;
import dagger.Module;
import dagger.Provides;
import org.cryptomator.common.PluginClassLoader;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.integrations.keychain.KeychainAccessProvider;
@@ -17,8 +18,8 @@ public class KeychainModule {
@Provides
@Singleton
static Set<ServiceLoader.Provider<KeychainAccessProvider>> provideAvailableKeychainAccessProviderFactories() {
return ServiceLoader.load(KeychainAccessProvider.class).stream().collect(Collectors.toUnmodifiableSet());
static Set<ServiceLoader.Provider<KeychainAccessProvider>> provideAvailableKeychainAccessProviderFactories(PluginClassLoader classLoader) {
return ServiceLoader.load(KeychainAccessProvider.class, classLoader).stream().collect(Collectors.toUnmodifiableSet());
}
@Provides

View File

@@ -24,6 +24,6 @@ class AvailableDriveLetterChooser implements MountPointChooser {
@Override
public Optional<Path> chooseMountPoint(Volume caller) {
return this.windowsDriveLetters.getAvailableDriveLetterPath();
return this.windowsDriveLetters.getDesiredAvailableDriveLetterPath();
}
}

View File

@@ -43,6 +43,8 @@ public class Settings {
public static final NodeOrientation DEFAULT_USER_INTERFACE_ORIENTATION = NodeOrientation.LEFT_TO_RIGHT;
public static final String DEFAULT_LICENSE_KEY = "";
public static final boolean DEFAULT_SHOW_MINIMIZE_BUTTON = false;
public static final String DEFAULT_DISPLAY_CONFIGURATION = "";
private final ObservableList<VaultSettings> directories = FXCollections.observableArrayList(VaultSettings::observables);
private final BooleanProperty askedForUpdateCheck = new SimpleBooleanProperty(DEFAULT_ASKED_FOR_UPDATE_CHECK);
@@ -59,6 +61,12 @@ public class Settings {
private final StringProperty licenseKey = new SimpleStringProperty(DEFAULT_LICENSE_KEY);
private final BooleanProperty showMinimizeButton = new SimpleBooleanProperty(DEFAULT_SHOW_MINIMIZE_BUTTON);
private final BooleanProperty showTrayIcon;
private final IntegerProperty windowXPosition = new SimpleIntegerProperty();
private final IntegerProperty windowYPosition = new SimpleIntegerProperty();
private final IntegerProperty windowWidth = new SimpleIntegerProperty();
private final IntegerProperty windowHeight = new SimpleIntegerProperty();
private final ObjectProperty<String> displayConfiguration = new SimpleObjectProperty<>(DEFAULT_DISPLAY_CONFIGURATION);
private Consumer<Settings> saveCmd;
@@ -83,6 +91,11 @@ public class Settings {
licenseKey.addListener(this::somethingChanged);
showMinimizeButton.addListener(this::somethingChanged);
showTrayIcon.addListener(this::somethingChanged);
windowXPosition.addListener(this::somethingChanged);
windowYPosition.addListener(this::somethingChanged);
windowWidth.addListener(this::somethingChanged);
windowHeight.addListener(this::somethingChanged);
displayConfiguration.addListener(this::somethingChanged);
}
void setSaveCmd(Consumer<Settings> saveCmd) {
@@ -141,7 +154,7 @@ public class Settings {
return theme;
}
public ObjectProperty<String> keychainProvider() { return keychainProvider; }
public ObjectProperty<String> keychainProvider() {return keychainProvider;}
public ObjectProperty<NodeOrientation> userInterfaceOrientation() {
return userInterfaceOrientation;
@@ -158,4 +171,24 @@ public class Settings {
public BooleanProperty showTrayIcon() {
return showTrayIcon;
}
public IntegerProperty windowXPositionProperty() {
return windowXPosition;
}
public IntegerProperty windowYPositionProperty() {
return windowYPosition;
}
public IntegerProperty windowWidthProperty() {
return windowWidth;
}
public IntegerProperty windowHeightProperty() {
return windowHeight;
}
public ObjectProperty<String> displayConfigurationProperty() {
return displayConfiguration;
}
}

View File

@@ -52,6 +52,12 @@ public class SettingsJsonAdapter extends TypeAdapter<Settings> {
out.name("licenseKey").value(value.licenseKey().get());
out.name("showMinimizeButton").value(value.showMinimizeButton().get());
out.name("showTrayIcon").value(value.showTrayIcon().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.endObject();
}
@@ -86,6 +92,12 @@ public class SettingsJsonAdapter extends TypeAdapter<Settings> {
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());
default -> {
LOG.warn("Unsupported vault setting found in JSON: " + name);
in.skipValue();

View File

@@ -17,9 +17,6 @@ import org.cryptomator.cryptofs.CryptoFileSystem;
import org.cryptomator.cryptofs.CryptoFileSystemProperties;
import org.cryptomator.cryptofs.CryptoFileSystemProperties.FileSystemFlags;
import org.cryptomator.cryptofs.CryptoFileSystemProvider;
import org.cryptomator.cryptofs.VaultConfig;
import org.cryptomator.cryptofs.VaultConfig.UnverifiedVaultConfig;
import org.cryptomator.cryptofs.VaultConfigLoadException;
import org.cryptomator.cryptofs.common.FileSystemCapabilityChecker;
import org.cryptomator.cryptolib.api.CryptoException;
import org.cryptomator.cryptolib.api.MasterkeyLoader;
@@ -38,8 +35,6 @@ import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleBooleanProperty;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.EnumSet;
@@ -62,6 +57,7 @@ public class Vault {
private final AtomicReference<CryptoFileSystem> cryptoFileSystem;
private final VaultState state;
private final ObjectProperty<Exception> lastKnownException;
private final VaultConfigCache configCache;
private final VaultStats stats;
private final StringBinding displayName;
private final StringBinding displayablePath;
@@ -78,8 +74,9 @@ public class Vault {
private volatile Volume volume;
@Inject
Vault(VaultSettings vaultSettings, Provider<Volume> volumeProvider, @DefaultMountFlags StringBinding defaultMountFlags, AtomicReference<CryptoFileSystem> cryptoFileSystem, VaultState state, @Named("lastKnownException") ObjectProperty<Exception> lastKnownException, VaultStats stats) {
Vault(VaultSettings vaultSettings, VaultConfigCache configCache, Provider<Volume> volumeProvider, @DefaultMountFlags StringBinding defaultMountFlags, AtomicReference<CryptoFileSystem> cryptoFileSystem, VaultState state, @Named("lastKnownException") ObjectProperty<Exception> lastKnownException, VaultStats stats) {
this.vaultSettings = vaultSettings;
this.configCache = configCache;
this.volumeProvider = volumeProvider;
this.defaultMountFlags = defaultMountFlags;
this.cryptoFileSystem = cryptoFileSystem;
@@ -107,10 +104,10 @@ public class Vault {
Set<FileSystemFlags> flags = EnumSet.noneOf(FileSystemFlags.class);
if (vaultSettings.usesReadOnlyMode().get()) {
flags.add(FileSystemFlags.READONLY);
} else if(vaultSettings.maxCleartextFilenameLength().get() == -1) {
} else if (vaultSettings.maxCleartextFilenameLength().get() == -1) {
LOG.debug("Determining cleartext filename length limitations...");
var checker = new FileSystemCapabilityChecker();
int shorteningThreshold = getUnverifiedVaultConfig().allegedShorteningThreshold();
int shorteningThreshold = configCache.get().allegedShorteningThreshold();
int ciphertextLimit = checker.determineSupportedCiphertextFileNameLength(getPath());
if (ciphertextLimit < shorteningThreshold) {
int cleartextLimit = checker.determineSupportedCleartextFileNameLength(getPath());
@@ -328,19 +325,6 @@ public class Vault {
return stats;
}
/**
* Attempts to read the vault config file and parse it without verifying its integrity.
*
* @return an unverified vault config
* @throws VaultConfigLoadException if the read file cannot be properly parsed
* @throws IOException if reading the file fails
*
*/
public UnverifiedVaultConfig getUnverifiedVaultConfig() throws IOException {
Path configPath = getPath().resolve(org.cryptomator.common.Constants.VAULTCONFIG_FILENAME);
String token = Files.readString(configPath, StandardCharsets.US_ASCII);
return VaultConfig.decode(token);
}
public Observable[] observables() {
return new Observable[]{state};
@@ -375,6 +359,10 @@ public class Vault {
}
}
public VaultConfigCache getVaultConfigCache() {
return configCache;
}
public void setCustomMountFlags(String mountFlags) {
vaultSettings.mountFlags().set(mountFlags);
}

View File

@@ -25,6 +25,9 @@ public interface VaultComponent {
@BindsInstance
Builder vaultSettings(VaultSettings vaultSettings);
@BindsInstance
Builder vaultConfigCache(VaultConfigCache configCache);
@BindsInstance
Builder initialVaultState(VaultState.Value vaultState);

View File

@@ -0,0 +1,65 @@
package org.cryptomator.common.vaults;
import org.cryptomator.common.Constants;
import org.cryptomator.common.settings.VaultSettings;
import org.cryptomator.cryptofs.VaultConfig;
import org.cryptomator.cryptofs.VaultConfigLoadException;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.concurrent.atomic.AtomicReference;
/**
* Wrapper for lazy loading and on-demand reloading of the vault configuration.
*/
public class VaultConfigCache {
private final VaultSettings settings;
private final AtomicReference<VaultConfig.UnverifiedVaultConfig> config;
VaultConfigCache(VaultSettings settings) {
this.settings = settings;
this.config = new AtomicReference<>(null);
}
void reloadConfig() throws IOException {
try {
config.set(readConfigFromStorage(this.settings.path().get()));
} catch (IOException e) {
config.set(null);
throw e;
}
}
public VaultConfig.UnverifiedVaultConfig get() throws IOException {
if (config.get() == null) {
reloadConfig();
}
return config.get();
}
public VaultConfig.UnverifiedVaultConfig getUnchecked() {
try {
return get();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
/**
* Attempts to read the vault config file and parse it without verifying its integrity.
*
* @throws VaultConfigLoadException if the read file cannot be properly parsed
* @throws IOException if reading the file fails
*/
static VaultConfig.UnverifiedVaultConfig readConfigFromStorage(Path vaultPath) throws IOException {
Path configPath = vaultPath.resolve(Constants.VAULTCONFIG_FILENAME);
String token = Files.readString(configPath, StandardCharsets.US_ASCII);
return VaultConfig.decode(token);
}
}

View File

@@ -18,7 +18,6 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Singleton;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import java.io.IOException;
import java.nio.file.Files;
@@ -31,6 +30,7 @@ import java.util.ResourceBundle;
import static org.cryptomator.common.Constants.MASTERKEY_FILENAME;
import static org.cryptomator.common.Constants.VAULTCONFIG_FILENAME;
import static org.cryptomator.common.vaults.VaultState.Value.ERROR;
import static org.cryptomator.common.vaults.VaultState.Value.LOCKED;
@Singleton
public class VaultListManager {
@@ -96,6 +96,11 @@ public class VaultListManager {
VaultComponent.Builder compBuilder = vaultComponentBuilder.vaultSettings(vaultSettings);
try {
VaultState.Value vaultState = determineVaultState(vaultSettings.path().get());
VaultConfigCache wrapper = new VaultConfigCache(vaultSettings);
compBuilder.vaultConfigCache(wrapper); //first set the wrapper in the builder, THEN try to load config
if (vaultState == LOCKED) { //for legacy reasons: pre v8 vault do not have a config, but they are in the NEEDS_MIGRATION state
wrapper.reloadConfig();
}
compBuilder.initialVaultState(vaultState);
} catch (IOException e) {
LOG.warn("Failed to determine vault state for " + vaultSettings.path().get(), e);
@@ -112,6 +117,9 @@ public class VaultListManager {
case LOCKED, NEEDS_MIGRATION, MISSING -> {
try {
var determinedState = determineVaultState(vault.getPath());
if (determinedState == LOCKED) {
vault.getVaultConfigCache().reloadConfig();
}
state.set(determinedState);
yield determinedState;
} catch (IOException e) {
@@ -132,7 +140,9 @@ public class VaultListManager {
return switch (CryptoFileSystemProvider.checkDirStructureForVault(pathToVault, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME)) {
case VAULT -> VaultState.Value.LOCKED;
case UNRELATED -> VaultState.Value.MISSING;
case MAYBE_LEGACY -> Migrators.get().needsMigration(pathToVault, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME) ? VaultState.Value.NEEDS_MIGRATION : VaultState.Value.MISSING;
case MAYBE_LEGACY -> Migrators.get().needsMigration(pathToVault, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME) ? //
VaultState.Value.NEEDS_MIGRATION //
: VaultState.Value.MISSING;
};
}

View File

@@ -70,7 +70,7 @@ public class WebDavVolume implements Volume {
//on windows, prevent an automatic drive letter selection in the upstream library. Either we choose already a specific one or there is no free.
Supplier<String> driveLetterSupplier;
if (System.getProperty("os.name").toLowerCase().contains("windows") && vaultSettings.winDriveLetter().isEmpty().get()) {
driveLetterSupplier = () -> windowsDriveLetters.getAvailableDriveLetter().orElse(null);
driveLetterSupplier = () -> windowsDriveLetters.getDesiredAvailableDriveLetter().orElse(null);
} else {
driveLetterSupplier = () -> vaultSettings.winDriveLetter().get();
}

View File

@@ -22,11 +22,11 @@ import java.util.stream.StreamSupport;
@Singleton
public final class WindowsDriveLetters {
private static final Set<String> C_TO_Z;
private static final Set<String> A_TO_Z;
static {
try (IntStream stream = IntStream.rangeClosed('C', 'Z')) {
C_TO_Z = stream.mapToObj(i -> String.valueOf((char) i)).collect(ImmutableSet.toImmutableSet());
try (IntStream stream = IntStream.rangeClosed('A', 'Z')) {
A_TO_Z = stream.mapToObj(i -> String.valueOf((char) i)).collect(ImmutableSet.toImmutableSet());
}
}
@@ -35,7 +35,7 @@ public final class WindowsDriveLetters {
}
public Set<String> getAllDriveLetters() {
return C_TO_Z;
return A_TO_Z;
}
public Set<String> getOccupiedDriveLetters() {
@@ -59,6 +59,26 @@ public final class WindowsDriveLetters {
return getAvailableDriveLetter().map(this::toPath);
}
/**
* Skips A and B and only returns them if all other are occupied.
*
* @return an Optional containing either the letter of a free drive letter or empty, if none is available
*/
public Optional<String> getDesiredAvailableDriveLetter() {
var availableDriveLetters = getAvailableDriveLetters();
var optString = availableDriveLetters.stream().filter(s -> !(s.equals("A") || s.equals("B"))).findFirst();
return optString.or(() -> availableDriveLetters.stream().findFirst());
}
/**
* Skips A and B and only returns them if all other are occupied.
*
* @return an Optional containing either the path to a free drive letter or empty, if none is available
*/
public Optional<Path> getDesiredAvailableDriveLetterPath() {
return getDesiredAvailableDriveLetter().map(this::toPath);
}
public Path toPath(String driveLetter) {
return Path.of(driveLetter + ":\\");
}

View File

@@ -27,6 +27,7 @@ class Server implements IpcCommunicator {
}
public static Server create(Path socketPath) throws IOException {
Files.createDirectories(socketPath.getParent());
var address = UnixDomainSocketAddress.of(socketPath);
var serverSocketChannel = ServerSocketChannel.open(StandardProtocolFamily.UNIX);
serverSocketChannel.bind(address);

View File

@@ -38,18 +38,16 @@ public class Cryptomator {
private final DebugMode debugMode;
private final Environment env;
private final Lazy<IpcMessageHandler> ipcMessageHandler;
private final Optional<String> applicationVersion;
private final CountDownLatch shutdownLatch;
private final ShutdownHook shutdownHook;
private final Lazy<UiLauncher> uiLauncher;
@Inject
Cryptomator(LoggerConfiguration logConfig, DebugMode debugMode, Environment env, Lazy<IpcMessageHandler> ipcMessageHandler, @Named("applicationVersion") Optional<String> applicationVersion, @Named("shutdownLatch") CountDownLatch shutdownLatch, ShutdownHook shutdownHook, Lazy<UiLauncher> uiLauncher) {
Cryptomator(LoggerConfiguration logConfig, DebugMode debugMode, Environment env, Lazy<IpcMessageHandler> ipcMessageHandler, @Named("shutdownLatch") CountDownLatch shutdownLatch, ShutdownHook shutdownHook, Lazy<UiLauncher> uiLauncher) {
this.logConfig = logConfig;
this.debugMode = debugMode;
this.env = env;
this.ipcMessageHandler = ipcMessageHandler;
this.applicationVersion = applicationVersion;
this.shutdownLatch = shutdownLatch;
this.shutdownHook = shutdownHook;
this.uiLauncher = uiLauncher;
@@ -69,7 +67,7 @@ public class Cryptomator {
*/
private int run(String[] args) {
logConfig.init();
LOG.info("Starting Cryptomator {} on {} {} ({})", applicationVersion.orElse("SNAPSHOT"), SystemUtils.OS_NAME, SystemUtils.OS_VERSION, SystemUtils.OS_ARCH);
LOG.info("Starting Cryptomator {} on {} {} ({})", env.getAppVersion().orElse("SNAPSHOT"), SystemUtils.OS_NAME, SystemUtils.OS_VERSION, SystemUtils.OS_ARCH);
debugMode.initialize();
/*

View File

@@ -18,11 +18,4 @@ class CryptomatorModule {
return new CountDownLatch(1);
}
@Provides
@Singleton
@Named("applicationVersion")
static Optional<String> provideApplicationVersion() {
return Optional.ofNullable(Cryptomator.class.getPackage().getImplementationVersion());
}
}

View File

@@ -182,7 +182,7 @@ public class CreateNewVaultPasswordController implements FxController {
// 2. initialize vault:
try {
MasterkeyLoader loader = ignored -> masterkey.clone();
MasterkeyLoader loader = ignored -> masterkey.copy();
CryptoFileSystemProperties fsProps = CryptoFileSystemProperties.cryptoFileSystemProperties().withCipherCombo(CryptorProvider.Scheme.SIV_CTRMAC).withKeyLoader(loader).build();
CryptoFileSystemProvider.initialize(path, fsProps, DEFAULT_KEY_ID);

View File

@@ -14,7 +14,7 @@ public class LocationPresets {
private static final String USER_HOME = System.getProperty("user.home");
private static final String[] ICLOUDDRIVE_LOCATIONS = {"~/Library/Mobile Documents/iCloud~com~setolabs~Cryptomator/Documents", "~/iCloudDrive/iCloud~com~setolabs~Cryptomator"};
private static final String[] DROPBOX_LOCATIONS = {"~/Dropbox"};
private static final String[] GDRIVE_LOCATIONS = {"~/Google Drive"};
private static final String[] GDRIVE_LOCATIONS = {"~/Google Drive/My Drive", "~/Google Drive"};
private static final String[] ONEDRIVE_LOCATIONS = {"~/OneDrive"};
private static final String[] MEGA_LOCATIONS = {"~/MEGA"};
private static final String[] PCLOUD_LOCATIONS = {"~/pCloudDrive"};

View File

@@ -1,22 +1,47 @@
package org.cryptomator.ui.common;
import org.cryptomator.common.ErrorCode;
import org.cryptomator.common.Nullable;
import javax.inject.Inject;
import javax.inject.Named;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.fxml.FXML;
import javafx.scene.Scene;
import javafx.scene.input.Clipboard;
import javafx.scene.input.ClipboardContent;
import javafx.stage.Stage;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
public class ErrorController implements FxController {
private static final String SEARCH_URL_FORMAT = "https://github.com/cryptomator/cryptomator/discussions/categories/errors?discussions_q=category:Errors+%s";
private static final String REPORT_URL_FORMAT = "https://github.com/cryptomator/cryptomator/discussions/new?category=Errors&title=Error+%s&body=%s";
private static final String SEARCH_ERRORCODE_DELIM = " OR ";
private static final String REPORT_BODY_TEMPLATE = """
<!-- ✏️ Please describe what happened as accurately as possible. -->
<!-- 📋 Please also copy and paste the detail text from the error window. -->
""";
private final Application application;
private final String stackTrace;
private final ErrorCode errorCode;
private final Scene previousScene;
private final Stage window;
private BooleanProperty copiedDetails = new SimpleBooleanProperty();
@Inject
ErrorController(@Named("stackTrace") String stackTrace, @Nullable Scene previousScene, Stage window) {
ErrorController(Application application, @Named("stackTrace") String stackTrace, ErrorCode errorCode, @Nullable Scene previousScene, Stage window) {
this.application = application;
this.stackTrace = stackTrace;
this.errorCode = errorCode;
this.previousScene = previousScene;
this.window = window;
}
@@ -33,6 +58,31 @@ public class ErrorController implements FxController {
window.close();
}
@FXML
public void searchError() {
var searchTerm = URLEncoder.encode(getErrorCode().replace(ErrorCode.DELIM, SEARCH_ERRORCODE_DELIM), StandardCharsets.UTF_8);
application.getHostServices().showDocument(SEARCH_URL_FORMAT.formatted(searchTerm));
}
@FXML
public void reportError() {
var title = URLEncoder.encode(getErrorCode(), StandardCharsets.UTF_8);
var body = URLEncoder.encode(REPORT_BODY_TEMPLATE, StandardCharsets.UTF_8);
application.getHostServices().showDocument(REPORT_URL_FORMAT.formatted(title, body));
}
@FXML
public void copyDetails() {
ClipboardContent clipboardContent = new ClipboardContent();
clipboardContent.putString(getDetailText());
Clipboard.getSystemClipboard().setContent(clipboardContent);
copiedDetails.set(true);
CompletableFuture.delayedExecutor(2, TimeUnit.SECONDS, Platform::runLater).execute(() -> {
copiedDetails.set(false);
});
}
/* Getter/Setter */
public boolean isPreviousScenePresent() {
@@ -42,4 +92,20 @@ public class ErrorController implements FxController {
public String getStackTrace() {
return stackTrace;
}
public String getErrorCode() {
return errorCode.toString();
}
public String getDetailText() {
return "```\nError Code " + getErrorCode() + "\n" + getStackTrace() + "\n```";
}
public BooleanProperty copiedDetailsProperty() {
return copiedDetails;
}
public boolean getCopiedDetails() {
return copiedDetails.get();
}
}

View File

@@ -4,6 +4,7 @@ import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import org.cryptomator.common.ErrorCode;
import javax.inject.Named;
import javax.inject.Provider;
@@ -31,6 +32,11 @@ abstract class ErrorModule {
return baos.toString(StandardCharsets.UTF_8);
}
@Provides
static ErrorCode provideErrorCode(Throwable cause) {
return ErrorCode.of(cause);
}
@Binds
@IntoMap
@FxControllerKey(ErrorController.class)

View File

@@ -12,7 +12,6 @@ public enum FxmlFile {
ERROR("/fxml/error.fxml"), //
FORGET_PASSWORD("/fxml/forget_password.fxml"), //
HEALTH_START("/fxml/health_start.fxml"), //
HEALTH_START_FAIL("/fxml/health_start_fail.fxml"), //
HEALTH_CHECK_LIST("/fxml/health_check_list.fxml"), //
LOCK_FORCED("/fxml/lock_forced.fxml"), //
LOCK_FAILED("/fxml/lock_failed.fxml"), //

View File

@@ -12,6 +12,7 @@ public enum FontAwesome5Icon {
CARET_RIGHT("\uF0Da"), //
CHECK("\uF00C"), //
CLOCK("\uF017"), //
CLIPBOARD("\uF328"), //
COG("\uF013"), //
COGS("\uF085"), //
COPY("\uF0C5"), //

View File

@@ -1,5 +1,6 @@
package org.cryptomator.ui.fxapp;
import org.cryptomator.common.Environment;
import org.cryptomator.common.settings.Settings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -31,9 +32,9 @@ public class UpdateChecker {
private final ScheduledService<String> updateCheckerService;
@Inject
UpdateChecker(Settings settings, @Named("applicationVersion") Optional<String> applicationVersion, @Named("latestVersion") StringProperty latestVersionProperty, @Named("SemVer") Comparator<String> semVerComparator, ScheduledService<String> updateCheckerService) {
UpdateChecker(Settings settings, Environment env, @Named("latestVersion") StringProperty latestVersionProperty, @Named("SemVer") Comparator<String> semVerComparator, ScheduledService<String> updateCheckerService) {
this.settings = settings;
this.applicationVersion = applicationVersion;
this.applicationVersion = env.getAppVersion();
this.latestVersionProperty = latestVersionProperty;
this.semVerComparator = semVerComparator;
this.updateCheckerService = updateCheckerService;

View File

@@ -3,6 +3,7 @@ package org.cryptomator.ui.fxapp;
import dagger.Module;
import dagger.Provides;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.Environment;
import org.cryptomator.common.settings.Settings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -51,9 +52,9 @@ public abstract class UpdateCheckerModule {
@Provides
@FxApplicationScoped
static HttpRequest provideCheckForUpdatesRequest(@Named("applicationVersion") Optional<String> applicationVersion) {
static HttpRequest provideCheckForUpdatesRequest(Environment env) {
String userAgent = String.format("Cryptomator VersionChecker/%s %s %s (%s)", //
applicationVersion.orElse("SNAPSHOT"), //
env.getAppVersion().orElse("SNAPSHOT"), //
SystemUtils.OS_NAME, //
SystemUtils.OS_VERSION, //
SystemUtils.OS_ARCH); //

View File

@@ -67,7 +67,7 @@ public class CheckExecutor {
@Override
protected Void call() throws Exception {
try (var masterkeyClone = masterkey.clone(); //
try (var masterkeyClone = masterkey.copy(); //
var cryptor = CryptorProvider.forScheme(vaultConfig.getCipherCombo()).provide(masterkeyClone, csprng)) {
c.getHealthCheck().check(vaultPath, vaultConfig, masterkeyClone, cryptor, diagnosis -> {
Platform.runLater(() -> c.getResults().add(Result.create(diagnosis)));

View File

@@ -16,26 +16,15 @@ import javafx.stage.Stage;
@Subcomponent(modules = {HealthCheckModule.class})
public interface HealthCheckComponent {
LoadUnverifiedConfigResult loadConfig();
@HealthCheckWindow
Stage window();
@FxmlScene(FxmlFile.HEALTH_START)
Lazy<Scene> startScene();
@FxmlScene(FxmlFile.HEALTH_START_FAIL)
Lazy<Scene> failScene();
default Stage showHealthCheckWindow() {
Stage stage = window();
// TODO reevaluate config loading, as soon as we have the new generic error screen
var unverifiedConf = loadConfig();
if (unverifiedConf.config() != null) {
stage.setScene(startScene().get());
} else {
stage.setScene(failScene().get());
}
stage.setScene(startScene().get());
stage.show();
return stage;
}
@@ -52,5 +41,4 @@ public interface HealthCheckComponent {
HealthCheckComponent build();
}
record LoadUnverifiedConfigResult(VaultConfig.UnverifiedVaultConfig config, Throwable error) {}
}

View File

@@ -27,7 +27,6 @@ import javafx.scene.Scene;
import javafx.stage.Modality;
import javafx.stage.Stage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -37,18 +36,6 @@ import java.util.concurrent.atomic.AtomicReference;
@Module(subcomponents = {KeyLoadingComponent.class})
abstract class HealthCheckModule {
// TODO reevaluate config loading, as soon as we have the new generic error screen
@Provides
@HealthCheckScoped
static HealthCheckComponent.LoadUnverifiedConfigResult provideLoadConfigResult(@HealthCheckWindow Vault vault) {
try {
return new HealthCheckComponent.LoadUnverifiedConfigResult(vault.getUnverifiedVaultConfig(), null);
} catch (IOException e) {
return new HealthCheckComponent.LoadUnverifiedConfigResult(null, e);
}
}
@Provides
@HealthCheckScoped
static AtomicReference<Masterkey> provideMasterkeyRef() {
@@ -129,13 +116,6 @@ abstract class HealthCheckModule {
return fxmlLoaders.createScene(FxmlFile.HEALTH_START);
}
@Provides
@FxmlScene(FxmlFile.HEALTH_START_FAIL)
@HealthCheckScoped
static Scene provideHealthStartFailScene(@HealthCheckWindow FxmlLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene(FxmlFile.HEALTH_START_FAIL);
}
@Provides
@FxmlScene(FxmlFile.HEALTH_CHECK_LIST)
@HealthCheckScoped
@@ -148,11 +128,6 @@ abstract class HealthCheckModule {
@FxControllerKey(StartController.class)
abstract FxController bindStartController(StartController controller);
@Binds
@IntoMap
@FxControllerKey(StartFailController.class)
abstract FxController bindStartFailController(StartFailController controller);
@Binds
@IntoMap
@FxControllerKey(CheckListController.class)

View File

@@ -50,7 +50,7 @@ class ResultFixApplier {
public void fix(DiagnosticResult diagnosis) {
Preconditions.checkArgument(diagnosis.getSeverity() == DiagnosticResult.Severity.WARN, "Unfixable result");
try (var masterkeyClone = masterkey.clone(); //
try (var masterkeyClone = masterkey.copy(); //
var cryptor = CryptorProvider.forScheme(vaultConfig.getCipherCombo()).provide(masterkeyClone, csprng)) {
diagnosis.fix(vaultPath, vaultConfig, masterkeyClone, cryptor);
} catch (Exception e) {

View File

@@ -1,7 +1,8 @@
package org.cryptomator.ui.health;
import com.google.common.base.Preconditions;
import dagger.Lazy;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.common.vaults.VaultConfigCache;
import org.cryptomator.cryptofs.VaultConfig;
import org.cryptomator.cryptofs.VaultConfigLoadException;
import org.cryptomator.cryptofs.VaultKeyInvalidException;
@@ -18,8 +19,6 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Named;
import javafx.application.Platform;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.fxml.FXML;
import javafx.scene.Scene;
import javafx.stage.Stage;
@@ -35,7 +34,7 @@ public class StartController implements FxController {
private final Stage window;
private final Stage unlockWindow;
private final ObjectProperty<VaultConfig.UnverifiedVaultConfig> unverifiedVaultConfig;
private final VaultConfigCache vaultConfig;
private final KeyLoadingStrategy keyLoadingStrategy;
private final ExecutorService executor;
private final AtomicReference<Masterkey> masterkeyRef;
@@ -44,11 +43,10 @@ public class StartController implements FxController {
private final Lazy<ErrorComponent.Builder> errorComponent;
@Inject
public StartController(@HealthCheckWindow Stage window, HealthCheckComponent.LoadUnverifiedConfigResult configLoadResult, @HealthCheckWindow KeyLoadingStrategy keyLoadingStrategy, ExecutorService executor, AtomicReference<Masterkey> masterkeyRef, AtomicReference<VaultConfig> vaultConfigRef, @FxmlScene(FxmlFile.HEALTH_CHECK_LIST) Lazy<Scene> checkScene, Lazy<ErrorComponent.Builder> errorComponent, @Named("unlockWindow") Stage unlockWindow) {
Preconditions.checkNotNull(configLoadResult.config());
public StartController(@HealthCheckWindow Stage window, @HealthCheckWindow Vault vault, @HealthCheckWindow KeyLoadingStrategy keyLoadingStrategy, ExecutorService executor, AtomicReference<Masterkey> masterkeyRef, AtomicReference<VaultConfig> vaultConfigRef, @FxmlScene(FxmlFile.HEALTH_CHECK_LIST) Lazy<Scene> checkScene, Lazy<ErrorComponent.Builder> errorComponent, @Named("unlockWindow") Stage unlockWindow) {
this.window = window;
this.unlockWindow = unlockWindow;
this.unverifiedVaultConfig = new SimpleObjectProperty<>(configLoadResult.config());
this.vaultConfig = vault.getVaultConfigCache();
this.keyLoadingStrategy = keyLoadingStrategy;
this.executor = executor;
this.masterkeyRef = masterkeyRef;
@@ -71,7 +69,6 @@ public class StartController implements FxController {
private void loadKey() {
assert !Platform.isFxApplicationThread();
assert unverifiedVaultConfig.get() != null;
try {
keyLoadingStrategy.use(this::verifyVaultConfig);
} catch (VaultConfigLoadException | UnlockCancelledException e) {
@@ -80,11 +77,11 @@ public class StartController implements FxController {
}
private void verifyVaultConfig(KeyLoadingStrategy keyLoadingStrategy) throws VaultConfigLoadException {
var unverifiedCfg = unverifiedVaultConfig.get();
var unverifiedCfg = vaultConfig.getUnchecked();
try (var masterkey = keyLoadingStrategy.loadKey(unverifiedCfg.getKeyId())) {
var verifiedCfg = unverifiedCfg.verify(masterkey.getEncoded(), unverifiedCfg.allegedVaultVersion());
vaultConfigRef.set(verifiedCfg);
var old = masterkeyRef.getAndSet(masterkey.clone());
var old = masterkeyRef.getAndSet(masterkey.copy());
if (old != null) {
old.destroy();
}

View File

@@ -1,79 +0,0 @@
package org.cryptomator.ui.health;
import com.google.common.base.Preconditions;
import org.cryptomator.cryptofs.VaultConfigLoadException;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.controls.FontAwesome5Icon;
import javax.inject.Inject;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.scene.control.TitledPane;
import javafx.stage.Stage;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
// TODO reevaluate config loading, as soon as we have the new generic error screen
@HealthCheckScoped
public class StartFailController implements FxController {
private final Stage window;
private final ObjectProperty<Throwable> loadError;
private final ObjectProperty<FontAwesome5Icon> moreInfoIcon;
/* FXML */
public TitledPane moreInfoPane;
@Inject
public StartFailController(@HealthCheckWindow Stage window, HealthCheckComponent.LoadUnverifiedConfigResult configLoadResult) {
Preconditions.checkNotNull(configLoadResult.error());
this.window = window;
this.loadError = new SimpleObjectProperty<>(configLoadResult.error());
this.moreInfoIcon = new SimpleObjectProperty<>(FontAwesome5Icon.CARET_RIGHT);
}
public void initialize() {
moreInfoPane.expandedProperty().addListener(this::setMoreInfoIcon);
}
private void setMoreInfoIcon(ObservableValue<? extends Boolean> observable, boolean wasExpanded, boolean willExpand) {
moreInfoIcon.set(willExpand ? FontAwesome5Icon.CARET_DOWN : FontAwesome5Icon.CARET_RIGHT);
}
@FXML
public void close() {
window.close();
}
/* Getter & Setter */
public ObjectProperty<FontAwesome5Icon> moreInfoIconProperty() {
return moreInfoIcon;
}
public FontAwesome5Icon getMoreInfoIcon() {
return moreInfoIcon.getValue();
}
public String getStackTrace() {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
loadError.get().printStackTrace(new PrintStream(baos));
return baos.toString(StandardCharsets.UTF_8);
}
public String getLocalizedErrorMessage() {
return loadError.get().getLocalizedMessage();
}
public boolean isParseException() {
return loadError.get() instanceof VaultConfigLoadException;
}
public boolean isIoException() {
return !isParseException();
}
}

View File

@@ -3,7 +3,6 @@ package org.cryptomator.ui.keyloading;
import dagger.Module;
import dagger.Provides;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.cryptofs.VaultConfig.UnverifiedVaultConfig;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxmlLoaderFactory;
@@ -11,9 +10,7 @@ import org.cryptomator.ui.keyloading.masterkeyfile.MasterkeyFileLoadingModule;
import javax.inject.Provider;
import java.io.IOException;
import java.net.URI;
import java.util.Map;
import java.util.Optional;
import java.util.ResourceBundle;
@Module(includes = {MasterkeyFileLoadingModule.class})
@@ -31,7 +28,7 @@ abstract class KeyLoadingModule {
@KeyLoadingScoped
static KeyLoadingStrategy provideKeyLoaderProvider(@KeyLoading Vault vault, Map<String, Provider<KeyLoadingStrategy>> strategies) {
try {
String scheme = vault.getUnverifiedVaultConfig().getKeyId().getScheme();
String scheme = vault.getVaultConfigCache().get().getKeyId().getScheme();
var fallback = KeyLoadingStrategy.failed(new IllegalArgumentException("Unsupported key id " + scheme));
return strategies.getOrDefault(scheme, () -> fallback).get();
} catch (IOException e) {

View File

@@ -77,6 +77,7 @@ public interface KeyLoadingStrategy extends MasterkeyLoader {
boolean success = false;
try {
user.use(this);
success = true;
} catch (MasterkeyLoadingFailedException e) {
if (recoverFromException(e)) {
LOG.info("Unlock attempt threw {}. Reattempting...", e.getClass().getSimpleName());

View File

@@ -2,6 +2,7 @@ package org.cryptomator.ui.launcher;
import dagger.Module;
import dagger.Provides;
import org.cryptomator.common.PluginClassLoader;
import org.cryptomator.integrations.autostart.AutoStartProvider;
import org.cryptomator.integrations.tray.TrayIntegrationProvider;
import org.cryptomator.integrations.uiappearance.UiAppearanceProvider;
@@ -33,21 +34,21 @@ public abstract class UiLauncherModule {
@Provides
@Singleton
static Optional<UiAppearanceProvider> provideAppearanceProvider() {
return ServiceLoader.load(UiAppearanceProvider.class).findFirst();
static Optional<UiAppearanceProvider> provideAppearanceProvider(PluginClassLoader classLoader) {
return ServiceLoader.load(UiAppearanceProvider.class, classLoader).findFirst();
}
@Provides
@Singleton
static Optional<AutoStartProvider> provideAutostartProvider() {
return ServiceLoader.load(AutoStartProvider.class).findFirst();
static Optional<AutoStartProvider> provideAutostartProvider(PluginClassLoader classLoader) {
return ServiceLoader.load(AutoStartProvider.class, classLoader).findFirst();
}
@Provides
@Singleton
static Optional<TrayIntegrationProvider> provideTrayIntegrationProvider() {
return ServiceLoader.load(TrayIntegrationProvider.class).findFirst();
static Optional<TrayIntegrationProvider> provideTrayIntegrationProvider(PluginClassLoader classLoader) {
return ServiceLoader.load(TrayIntegrationProvider.class, classLoader).findFirst();
}
@Provides

View File

@@ -23,8 +23,6 @@ import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.util.Set;
import java.util.stream.Collectors;
@@ -55,7 +53,7 @@ public class MainWindowController implements FxController {
@FXML
public void initialize() {
LOG.debug("init MainWindowController");
LOG.trace("init MainWindowController");
root.setOnDragEntered(this::handleDragEvent);
root.setOnDragOver(this::handleDragEvent);
root.setOnDragDropped(this::handleDragEvent);

View File

@@ -6,17 +6,17 @@ import dagger.Provides;
import dagger.multibindings.IntoMap;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent;
import org.cryptomator.ui.common.FxmlLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
import org.cryptomator.ui.common.FxmlFile;
import org.cryptomator.ui.common.FxmlLoaderFactory;
import org.cryptomator.ui.common.FxmlScene;
import org.cryptomator.ui.common.StageFactory;
import org.cryptomator.ui.health.HealthCheckComponent;
import org.cryptomator.ui.migration.MigrationComponent;
import org.cryptomator.ui.removevault.RemoveVaultComponent;
import org.cryptomator.ui.vaultoptions.VaultOptionsComponent;
import org.cryptomator.ui.stats.VaultStatisticsComponent;
import org.cryptomator.ui.vaultoptions.VaultOptionsComponent;
import org.cryptomator.ui.wrongfilealert.WrongFileAlertComponent;
import javax.inject.Provider;
@@ -49,11 +49,8 @@ abstract class MainWindowModule {
@MainWindowScoped
static Stage provideStage(StageFactory factory) {
Stage stage = factory.create(StageStyle.UNDECORATED);
// TODO: min/max values chosen arbitrarily. We might wanna take a look at the user's resolution...
stage.setMinWidth(650);
stage.setMinHeight(440);
stage.setMaxWidth(1000);
stage.setMaxHeight(700);
stage.setTitle("Cryptomator");
return stage;
}

View File

@@ -16,6 +16,7 @@ import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
import javafx.beans.property.ReadOnlyBooleanProperty;
import javafx.fxml.FXML;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
@@ -53,22 +54,43 @@ public class MainWindowTitleController implements FxController {
@FXML
public void initialize() {
LOG.debug("init MainWindowTitleController");
LOG.trace("init MainWindowTitleController");
updateChecker.automaticallyCheckForUpdatesIfEnabled();
titleBar.setOnMousePressed(event -> {
xOffset = event.getSceneX();
yOffset = event.getSceneY();
});
titleBar.setOnMouseClicked(event -> {
if (event.getButton().equals(MouseButton.PRIMARY) && event.getClickCount() == 2) {
window.setFullScreen(!window.isFullScreen());
}
});
titleBar.setOnMouseDragged(event -> {
if (window.isFullScreen()) return;
window.setX(event.getScreenX() - xOffset);
window.setY(event.getScreenY() - yOffset);
});
titleBar.setOnDragDetected(mouseDragEvent -> {
titleBar.startFullDrag();
});
titleBar.setOnMouseDragReleased(mouseDragEvent -> {
saveWindowSettings();
});
window.setOnCloseRequest(event -> {
close();
event.consume();
});
}
private void saveWindowSettings() {
settings.windowYPositionProperty().setValue(window.getY());
settings.windowXPositionProperty().setValue(window.getX());
settings.windowWidthProperty().setValue(window.getWidth());
settings.windowHeightProperty().setValue(window.getHeight());
}
@FXML
public void close() {
if (trayMenuInitialized) {

View File

@@ -1,41 +1,100 @@
package org.cryptomator.ui.mainwindow;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.ui.common.FxController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.geometry.Rectangle2D;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Region;
import javafx.stage.Screen;
import javafx.stage.Stage;
@MainWindow
public class ResizeController implements FxController {
private static final Logger LOG = LoggerFactory.getLogger(ResizeController.class);
private final Stage window;
public Region tlResizer;
public Region trResizer;
public Region blResizer;
public Region brResizer;
public Region tResizer;
public Region rResizer;
public Region bResizer;
public Region lResizer;
public Region lDefaultRegion;
public Region tDefaultRegion;
public Region rDefaultRegion;
public Region bDefaultRegion;
private double origX, origY, origW, origH;
private final Settings settings;
private final BooleanBinding showResizingArrows;
@Inject
ResizeController(@MainWindow Stage window) {
ResizeController(@MainWindow Stage window, Settings settings) {
this.window = window;
// TODO inject settings and save current position and size
this.settings = settings;
this.showResizingArrows = Bindings.createBooleanBinding(this::isShowResizingArrows, window.fullScreenProperty());
}
@FXML
public void initialize() {
tlResizer.setOnMousePressed(this::startResize);
trResizer.setOnMousePressed(this::startResize);
blResizer.setOnMousePressed(this::startResize);
brResizer.setOnMousePressed(this::startResize);
tlResizer.setOnMouseDragged(this::resizeTopLeft);
trResizer.setOnMouseDragged(this::resizeTopRight);
blResizer.setOnMouseDragged(this::resizeBottomLeft);
brResizer.setOnMouseDragged(this::resizeBottomRight);
LOG.trace("init ResizeController");
if (neverTouched()) {
settings.displayConfigurationProperty().setValue(getMonitorSizes());
return;
} else {
if (didDisplayConfigurationChange()) {
//If the position is illegal, then the window appears on the main screen in the middle of the window.
Rectangle2D primaryScreenBounds = Screen.getPrimary().getBounds();
window.setX((primaryScreenBounds.getWidth() - window.getMinWidth()) / 2);
window.setY((primaryScreenBounds.getHeight() - window.getMinHeight()) / 2);
window.setWidth(window.getMinWidth());
window.setHeight(window.getMinHeight());
} else {
window.setHeight(settings.windowHeightProperty().get() > window.getMinHeight() ? settings.windowHeightProperty().get() : window.getMinHeight());
window.setWidth(settings.windowWidthProperty().get() > window.getMinWidth() ? settings.windowWidthProperty().get() : window.getMinWidth());
window.setX(settings.windowXPositionProperty().get());
window.setY(settings.windowYPositionProperty().get());
}
}
savePositionalSettings();
}
private boolean neverTouched() {
return (settings.windowHeightProperty().get() == 0) && (settings.windowWidthProperty().get() == 0) && (settings.windowXPositionProperty().get() == 0) && (settings.windowYPositionProperty().get() == 0);
}
private boolean didDisplayConfigurationChange() {
String currentDisplayConfiguration = getMonitorSizes();
String settingsDisplayConfiguration = settings.displayConfigurationProperty().get();
boolean configurationHasChanged = !settingsDisplayConfiguration.equals(currentDisplayConfiguration);
if (configurationHasChanged) settings.displayConfigurationProperty().setValue(currentDisplayConfiguration);
return configurationHasChanged;
}
private String getMonitorSizes() {
ObservableList<Screen> screens = Screen.getScreens();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < screens.size(); i++) {
Rectangle2D screenBounds = screens.get(i).getBounds();
if (!sb.isEmpty()) sb.append(" ");
sb.append("displayId: " + i + ", " + screenBounds.getWidth() + "x" + screenBounds.getHeight() + ";");
}
return sb.toString();
}
private void startResize(MouseEvent evt) {
@@ -45,27 +104,33 @@ public class ResizeController implements FxController {
origH = window.getHeight();
}
@FXML
private void resizeTopLeft(MouseEvent evt) {
resizeTop(evt);
resizeLeft(evt);
}
@FXML
private void resizeTopRight(MouseEvent evt) {
resizeTop(evt);
resizeRight(evt);
}
@FXML
private void resizeBottomLeft(MouseEvent evt) {
resizeBottom(evt);
resizeLeft(evt);
}
@FXML
private void resizeBottomRight(MouseEvent evt) {
resizeBottom(evt);
resizeRight(evt);
}
@FXML
private void resizeTop(MouseEvent evt) {
startResize(evt);
double newY = evt.getScreenY();
double dy = newY - origY;
double newH = origH - dy;
@@ -75,7 +140,9 @@ public class ResizeController implements FxController {
}
}
@FXML
private void resizeLeft(MouseEvent evt) {
startResize(evt);
double newX = evt.getScreenX();
double dx = newX - origX;
double newW = origW - dx;
@@ -85,6 +152,7 @@ public class ResizeController implements FxController {
}
}
@FXML
private void resizeBottom(MouseEvent evt) {
double newH = evt.getSceneY();
if (newH < window.getMaxHeight() && newH > window.getMinHeight()) {
@@ -92,6 +160,7 @@ public class ResizeController implements FxController {
}
}
@FXML
private void resizeRight(MouseEvent evt) {
double newW = evt.getSceneX();
if (newW < window.getMaxWidth() && newW > window.getMinWidth()) {
@@ -99,4 +168,21 @@ public class ResizeController implements FxController {
}
}
}
@FXML
public void savePositionalSettings() {
settings.windowHeightProperty().setValue(window.getHeight());
settings.windowWidthProperty().setValue(window.getWidth());
settings.windowYPositionProperty().setValue(window.getY());
settings.windowXPositionProperty().setValue(window.getX());
}
public BooleanBinding showResizingArrowsProperty() {
return showResizingArrows;
}
public boolean isShowResizingArrows() {
//If in fullscreen resizing is not be possible;
return !window.isFullScreen();
}
}

View File

@@ -1,12 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
<?import org.cryptomator.ui.controls.FormattedLabel?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.Hyperlink?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Region?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.Circle?>
@@ -15,7 +18,7 @@
fx:controller="org.cryptomator.ui.common.ErrorController"
prefWidth="450"
prefHeight="450"
spacing="12"
spacing="18"
alignment="TOP_CENTER">
<padding>
<Insets topRightBottomLeft="24"/>
@@ -27,12 +30,38 @@
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="EXCLAMATION" glyphSize="24"/>
</StackPane>
<VBox spacing="6" HBox.hgrow="ALWAYS">
<Label text="%generic.error.title" wrapText="true"/>
<FormattedLabel styleClass="label-large" format="%generic.error.title" arg1="${controller.errorCode}"/>
<Label text="%generic.error.instruction" wrapText="true"/>
<Hyperlink styleClass="hyperlink-underline" text="%generic.error.hyperlink.lookup" onAction="#searchError" contentDisplay="LEFT">
<graphic>
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
</graphic>
</Hyperlink>
<Hyperlink styleClass="hyperlink-underline" text="%generic.error.hyperlink.report" onAction="#reportError" contentDisplay="LEFT">
<graphic>
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
</graphic>
</Hyperlink>
</VBox>
</HBox>
<TextArea VBox.vgrow="ALWAYS" text="${controller.stackTrace}" prefRowCount="5" editable="false"/>
<VBox spacing="6" VBox.vgrow="ALWAYS">
<HBox>
<Label text="%generic.error.technicalDetails"/>
<Region HBox.hgrow="ALWAYS"/>
<Hyperlink styleClass="hyperlink-underline" text="%generic.button.copy" onAction="#copyDetails" contentDisplay="LEFT" visible="${!controller.copiedDetails}" managed="${!controller.copiedDetails}">
<graphic>
<FontAwesome5IconView glyph="CLIPBOARD" glyphSize="12"/>
</graphic>
</Hyperlink>
<Hyperlink styleClass="hyperlink-underline" text="%generic.button.copied" onAction="#copyDetails" contentDisplay="LEFT" visible="${controller.copiedDetails}" managed="${controller.copiedDetails}">
<graphic>
<FontAwesome5IconView glyph="CHECK" glyphSize="12"/>
</graphic>
</Hyperlink>
</HBox>
<TextArea VBox.vgrow="ALWAYS" text="${controller.detailText}" prefRowCount="5" editable="false"/>
</VBox>
<ButtonBar buttonMinWidth="120" buttonOrder="B+C">
<buttons>

View File

@@ -1,44 +0,0 @@
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextArea?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.TitledPane?>
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
<?import javafx.scene.layout.Region?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.text.TextFlow?>
<?import javafx.scene.text.Text?>
<VBox xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="org.cryptomator.ui.health.StartFailController"
prefWidth="600"
prefHeight="400"
spacing="12">
<padding>
<Insets topRightBottomLeft="12"/>
</padding>
<Label text="%health.fail.header" styleClass="label-large" />
<TextFlow fx:id="ioErrorLabel" visible="${controller.ioException}" managed="${controller.ioException}">
<Text text="%health.fail.ioError" />
<Text text="${controller.localizedErrorMessage}"/>
</TextFlow>
<Label fx:id="parseErrorLabel" text="%health.fail.parseError" visible="${controller.parseException}" managed="${controller.parseException}"/>
<TitledPane fx:id="moreInfoPane" text="%health.fail.moreInfo" expanded="false">
<graphic>
<HBox alignment="CENTER" minWidth="8">
<FontAwesome5IconView glyph="${controller.moreInfoIcon}"/>
</HBox>
</graphic>
<content>
<TextArea VBox.vgrow="ALWAYS" text="${controller.stackTrace}" prefRowCount="20" editable="false" />
</content>
</TitledPane>
<Region VBox.vgrow="ALWAYS"/>
<ButtonBar buttonMinWidth="120" buttonOrder="+CX">
<buttons>
<Button text="%generic.button.close" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#close"/>
</buttons>
</ButtonBar>
</VBox>

View File

@@ -12,7 +12,7 @@
fx:id="root"
fx:controller="org.cryptomator.ui.mainwindow.MainWindowController"
styleClass="main-window">
<VBox>
<VBox minWidth="650">
<fx:include source="main_window_title.fxml" VBox.vgrow="NEVER"/>
<StackPane VBox.vgrow="ALWAYS">
<SplitPane dividerPositions="0.33" orientation="HORIZONTAL">

View File

@@ -9,9 +9,22 @@
<fx:define>
<Cursor fx:id="nwResize" fx:constant="NW_RESIZE"/>
<Cursor fx:id="neResize" fx:constant="NE_RESIZE"/>
<Cursor fx:id="nsResize" fx:constant="N_RESIZE"/>
<Cursor fx:id="ewResize" fx:constant="E_RESIZE"/>
<Cursor fx:id="default" fx:constant="DEFAULT"/>
</fx:define>
<Region fx:id="tlResizer" cursor="${nwResize}" prefWidth="10" prefHeight="10" maxWidth="-Infinity" maxHeight="-Infinity" AnchorPane.topAnchor="0" AnchorPane.leftAnchor="0"/>
<Region fx:id="trResizer" cursor="${neResize}" prefWidth="10" prefHeight="10" maxWidth="-Infinity" maxHeight="-Infinity" AnchorPane.topAnchor="0" AnchorPane.rightAnchor="0"/>
<Region fx:id="blResizer" cursor="${neResize}" prefWidth="10" prefHeight="10" maxWidth="-Infinity" maxHeight="-Infinity" AnchorPane.bottomAnchor="0" AnchorPane.leftAnchor="0"/>
<Region fx:id="brResizer" cursor="${nwResize}" prefWidth="10" prefHeight="10" maxWidth="-Infinity" maxHeight="-Infinity" AnchorPane.bottomAnchor="0" AnchorPane.rightAnchor="0"/>
<Region fx:id="tlResizer" cursor="${nwResize}" prefWidth="10" prefHeight="10" maxWidth="-Infinity" maxHeight="-Infinity" visible="${controller.showResizingArrows}" managed="${controller.showResizingArrows}" onMouseDragged="#resizeTopLeft" onMouseReleased="#savePositionalSettings" AnchorPane.topAnchor="0" AnchorPane.leftAnchor="0"/>
<Region fx:id="trResizer" cursor="${neResize}" prefWidth="10" prefHeight="10" maxWidth="-Infinity" maxHeight="-Infinity" visible="${controller.showResizingArrows}" managed="${controller.showResizingArrows}" onMouseDragged="#resizeTopRight" onMouseReleased="#savePositionalSettings" AnchorPane.topAnchor="0" AnchorPane.rightAnchor="0"/>
<Region fx:id="blResizer" cursor="${neResize}" prefWidth="10" prefHeight="10" maxWidth="-Infinity" maxHeight="-Infinity" visible="${controller.showResizingArrows}" managed="${controller.showResizingArrows}" onMouseDragged="#resizeBottomLeft" onMouseReleased="#savePositionalSettings" AnchorPane.bottomAnchor="0" AnchorPane.leftAnchor="0"/>
<Region fx:id="brResizer" cursor="${nwResize}" prefWidth="10" prefHeight="10" maxWidth="-Infinity" maxHeight="-Infinity" visible="${controller.showResizingArrows}" managed="${controller.showResizingArrows}" onMouseDragged="#resizeBottomRight" onMouseReleased="#savePositionalSettings" AnchorPane.bottomAnchor="0" AnchorPane.rightAnchor="0"/>
<Region fx:id="tResizer" cursor="${nsResize}" prefWidth="0" prefHeight="6" maxWidth="-Infinity" maxHeight="-Infinity" visible="${controller.showResizingArrows}" managed="${controller.showResizingArrows}" onMouseDragged="#resizeTop" onMouseReleased="#savePositionalSettings" AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="0.0"/>
<Region fx:id="rResizer" cursor="${ewResize}" prefWidth="6" prefHeight="0" maxWidth="-Infinity" maxHeight="-Infinity" visible="${controller.showResizingArrows}" managed="${controller.showResizingArrows}" onMouseDragged="#resizeRight" onMouseReleased="#savePositionalSettings" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="10.0"/>
<Region fx:id="bResizer" cursor="${nsResize}" prefWidth="6" prefHeight="6" maxWidth="-Infinity" maxHeight="-Infinity" visible="${controller.showResizingArrows}" managed="${controller.showResizingArrows}" onMouseDragged="#resizeBottom" onMouseReleased="#savePositionalSettings" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0"/>
<Region fx:id="lResizer" cursor="${ewResize}" prefWidth="6" prefHeight="6" maxWidth="-Infinity" maxHeight="-Infinity" visible="${controller.showResizingArrows}" managed="${controller.showResizingArrows}" onMouseDragged="#resizeLeft" onMouseReleased="#savePositionalSettings" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="0.0" AnchorPane.topAnchor="10.0"/>
<Region fx:id="lDefaultRegion" cursor="${default}" prefWidth="1" prefHeight="1" maxWidth="-Infinity" maxHeight="-Infinity" AnchorPane.bottomAnchor="-1" AnchorPane.leftAnchor="-1" AnchorPane.topAnchor="-1"/>
<Region fx:id="tDefaultRegion" cursor="${default}" prefWidth="1" prefHeight="1" maxWidth="-Infinity" maxHeight="-Infinity" AnchorPane.leftAnchor="-1" AnchorPane.topAnchor="-1" AnchorPane.rightAnchor="-1"/>
<Region fx:id="rDefaultRegion" cursor="${default}" prefWidth="1" prefHeight="1" maxWidth="-Infinity" maxHeight="-Infinity" AnchorPane.topAnchor="-1" AnchorPane.rightAnchor="-1" AnchorPane.bottomAnchor="-1"/>
<Region fx:id="bDefaultRegion" cursor="${default}" prefWidth="1" prefHeight="1" maxWidth="-Infinity" maxHeight="-Infinity" AnchorPane.rightAnchor="-1" AnchorPane.bottomAnchor="-1" AnchorPane.leftAnchor="-1"/>
</AnchorPane>

View File

@@ -14,8 +14,11 @@ generic.button.done=Done
generic.button.next=Next
generic.button.print=Print
## Error
generic.error.title=An unexpected error occurred
generic.error.instruction=This should not have happened. Please report the error text below and include a description of what steps did lead to this error.
generic.error.title=Error %s
generic.error.instruction=Oops! Cryptomator didn't expect this to happen. You can look up existing solutions for this error. Or if it has not been reported yet, feel free to do so.
generic.error.hyperlink.lookup=Look up this error
generic.error.hyperlink.report=Report this error
generic.error.technicalDetails=Details:
# Defaults
defaults.vault.vaultName=Vault

View File

@@ -13,8 +13,6 @@ generic.button.done=تم
generic.button.next=التالي
generic.button.print=طباعة
## Error
generic.error.title=حدث خطأ غير متوقع
generic.error.instruction=ما كان ينبغي أن يحدث هذا. يرجى الإبلاغ عن نص الخطأ أدناه وإدراج وصف للخطوات التي أدت إلى هذا الخطأ.
# Defaults
defaults.vault.vaultName=مخزن
@@ -95,7 +93,6 @@ forgetPassword.information=سيؤدي هذا إلى حذف كلمة المرور
forgetPassword.confirmBtn=نسيت كلمة المرور
# Unlock
unlock.title=افتح الحافظة
unlock.passwordPrompt=‮أدخل كلمة السر لـ "%s":
unlock.savePassword=تذكر كلمة المرور
unlock.unlockBtn=افتح
@@ -129,7 +126,7 @@ migration.start.confirm=نعم, محفظتي متزامنة بالكامل
migration.run.enterPassword=أدخل كلمة المرور لـ "%s"
migration.run.startMigrationBtn=ترقية الحافظة
migration.run.progressHint=قد يستغرق هذا بعض الوقت…
## Sucess
## Success
migration.success.nextStepsInstructions=تم ترحيل "%s" بنجاح.\nيمكنك الآن فتح مخزنك.
migration.success.unlockNow=افتح الان
## Missing file system capabilities
@@ -145,8 +142,11 @@ migration.impossible.reason=لا يمكن ترحيل المخزن تلقائيا
migration.impossible.moreInfo=لا يزال ممكناً فتح المخزن باستخدام إصدار قديم. للحصول على تعليمات حول كيفية ترحيل المخزن يدوياً، قم بزيارة
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Checks
## Fix Application
# Preferences
preferences.title=تفضيلات
@@ -164,10 +164,6 @@ preferences.general.debugLogging=تمكين سجلات التصحيح
preferences.general.debugDirectory=عرض ملفات السجل
preferences.general.autoStart=تشغيل Cryptomator عند بدء تشغيل النظام
preferences.general.keychainBackend=تخزين كلمات المرور مع
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome Keyring
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=محفظة KDE
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=الوصول إلى سلسلة مفاتيح ماك
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=حماية بيانات ويندوز
preferences.general.interfaceOrientation=اتجاه الواجهة
preferences.general.interfaceOrientation.ltr=من اليسار إلى اليمين
preferences.general.interfaceOrientation.rtl=من اليمين إلى اليسار
@@ -268,6 +264,7 @@ vaultOptions.general.actionAfterUnlock=بعد فتح القفل بنجاح
vaultOptions.general.actionAfterUnlock.ignore=‮لا تفعل شيئاً
vaultOptions.general.actionAfterUnlock.reveal=اظهار القرص
vaultOptions.general.actionAfterUnlock.ask=اسأل
## Mount
vaultOptions.mount=القرص الوهمي
vaultOptions.mount.readonly=للقراءة فقط
@@ -283,10 +280,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=اختر مجلد فارغ
vaultOptions.masterkey=كلمة المرور
vaultOptions.masterkey.changePasswordBtn=تغيير كلمة المرور
vaultOptions.masterkey.forgetSavedPasswordBtn=نسيان كلمة المرور المحفوظة
vaultOptions.masterkey.recoveryKeyExpanation=مفتاح الاسترداد هو وسيلتك الوحيدة لاستعادة الوصول إلى مخزنك إذا فقدت كلمة المرور.
vaultOptions.masterkey.recoveryKeyExplanation=مفتاح الاسترداد هو وسيلتك الوحيدة لاستعادة الوصول إلى مخزنك إذا فقدت كلمة المرور.
vaultOptions.masterkey.showRecoveryKeyBtn=عرض مفتاح الاسترداد
vaultOptions.masterkey.recoverPasswordBtn=استرجاع كلمة المرور
## Auto Lock
# Recovery Key
recoveryKey.title=مفتاح الاسترداد

View File

@@ -13,8 +13,6 @@ generic.button.done=Gotovo
generic.button.next=Sljedeće
generic.button.print=Ispis
## Error
generic.error.title=Došlo je do neočekivane greške
generic.error.instruction=Ovo se nije trebalo dogoditi. Molimo da prijavite opis greške ispod, kao i korake koji su do greške doveli.
# Defaults
defaults.vault.vaultName=Sef
@@ -44,6 +42,10 @@ addvaultwizard.new.locationPrompt=…
addvaultwizard.new.directoryPickerLabel=Prilagođena lokacija
addvaultwizard.new.directoryPickerButton=Odaberi…
addvaultwizard.new.directoryPickerTitle=Izaberi folder
addvaultwizard.new.fileAlreadyExists=Upozorenje: Fajl ili mapa s tim nazivom već postoji
addvaultwizard.new.locationDoesNotExist=Direktorij u navedenoj putanji ne postoji ili mu se ne može pristupiti
addvaultwizard.new.locationIsNotWritable=Nije moguće izvršiti operaciju pisanja na navedenoj putanji
addvaultwizard.new.locationIsOk=Pogodno mjesto za vaš sef
addvaultwizard.new.invalidName=Naziv sefa neispravan. Molimo razmislite o drugom nazivu.
### Password
addvaultwizard.new.createVaultBtn=Kreiraj novi sef
@@ -91,7 +93,6 @@ forgetPassword.information=Ovo će izbrisati sačuvanu lozinku ovog sefa iz vaš
forgetPassword.confirmBtn=Zaboravili ste šifru
# Unlock
unlock.title=Otključaj sef
unlock.passwordPrompt=Unesite lozinku za "%s":
unlock.savePassword=Zapamti šifru
unlock.unlockBtn=Otključaj
@@ -125,7 +126,7 @@ migration.start.confirm=Da, moj sef je u potpunosti sinhroniziran
migration.run.enterPassword=Unesite lozinku za "%s"
migration.run.startMigrationBtn=Nadogradi sef
migration.run.progressHint=Ovo bi moglo potrajati…
## Sucess
## Success
migration.success.nextStepsInstructions="%s" je uspješno nadograđen.\nSada možete otključati svoj sef.
migration.success.unlockNow=Otključaj sada
## Missing file system capabilities
@@ -141,8 +142,11 @@ migration.impossible.reason=Sef se ne može automatski migrirati jer njegovo mje
migration.impossible.moreInfo=Sef se i dalje može otvoriti sa starijom verzijom. Za upute o ručnom migriranju sefa posjetite
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Checks
## Fix Application
# Preferences
preferences.title=Postavke
@@ -160,10 +164,6 @@ preferences.general.debugLogging=Omogući evidenciju otklanjanja pogrešaka
preferences.general.debugDirectory=Pokaži dnevnik podataka
preferences.general.autoStart=Pokreni Cryptomator pri pokretanju sistema
preferences.general.keychainBackend=Pohrani lozinku sa
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome Keyring
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE Wallet
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS Keychain Access
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Windows Data Protection
preferences.general.interfaceOrientation=Orijentacija Interfejsa
preferences.general.interfaceOrientation.ltr=S lijeva ka desno
preferences.general.interfaceOrientation.rtl=Sa desna ka lijevo
@@ -280,6 +280,7 @@ vaultOptions.general.actionAfterUnlock=Nakon uspješnog otključavanja
vaultOptions.general.actionAfterUnlock.ignore=Ne radi ništa
vaultOptions.general.actionAfterUnlock.reveal=Otkrij pogon
vaultOptions.general.actionAfterUnlock.ask=Pitaj
## Mount
vaultOptions.mount=Povezivanje
vaultOptions.mount.readonly=Samo čitanje
@@ -295,10 +296,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Izaberi praznu mapu
vaultOptions.masterkey=Šifra
vaultOptions.masterkey.changePasswordBtn=Promjeni lozinku
vaultOptions.masterkey.forgetSavedPasswordBtn=Zaborav spremljenu šifru
vaultOptions.masterkey.recoveryKeyExpanation=Ključ za oporavak je vaše jedino sredstvo za vraćanje pristupa sefu ako izgubite lozinku.
vaultOptions.masterkey.recoveryKeyExplanation=Ključ za oporavak je vaše jedino sredstvo za vraćanje pristupa sefu ako izgubite lozinku.
vaultOptions.masterkey.showRecoveryKeyBtn=Pokaži ključ za oporavak
vaultOptions.masterkey.recoverPasswordBtn=Povrati šifru
## Auto Lock
# Recovery Key
recoveryKey.title=Ključ za oporavak

View File

@@ -13,8 +13,6 @@ generic.button.done=Fet
generic.button.next=Següent
generic.button.print=Imprimeix
## Error
generic.error.title=S'ha produït un error inesperat
generic.error.instruction=Això no hauria d'haver passat. Si us plau, informeu del text de l'error i inclogueu una descripció de quins passos han dut a aquest error.
# Defaults
defaults.vault.vaultName=Caixa forta
@@ -45,7 +43,9 @@ addvaultwizard.new.directoryPickerLabel=Ubicació personalitzada
addvaultwizard.new.directoryPickerButton=Trieu…
addvaultwizard.new.directoryPickerTitle=Seleccioneu el directori
addvaultwizard.new.fileAlreadyExists=Ja existeix un fitxer o un directori amb el nom de la caixa forta
addvaultwizard.new.locationDoesNotExist=Un directori de la ruta especificada no existeix o no s'hi pot accedir
addvaultwizard.new.locationIsNotWritable=No teniu permís d'escriptura en la ruta especificada
addvaultwizard.new.locationIsOk=Localització per a la vostra caixa forta
addvaultwizard.new.invalidName=El nom de la caixa forta no és vàlid. Si us plau, escribiu un mom de directori amb caràcters estàndard.
### Password
addvaultwizard.new.createVaultBtn=Crea la caixa forta
@@ -93,7 +93,7 @@ forgetPassword.information=Això eliminarà la contrasenya desada d'aquesta caix
forgetPassword.confirmBtn=He oblidat la contrasenya
# Unlock
unlock.title=Desbloquejar la caixa forta
unlock.title=Desbloca "%s"
unlock.passwordPrompt=Introduïu la contrasenya de "%s":
unlock.savePassword=Recorda la contrasenya
unlock.unlockBtn=Desbloqueja
@@ -128,7 +128,7 @@ migration.start.confirm=Sí, la meua caixa forta està completament sicronitzada
migration.run.enterPassword=Introduïu la contrasenya per a "%s"
migration.run.startMigrationBtn=Migrar la caixa forta
migration.run.progressHint=Això pot trigar una mica...
## Sucess
## Success
migration.success.nextStepsInstructions="%s" s'ha migrat correctament.\nJa podeu desbloquejar la vostra caixa forta.
migration.success.unlockNow=Desbloqueja ara
## Missing file system capabilities
@@ -144,19 +144,38 @@ migration.impossible.reason=La caixa forta no es pot migrar automàticament perq
migration.impossible.moreInfo=La caixa forta es pot obrir amb una versió anterior. Per saber com poder fer la migració de manera manual, visiteu
# Health Check
health.title=Comprovació de la caixa forta
health.start.configInvalid=S'ha produït un problema en la lectura i anàlisi del fitxer de configuració de la caixa forta.
health.checkList.selectAllBox=Selecciona-ho tot
## Start
health.title=Comprovació de "%s"
health.intro.header=Comprovació d'estat
health.intro.text=La comprovació de salut és una col·lecció de comprovacions per a detectar la possibilitat de resoldre problemes en l'estructura interna de la vostra caixa forta. Tingueu en compte:
health.intro.remarkSync=Assegureu que tots els dispositius s'han sincronitzat completament, això resol la major part dels problemes.
health.intro.remarkFix=No s'han pogut resoldre tots els problemes.
health.intro.remarkBackup=Si les dades s'han corromput, solament una còpia de seguretat ho podrà resoldre.
health.intro.affirmation=He llegit i entès la informació anterior
## Start Failure
health.fail.header=Error en desar la configuració de la caixa forta
health.fail.ioError=S'ha trobat un error mentre s'accedia al fitxer de configuració.
health.fail.parseError=S'ha trobat un error mentre es processava la configuració de la caixa forta.
health.fail.moreInfo=Més informació
## Check Selection
health.checkList.description=Selecciona les caselles en la llista de l'esquerra o feu servir els botons de la part inferior.
health.checkList.selectAllButton=Selecciona tots
health.checkList.deselectAllButton=Deselecciona tots
health.check.runBatchBtn=Executa les proves seleccionades
## Detail view
health.check.detail.header=Resultats de %s
health.check.detail.taskNotStarted=La prova no ha estat seleccionada per a executar-la.
health.check.detail.taskRunning=La prova és en procés…
health.check.detail.taskSucceeded=La prova ha finalitzat amb èxit després de %d mil·lisegons.
health.check.detail.taskCancelled=S'ha cancel·lat la prova.
health.check.detail.problemCount=S'hi han trobat %d problemes i %d errades irrecuperables.
health.check.detail.noSelectedCheck=Per a obtenir-ne els resultats trieu una de les comprovacions finalitzades de la llista de l'esquerra.
health.check.detail.checkScheduled=La comprovació s'ha programat.
health.check.detail.checkRunning=La prova és en procés…
health.check.detail.checkSkipped=La prova no ha estat seleccionada per a executar-la.
health.check.detail.checkFinished=La prova ha finalitzat amb èxit.
health.check.detail.checkFinishedAndFound=La comprovació ha finalitzat. Si us plau, comproveu-ne es resultat.
health.check.detail.checkFailed=La comprovació ha acabat a causa d'un error.
health.check.detail.checkCancelled=S'ha cancel·lat la prova.
health.check.exportBtn=Exporta informe
## Checks
## Fix Application
health.fix.fixBtn=Corregeix
health.fix.successTip=S'ha corregit amb èxit
health.fix.failTip=La correcció ha fallat, vegeu-ne els detalls al registre
# Preferences
preferences.title=Preferències
@@ -174,10 +193,6 @@ preferences.general.debugLogging=Habilita el registre de depuració
preferences.general.debugDirectory=Mostra els fitxers de registres
preferences.general.autoStart=Executa Cryptomator en engegar el sistema
preferences.general.keychainBackend=Desar contrasenyes amb
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Anell de claus de Gnome
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=Cartera de KDE
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=Accés a clauers macOS
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Windows Data Protection
preferences.general.interfaceOrientation=Orientació de la interfície
preferences.general.interfaceOrientation.ltr=Esquerra a dreta
preferences.general.interfaceOrientation.rtl=Dreta a esquerra
@@ -294,12 +309,15 @@ wrongFileAlert.link=Per rebre assistència, visiteu
## General
vaultOptions.general=General
vaultOptions.general.vaultName=Nom de la caixa forta
vaultOptions.general.autoLock.lockAfterTimePart1=Bloca després de
vaultOptions.general.autoLock.lockAfterTimePart2=minuts
vaultOptions.general.unlockAfterStartup=Desbloqueja la caixa forta quan s'inicia Cryptomator
vaultOptions.general.actionAfterUnlock=Després d'un desbloqueig correcte
vaultOptions.general.actionAfterUnlock.ignore=No facis res
vaultOptions.general.actionAfterUnlock.reveal=Mostra la unitat
vaultOptions.general.actionAfterUnlock.ask=Pregunta
vaultOptions.general.healthBtn=Inicia la comprovació
vaultOptions.general.startHealthCheckBtn=Inicia la comprovació
## Mount
vaultOptions.mount=Muntatge
vaultOptions.mount.readonly=Només lectura
@@ -315,11 +333,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Esculliu un directori buit
vaultOptions.masterkey=Contrasenya
vaultOptions.masterkey.changePasswordBtn=Canvi de contrasenya
vaultOptions.masterkey.forgetSavedPasswordBtn=Oblida la contrasenya desada
vaultOptions.masterkey.recoveryKeyExpanation=La clau de recuperació és l'unic mitjà de restaurar l'accès a la caixa forta en cas de perdre la contrasenya.
vaultOptions.masterkey.recoveryKeyExplanation=La clau de recuperació és l'unic mitjà de restaurar l'accès a la caixa forta en cas de perdre la contrasenya.
vaultOptions.masterkey.showRecoveryKeyBtn=Mostra la clau de recuperació
vaultOptions.masterkey.recoverPasswordBtn=Recupera la contrasenya
## Auto Lock
vaultOptions.autoLock.lockAfterTimePart2=minuts
# Recovery Key
recoveryKey.title=Clau de recuperació

View File

@@ -13,8 +13,11 @@ generic.button.done=Hotovo
generic.button.next=Další
generic.button.print=Tisk
## Error
generic.error.title=Došlo k neočekávané chybě
generic.error.instruction=Tohle se nemělo stát. Prosím, nahlaste níže uvedený chybový text a popište, jaké kroky vedly k této chybě.
generic.error.title=Chyba %s
generic.error.instruction=Jejda! Tohle Cryptomator nečekal. Můžete najít již existující řešení pro tuto chybu. Nebo pokud ještě nebyla nahlášena, neváhejte tak učinit.
generic.error.hyperlink.lookup=Vyhledat tuto chybu
generic.error.hyperlink.report=Nahlásit tuto chybu
generic.error.technicalDetails=Podrobnosti:
# Defaults
defaults.vault.vaultName=Trezor
@@ -95,7 +98,7 @@ forgetPassword.information=Toto smaže uložené heslo pro tento trezor.
forgetPassword.confirmBtn=Zapomenout heslo
# Unlock
unlock.title=Odemknout trezor
unlock.title=Odemknout "%s"
unlock.passwordPrompt=Zadejte heslo pro "%s":
unlock.savePassword=Zapamatovat heslo
unlock.unlockBtn=Odemknout
@@ -130,7 +133,7 @@ migration.start.confirm=Ano, můj trezor je plně synchronizován.
migration.run.enterPassword=Zadejte heslo pro "%s"
migration.run.startMigrationBtn=Migrovat trezor
migration.run.progressHint=Může to chvíli trvat…
## Sucess
## Success
migration.success.nextStepsInstructions=Migrace "%s" byla úspěšná.\nNyní můžete svůj trezor odemknout.
migration.success.unlockNow=Odemknout nyní
## Missing file system capabilities
@@ -146,27 +149,38 @@ migration.impossible.reason=Trezor nemůže být automaticky zmigrován, protož
migration.impossible.moreInfo=Trezor může být stále otevřen starší verzí. Pro pokyny, jak ručně migrovat trezor, navštivte
# Health Check
health.title=Kontrola stavu trezoru
health.start.introduction=Kontrola stavu trezoru je soubor kontrol, jejichž cílem je odhalit a případně odstranit problémy ve vnitřní struktuře trezoru. Upozorňujeme, že ne všechny problémy lze opravit. K provedení kontrol potřebujete heslo k trezoru.
health.start.configValid=Načtení a analýza konfiguračního souboru trezoru proběhly úspěšně. Pokračujte ve výběru kontrol.
health.start.configInvalid=Chyba při čtení a analýze konfiguračního souboru trezoru.
health.checkList.header=Dostupné kontroly stavu
health.checkList.selectAllBox=Vybrat vše
## Start
health.title=Kontrola stavu "%s"
health.intro.header=Kontrola stavu
health.intro.text=Kontrola stavu je soubor kontrol, které odhalí a případně opraví problémy ve vnitřní struktuře vašeho trezoru. Mějte prosím na paměti, že:
health.intro.remarkSync=Ujistěte se, že jsou všechna zařízení plně synchronizována, toto řeší většinu problémů.
health.intro.remarkFix=Ne všechny problémy lze vyřešit.
health.intro.remarkBackup=Pokud jsou data poškozena, může pomoci pouze záloha.
health.intro.affirmation=Přečetl jsem si výše uvedené informace a rozumím jim
## Start Failure
health.fail.header=Chyba při načítání konfigurace trezoru
health.fail.ioError=Došlo k chybě při přístupu a čtení konfiguračního souboru.
health.fail.parseError=Při analýze nastavení trezoru došlo k chybě.
health.fail.moreInfo=Více informací
## Check Selection
health.checkList.description=Vyberte kontroly z levého seznamu nebo použijte tlačítka níže.
health.checkList.selectAllButton=Vybrat všechny kontroly
health.checkList.deselectAllButton=Zrušit výběr všech kontrol
health.check.runBatchBtn=Spustit vybrané kontroly
## Detail view
health.check.detail.noSelectedCheck=Pro výsledky vyberte dokončenou kontrolu stavu v levém seznamu.
health.check.detail.header=Výsledky pro %s
health.check.detail.taskNotStarted=Kontrola nebyla vybrána ke spuštění.
health.check.detail.taskScheduled=Kontrola je naplánována.
health.check.detail.taskRunning=Kontrola právě probíhá…
health.check.detail.taskSucceeded=Kontrola byla úspěšně dokončena po %d milisekundách.
health.check.detail.taskFailed=Kontrola byla ukončena z důvodu chyby.
health.check.detail.taskCancelled=Kontrola byla zrušena.
health.check.detail.problemCount=Nalezeno %d problémů a %d neopravitelných chyb.
health.check.detail.checkScheduled=Kontrola je naplánována.
health.check.detail.checkRunning=Kontrola právě probíhá…
health.check.detail.checkSkipped=Kontrola nebyla vybrána ke spuštění.
health.check.detail.checkFinished=Kontrola byla úspěšně dokončena.
health.check.detail.checkFinishedAndFound=Kontrola byla dokončena. Zkontrolujte prosím výsledky.
health.check.detail.checkFailed=Kontrola byla ukončena z důvodu chyby.
health.check.detail.checkCancelled=Kontrola byla zrušena.
health.check.exportBtn=Exportovat sestavu
health.check.fixBtn=Opravit
## Checks
health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Kontrola adresáře
## Fix Application
health.fix.fixBtn=Opravit
health.fix.successTip=Oprava byla úspěšná
health.fix.failTip=Oprava selhala, podrobnosti naleznete v logu
# Preferences
preferences.title=Nastavení
@@ -184,10 +198,6 @@ preferences.general.debugLogging=Ladicí režim
preferences.general.debugDirectory=Ukázat soubory se záznamy událostí (log)
preferences.general.autoStart=Spustit Cryptomator při spuštění systému
preferences.general.keychainBackend=Ukládat hesla pomocí
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome klíčenka
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE KWallet
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS Svazek klíčů
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Windows Data Protection klíčenka
preferences.general.interfaceOrientation=Orientace prostředí
preferences.general.interfaceOrientation.ltr=Zleva doprava
preferences.general.interfaceOrientation.rtl=Zprava doleva
@@ -304,12 +314,15 @@ wrongFileAlert.link=Pro další informace navštivte
## General
vaultOptions.general=Obecné
vaultOptions.general.vaultName=Název trezoru
vaultOptions.general.autoLock.lockAfterTimePart1=Uzamknout při nečinnosti po
vaultOptions.general.autoLock.lockAfterTimePart2=minut
vaultOptions.general.unlockAfterStartup=Odemknout trezor při spuštění Cryptomator
vaultOptions.general.actionAfterUnlock=Po úspěšném odemčení
vaultOptions.general.actionAfterUnlock.ignore=Nedělat nic
vaultOptions.general.actionAfterUnlock.reveal=Zobrazit jednotku
vaultOptions.general.actionAfterUnlock.ask=Zeptat se
vaultOptions.general.healthBtn=Spuštění kontroly stavu
vaultOptions.general.startHealthCheckBtn=Zahájit kontrolu stavu
## Mount
vaultOptions.mount=Připojení
vaultOptions.mount.readonly=Pouze pro čtení
@@ -325,13 +338,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Vyberte prázdný adresář
vaultOptions.masterkey=Heslo
vaultOptions.masterkey.changePasswordBtn=Změnit heslo
vaultOptions.masterkey.forgetSavedPasswordBtn=Zapomenout uložené heslo
vaultOptions.masterkey.recoveryKeyExpanation=Obnovovací klíč je váš jediný způsob, jak obnovit přístup k trezoru, pokud ztratíte své heslo.
vaultOptions.masterkey.recoveryKeyExplanation=Obnovovací klíč je váš jediný způsob, jak obnovit přístup k trezoru, pokud ztratíte své heslo.
vaultOptions.masterkey.showRecoveryKeyBtn=Zobrazit klíč k obnově
vaultOptions.masterkey.recoverPasswordBtn=Obnovit heslo
## Auto Lock
vaultOptions.autoLock=Automatické uzamčení
vaultOptions.autoLock.lockAfterTimePart1=Uzamknout při nečinnosti po
vaultOptions.autoLock.lockAfterTimePart2=minut
# Recovery Key
recoveryKey.title=Klíč k obnově

View File

@@ -13,8 +13,11 @@ generic.button.done=Fertig
generic.button.next=Weiter
generic.button.print=Drucken
## Error
generic.error.title=Ein unerwarteter Fehler ist aufgetreten
generic.error.instruction=Das hätte nicht passieren dürfen. Bitte melde den folgenden Fehlertext und beschreibe kurz, durch welche Schritte der Fehler aufgetreten ist.
generic.error.title=Fehler %s
generic.error.instruction=Ups! Das hat sich Cryptomator anders vorgestellt. Du kannst Lösungen für diesen Fehler nachschlagen oder einen neuen Fehlerbericht einreichen.
generic.error.hyperlink.lookup=Diesen Fehler nachschlagen
generic.error.hyperlink.report=Diesen Fehler melden
generic.error.technicalDetails=Details:
# Defaults
defaults.vault.vaultName=Tresor
@@ -45,7 +48,7 @@ addvaultwizard.new.directoryPickerLabel=Eigener Ort
addvaultwizard.new.directoryPickerButton=Durchsuchen 
addvaultwizard.new.directoryPickerTitle=Verzeichnis auswählen
addvaultwizard.new.fileAlreadyExists=Eine Datei oder ein Ordner mit diesem Namen ist bereits vorhanden
addvaultwizard.new.locationDoesNotExist=Der Ordner im angegebenen Pfad existiert nicht oder kann nicht geöffnet werden
addvaultwizard.new.locationDoesNotExist=Ein Ordner im angegebenen Pfad existiert nicht oder kann nicht geöffnet werden
addvaultwizard.new.locationIsNotWritable=Kein Schreibzugriff auf den angegebenen Pfad
addvaultwizard.new.locationIsOk=Geeigneter Ort für deinen Tresor
addvaultwizard.new.invalidName=Ungültiger Tresorname. Bitte wähle einen regulären Namen, mit dem auch Verzeichnisse erstellt werden können.
@@ -59,7 +62,7 @@ addvault.new.readme.storageLocation.fileName=WICHTIG.rtf
addvault.new.readme.storageLocation.1=⚠️ TRESOR-DATEIEN ⚠️
addvault.new.readme.storageLocation.2=Dies ist der Speicherort deines Tresors.
addvault.new.readme.storageLocation.3=NICHT
addvault.new.readme.storageLocation.4=• in diesem Verzeichnis Dateien ändern oder
addvault.new.readme.storageLocation.4= Dateien in diesem Verzeichnis ändern oder
addvault.new.readme.storageLocation.5=• zu verschlüsselnde Dateien in diesem Verzeichnis ablegen.
addvault.new.readme.storageLocation.6=Falls du Dateien verschlüsseln und den Inhalt des Tresors anzeigen möchtest, befolge folgende Schritte:
addvault.new.readme.storageLocation.7=1. Füge diesen Tresor zu Cryptomator hinzu.
@@ -95,7 +98,7 @@ forgetPassword.information=Dies löscht das gespeicherte Passwort dieses Tresors
forgetPassword.confirmBtn=Passwort vergessen
# Unlock
unlock.title=Tresor entsperren
unlock.title=Entsperre "%s"
unlock.passwordPrompt=Gib das Passwort für „%s“ ein:
unlock.savePassword=Passwort merken
unlock.unlockBtn=Entsperren
@@ -119,7 +122,7 @@ lock.forced.message=Aufgrund von Zugriffen laufender Prozesse oder geöffneter D
lock.forced.confirmBtn=Sperren erzwingen
## Failure
lock.fail.heading=Tresor konnte nicht gesperrt werden.
lock.fail.message=Der Tresor „%s“ konnte nicht gesperrt werden. Stellen Sie sicher, dass Sie Ihre ungespeicherten Arbeit an anderer Stelle speichern und wichtige Lese-/Schreibvorgänge abgeschlossen sind. Um den Tresor zu schließen, beenden Sie den Cryptomator-Prozess.
lock.fail.message=Der Tresor „%s“ konnte nicht gesperrt werden. Stelle sicher, dass du deine ungespeicherte Arbeit an anderer Stelle speicherst und wichtige Lese-/Schreibvorgänge abgeschlossen sind. Um den Tresor zu schließen, beende den Cryptomator-Prozess.
# Migration
migration.title=Tresor aktualisieren
@@ -130,7 +133,7 @@ migration.start.confirm=Ja, mein Tresor ist vollständig synchronisiert
migration.run.enterPassword=Gib das Passwort für „%s“ ein
migration.run.startMigrationBtn=Tresor migrieren
migration.run.progressHint=Dies kann einige Zeit dauern …
## Sucess
## Success
migration.success.nextStepsInstructions=„%s“ erfolgreich migriert.\nDu kannst deinen Tresor jetzt entsperren.
migration.success.unlockNow=Jetzt entsperren
## Missing file system capabilities
@@ -146,27 +149,38 @@ migration.impossible.reason=Der Tresor kann nicht automatisch migriert werden, d
migration.impossible.moreInfo=Der Tresor kann auch jetzt noch mit einer älteren Version geöffnet werden. Eine Anleitung zum manuellen Migrieren eines Tresors findest du unter
# Health Check
health.title=Tresor-Integritätsprüfung
health.start.introduction=Die Tresor-Integritätsprüfung ist eine Sammlung von Prüfungen, um Probleme in der internen Struktur deines Tresors zu erkennen und zu beheben. Bitte beachte, dass nicht alle Probleme behoben werden können. Du benötigst das Tresor-Passwort, um die Prüfungen durchzuführen.
health.start.configValid=Das Lesen und Verarbeiten der Tresorkonfigurationsdatei war erfolgreich. Fahre fort, um Überprüfungen auszuwählen.
health.start.configInvalid=Fehler beim Lesen und Verarbeiten der Tresorkonfigurationsdatei.
health.checkList.header=Verfügbare Integritätsprüfungen
health.checkList.selectAllBox=Alles auswählen
## Start
health.title=Integritätstest von "%s"
health.intro.header=Zustandsprüfung
health.intro.text=Der Zustandscheck ist eine Sammlung von Tests, um Probleme mit der internen Struktur deines Tresores zu finden und möglicherweise zu reparieren. Bitte bedenke:
health.intro.remarkSync=Stelle sicher, dass alle Geräte vollständig synchronisiert sind. Dies löst die meisten Probleme.
health.intro.remarkFix=Nicht alle Probleme können gelöst werden.
health.intro.remarkBackup=Wenn Daten beschädigt sind, kann nur ein Backup helfen.
health.intro.affirmation=Ich habe die obenstehende Information gelesen und verstanden
## Start Failure
health.fail.header=Fehler beim Laden der Tresorkonfiguration
health.fail.ioError=Beim Lesezugriff auf die Konfigurationsdatei ist ein Fehler aufgetreten.
health.fail.parseError=Beim Parsen der Tresor-Konfiguration ist ein Fehler aufgetreten.
health.fail.moreInfo=Weitere Informationen
## Check Selection
health.checkList.description=Markiere Prüfungen in der linken Liste oder benutze die Knöpfe darunter.
health.checkList.selectAllButton=Alle Prüfungen auswählen
health.checkList.deselectAllButton=Alle Prüfungen abwählen
health.check.runBatchBtn=Ausgewählte Prüfungen ausführen
## Detail view
health.check.detail.noSelectedCheck=Wähle für die Ergebnisse eine abgeschlossene Intregritätsprüfung in der Liste links aus.
health.check.detail.header=Ergebnisse für %s
health.check.detail.taskNotStarted=Die Prüfung wurde nicht zum Ausführen ausgewählt.
health.check.detail.taskScheduled=Die Prüfung ist geplant.
health.check.detail.taskRunning=Die Prüfung läuft derzeit …
health.check.detail.taskSucceeded=Die Prüfung wurde nach %d Millisekunden erfolgreich beendet.
health.check.detail.taskFailed=Die Prüfung wurde wegen eines Fehlers beendet.
health.check.detail.taskCancelled=Die Prüfung wurde abgebrochen.
health.check.detail.problemCount=%d Probleme und %d unbehebbare Fehler gefunden.
health.check.detail.noSelectedCheck=Wähle für die Ergebnisse eine abgeschlossene Integritätsprüfung in der Liste links aus.
health.check.detail.checkScheduled=Die Prüfung ist geplant.
health.check.detail.checkRunning=Prüfung läuft…
health.check.detail.checkSkipped=Die Prüfung wurde nicht zur Ausführung ausgewählt.
health.check.detail.checkFinished=Die Prüfung wurde erfolgreich abgeschlossen.
health.check.detail.checkFinishedAndFound=Die Überprüfung wurde beendet. Bitte sichte die Ergebnisse.
health.check.detail.checkFailed=Die Prüfung wurde wegen eines Fehlers beendet.
health.check.detail.checkCancelled=Die Prüfung wurde abgebrochen.
health.check.exportBtn=Bericht exportieren
health.check.fixBtn=Reparieren
## Checks
health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Verzeichnisüberprüfung
## Fix Application
health.fix.fixBtn=Beheben
health.fix.successTip=Fehlerbehebung erfolgreich
health.fix.failTip=Reparatur fehlgeschlagen, siehe Log für Details
# Preferences
preferences.title=Einstellungen
@@ -184,10 +198,6 @@ preferences.general.debugLogging=Diagnoseprotokoll aktivieren
preferences.general.debugDirectory=Protokolldateien anzeigen
preferences.general.autoStart=Cryptomator beim Systemstart starten
preferences.general.keychainBackend=Passwörter speichern mit
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome-Schlüsselbund
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE Wallet
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS-Schlüsselbund-Zugriff
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Windows-Datenschutz
preferences.general.interfaceOrientation=Oberflächenausrichtung
preferences.general.interfaceOrientation.ltr=Von links nach rechts
preferences.general.interfaceOrientation.rtl=Von rechts nach links
@@ -251,7 +261,7 @@ main.debugModeEnabled.tooltip=Diagnosemodus ist aktiviert
main.donationKeyMissing.tooltip=Zieh bitte eine Spende in Betracht
## Drag 'n' Drop
main.dropZone.dropVault=Diesen Tresor hinzufügen
main.dropZone.unknownDragboardContent=Wenn Sie einen Tresor hinzufügen möchten, ziehen Sie ihn in dieses Fenster
main.dropZone.unknownDragboardContent=Falls du einen Tresor hinzufügen möchtest, zieh ihn in dieses Fenster
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Klicke hier, um einen Tresor hinzuzufügen
main.vaultlist.contextMenu.remove=Entfernen …
@@ -304,12 +314,15 @@ wrongFileAlert.link=Besuche für weitere Hilfe
## General
vaultOptions.general=Allgemein
vaultOptions.general.vaultName=Tresorname
vaultOptions.general.autoLock.lockAfterTimePart1=Nach
vaultOptions.general.autoLock.lockAfterTimePart2=Minuten Inaktivität sperren
vaultOptions.general.unlockAfterStartup=Tresor beim Start von Cryptomator entsperren
vaultOptions.general.actionAfterUnlock=Nach erfolgreichem Entsperren
vaultOptions.general.actionAfterUnlock.ignore=Nichts tun
vaultOptions.general.actionAfterUnlock.reveal=Laufwerk anzeigen
vaultOptions.general.actionAfterUnlock.ask=Nachfragen
vaultOptions.general.healthBtn=Integritätsprüfung starten
vaultOptions.general.startHealthCheckBtn=Integritätsprüfung starten
## Mount
vaultOptions.mount=Laufwerk
vaultOptions.mount.readonly=Schreibgeschützt
@@ -325,13 +338,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Wähle ein leeres Verzeichnis
vaultOptions.masterkey=Passwort
vaultOptions.masterkey.changePasswordBtn=Passwort ändern
vaultOptions.masterkey.forgetSavedPasswordBtn=Gespeichertes Passwort vergessen
vaultOptions.masterkey.recoveryKeyExpanation=Dein Wiederherstellungsschlüssel gehört nur dir! Dieser wird benötigt, um deinen Tresor wiederherzustellen, für den Fall das du dein Passwort verloren hast.
vaultOptions.masterkey.recoveryKeyExplanation=Dein Wiederherstellungsschlüssel gehört nur dir! Dieser wird benötigt, um deinen Tresor wiederherzustellen, für den Fall das du dein Passwort verloren hast.
vaultOptions.masterkey.showRecoveryKeyBtn=Wiederherstellungsschlüssel anzeigen
vaultOptions.masterkey.recoverPasswordBtn=Passwort wiederherstellen
## Auto Lock
vaultOptions.autoLock=Autom. Sperren
vaultOptions.autoLock.lockAfterTimePart1=Nach
vaultOptions.autoLock.lockAfterTimePart2=Minuten Inaktivität sperren
# Recovery Key
recoveryKey.title=Wiederherstellungsschlüssel

View File

@@ -13,8 +13,6 @@ generic.button.done=Κλείσιμο
generic.button.next=Επόμενο
generic.button.print=Εκτύπωση
## Error
generic.error.title=Παρουσιάστηκε ένα απροσδόκητο σφάλμα
generic.error.instruction=Αυτό δεν έπρεπε να συμβεί. Παρακαλώ αντιγράψτε το κείμενο του σφάλματος και επισυνάψτε μια περιγραφή των βημάτων που οδήγησαν σε αυτό το σφάλμα.
# Defaults
defaults.vault.vaultName=Vault
@@ -95,7 +93,7 @@ forgetPassword.information=Ο αποθηκευμένος κωδικός αυτο
forgetPassword.confirmBtn=Ξέχασα τον κωδικό πρόσβασης
# Unlock
unlock.title=Ξεκλείδωμα Vault
unlock.title=Ξεκλειδώστε "%s"
unlock.passwordPrompt=Εισάγετε τον κωδικό για "%s":
unlock.savePassword=Απομνημόνευση κωδικού πρόσβασης
unlock.unlockBtn=Ξεκλείδωμα
@@ -130,7 +128,7 @@ migration.start.confirm=Ναι, το vault μου είναι πλήρως συγ
migration.run.enterPassword=Εισάγετε τον κωδικό για "%s"
migration.run.startMigrationBtn=Ενσωμάτωση Vault
migration.run.progressHint=Αυτό θα πάρει αρκετό χρόνο…
## Sucess
## Success
migration.success.nextStepsInstructions="%s" συγχωνεύτηκε επιτυχώς.\nΜπορείτε να ξεκλειδώσετε το vault σας.
migration.success.unlockNow=Ξεκλείδωμα τώρα
## Missing file system capabilities
@@ -146,27 +144,38 @@ migration.impossible.reason=Το vault δεν μπορεί να συγχωνευ
migration.impossible.moreInfo=Το vault μπορεί να ανοιχθεί με παλαιότερη έκδοση. Για οδηγίες χειροκίνητης συγχώνευσης του vault, επισκεφτείτε
# Health Check
health.title=Έλεγχος Υγείας Vault
health.start.introduction=Ο Έλεγχος Υγείας του Vault είναι μια σειρά από ελέγχους για ανίχνευση και επιδιόρθωση των προβλημάτων στην εσωτερική δομή του Vault σας. Παρακαλώ σημειώστε, ότι δεν μπορούν να διορθωθούν όλα τα προβλήματα. Χρειάζεστε τον κωδικό πρόσβασης Vault για να εκτελέσετε τους ελέγχους.
health.start.configValid=Η ανάγνωση και η ανάλυση του αρχείου ρυθμίσεων του Vault ήταν επιτυχής. Συνεχίστε για να επιλέξετε ελέγχους.
health.start.configInvalid=Σφάλμα κατά την ανάγνωση και ανάλυση του αρχείου ρυθμίσεων του Vault.
health.checkList.header=Διαθέσιμοι Έλεγχοι Υγείας
health.checkList.selectAllBox=Επιλογή όλων
## Start
health.title=Έλεγχος υγείας του "%s"
health.intro.header=Έλεγχος υγείας
health.intro.text=Ο Έλεγχος Υγείας είναι μια συλλογή ελέγχων για τον εντοπισμό και ενδεχομένως την επίλυση προβλημάτων στην εσωτερική δομή του vault σας. Παρακαλώ λάβετε υπόψη:
health.intro.remarkSync=Βεβαιωθείτε ότι όλες οι συσκευές είναι πλήρως συγχρονισμένες, αυτό επιλύει τα περισσότερα προβλήματα.
health.intro.remarkFix=Δεν μπορούν να διορθωθούν όλα τα προβλήματα.
health.intro.remarkBackup=Εάν τα δεδομένα είναι κατεστραμμένα, μόνο ένα αντίγραφο ασφαλείας μπορεί να βοηθήσει.
health.intro.affirmation=Έχω διαβάσει και κατανοήσει τις παραπάνω πληροφορίες
## Start Failure
health.fail.header=Σφάλμα κατά τη φόρτωση παραμέτρων του Vault
health.fail.ioError=Παρουσιάστηκε σφάλμα κατά την πρόσβαση και ανάγνωση του αρχείου ρυθμίσεων.
health.fail.parseError=Παρουσιάστηκε σφάλμα κατά την ανάλυση των ρυθμίσεων του vault.
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.header=Αποτελέσματα από %s
health.check.detail.taskNotStarted=Ο έλεγχος δεν επιλέχθηκε για εκτέλεση.
health.check.detail.taskScheduled=Ο έλεγχος έχει προγραμματιστεί.
health.check.detail.taskRunning=Ο έλεγχος εκτελείται αυτήν τη στιγμή…
health.check.detail.taskSucceeded=Ο έλεγχος ολοκληρώθηκε επιτυχώς μετά από %d χιλιοστά του δευτερολέπτου.
health.check.detail.taskFailed=Ο έλεγχος τερματίστηκε λόγω σφάλματος.
health.check.detail.taskCancelled=Ο έλεγχος ακυρώθηκε.
health.check.detail.problemCount=Βρέθηκαν %d προβλήματα και %d μη επιδιορθώσιμα σφάλματα.
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.exportBtn=Εξαγωγή Αναφοράς
health.check.fixBtn=Επιδιόρθωση
## Checks
health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Έλεγχος Φακέλου
## Fix Application
health.fix.fixBtn=Επιδιόρθωση
health.fix.successTip=Επιτυχής επιδιόρθωση
health.fix.failTip=Επιδιόρθωση απέτυχε, δείτε το αρχείο καταγραφής για λεπτομέρειες
# Preferences
preferences.title=Προτιμήσεις
@@ -184,10 +193,6 @@ preferences.general.debugLogging=Ενεργοποίηση καταγραφής
preferences.general.debugDirectory=Αποκάλυψη αρχείων καταγραφής
preferences.general.autoStart=Εκκίνηση Cryptomator στην εκκίνηση του συστήματος
preferences.general.keychainBackend=Αποθήκευση κωδικού πρόσβασης με
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome Keyring
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE Wallet
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS Keychain πρόσβαση
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Προστασία δεδομένων Windows
preferences.general.interfaceOrientation=Προσανατολισμός εφαρμογής
preferences.general.interfaceOrientation.ltr=Αριστερά προς δεξιά
preferences.general.interfaceOrientation.rtl=Δεξιά προς αριστερά
@@ -304,12 +309,15 @@ wrongFileAlert.link=Για παραπάνω βοήθεια, επισκεφτεί
## General
vaultOptions.general=Γενικά
vaultOptions.general.vaultName=Όνομα Vault
vaultOptions.general.autoLock.lockAfterTimePart1=Κλείδωμα όταν παραμένει σε αδράνεια για
vaultOptions.general.autoLock.lockAfterTimePart2=λεπτά
vaultOptions.general.unlockAfterStartup=Ξεκλείδωμα vault όταν ξεκινά το Cryptomator
vaultOptions.general.actionAfterUnlock=Μετά το επιτυχές ξεκλείδωμα
vaultOptions.general.actionAfterUnlock.ignore=Να μην γίνει τίποτα
vaultOptions.general.actionAfterUnlock.reveal=Αποκάλυψη Εικονικού Δίσκου
vaultOptions.general.actionAfterUnlock.ask=Ρώτα
vaultOptions.general.healthBtn=Έναρξη ελέγχου Υγείας Vault
vaultOptions.general.startHealthCheckBtn=Έναρξη ελέγχου Υγείας
## Mount
vaultOptions.mount=Προσάρτηση
vaultOptions.mount.readonly=Μόνο για ανάγνωση
@@ -325,13 +333,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Επιλέξτε ένα άδ
vaultOptions.masterkey=Κωδικός πρόσβασης
vaultOptions.masterkey.changePasswordBtn=Αλλαγή κωδικού πρόσβασης
vaultOptions.masterkey.forgetSavedPasswordBtn=Διαγραφή αποθηκευμένου κωδικού
vaultOptions.masterkey.recoveryKeyExpanation=Το κλειδί ασφαλείας είναι ο μόνος τρόπος ανάκτησης πρόσβασης στο vault αν χάσετε τον κωδικό σας.
vaultOptions.masterkey.recoveryKeyExplanation=Το κλειδί ασφαλείας είναι ο μόνος τρόπος ανάκτησης πρόσβασης σε ένα vault αν χάσετε τον κωδικό σας.
vaultOptions.masterkey.showRecoveryKeyBtn=Προβολή κλειδιού ανάκτησης
vaultOptions.masterkey.recoverPasswordBtn=Ανάκτηση κωδικού
## Auto Lock
vaultOptions.autoLock=Αυτόματο Κλείδωμα
vaultOptions.autoLock.lockAfterTimePart1=Κλείδωμα όταν παραμένει σε αδράνεια για
vaultOptions.autoLock.lockAfterTimePart2=λεπτά
# Recovery Key
recoveryKey.title=Κλειδί Ανάκτησης

View File

@@ -13,8 +13,11 @@ generic.button.done=Hecho
generic.button.next=Continuar
generic.button.print=Imprimir
## Error
generic.error.title=Ocurrió un error inesperado
generic.error.instruction=Esto no debió suceder. Notifique el error de abajo e incluya una descripción de los pasos que llevaron a este error.
generic.error.title=Error %s
generic.error.instruction=¡Ups! Cryptomator no esperaba que esto sucediera. Puede buscar soluciones existentes para este error. O si aún no se ha notiicado, siéntase libre de hacerlo.
generic.error.hyperlink.lookup=Buscar este error
generic.error.hyperlink.report=Notificar este error
generic.error.technicalDetails=Detalles:
# Defaults
defaults.vault.vaultName=Bóveda
@@ -95,7 +98,7 @@ forgetPassword.information=Esto eliminará la contraseña guardada de esta bóve
forgetPassword.confirmBtn=Olvidar contraseña
# Unlock
unlock.title=Desbloquear bóveda
unlock.title=Desbloquear "%s"
unlock.passwordPrompt=Ingresar contraseña para "%s":
unlock.savePassword=Recordar contraseña
unlock.unlockBtn=Desbloquear
@@ -130,7 +133,7 @@ migration.start.confirm=Sí, mi bóveda está sincronizada
migration.run.enterPassword=Ingresar la contraseña para "%s"
migration.run.startMigrationBtn=Migrar bóveda
migration.run.progressHint=Esto puede tardar un poco…
## Sucess
## Success
migration.success.nextStepsInstructions="%s" se migró con éxito.\nYa se puede desbloquear la bóveda.
migration.success.unlockNow=Desbloquear ahora
## Missing file system capabilities
@@ -146,27 +149,38 @@ migration.impossible.reason=La bóveda no puede migrarse automáticamente porque
migration.impossible.moreInfo=La bóveda aún se puede abrir con una versión anterior. Para obtener instrucciones en cómo migrar manualmente una bóveda, visite
# Health Check
health.title=Comprobación del Estado de la Bóveda
health.start.introduction=La comprobación del estado de la bóveda es un conjunto de pruebas para detectar y posiblemente solucionar los problemas de la estructura interna de la bóveda. Tenga en cuenta que no todos los problemas son corregibles. Necesita la contraseña de la bóveda para realizar las comprobaciones.
health.start.configValid=La lectura y análisis del archivo de configuración de la bóveda fueron correctos. Proceda a seleccionar las comprobaciones.
health.start.configInvalid=Error al leer y analizar el archivo de configuración de la bóveda.
health.checkList.header=Comprobaciones del estado disponibles
health.checkList.selectAllBox=Seleccionar todo
## Start
health.title=Comprobador de estado de "%s"
health.intro.header=Comprobador de estado
health.intro.text=El comprobador de estado es una colección de comprobaciones para detectar y posiblemente corregir problemas en la estructura interna de su bóveda. Tome en cuenta:
health.intro.remarkSync=Asegúrese de que todos los dispositivos están completamente sincronizados, esto resuelve la mayoría de los problemas.
health.intro.remarkFix=No todos los problemas se pueden solucionar.
health.intro.remarkBackup=Si los datos están dañados, solo una copia de seguridad puede ayudar.
health.intro.affirmation=He leído y entendido la información anterior
## Start Failure
health.fail.header=Error al cargar la configuración de la bóveda
health.fail.ioError=Ocurrió un error al acceder y leer el archivo de configuración.
health.fail.parseError=Ocurrió un error mientras se analizaba la configuración de la bóveda.
health.fail.moreInfo=Más información
## Check Selection
health.checkList.description=Seleccione las comprobaciones en la lista de la izquierda o utilice los botones de abajo.
health.checkList.selectAllButton=Seleccionar todas las comprobaciones
health.checkList.deselectAllButton=Deseleccionar todas las comprobaciones
health.check.runBatchBtn=Ejecutar las comprobaciones seleccionadas
## Detail view
health.check.detail.noSelectedCheck=Para los resultados seleccione una comprobación del estado en la lista de la izquierda
health.check.detail.header=Resultados de %s
health.check.detail.taskNotStarted=No se ha seleccionado la comprobación para ejecutarse.
health.check.detail.taskScheduled=La comprobación está programada.
health.check.detail.taskRunning=La comprobación se está ejecutando…
health.check.detail.taskSucceeded=La comprobación finalizó correctamente después de %d milisegundos.
health.check.detail.taskFailed=La comprobación terminó debido a un error.
health.check.detail.taskCancelled=La comprobación se canceló.
health.check.detail.problemCount=Se encontraron %d problemas y %d errores no corregibles.
health.check.detail.checkScheduled=La comprobación está programada.
health.check.detail.checkRunning=La comprobación se está ejecutando…
health.check.detail.checkSkipped=No se ha seleccionado la comprobación para ejecutarse.
health.check.detail.checkFinished=La comprobación terminó con éxito.
health.check.detail.checkFinishedAndFound=La comprobación terminó de ejecutarse. Revise los resultados.
health.check.detail.checkFailed=La comprobación terminó debido a un error.
health.check.detail.checkCancelled=La comprobación se canceló.
health.check.exportBtn=Exportar informe
health.check.fixBtn=Reparar
## Checks
health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Comprobar directorio
## Fix Application
health.fix.fixBtn=Reparar
health.fix.successTip=Reparación exitosa
health.fix.failTip=Reparación fallida, ver el registro para más detalles
# Preferences
preferences.title=Preferencias
@@ -184,10 +198,6 @@ preferences.general.debugLogging=Habilitar registro de depuración
preferences.general.debugDirectory=Revelar archivos de registro
preferences.general.autoStart=Cargar Cryptomator al iniciar el sistema
preferences.general.keychainBackend=Guardar contraseñas con
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome Keyring
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE Wallet
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=Acceso a llaveros macOS
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Protección de Datos de Windows
preferences.general.interfaceOrientation=Orientación de la interfaz
preferences.general.interfaceOrientation.ltr=Izquierda a derecha
preferences.general.interfaceOrientation.rtl=Derecha a izquierda
@@ -203,6 +213,11 @@ preferences.updates.autoUpdateCheck=Buscar actualizaciones automáticamente
preferences.updates.checkNowBtn=Buscar ahora
preferences.updates.updateAvailable=Actualización a la versión %s disponible.
## Contribution
preferences.contribute=Apóyenos
preferences.contribute.registeredFor=Certificado de soporte registrado para %s
preferences.contribute.noCertificate=Apoye a Cryptomator y reciba un certificado de seguidor. Es como una clave de licencia, pero para gente asombrosa usando software libre. ;-)
preferences.contribute.getCertificate=¿Aún no tiene una? Aprenda cómo puede obtenerlo.
preferences.contribute.promptText=Pegue aquí el código de certificado de seguidor
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -299,12 +314,15 @@ wrongFileAlert.link=Para más ayuda, visite
## General
vaultOptions.general=General
vaultOptions.general.vaultName=Nombre de la bóveda
vaultOptions.general.autoLock.lockAfterTimePart1=Bloquear después de
vaultOptions.general.autoLock.lockAfterTimePart2=minutos
vaultOptions.general.unlockAfterStartup=Desbloquear bóveda al iniciar Cryptomator
vaultOptions.general.actionAfterUnlock=Después de desbloquear exitosamente
vaultOptions.general.actionAfterUnlock.ignore=No hacer nada
vaultOptions.general.actionAfterUnlock.reveal=Revelar unidad
vaultOptions.general.actionAfterUnlock.ask=Preguntar
vaultOptions.general.healthBtn=Iniciar comprobación del estado
vaultOptions.general.startHealthCheckBtn=Iniciar comprobación de estado
## Mount
vaultOptions.mount=Montaje
vaultOptions.mount.readonly=Sólo lectura
@@ -320,13 +338,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Elegir un directorio vacío
vaultOptions.masterkey=Contraseña
vaultOptions.masterkey.changePasswordBtn=Cambiar contraseña
vaultOptions.masterkey.forgetSavedPasswordBtn=Olvidar contraseña guardada
vaultOptions.masterkey.recoveryKeyExpanation=Una clave de recuperación es el único medio para restaurar el acceso a una bóveda si pierde su contraseña.
vaultOptions.masterkey.recoveryKeyExplanation=Una clave de recuperación es el único medio para restaurar el acceso a una bóveda si pierde su contraseña.
vaultOptions.masterkey.showRecoveryKeyBtn=Mostrar clave de recuperación
vaultOptions.masterkey.recoverPasswordBtn=Recuperar contraseña
## Auto Lock
vaultOptions.autoLock=Autobloqueo
vaultOptions.autoLock.lockAfterTimePart1=Bloquear después de
vaultOptions.autoLock.lockAfterTimePart2=minutos
# Recovery Key
recoveryKey.title=Clave de recuperación

View File

@@ -13,8 +13,11 @@ generic.button.done=Terminé
generic.button.next=Suivant
generic.button.print=Imprimer
## Error
generic.error.title=Une erreur inattendue est survenue
generic.error.instruction=Cela n'aurait pas dû se produire. Veuillez reporter le texte d'erreur ci-dessous et inclure une description des étapes qui ont conduit à cette erreur.
generic.error.title=Erreur: %s
generic.error.instruction=Oups ! Cryptomator ne s'attendait pas à ce que cela se produise. Vous pouvez rechercher des solutions existantes pour cette erreur. Ou si elle n'a pas encore été signalée, n'hésitez pas à le faire.
generic.error.hyperlink.lookup=Rechercher cette erreur
generic.error.hyperlink.report=Signaler cette erreur
generic.error.technicalDetails=Détails:
# Defaults
defaults.vault.vaultName=Coffre
@@ -60,7 +63,7 @@ addvault.new.readme.storageLocation.1=Fichiers de coffre-fort
addvault.new.readme.storageLocation.2=Ceci est le chemin de votre coffre-fort.
addvault.new.readme.storageLocation.3=NE PAS
addvault.new.readme.storageLocation.4=Modifier n'importe quel fichier dans ce répertoire ou
addvault.new.readme.storageLocation.5=Collez n'importe quel fichier à crypter dans ce répertoire.
addvault.new.readme.storageLocation.5=Collez n'importe quel fichier à chiffrer dans ce répertoire.
addvault.new.readme.storageLocation.6=Si vous voulez chiffrer les fichiers et afficher le contenu du coffre, faites ce qui suit :
addvault.new.readme.storageLocation.7=1. Ajouter ce coffre à Cryptomator.
addvault.new.readme.storageLocation.8=2. Déverrouillez le coffre-fort dans Cryptomator.
@@ -69,7 +72,7 @@ addvault.new.readme.storageLocation.10=Si vous avez besoin d'aide, consultez la
addvault.new.readme.accessLocation.fileName=BIENVENUE.rtf
addvault.new.readme.accessLocation.1=🔐 VOLUME CHIFFRÉ 🔐
addvault.new.readme.accessLocation.2=Ceci est le chemin d'accès de votre coffre-fort.
addvault.new.readme.accessLocation.3=Tous les fichiers ajoutés à ce volume seront cryptés par Cryptomator. Vous pouvez l'utiliser comme n'importe quel lecteur/répertoire. Ceci est seulement une vue déchiffrée de son contenu, vos fichiers restent chiffrés dans votre disque dur à tout le temps.
addvault.new.readme.accessLocation.3=Tous les fichiers ajoutés à ce volume seront chiffrés par Cryptomator. Vous pouvez l'utiliser comme n'importe quel lecteur/répertoire. Ceci est seulement une vue déchiffrée de son contenu, vos fichiers restent chiffrés dans votre disque dur à tout le temps.
addvault.new.readme.accessLocation.4=Vous pouvez supprimer ce fichier.
## Existing
addvaultwizard.existing.instruction=Sélectionner le fichier "masterkey.cryptomator" de votre coffre existant.
@@ -90,12 +93,12 @@ changepassword.enterOldPassword=Entrez le mot de passe actuel pour "%s"
changepassword.finalConfirmation=Je comprends que je ne pourrai pas récupérer mes données si j'oublie mon mot de passe
# Forget Password
forgetPassword.title=Mot de passe oublié
forgetPassword.title=Oublier le mot de passe
forgetPassword.information=Ceci supprimera le mot de passe enregistré pour ce coffre de votre chaîne de clés système.
forgetPassword.confirmBtn=Oublier le mot de passe
# Unlock
unlock.title=Déverrouiller le coffre
unlock.title=Déverrouiller %s
unlock.passwordPrompt=Entrez le mot de passe pour “%s” :
unlock.savePassword=Mémoriser le mot de passe
unlock.unlockBtn=Déverrouiller
@@ -130,7 +133,7 @@ migration.start.confirm=Oui, mon coffre est bien synchronisé
migration.run.enterPassword=Entrez le mot de passe pour %s
migration.run.startMigrationBtn=Migrer le coffre
migration.run.progressHint=Ceci peut prendre un certain temps…
## Sucess
## Success
migration.success.nextStepsInstructions=“%s” migré.\nVous pouvez à présent déverrouiller ce coffre.
migration.success.unlockNow=Déverrouiller
## Missing file system capabilities
@@ -146,27 +149,38 @@ migration.impossible.reason=Le coffre-fort ne peut pas être migré automatiquem
migration.impossible.moreInfo=Le coffre-fort peut encore être ouvert avec une version plus ancienne. Pour obtenir des instructions sur la façon de migrer manuellement un coffre-fort, visitez
# Health Check
health.title=Vérification de l'état de la chambre forte
health.start.introduction=La vérification d'état du coffre fort est une collection de vérifications pour détecter et possiblement corriger certains problèmes dans sa structure. Notez que tous les problèmes ne peuvent pas être réglés. Il vous faut le mot de passe de votre coffre fort pour effectuer ces vérifications.
health.start.configValid=La lecture et le parcours de la configuration se sont déroulés avec succès. Continuez avec la sélection des vérifications.
health.start.configInvalid=Erreur lors de la lecture et de l'analyse du fichier de configuration du coffre.
health.checkList.header=Tests de santé disponibles
health.checkList.selectAllBox=Tout sélectionner
## Start
health.title=Vérifier l'état de "%s"
health.intro.header=Vérifier l'état
health.intro.text=Le bilan de santé est une série de vérifications pour détecter et corriger d'éventuels problèmes de structure interne au coffre. Rappelez-vous :
health.intro.remarkSync=S'assurer que tous les appareils sont complètement synchronisés résout la plupart des problèmes.
health.intro.remarkFix=Certains problèmes ne peuvent pas être corrigés.
health.intro.remarkBackup=Si des données sont corrompues, la seule solution est une sauvegarde.
health.intro.affirmation=J'ai lu et compris les informations ci-dessus
## Start Failure
health.fail.header=Erreur lors du chargement de la configuration du coffre
health.fail.ioError=Une erreur s'est produite lors de l'accès et de la lecture du fichier de configuration.
health.fail.parseError=Une erreur est survenue pendant la lecture de la configuration du coffre.
health.fail.moreInfo=Plus d'informations
## Check Selection
health.checkList.description=Sélectionnez les contrôles dans la liste de gauche ou utilisez les boutons ci-dessous.
health.checkList.selectAllButton=Sélectionner toutes les vérifications
health.checkList.deselectAllButton=Désélectionner toutes les vérifications
health.check.runBatchBtn=Exécuter les vérifications sélectionnées
## Detail view
health.check.detail.noSelectedCheck=Pour les résultats, sélectionnez un bilan de santé terminé dans la liste de gauche.
health.check.detail.header=Résultats de %s
health.check.detail.taskNotStarted=La vérification n'a pas été sélectionnée pour être exécutée.
health.check.detail.taskScheduled=La vérification est programmée.
health.check.detail.taskRunning=Vérification en cours d'exécution…
health.check.detail.taskSucceeded=La vérification s'est terminée avec succès après %d millisecondes.
health.check.detail.taskFailed=La vérification s'est arrêté en raison d'une erreur.
health.check.detail.taskCancelled=Vérification annulée.
health.check.detail.problemCount=%d problèmes trouvés et %d erreurs non corrigeables.
health.check.detail.checkScheduled=La vérification est programmée.
health.check.detail.checkRunning=Vérification en cours d'exécution…
health.check.detail.checkSkipped=La vérification n'a pas été sélectionnée pour être exécutée.
health.check.detail.checkFinished=La vérification s'est terminée avec succès.
health.check.detail.checkFinishedAndFound=La vérification s'est terminée. Veuillez vérifier les résultats.
health.check.detail.checkFailed=La vérification s'est arrêtée en raison d'une erreur.
health.check.detail.checkCancelled=Vérification annulée.
health.check.exportBtn=Exporter le rapport
health.check.fixBtn=Corriger
## Checks
health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Vérification du répertoire
## Fix Application
health.fix.fixBtn=Réparer
health.fix.successTip=Réparation réussie
health.fix.failTip=Correction échouée, voir le journal pour plus de détails
# Preferences
preferences.title=Préférences
@@ -184,10 +198,6 @@ preferences.general.debugLogging=Activer les logs debug
preferences.general.debugDirectory=Afficher le journal
preferences.general.autoStart=Lancer Cryptomator au démarrage du système
preferences.general.keychainBackend=Stocker les mots de passe avec
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Trousseau Gnome
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=Portefeuille KDE
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=Accès au trousseau macOS
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Protection des données Windows
preferences.general.interfaceOrientation=Orientation de l'interface
preferences.general.interfaceOrientation.ltr=De gauche à droite
preferences.general.interfaceOrientation.rtl=De droite à gauche
@@ -304,12 +314,15 @@ wrongFileAlert.link=Pour toute aide supplémentaire, visitez
## General
vaultOptions.general=Général
vaultOptions.general.vaultName=Nom de voûte
vaultOptions.general.autoLock.lockAfterTimePart1=Verrouiler en cas d'inactivité pendant
vaultOptions.general.autoLock.lockAfterTimePart2=minutes
vaultOptions.general.unlockAfterStartup=Déverrouiller le coffre au démarrage
vaultOptions.general.actionAfterUnlock=Après un déverrouillage réussi
vaultOptions.general.actionAfterUnlock.ignore=Ne rien faire
vaultOptions.general.actionAfterUnlock.reveal=Afficher le disque
vaultOptions.general.actionAfterUnlock.ask=Demander
vaultOptions.general.healthBtn=Commencer le contrôle de santé
vaultOptions.general.startHealthCheckBtn=Commencer le contrôle de santé
## Mount
vaultOptions.mount=Montage
vaultOptions.mount.readonly=Lecture seule
@@ -325,13 +338,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Choisir un répertoire vide
vaultOptions.masterkey=Mot de passe
vaultOptions.masterkey.changePasswordBtn=Modifier le mot de passe
vaultOptions.masterkey.forgetSavedPasswordBtn=Oublier le mot de passe enregistré
vaultOptions.masterkey.recoveryKeyExpanation=Une clé de récupération est votre seul moyen de rétablir l'accès à un coffre-fort, si vous perdez votre mot de passe.
vaultOptions.masterkey.recoveryKeyExplanation=Une clé de récupération est votre seul moyen de rétablir l'accès à un coffre-fort, si vous perdez votre mot de passe.
vaultOptions.masterkey.showRecoveryKeyBtn=Afficher la clé de récupération
vaultOptions.masterkey.recoverPasswordBtn=Récupération du mot de passe
## Auto Lock
vaultOptions.autoLock=Verrouillage automatique
vaultOptions.autoLock.lockAfterTimePart1=Verrouiler en cas d'inactivité pendant
vaultOptions.autoLock.lockAfterTimePart2=minutes
# Recovery Key
recoveryKey.title=Clé de récupération

View File

@@ -13,8 +13,6 @@ generic.button.done=हो गया
generic.button.next=अगला
generic.button.print=प्रिंट करें
## Error
generic.error.title=कोई अनपेक्षित त्रुटि हो गई है
generic.error.instruction=ऐसा नहीं होना चाहिए था। कृपया नीचे त्रुटि पाठ की रिपोर्ट करें और इस त्रुटि के लिए क्या कदम उठाए, इसका विवरण शामिल करें।
# Defaults
defaults.vault.vaultName=गुप्त तिजोरी
@@ -83,13 +81,16 @@ unlock.unlockBtn=अनलॉक करें
migration.title=वाउल्ट को अपग्रेड करें
## Start
## Run
## Sucess
## Success
## Missing file system capabilities
## Impossible
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Checks
## Fix Application
# Preferences
preferences.title=प्राथमिकताएं
@@ -132,6 +133,7 @@ wrongFileAlert.link=और मदद के लिए, यह जाएं
## General
vaultOptions.general=सामान्य
vaultOptions.general.vaultName=वॉल्ट का नाम
## Mount
vaultOptions.mount=माउंट हो रहा है
vaultOptions.mount.winDriveLetterOccupied=इसका इस्तेमाल किया जा रहा है
@@ -144,7 +146,7 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=कोई खाली जग
## Master Key
vaultOptions.masterkey=पासवर्ड
vaultOptions.masterkey.changePasswordBtn=पासवर्ड बदलें
## Auto Lock
# Recovery Key

View File

@@ -37,13 +37,16 @@
# Migration
## Start
## Run
## Sucess
## Success
## Missing file system capabilities
## Impossible
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Checks
## Fix Application
# Preferences
## General
@@ -72,9 +75,10 @@
# Vault Options
## General
## Mount
## Master Key
## Auto Lock
# Recovery Key

View File

@@ -13,8 +13,6 @@ generic.button.done=Kész
generic.button.next=Következő
generic.button.print=Nyomtatás
## Error
generic.error.title=Egy váratlan hiba történt
generic.error.instruction=Ennek nem lett volna szabad megtörténnie. Kérjük jelezze a hibát az alábbi szöveggel valamint a hiba reprodukálásához szükséges lépésekkel.
# Defaults
defaults.vault.vaultName=Széf
@@ -90,7 +88,6 @@ forgetPassword.information=Eltávolítja a széf mentett jelszavát a rendszere
forgetPassword.confirmBtn=Jelszó elfelejtése
# Unlock
unlock.title=Széf feloldása
unlock.passwordPrompt=Írja be a jelszavát a következő széfhez "%s":
unlock.unlockBtn=Feloldás
##
@@ -117,7 +114,7 @@ migration.start.confirm=Igen, a széfem teljes mértékben szinkronizálva van
migration.run.enterPassword=Írja be a jelszót a következőhöz Enter the password for "%s"
migration.run.startMigrationBtn=Széf frissítése
migration.run.progressHint=Ez eltarthat egy darabig…
## Sucess
## Success
migration.success.nextStepsInstructions=A "%s" sikeresen migrálva. \nMost már feloldhatja a széfet.
migration.success.unlockNow=Azonnali feloldás
## Missing file system capabilities
@@ -133,8 +130,11 @@ migration.impossible.reason=A széfet nem lehet automatikusan frissíteni, mert
migration.impossible.moreInfo=A széf továbbra is megnyitható marad egy régebbi verzióval. A széf kézi frissítésével kapcsolatos utasításokért keresse fel a következő címet:
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Checks
## Fix Application
# Preferences
preferences.title=Beállítások
@@ -259,6 +259,7 @@ vaultOptions.general.actionAfterUnlock=Sikeres feloldás után
vaultOptions.general.actionAfterUnlock.ignore=Ne tegyen semmit
vaultOptions.general.actionAfterUnlock.reveal=Jelenítse meg a kötetet
vaultOptions.general.actionAfterUnlock.ask=Kérdez
## Mount
vaultOptions.mount=Felcsatolás
vaultOptions.mount.readonly=Csak-olvasható
@@ -274,10 +275,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Válasszon egy üres könyvt
vaultOptions.masterkey=Jelszó
vaultOptions.masterkey.changePasswordBtn=Jelszó megváltoztatása
vaultOptions.masterkey.forgetSavedPasswordBtn=Mentett jelszó törlése
vaultOptions.masterkey.recoveryKeyExpanation=A helyreállítási kulcs az egyetlen módja annak, hogy visszaállítsa a széfhez való hozzáférést, ha elveíti a jelszavát.
vaultOptions.masterkey.recoveryKeyExplanation=A helyreállítási kulcs az egyetlen módja annak, hogy visszaállítsa a széfhez való hozzáférést, ha elveíti a jelszavát.
vaultOptions.masterkey.showRecoveryKeyBtn=Visszaállítási kulcs megjelenítése
vaultOptions.masterkey.recoverPasswordBtn=Jelszó visszaállítása
## Auto Lock
# Recovery Key
recoveryKey.title=Visszaállítási kulcs

View File

@@ -13,8 +13,6 @@ generic.button.done=Selesai
generic.button.next=Lanjut
generic.button.print=Cetak
## Error
generic.error.title=Telah terjadi kesalahan tak terduga
generic.error.instruction=Ini harusnya tidak terjadi. Harap laporkan pesan kesalahan dibawah dan tulis deskripsi kenapa ini bisa terjadi.
# Defaults
defaults.vault.vaultName=Brankas
@@ -95,7 +93,6 @@ forgetPassword.information=Kata sandi vault yang tersimpan akan dihapus dari key
forgetPassword.confirmBtn=Lupa Kata Sandi
# Unlock
unlock.title=Buka Vault
unlock.passwordPrompt=Masukkan kata sandi untuk "%s":
unlock.savePassword=Simpan Kata Sandi
unlock.unlockBtn=Buka Gembok
@@ -130,7 +127,7 @@ migration.start.confirm=Ya, vault saya sepenuhnya tersinkronisasi
migration.run.enterPassword=Masukkan kata sandi untuk "%s"
migration.run.startMigrationBtn=Pindahkan Vault
migration.run.progressHint=Proses ini mungkin akan memakan waktu cukup lama…
## Sucess
## Success
migration.success.nextStepsInstructions="%s" telah berhasil dipindahkan.\nAnda sekarang dapat membuka vault Anda.
migration.success.unlockNow=Buka Kunci Sekarang
## Missing file system capabilities
@@ -146,27 +143,14 @@ migration.impossible.reason=Vault tidak dapat dipindahkan secara otomatis karena
migration.impossible.moreInfo=Vault dapat dibuka dengan program versi lebih lama. Apabila Anda ingin memindahkan vault secara manual, silahkan buka
# Health Check
health.title=Pemeriksaan Kesehatan Vault
health.start.introduction=Pemeriksaan Kesehatan Vault adalah kumpulan pemeriksaan untuk mendeteksi dan mungkin memperbaiki masalah dalam struktur internal brankas Anda. Harap dicatat, bahwa tidak semua masalah dapat diperbaiki. Anda memerlukan kata sandi brankas untuk melakukan pemeriksaan.
health.start.configValid=Membaca dan mengurai file konfigurasi vault berhasil. Lanjutkan untuk memilih pemeriksaan.
health.start.configInvalid=Kesalahan saat membaca dan menguraikan file pengaturan vault.
health.checkList.header=Pemeriksaan Kesehatan yang Tersedia
health.checkList.selectAllBox=Pilih Semua
## Start
## Start Failure
## Check Selection
health.check.runBatchBtn=Cek Jalankan yang dipilih
## Detail view
health.check.detail.noSelectedCheck=Untuk hasil, pilih pemeriksaan kesehatan yang sudah selesai di sebelah kiri.
health.check.detail.header=Hasil dari %s
health.check.detail.taskNotStarted=Cek tidak dipilih untuk dijalankan.
health.check.detail.taskScheduled=Pemeriksaan Terjadwal.
health.check.detail.taskRunning=Saat ini pemeriksaan sedang berjalan…
health.check.detail.taskSucceeded=Pemeriksaan berhasil diselesaikan setelah %d milidetik.
health.check.detail.taskFailed=Cek keluar karena kesalahan.
health.check.detail.taskCancelled=Cek dibatalkan.
health.check.detail.problemCount=Ditemukan %d masalah dan %d kesalahan yang tidak dapat diperbaiki.
health.check.exportBtn=Ekspor Laporan
health.check.fixBtn=Memperbaiki
## Checks
health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Pemeriksaan Direktori
## Fix Application
# Preferences
preferences.title=Preferensi
@@ -184,10 +168,6 @@ preferences.general.debugLogging=Aktifkan pencatatan debug
preferences.general.debugDirectory=Buka file log
preferences.general.autoStart=Luncurkan Cryptomator pada awal sistem
preferences.general.keychainBackend=Simpan kata sandi dengan
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gantungan Kunci Gnome
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=Dompet KDE
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=akses Kunci Rantai mac-OS
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Perlindungan Data Windows
preferences.general.interfaceOrientation=Orientasi Antarmuka
preferences.general.interfaceOrientation.ltr=Kiri ke kanan
preferences.general.interfaceOrientation.rtl=Kanan ke kiri
@@ -242,11 +222,12 @@ main.vaultDetail.migrateButton=Tingkatkan Vault
vaultOptions.general=Umum
vaultOptions.general.vaultName=Nama Brankas
vaultOptions.general.actionAfterUnlock.reveal=Buka Drive
## Mount
vaultOptions.mount.mountPoint.directoryPickerButton=Pilih…
## Master Key
vaultOptions.masterkey.changePasswordBtn=Ubah Kata Sandi
## Auto Lock
# Recovery Key

View File

@@ -13,20 +13,23 @@ generic.button.done=Fatto
generic.button.next=Avanti
generic.button.print=Stampa
## Error
generic.error.title=Si è verificato un errore inatteso
generic.error.instruction=Questo non dovrebbe essere accaduto. Si prega di segnalare il testo dell'errore qui sotto e includere una descrizione delle fasi che hanno portato a questo errore.
generic.error.title=Errore %s
generic.error.instruction=Ops! Cryptomator non si aspettava che ciò succedesse. Puoi cercare le soluzioni esistenti per questo errore. O se non è stato ancora segnalato, sentiti libero di farlo.
generic.error.hyperlink.lookup=Cerca questo errore
generic.error.hyperlink.report=Segnala questo errore
generic.error.technicalDetails=Dettagli:
# Defaults
defaults.vault.vaultName=Cassaforte
# Tray Menu
traymenu.showMainWindow=Visualizza
traymenu.showPreferencesWindow=Impostazioni
traymenu.showMainWindow=Mostra
traymenu.showPreferencesWindow=Preferenze
traymenu.lockAllVaults=Blocca Tutto
traymenu.quitApplication=Esci
traymenu.vault.unlock=Sblocca
traymenu.vault.lock=Blocca
traymenu.vault.reveal=Mostra
traymenu.vault.reveal=Rivela
# Add Vault Wizard
addvaultwizard.title=Aggiungi Cassaforte
@@ -35,23 +38,23 @@ addvaultwizard.welcome.newButton=Crea Nuova Cassaforte
addvaultwizard.welcome.existingButton=Apri Cassaforte Esistente
## New
### Name
addvaultwizard.new.nameInstruction=Scegli un nome per la tua cassaforte
addvaultwizard.new.namePrompt=Nome Cassaforte
addvaultwizard.new.nameInstruction=Scegli un nome per la cassaforte
addvaultwizard.new.namePrompt=Nome della Cassaforte
### Location
addvaultwizard.new.locationInstruction=Dove dovrebbe memorizzare Cryptomator i file crittografati della tua cassaforte?
addvaultwizard.new.locationLabel=Posizione archivio
addvaultwizard.new.locationInstruction=Dove Cryptomator dovrebbe memorizzare i file crittografati della tua cassaforte?
addvaultwizard.new.locationLabel=Posizione d'archiviazione
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Posizione personalizzata
addvaultwizard.new.directoryPickerLabel=Posizione Personalizzata
addvaultwizard.new.directoryPickerButton=Scegli…
addvaultwizard.new.directoryPickerTitle=Seleziona cartella
addvaultwizard.new.fileAlreadyExists=Un file o una cartella con il nome del vault esiste già
addvaultwizard.new.directoryPickerTitle=Seleziona la Cartella
addvaultwizard.new.fileAlreadyExists=Un file o una cartella con il nome della cassaforte esiste già
addvaultwizard.new.locationDoesNotExist=Una cartella nel percorso specificato non esiste o non è accessibile
addvaultwizard.new.locationIsNotWritable=Non c'è accesso in scrittura nel percorso specificato
addvaultwizard.new.locationIsOk=Posizione adatta per il tuo vault
addvaultwizard.new.invalidName=Nome della cassaforte non valido. Si prega di considerare un nome di directory regolare.
addvaultwizard.new.locationIsNotWritable=Nessun accesso di scrittura al percorso specificato
addvaultwizard.new.locationIsOk=Posizione idonea per la tua cassaforte
addvaultwizard.new.invalidName=Nome della cassaforte non valido. Sei pregato di considerare un nome della cartella regolare.
### Password
addvaultwizard.new.createVaultBtn=Crea Cassaforte
addvaultwizard.new.generateRecoveryKeyChoice=Non sarai in grado di accedere ai tuoi dati senza password. Vuoi una chiave di recupero nel caso in cui perdi la password?
addvaultwizard.new.generateRecoveryKeyChoice=Non potrai accedere ai tuoi dati senza la tua password. Desideri una chiave di recupero nel caso dovessi perdere la password?
addvaultwizard.new.generateRecoveryKeyChoice.yes=Si, per favore, è meglio essere al sicuro
addvaultwizard.new.generateRecoveryKeyChoice.no=No grazie, non perderò la mia password
### Information
@@ -95,7 +98,7 @@ forgetPassword.information=Questo cancellerà la password salvata di questa cass
forgetPassword.confirmBtn=Password dimenticata
# Unlock
unlock.title=Sblocca Cassaforte
unlock.title=Sblocca "%s"
unlock.passwordPrompt=Inserisci la password per "%s":
unlock.savePassword=Ricorda la Password
unlock.unlockBtn=Sblocca
@@ -130,7 +133,7 @@ migration.start.confirm=Sì, la mia cassaforte è completamente sincronizzata
migration.run.enterPassword=Immettere la password per "%s"
migration.run.startMigrationBtn=Migra Cassaforte
migration.run.progressHint=Potrebbe richiedere un po' di tempo…
## Sucess
## Success
migration.success.nextStepsInstructions=Migrato "%s" con successo.\nOra puoi sbloccare la tua cassaforte.
migration.success.unlockNow=Sblocca adesso
## Missing file system capabilities
@@ -146,20 +149,38 @@ migration.impossible.reason=La cassaforte non può essere migrata automaticament
migration.impossible.moreInfo=La cassaforte può ancora essere aperta con una versione precedente. Per istruzioni su come migrare manualmente una cassaforte, visita
# Health Check
health.title=Controllo Salute Cassaforte
health.start.introduction=Il Controllo di Salute della Cassaforte è una raccolta di controlli per rilevare e possibilmente risolvere i problemi nella struttura interna della tua cassaforte. Sei pregato di notare che non tutti i problemi sono risolvibili. Ti serve la password della cassaforte per eseguire i controlli.
health.start.configValid=La lettura e l'analisi del file di configurazione è riuscita. Procedi per selezionare i controlli.
health.start.configInvalid=Errore leggendo e analizzando il file di configurazione della cassaforte.
health.checkList.header=Controlli di Salute Disponibili
health.checkList.selectAllBox=Seleziona Tutto
## Start
health.title=Controllo Salute di "%s"
health.intro.header=Controllo Salute
health.intro.text=Il Controllo della Salute è una raccolta di controlli per rilevare e possibilmente risolvere i problemi nella struttura interna alla tua cassaforte. Sei pregato di tenere a mente:
health.intro.remarkSync=Assicurati che tutti i dispositivi siano completamente sincronizzati, questo risolve la maggior parte dei problemi.
health.intro.remarkFix=Non tutti i problemi possono essere corretti.
health.intro.remarkBackup=Se i dati sono danneggiati, solo un backup può aiutare.
health.intro.affirmation=Ho letto e capito le informazioni sopra
## Start Failure
health.fail.header=Errore nel caricare la configurazione della cassaforte
health.fail.ioError=Si è verificato un errore durante l'accesso e la lettura del file di configurazione.
health.fail.parseError=Si è verificato un errore durante l'analisi della configurazione della cassaforte.
health.fail.moreInfo=Ulteriori Informazioni
## Check Selection
health.checkList.description=Seleziona i controlli nell'elenco a sinistra o utilizza i pulsanti in basso.
health.checkList.selectAllButton=Seleziona Tutti I Controlli
health.checkList.deselectAllButton=Deseleziona Tutti I Controlli
health.check.runBatchBtn=Esegui i Controlli selezionati
## Detail view
health.check.detail.noSelectedCheck=Per i risultati seleziona un controllo di salute concluso nell'elenco a sinistra.
health.check.detail.header=Risultati di %s
health.check.detail.taskNotStarted=Il controllo non è stato selezionato per l'esecuzione.
health.check.detail.taskScheduled=Il controllo è pianificato.
health.check.detail.taskRunning=Il controllo è correntemente in esecuzione…
## Checks
health.check.detail.checkScheduled=Il controllo è pianificato.
health.check.detail.checkRunning=Il controllo è attualmente in esecuzione
health.check.detail.checkSkipped=Il controllo non è stato selezionato per l'esecuzione.
health.check.detail.checkFinished=Il controllo è terminato con successo.
health.check.detail.checkFinishedAndFound=Il controllo ha terminato l'esecuzione. Si prega di rivedere i risultati.
health.check.detail.checkFailed=Il controllo è terminato a causa di un errore.
health.check.detail.checkCancelled=Il controllo è stato annullato.
health.check.exportBtn=Esporta Rapporto
## Fix Application
health.fix.fixBtn=Correggi
health.fix.successTip=Correzione riuscita
health.fix.failTip=Correzione fallita, vedi log per i dettagli
# Preferences
preferences.title=Impostazioni
@@ -177,10 +198,6 @@ preferences.general.debugLogging=Abilita i registri di debug
preferences.general.debugDirectory=Mostra file log
preferences.general.autoStart=Avvia Cryptomator all'avvio del sistema
preferences.general.keychainBackend=Memorizza password con
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Portachiavi Gnome
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=Portafoglio KDE
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=accesso portachiavi macOS
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Protezione Dati Di Windows
preferences.general.interfaceOrientation=Orientamento Interfaccia
preferences.general.interfaceOrientation.ltr=Da Sinistra a Destra
preferences.general.interfaceOrientation.rtl=Da Destra a Sinistra
@@ -208,6 +225,7 @@ preferences.about=Informazioni
# Vault Statistics
stats.title=Statistiche per %s
stats.cacheHitRate=Tasso di Colpo della Cache
## Read
stats.read.throughput.idle=Lettura: inattivo
stats.read.throughput.kibs=Lettura: %.2f kiB/s
@@ -296,11 +314,15 @@ wrongFileAlert.link=Per ulteriore assistenza, visita
## General
vaultOptions.general=Generali
vaultOptions.general.vaultName=Nome Cassaforte
vaultOptions.general.autoLock.lockAfterTimePart1=Blocca quando inattivo per
vaultOptions.general.autoLock.lockAfterTimePart2=minuti
vaultOptions.general.unlockAfterStartup=Sblocca vault all'avvio di Cryptomator
vaultOptions.general.actionAfterUnlock=Dopo aver sbloccato con successo
vaultOptions.general.actionAfterUnlock.ignore=Non fare nulla
vaultOptions.general.actionAfterUnlock.reveal=Visualizza disco
vaultOptions.general.actionAfterUnlock.ask=Chiedi
vaultOptions.general.startHealthCheckBtn=Avvia il Controllo della Salute
## Mount
vaultOptions.mount=Montaggio
vaultOptions.mount.readonly=Sola lettura
@@ -316,10 +338,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Scegli una directory vuota
vaultOptions.masterkey=Password
vaultOptions.masterkey.changePasswordBtn=Modifica password
vaultOptions.masterkey.forgetSavedPasswordBtn=Dimentica Password Salvata
vaultOptions.masterkey.recoveryKeyExpanation=Una chiave di recupero è il tuo unico mezzo per ripristinare l'accesso a una cassaforte se perdi la tua password.
vaultOptions.masterkey.recoveryKeyExplanation=Una chiave di recupero è il tuo unico mezzo per ripristinare l'accesso a una cassaforte se perdi la tua password.
vaultOptions.masterkey.showRecoveryKeyBtn=Visualizza la chiave di recupero
vaultOptions.masterkey.recoverPasswordBtn=Recupera password
## Auto Lock
# Recovery Key
recoveryKey.title=Chiave di recupero

View File

@@ -13,8 +13,6 @@ generic.button.done=完了
generic.button.next=次へ
generic.button.print=印刷
## Error
generic.error.title=予期しないエラーが発生しました
generic.error.instruction=予期しないことが発生しました。下部のエラーテキストとエラーに至った経緯の説明を報告していただけると幸いです。
# Defaults
defaults.vault.vaultName=金庫
@@ -95,7 +93,7 @@ forgetPassword.information=システムから金庫の保存済みパスワー
forgetPassword.confirmBtn=パスワードを削除
# Unlock
unlock.title=金庫を解錠
unlock.title="%s" を解錠
unlock.passwordPrompt="%s" のパスワードを入力してください:
unlock.savePassword=パスワードを記憶させる
unlock.unlockBtn=解錠
@@ -130,24 +128,54 @@ migration.start.confirm=はい。同期が完了しています
migration.run.enterPassword="%s" のパスワードを入力してください
migration.run.startMigrationBtn=金庫を移行
migration.run.progressHint=時間がかかる場合があります...
## Sucess
## Success
migration.success.nextStepsInstructions="%s" の移行が成功しました。\n金庫を解錠できるようになりました。
migration.success.unlockNow=今すぐ解錠
## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=サポートされないファイルタイプ
migration.error.missingFileSystemCapabilities.description=金庫が不適切なファイルシステムにあるため、移行が開始されませんでした。
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=ファイルシステムが長いファイル名をサポートしていません。
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=ファイルシステムが長いパスをサポートしていません。
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=ファイルシステムによって読み込みが許可されていません。
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=ファイルシステムによって書き込みが許可されていません。
migration.error.missingFileSystemCapabilities.title=サポートされないファイル システム
migration.error.missingFileSystemCapabilities.description=金庫が不適切なファイル システムにあるため、移行が開始されませんでした。
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=ファイル システムが長いファイル名をサポートしていません。
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=ファイル システムが長いパスをサポートしていません。
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
## Checks
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.exportBtn=結果をエクスポート
## Fix Application
health.fix.fixBtn=修正
health.fix.successTip=正常に修正されました
health.fix.failTip=修正に失敗しました。詳細はログを参照してください。
# Preferences
preferences.title=設定
@@ -165,10 +193,6 @@ preferences.general.debugLogging=ログを有効にする
preferences.general.debugDirectory=ログ ファイルを表示
preferences.general.autoStart=システム開始時にCryptomatorを起動する
preferences.general.keychainBackend=次を利用してパスワードを保存する
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome Keyring
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE Wallet
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS のキーチェーンアクセス
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Windows のデータ保護
preferences.general.interfaceOrientation=インターフェイスの向き
preferences.general.interfaceOrientation.ltr=左から右
preferences.general.interfaceOrientation.rtl=右から左
@@ -187,7 +211,7 @@ preferences.updates.updateAvailable=利用可能なバージョン %s に更新
preferences.contribute=サポートする
preferences.contribute.registeredFor=サポーター証明書が %s に登録されました
preferences.contribute.noCertificate=Cryptomator を支援し、サポーター証明書を受け取りましょう。ライセンスキーに似ていますがフリーソフトを使う寄付者向けのキーです。 ;-)
preferences.contribute.getCertificate=まだ証明書を手に入れていませんか? 詳細を確認しましょう
preferences.contribute.getCertificate=まだ証明書を手に入れていませんか? 詳細はこちらから確認できます
preferences.contribute.promptText=サポーター証明書をここに張り付けてください
#<-- Add entries for donations and code/translation/documentation contribution -->
@@ -261,7 +285,7 @@ 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=庫の統計情報
### Missing
main.vaultDetail.missing.info=Cryptomator はこのパスの金庫を見つけることができませんでした。
main.vaultDetail.missing.recheck=再確認
@@ -285,11 +309,15 @@ wrongFileAlert.link=より詳細な手順については、次のページをご
## General
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.readonly=読み取り専用
@@ -305,10 +333,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=空のディレクトリを
vaultOptions.masterkey=パスワード
vaultOptions.masterkey.changePasswordBtn=パスワードの変更
vaultOptions.masterkey.forgetSavedPasswordBtn=保存したパスワードを削除する
vaultOptions.masterkey.recoveryKeyExpanation=回復キーはパスワードを忘れてしまった場合でも、金庫へのアクセスを回復する唯一の手段です。
vaultOptions.masterkey.recoveryKeyExplanation=回復キーはパスワードを忘れてしまった場合でも、金庫へのアクセスを回復する唯一の手段です。
vaultOptions.masterkey.showRecoveryKeyBtn=回復キーを表示
vaultOptions.masterkey.recoverPasswordBtn=パスワードの回復
## Auto Lock
# Recovery Key
recoveryKey.title=回復キー

View File

@@ -13,8 +13,6 @@ generic.button.done=완료
generic.button.next=다음
generic.button.print=인쇄
## Error
generic.error.title=예기치 않은 오류가 발생되었습니다.
generic.error.instruction=이러한 일은 일어나지 말아야 합니다. 아래의 텍스트와 이 오류를 발생시킨 단계에 대한 설명을 포함하여 제출하여 주십시요.
# Defaults
defaults.vault.vaultName=Vault
@@ -95,7 +93,7 @@ forgetPassword.information=시스템 키체인에서 이 Vault의 저장된 비
forgetPassword.confirmBtn=비밀번호 분실
# Unlock
unlock.title=Vault 잠금해제
unlock.title="%s" 잠금 해제
unlock.passwordPrompt="%s"의 비밀번호를 입력하십시요.
unlock.savePassword=비밀번호 기억
unlock.unlockBtn=잠금해제
@@ -130,7 +128,7 @@ migration.start.confirm=네, 이 Vault는 동기화가 완전히 된 상태입
migration.run.enterPassword="%s"의 비밀번호를 입력하십시요.
migration.run.startMigrationBtn=Vault 마이그레이션
migration.run.progressHint=이 작업은 시간이 조금 소요됩니다.
## Sucess
## Success
migration.success.nextStepsInstructions="%s" 의 마이그레이션이 성공적으로 완료되었습니다. 이제 Vault를 잠금해제할 수 있습니다.
migration.success.unlockNow=지금 잠금해제
## Missing file system capabilities
@@ -146,8 +144,27 @@ migration.impossible.reason=저장소 위치 또는 접근 지점이 호환되
migration.impossible.moreInfo=Vault를 이전 버전으로 계속 열수 있습니다. Vault를 직접 마이그레이션 하는 설명을 보시려면, 다음을 방문하십시요.
# Health Check
## Start
health.title="%s"의 상태 검사
health.intro.header=상태 검사
health.intro.text=상태 검사는 Vault의 내부 구조의 문제점을 점검하고 해결할 수 있는 기능입니다. 다음 사항을 유의하시기 바랍니다:
## Start Failure
health.fail.moreInfo=더 많은 정보
## Check Selection
health.checkList.selectAllButton=모든 항목 선택
health.checkList.deselectAllButton=모든 항목 선택 해제
health.check.runBatchBtn=선택된 검사항목 실행
## Detail view
## Checks
health.check.detail.noSelectedCheck=결과를 보려면 왼쪽 목록에서 완료된 상태 검사항목을 선택하십시오.
health.check.detail.checkScheduled=검사가 예약되었습니다.
health.check.detail.checkRunning=검사가 현재 실행중입니다...
health.check.detail.checkSkipped=선택된 검사항목이 없습니다.
health.check.detail.checkFinished=검사가 성공적으로 완료되었습니다.
health.check.exportBtn=보고서 내보내기
## Fix Application
health.fix.fixBtn=문제해결
health.fix.successTip=문제 해결이 성공적으로 완료되었습니다
health.fix.failTip=문제 해결 실패, 상세 정보는 로그를 참조하십시요.
# Preferences
preferences.title=환경설정
@@ -165,10 +182,6 @@ preferences.general.debugLogging=디버그 로그기록을 사용하도록 설
preferences.general.debugDirectory=Log 파일 표시
preferences.general.autoStart=시스템 시작 시 Cryptomator 실행
preferences.general.keychainBackend=다음 경로에 비밀번호 저장
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome Keyring
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE Wallet
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS 키체인 엑세스
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=윈도우 데이터 보호
preferences.general.interfaceOrientation=인터페이스 방향
preferences.general.interfaceOrientation.ltr=왼쪽에서 오른쪽으로
preferences.general.interfaceOrientation.rtl=오른쪽에서 왼쪽으로
@@ -285,11 +298,15 @@ wrongFileAlert.link=추후 지원을 위해, 다음을 방문하십시요
## General
vaultOptions.general=일반
vaultOptions.general.vaultName=Vault 이름
vaultOptions.general.autoLock.lockAfterTimePart1=다음 시간동안 유휴상태 시 잠금 :
vaultOptions.general.autoLock.lockAfterTimePart2=
vaultOptions.general.unlockAfterStartup=Cryptomator를 시작할 때 Vault 잠금 해제
vaultOptions.general.actionAfterUnlock=성공적으로 잠금해제 후
vaultOptions.general.actionAfterUnlock.ignore=아무 것도 하지 않음
vaultOptions.general.actionAfterUnlock.reveal=드라이브 표시
vaultOptions.general.actionAfterUnlock.ask=요청
vaultOptions.general.startHealthCheckBtn=상태 검사 시작
## Mount
vaultOptions.mount=드라이브 구성
vaultOptions.mount.readonly=읽기 전용
@@ -305,10 +322,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=빈 디렉터리를 선택
vaultOptions.masterkey=비밀번호
vaultOptions.masterkey.changePasswordBtn=비밀번호 변경
vaultOptions.masterkey.forgetSavedPasswordBtn=저장된 비밀번호 삭제
vaultOptions.masterkey.recoveryKeyExpanation=복구 키는 비밀번호를 잊어버렸을 때, Vault의 접근을 복원 할 수 있는 유일한 방법입니다.
vaultOptions.masterkey.recoveryKeyExplanation=복구 키는 비밀번호를 잊어버렸을 때, Vault의 접근을 복원 할 수 있는 유일한 방법입니다.
vaultOptions.masterkey.showRecoveryKeyBtn=복구 키 표시
vaultOptions.masterkey.recoverPasswordBtn=비밀번호 복구
## Auto Lock
# Recovery Key
recoveryKey.title=복구 키

View File

@@ -13,8 +13,6 @@ generic.button.done=Darīts
generic.button.next=Tālāk
generic.button.print=Drukāt
## Error
generic.error.title=Radās neparedzēta kļūda
generic.error.instruction=Šis vēl nav atgadījies. Lūdzu ziņo zemāk redzamo kļūdas tekstu un iekļauj aprakstu, kas noveda pie šīs kļūdas.
# Defaults
@@ -90,7 +88,6 @@ forgetPassword.information=Tas dzēsīs saglabāto glabātuves paroli no jūsu s
forgetPassword.confirmBtn=Aizmirst paroli
# Unlock
unlock.title=Atslēgt glabātuvi
unlock.passwordPrompt=Ievadiet "%s" paroli:
unlock.unlockBtn=Atslēgt
##
@@ -112,7 +109,7 @@ migration.start.confirm=Jā, mana glabātuve ir pilnībā sinhronizēta
## Run
migration.run.enterPassword=Ievadiet "%s" paroli
migration.run.startMigrationBtn=Migrēt glabātuvi
## Sucess
## Success
migration.success.nextStepsInstructions="%s" sekmīgi migrēta.\nJūs tagad variet atslēgt jūsu glabātuvi.
migration.success.unlockNow=Atslēgt tagad
## Missing file system capabilities
@@ -125,8 +122,11 @@ migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Nav atļaujas
## Impossible
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Checks
## Fix Application
# Preferences
preferences.title=Iestatījumi
@@ -215,6 +215,7 @@ vaultOptions.general=Vispārēji
vaultOptions.general.vaultName=Glabātuves nosaukums
vaultOptions.general.unlockAfterStartup=Atslēgt glabātuvi startējot Cryptomator
vaultOptions.general.actionAfterUnlock.reveal=Atklāt disku
## Mount
vaultOptions.mount=Montē
vaultOptions.mount.readonly=Tikai lasīt
@@ -229,10 +230,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Izvēlies tukšu mapi
## Master Key
vaultOptions.masterkey=Parole
vaultOptions.masterkey.changePasswordBtn=Mainīt paroli
vaultOptions.masterkey.recoveryKeyExpanation=Atkopšanas atslēga ir jūsu vienīgais līdzeklis, lai atjaunotu piekļuvi glabātuvei, ja pazaudējat paroli.
vaultOptions.masterkey.recoveryKeyExplanation=Atkopšanas atslēga ir jūsu vienīgais līdzeklis, lai atjaunotu piekļuvi glabātuvei, ja pazaudējat paroli.
vaultOptions.masterkey.showRecoveryKeyBtn=Rādīt atkopšanas atslēgu
vaultOptions.masterkey.recoverPasswordBtn=Atjaunot paroli
## Auto Lock
# Recovery Key
recoveryKey.title=Atjaunošanas atslēga

View File

@@ -13,8 +13,6 @@ generic.button.done=Ferdig
generic.button.next=Neste
generic.button.print=Skriv ut
## Error
generic.error.title=Det oppstod en uventet feil
generic.error.instruction=Dette skulle ikke ha skjedd. Rapporter feilteksten nedenfor og legg inn en beskrivelse av hvilke trinn som førte til denne feilen.
# Defaults
defaults.vault.vaultName=Hvelv
@@ -44,6 +42,8 @@ addvaultwizard.new.locationPrompt=…
addvaultwizard.new.directoryPickerLabel=Tilpasset lagringssted
addvaultwizard.new.directoryPickerButton=Velg…
addvaultwizard.new.directoryPickerTitle=Velg mappe
addvaultwizard.new.fileAlreadyExists=En fil eller mappe med det hvelvnavnet finnes allerede
addvaultwizard.new.locationIsOk=Egnet sted for hvelvet ditt
addvaultwizard.new.invalidName=Ugyldig navn på hvelvet. Vennligst vurder et vanlig mappenavn.
### Password
addvaultwizard.new.createVaultBtn=Opprett hvelv
@@ -91,7 +91,7 @@ forgetPassword.information=Dette vil slette det lagrede passordet til dette hvel
forgetPassword.confirmBtn=Glem passord
# Unlock
unlock.title=Lås opp hvelvet
unlock.title=Lås opp "%s"
unlock.passwordPrompt=Skriv inn passordet for "%s":
unlock.savePassword=Husk passord
unlock.unlockBtn=Lås opp
@@ -124,7 +124,7 @@ migration.start.confirm=Ja, hvelvet mitt er fullstendig synkronisert
migration.run.enterPassword=Skriv inn passordet for "%s"
migration.run.startMigrationBtn=Overfør hvelv
migration.run.progressHint=Dette kan ta litt tid…
## Sucess
## Success
migration.success.nextStepsInstructions=Vellykket overføring av "%s".\nDu kan nå låse opp hvelvet ditt.
migration.success.unlockNow=Lås opp nå
## Missing file system capabilities
@@ -140,8 +140,16 @@ migration.impossible.reason=Hvelvet kan ikke overføres automatisk fordi lagring
migration.impossible.moreInfo=Hvelvet kan fortsatt åpnes hvis du bruker en eldre versjon. For instruksjoner om hvordan man overfører et hvelv, besøk
# Health Check
## Start
health.intro.remarkFix=Ikke alle problemer kan løses.
## Start Failure
health.fail.moreInfo=Mer informasjon
## Check Selection
## Detail view
## Checks
## Fix Application
health.fix.fixBtn=Reparer
health.fix.successTip=Vellykket reparering
health.fix.failTip=Repareringen feilet. Se loggen for detaljer
# Preferences
preferences.title=Innstillinger
@@ -159,10 +167,6 @@ preferences.general.debugLogging=Aktiver loggføring av feilsøk
preferences.general.debugDirectory=Vis loggfiler
preferences.general.autoStart=Start Cryptomator ved systemstart
preferences.general.keychainBackend=Lagre passord med
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome Keyring
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE Wallet
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS nøkkelringtilgang
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Windows Data Protection
preferences.general.interfaceOrientation=Grensesnittorientering
preferences.general.interfaceOrientation.ltr=Fra venstre til høyre
preferences.general.interfaceOrientation.rtl=Fra høyre til venstre
@@ -178,6 +182,7 @@ preferences.updates.autoUpdateCheck=Se etter oppdateringer automatisk
preferences.updates.checkNowBtn=Sjekk nå
preferences.updates.updateAvailable=Oppdatering til versjon %s er tilgjengelig.
## Contribution
preferences.contribute=Støtt oss
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -224,6 +229,7 @@ main.dropZone.dropVault=Legg til dette hvelvet
main.dropZone.unknownDragboardContent=Hvis du vil legge til et hvelv, kan du dra det til dette vinduet
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Klikk her for å legge til et hvelv
main.vaultlist.contextMenu.remove=Fjern…
main.vaultlist.contextMenu.lock=Lås
main.vaultlist.contextMenu.unlock=Lås opp…
main.vaultlist.contextMenu.unlockNow=Lås opp nå
@@ -272,11 +278,13 @@ wrongFileAlert.link=For ytterligere hjelp, besøk
## General
vaultOptions.general=Generelt
vaultOptions.general.vaultName=Navn på hvelvet
vaultOptions.general.autoLock.lockAfterTimePart2=minutter
vaultOptions.general.unlockAfterStartup=Lås opp hvelvet når du starter Cryptomator
vaultOptions.general.actionAfterUnlock=Etter vellykket opplåsing
vaultOptions.general.actionAfterUnlock.ignore=Ikke gjør noe
vaultOptions.general.actionAfterUnlock.reveal=Gjør enheten synlig
vaultOptions.general.actionAfterUnlock.ask=Spør
## Mount
vaultOptions.mount=Montering
vaultOptions.mount.readonly=Skrivebeskyttet
@@ -292,10 +300,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Velg en tom mappe
vaultOptions.masterkey=Passord
vaultOptions.masterkey.changePasswordBtn=Endre passord
vaultOptions.masterkey.forgetSavedPasswordBtn=Glem passord
vaultOptions.masterkey.recoveryKeyExpanation=En gjenopprettingsnøkkel er den eneste måten å gjenopprette tilgangen til et hvelv på hvis du mister passordet.
vaultOptions.masterkey.recoveryKeyExplanation=En gjenopprettingsnøkkel er den eneste måten å gjenopprette tilgangen til et hvelv på hvis du mister passordet.
vaultOptions.masterkey.showRecoveryKeyBtn=Vis gjenopprettingsnøkkelen
vaultOptions.masterkey.recoverPasswordBtn=Gjenopprett passord
## Auto Lock
# Recovery Key
recoveryKey.title=Gjenopprettingsnøkkel

View File

@@ -13,8 +13,11 @@ generic.button.done=Klaar
generic.button.next=Volgende
generic.button.print=Afdrukken
## Error
generic.error.title=Er is een onverwachte fout opgetreden
generic.error.instruction=Dit had niet moeten gebeuren. Rapporteer de onderstaande fouttekst en voeg een beschrijving toe van de stappen die tot deze fout hebben geleid.
generic.error.title=Fout %s
generic.error.instruction=Oeps! Cryptomator verwachtte niet dat dit zou gebeuren. U kunt bestaande oplossingen opzoeken voor deze fout, of indien er nog geen melding van deze fout is gemaakt mag u dit ook gerust doen.
generic.error.hyperlink.lookup=Deze fout opzoeken
generic.error.hyperlink.report=Deze fout melden
generic.error.technicalDetails=Details:
# Defaults
defaults.vault.vaultName=Kluis
@@ -95,7 +98,7 @@ forgetPassword.information=Dit zal het opgeslagen wachtwoord van deze kluis uit
forgetPassword.confirmBtn=Wachtwoord vergeten
# Unlock
unlock.title=Kluis ontgrendelen
unlock.title=Ontgrendel "%s"
unlock.passwordPrompt=Voer wachtwoord voor "%s" in:
unlock.savePassword=Wachtwoord Onthouden
unlock.unlockBtn=Ontgrendel
@@ -130,7 +133,7 @@ migration.start.confirm=Ja, mijn kluis is volledig gesynchroniseerd
migration.run.enterPassword=Voer wachtwoord voor "%s" in
migration.run.startMigrationBtn=Kluis migreren
migration.run.progressHint=Dit kan enige tijd duren…
## Sucess
## Success
migration.success.nextStepsInstructions="%s" is succesvol gemigreerd.\nU kunt nu uw kluis ontgrendelen.
migration.success.unlockNow=Nu Ontgrendelen
## Missing file system capabilities
@@ -146,27 +149,38 @@ migration.impossible.reason=De kluis kan niet automatisch gemigreerd worden omda
migration.impossible.moreInfo=De kluis is nog te openen met een oudere versie. Instructies voor het handmatig migreren van een kluis zijn te vinden op
# Health Check
health.title=Gezondheidcheck kluis
health.start.introduction=De gezondheidscheck van de kluis is een verzameling controles om problemen in de interne structuur van uw kluis op te sporen en op te lossen. Houd er rekening mee dat niet alle problemen opgelost zijn. Je hebt het kluiswachtwoord nodig om de controles uit te voeren.
health.start.configValid=Het lezen en verwerken van het configuratiebestand van de kluis is gelukt. Ga door en selecteer controles.
health.start.configInvalid=Fout bij het lezen en verwerken van het configuratiebestand van de kluis.
health.checkList.header=Beschikbare gezondheidscontroles
health.checkList.selectAllBox=Alles selecteren
## Start
health.title=Controle van "%s"
health.intro.header=Controle
health.intro.text=Controles zijn er voor het detecteren en indien mogelijk oplossen van problemen met de interne structuur van uw kluis. Houd daarbij rekening met het volgende:
health.intro.remarkSync=Zorg er voor dat alle apparaten volledig gesynchroniseerd zijn. Dit lost de meeste problemen op.
health.intro.remarkFix=Niet alle problemen kunnen opgelost worden.
health.intro.remarkBackup=Als data is beschadigd, kan alleen een back-up helpen.
health.intro.affirmation=Ik heb de informatie hierboven gelezen en begrepen
## Start Failure
health.fail.header=Fout bij het laden van de kluisconfiguratie
health.fail.ioError=Er is een fout opgetreden tijdens het openen en lezen van het configuratiebestand.
health.fail.parseError=Er is een fout opgetreden bij het inladen van de kluisconfiguratie.
health.fail.moreInfo=Meer informatie
## Check Selection
health.checkList.description=Selecteer controles in de lijst aan de linkerkant, of gebruik de onderstaande knoppen.
health.checkList.selectAllButton=Selecteer alle controles
health.checkList.deselectAllButton=Deselecteer alle controles
health.check.runBatchBtn=Geselecteerde controles uitvoeren
## Detail view
health.check.detail.noSelectedCheck=Voor resultaten selecteert u een voltooide gezondheidscontrole in de linker lijst.
health.check.detail.header=Resultaten voor: %s
health.check.detail.taskNotStarted=De controle werd niet geselecteerd om uit te voeren.
health.check.detail.taskScheduled=De controle is ingepland.
health.check.detail.taskRunning=De controle wordt momenteel uitgevoerd…
health.check.detail.taskSucceeded=De controle is succesvol uitgevoerd na %d milliseconden.
health.check.detail.taskFailed=De controle is afgesloten door een fout.
health.check.detail.taskCancelled=De controle is geannuleerd.
health.check.detail.problemCount=%d problemen gevonden en %d onoplosbare fouten.
health.check.detail.checkScheduled=De controle is ingepland.
health.check.detail.checkRunning=De controle wordt momenteel uitgevoerd…
health.check.detail.checkSkipped=De controle was niet geselecteerd om uit te voeren.
health.check.detail.checkFinished=De controle is succesvol beëindigd.
health.check.detail.checkFinishedAndFound=De controle is beëindigd. Bekijk alstublieft de resultaten.
health.check.detail.checkFailed=De controle is afgesloten door een fout.
health.check.detail.checkCancelled=De controle werd geannuleerd.
health.check.exportBtn=Exporteer rapport
health.check.fixBtn=Repareren
## Checks
health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Map Controle
## Fix Application
health.fix.fixBtn=Herstel
health.fix.successTip=Hersteld
health.fix.failTip=Herstellen mislukt, zie logboek voor details
# Preferences
preferences.title=Voorkeuren
@@ -184,10 +198,6 @@ preferences.general.debugLogging=Debug logging aanzetten
preferences.general.debugDirectory=Logboekbestanden bekijken
preferences.general.autoStart=Start Cryptomator als het systeem opstart
preferences.general.keychainBackend=Bewaar wachtwoorden met
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome sleutelhanger
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE Wallet
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS-sleutelhangertoegang
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Windows-gegevensbescherming
preferences.general.interfaceOrientation=Interface oriëntatie
preferences.general.interfaceOrientation.ltr=Links naar rechts
preferences.general.interfaceOrientation.rtl=Rechts naar links
@@ -304,12 +314,15 @@ wrongFileAlert.link=Voor verdere ondersteuning, bezoek
## General
vaultOptions.general=Algemeen
vaultOptions.general.vaultName=Kluisnaam
vaultOptions.general.autoLock.lockAfterTimePart1=Vergrendel wanneer inactief voor
vaultOptions.general.autoLock.lockAfterTimePart2=minuten
vaultOptions.general.unlockAfterStartup=Ontgrendel kluis bij het starten van Cryptomator
vaultOptions.general.actionAfterUnlock=Na een succesvolle ontgrendeling
vaultOptions.general.actionAfterUnlock.ignore=Niets doen
vaultOptions.general.actionAfterUnlock.reveal=Toon Schijf
vaultOptions.general.actionAfterUnlock.ask=Vragen
vaultOptions.general.healthBtn=Start gezondheidscontrole
vaultOptions.general.startHealthCheckBtn=Start controle
## Mount
vaultOptions.mount=Aankoppelen
vaultOptions.mount.readonly=Alleen-Lezen
@@ -325,10 +338,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Kies een lege map
vaultOptions.masterkey=Wachtwoord
vaultOptions.masterkey.changePasswordBtn=Wijzig wachtwoord
vaultOptions.masterkey.forgetSavedPasswordBtn=Opgeslagen wachtwoord vergeten
vaultOptions.masterkey.recoveryKeyExpanation=Een herstelsleutel is je enige manier om de toegang tot een kluis te herstellen als je je wachtwoord kwijtraakt.
vaultOptions.masterkey.recoveryKeyExplanation=Een herstelsleutel is je enige manier om de toegang tot een kluis te herstellen als je je wachtwoord kwijtraakt.
vaultOptions.masterkey.showRecoveryKeyBtn=Toon herstelsleutel
vaultOptions.masterkey.recoverPasswordBtn=Wachtwoord herstellen
## Auto Lock
# Recovery Key
recoveryKey.title=Herstelsleutel

View File

@@ -13,8 +13,6 @@ generic.button.done=Ferdig
generic.button.next=Neste
generic.button.print=Skriv ut
## Error
generic.error.title=Eit uventa problem oppstod
generic.error.instruction=Dette skulle ikkje ha skjedd. Rapporter feilteksten nedanfor og legg inn ei skildring av kva trinn som førte til denne feilen.
# Defaults
@@ -90,7 +88,6 @@ forgetPassword.information=Dette vil sletta det lagra passordet til denne kvelve
forgetPassword.confirmBtn=Gløym passord
# Unlock
unlock.title=Lås opp kvelven
unlock.passwordPrompt=Skriv inn passordet for "%s":
unlock.unlockBtn=Låse opp
##
@@ -114,7 +111,7 @@ migration.start.confirm=Ja, kvelven min er fullstendig synkronisert
migration.run.enterPassword=Skriv inn passordet for "%s"
migration.run.startMigrationBtn=Migrer kvelv
migration.run.progressHint=Dette kan ta litt tid…
## Sucess
## Success
migration.success.nextStepsInstructions=Vellykka migrering av "%s". Du kan no låsa opp kvelven din.
migration.success.unlockNow=Lås opp no
## Missing file system capabilities
@@ -130,8 +127,11 @@ migration.impossible.reason=Kvelven kan ikkje overførast automatisk fordi lagri
migration.impossible.moreInfo=Kvelven kan framleis opnast viss du bruker ein eldre versjon. For instruksjonar om korleis ein overfører ein kvelv, besøk
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Checks
## Fix Application
# Preferences
preferences.title=Innstillingar
@@ -228,6 +228,7 @@ vaultOptions.general.actionAfterUnlock=Etter vellykka opplåsing
vaultOptions.general.actionAfterUnlock.ignore=Ikkje gjer noko
vaultOptions.general.actionAfterUnlock.reveal=Gjer eininga synleg
vaultOptions.general.actionAfterUnlock.ask=Spør
## Mount
vaultOptions.mount=Montering
vaultOptions.mount.readonly=Skriveverna
@@ -243,10 +244,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Vel ei tom mappe
vaultOptions.masterkey=Passord
vaultOptions.masterkey.changePasswordBtn=Byt passord
vaultOptions.masterkey.forgetSavedPasswordBtn=Gløym passord
vaultOptions.masterkey.recoveryKeyExpanation=Ein "retta opp igjen"-nøkkel er den einaste måten å retta opp igjen tilgangen til ein kvelv på viss du mistar passordet.
vaultOptions.masterkey.recoveryKeyExplanation=Ein "retta opp igjen"-nøkkel er den einaste måten å retta opp igjen tilgangen til ein kvelv på viss du mistar passordet.
vaultOptions.masterkey.showRecoveryKeyBtn=Vis 'Retta opp igjen'-nøkkelen
vaultOptions.masterkey.recoverPasswordBtn=Rett opp igjen passord
## Auto Lock
# Recovery Key
recoveryKey.title='Retta opp igjen'-nøkkel

View File

@@ -13,8 +13,6 @@ generic.button.done=ਮੁਕੰਮਲ
generic.button.next=ਅੱਗੇ
generic.button.print=ਪਰਿੰਟ ਕਰੋ
## Error
generic.error.title=ਅਣਪਛਾਤੀ ਗਲਤੀ ਵਪਾਰੀ ਹੈ
generic.error.instruction=ਇਹ ਵਾਪਰਨਾ ਨਹੀਂ ਚਾਹੀਦਾ ਸੀ। ਹੇਠ ਦਿੱਤੀ ਗਲਤੀ ਲਿਖਤ ਬਾਰੇ ਰਿਪੋਰਟ ਕਰੋ ਅਤੇ ਇਹ ਗਲਤੀ ਹੋਣ ਦੌਰਾਨ ਜਿਹੜੇ ਵੀ ਕਦਮ ਚੁੱਕੇ ਹਨ, ਬਾਰੇ ਵੇਰਵਾ ਦਿਉ।
# Defaults
defaults.vault.vaultName=ਵਾਲਟ
@@ -91,7 +89,6 @@ forgetPassword.information=ਇਹ ਤੁਹਾਡੇ ਸਿਸਟਮ ਦੇ ਕ
forgetPassword.confirmBtn=ਪਾਸਵਰਡ ਭੁੱਲ ਗਏ
# Unlock
unlock.title=ਵਾਲਟ ਅਣ-ਲਾਕ ਕਰੋ
unlock.passwordPrompt="%s" ਲਈ ਪਾਸਵਰਡ ਦਿਓ:
unlock.savePassword=ਪਾਸਵਰਡ ਯਾਦ ਰੱਖੋ
unlock.unlockBtn=ਅਣ-ਲਾਕ ਕਰੋ
@@ -124,7 +121,7 @@ migration.start.confirm=ਹਾਂ, ਮੇਰਾ ਵਾਲਟ ਪੂਰੀ ਤਰ
migration.run.enterPassword="%s" ਲਈ ਪਾਸਵਰਡ ਦਿਓ
migration.run.startMigrationBtn=ਵਾਲਟ ਮਾਈਗਰੇਟ ਕਰੋ
migration.run.progressHint=ਇਸ ਨੂੰ ਕੁਝ ਵੇਲਾ ਲੱਗ ਸਕਦਾ ਹੈ…
## Sucess
## Success
migration.success.nextStepsInstructions="%s" ਕਾਮਯਾਬੀ ਨਾਲ ਮਾਈਗਰੇਟ ਕੀਤਾ\nਹੁਣ ਤੁਸੀਂ ਆਪਣੇ ਵਾਲਟ ਨੂੰ ਅਣ-ਲਾਕ ਕਰ ਸਕਦੇ ਹੋ।
migration.success.unlockNow=ਹੁਣੇ ਅਣ-ਲਾਕ ਕਰੋ
## Missing file system capabilities
@@ -140,8 +137,11 @@ migration.impossible.reason=ਵਾਲਟ ਨੂੰ ਆਪਣੇ-ਆਪ ਮਾਈ
migration.impossible.moreInfo=ਵਾਲਟ ਨੂੰ ਅਜੇ ਵੀ ਪੁਰਾਣੇ ਵਰਜ਼ਨ ਨਾਲ ਖੋਲ੍ਹਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਵਾਲਟ ਨੂੰ ਖੁਦ ਕਿਵੇਂ ਮਾਈਗਰੇਟ ਕਰੀਏ, ਇਸ ਬਾਰੇ ਹਦਾਇਤਾਂ ਲਈ ਵੇਖੋ
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Checks
## Fix Application
# Preferences
preferences.title=ਮੇਰੀ ਪਸੰਦ
@@ -159,10 +159,6 @@ preferences.general.debugLogging=ਡੀਬੱਗ ਲਾਗ ਸਮਰੱਥ ਕ
preferences.general.debugDirectory=ਲਾਗ ਫਾਇਲਾਂ ਦਿਖਾਓ
preferences.general.autoStart=ਸਿਸਟਮ ਸ਼ੁਰੂ ਵੇਲੇ Cryptomator ਚਲਾਓ
preferences.general.keychainBackend=ਪਾਸਵਰਡ ਇਸ ਨਾਲ ਸੰਭਾਲੋ
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=ਗਨੋਮ ਕੀਰਿੰਗ
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=ਕੇਡੀਈ ਵਾਲਟ
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS ਕੀਚੇਨ ਪਹੁੰਚ
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=ਵਿੰਡੋ ਡਾਟਾ ਪਰੋਟੈਕਸ਼ਨ
preferences.general.interfaceOrientation=ਇੰਟਰਟੇਸ ਸਥਿਤੀ
preferences.general.interfaceOrientation.ltr=ਖੱਬੇ ਤੋਂ ਸੱਜਾ
preferences.general.interfaceOrientation.rtl=ਸੱਜੇ ਤੋਂ ਖੱਬਾ
@@ -277,6 +273,7 @@ vaultOptions.general.actionAfterUnlock=ਕਾਮਯਾਬੀ ਨਾਲ ਅਣ-
vaultOptions.general.actionAfterUnlock.ignore=ਕੁਝ ਨਾ ਕਰੋ
vaultOptions.general.actionAfterUnlock.reveal=ਡਰਾਇਵ ਦਿਖਾਓ
vaultOptions.general.actionAfterUnlock.ask=ਪੁੱਛੋ
## Mount
vaultOptions.mount=ਮਾਊਂਟ ਕਰਨਾ
vaultOptions.mount.readonly=ਕੇਵਲ ਪੜ੍ਹਨ ਲਈ
@@ -292,10 +289,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=ਖਾਲੀ ਡਾਇਰੈ
vaultOptions.masterkey=ਪਾਸਵਰਡ
vaultOptions.masterkey.changePasswordBtn=ਪਾਸਵਰਡ ਬਦਲੋ
vaultOptions.masterkey.forgetSavedPasswordBtn=ਸੰਭਾਲਿਆ ਪਾਸਵਰਡ ਭੁੱਲੋ
vaultOptions.masterkey.recoveryKeyExpanation=ਜੇ ਤੁਸੀਂ ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਗਏ ਹੋ ਤਾਂ ਤੁਹਾਡੇ ਵਾਲਟ ਲਈ ਪਹੁੰਚ ਬਹਾਲ ਕਰਨ ਵਾਸਤੇ ਸਿਰਫ਼ ਰਿਕਵਰੀ ਕੁੰਜੀ ਹੀ ਹੈ।
vaultOptions.masterkey.recoveryKeyExplanation=ਜੇ ਤੁਸੀਂ ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਗਏ ਹੋ ਤਾਂ ਤੁਹਾਡੇ ਵਾਲਟ ਲਈ ਪਹੁੰਚ ਬਹਾਲ ਕਰਨ ਵਾਸਤੇ ਸਿਰਫ਼ ਰਿਕਵਰੀ ਕੁੰਜੀ ਹੀ ਹੈ।
vaultOptions.masterkey.showRecoveryKeyBtn=ਰਿਕਰਵੀ ਕੁੰਜੀ ਦਿਖਾਓ
vaultOptions.masterkey.recoverPasswordBtn=ਪਾਸਵਰਡ ਰਿਕਵਰ ਕਰੋ
## Auto Lock
# Recovery Key
recoveryKey.title=ਰਿਕਵਰੀ ਕੁੰਜੀ

View File

@@ -13,8 +13,11 @@ generic.button.done=Gotowe
generic.button.next=Dalej
generic.button.print=Drukuj
## Error
generic.error.title=Wystąpił nieoczekiwany błąd
generic.error.instruction=To nie powinno było się zdarzyć. Proszę zgłosić poniższy tekst z błędem i zamieścić opis kroków, które doprowadziły do tego błędu.
generic.error.title=Błąd %s
generic.error.instruction=Ups! Cryptomator nie spodziewał się czegoś takiego. Możesz wyszukać istniejące rozwiązania dla tego błędu. Lub, jeśli nie został on jeszcze zgłoszony, możesz sam to zrobić.
generic.error.hyperlink.lookup=Wyszukaj ten błąd
generic.error.hyperlink.report=Zgłoś ten błąd
generic.error.technicalDetails=Szczegóły:
# Defaults
defaults.vault.vaultName=Sejf
@@ -95,7 +98,7 @@ forgetPassword.information=To spowoduje usunięcie zapisanego hasła z systemowe
forgetPassword.confirmBtn=Zapomnij hasło
# Unlock
unlock.title=Odblokuj sejf
unlock.title=Odblokuj "%s"
unlock.passwordPrompt=Wprowadź hasło dla "%s":
unlock.savePassword=Zapamiętaj hasło
unlock.unlockBtn=Odblokuj
@@ -130,7 +133,7 @@ migration.start.confirm=Tak, mój sejf jest w pełni zsynchronizowany
migration.run.enterPassword=Wprowadź hasło dla "%s"
migration.run.startMigrationBtn=Aktualizuj sejf
migration.run.progressHint=To może chwilę potrwać…
## Sucess
## Success
migration.success.nextStepsInstructions=Aktualizacja "%s" zakończona pomyślnie.\nMożesz już odblokować swój sejf.
migration.success.unlockNow=Odblokuj teraz
## Missing file system capabilities
@@ -146,27 +149,38 @@ migration.impossible.reason=Sejf nie może być automatycznie zmigrowany, poniew
migration.impossible.moreInfo=Sejf nadal może być otwarty starszą wersją. Aby uzyskać informacje dotyczące ręcznej migracji sejfu wejdź na
# Health Check
health.title=Ocena stanu sejfu
health.start.introduction=Ocena stanu sejfu to zbiór testów wykrywający i ewentualnie rozwiązujący problemy w wewnętrznej strukturze Twojego sejfu. Należy pamiętać, że nie wszystkie błędy da się rozwiązać. Do przeprowadzenia testów wymagane jest hasło sejfu.
health.start.configValid=Odczyt i przetwarzanie pliku konfiguracyjnego sejfu powiodły się. Przejdź dalej do wyboru testów.
health.start.configInvalid=Błąd podczas odczytu i przetwarzania pliku konfiguracyjnego sejfu.
health.checkList.header=Dostępne testy
health.checkList.selectAllBox=Zaznacz wszystko
## Start
health.title=Test spójności "%s"
health.intro.header=Test spójności
health.intro.text=Test spójności to zbiór testów do wykrywania i ewentualnego usunięcia problemów z wewnętrzną strukturą Twojego sejfu. Pamiętaj:
health.intro.remarkSync=Sprawdź czy wszystkie urządzenia są całkowicie zsynchronizowane, to rozwiązuje większość problemów.
health.intro.remarkFix=Nie wszystkie problemy da się naprawić.
health.intro.remarkBackup=Jeśli dane są uszkodzone, tylko kopia zapasowa może pomóc.
health.intro.affirmation=Przeczytałem i zrozumiałem powyższe informacje
## Start Failure
health.fail.header=Błąd ładowania konfiguracji sejfu
health.fail.ioError=Błąd podczas dostępu oraz odczytu pliku konfiguracyjnego.
health.fail.parseError=Błąd przetwarzania konfiguracji sejfu.
health.fail.moreInfo=Więcej Informacji
## Check Selection
health.checkList.description=Wybierz testy z lewej listy lub użyj przycisków poniżej.
health.checkList.selectAllButton=Wybierz wszystkie testy
health.checkList.deselectAllButton=Odznacz wszystkie testy
health.check.runBatchBtn=Uruchom wybrane testy
## Detail view
health.check.detail.noSelectedCheck=Aby sprawdzić wyniki, wybierz test z listy po lewej stronie.
health.check.detail.header=Wyniki testu %s
health.check.detail.taskNotStarted=Test nie był wybrany do uruchomienia.
health.check.detail.taskScheduled=Test będzie uruchomiony.
health.check.detail.taskRunning=Test jest aktualnie uruchomiony…
health.check.detail.taskSucceeded=Test zakończony pomyślnie po %d milisekundach.
health.check.detail.taskFailed=Test zakończony z powodu błędu.
health.check.detail.taskCancelled=Test został anulowany.
health.check.detail.problemCount=Jest %d problemów oraz %d nienaprawialnych błędów.
health.check.detail.checkScheduled=Test będzie uruchomiony.
health.check.detail.checkRunning=Test jest aktualnie uruchomiony…
health.check.detail.checkSkipped=Test nie był wybrany do uruchomienia.
health.check.detail.checkFinished=Test zakończony pomyślnie.
health.check.detail.checkFinishedAndFound=Test zakończony. Proszę sprawdzić wyniki.
health.check.detail.checkFailed=Wystąpił błąd, test zakończony.
health.check.detail.checkCancelled=Test został anulowany.
health.check.exportBtn=Eksportuj raport
health.check.fixBtn=Napraw
## Checks
health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Sprawdź katalog
## Fix Application
health.fix.fixBtn=Napraw
health.fix.successTip=Naprawa udana
health.fix.failTip=Błąd naprawy, szczegóły w logach
# Preferences
preferences.title=Ustawienia
@@ -184,10 +198,6 @@ preferences.general.debugLogging=Włącz logowanie w trybie debug
preferences.general.debugDirectory=Pokaż pliki logowania
preferences.general.autoStart=Uruchom Cryptomator po uruchomieniu systemu
preferences.general.keychainBackend=Przechowuj hasła za pomocą
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Brelok kluczy Gnome
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=Portfel KDE
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=Dostęp do pęku kluczy macOS
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Ochrona danych w systemie Windows
preferences.general.interfaceOrientation=Układ interfejsu
preferences.general.interfaceOrientation.ltr=Od lewej do prawej
preferences.general.interfaceOrientation.rtl=Od prawej do lewej
@@ -304,12 +314,15 @@ wrongFileAlert.link=Aby uzyskać pomoc, wejdź na
## General
vaultOptions.general=Ogólne
vaultOptions.general.vaultName=Nazwa sejfu
vaultOptions.general.autoLock.lockAfterTimePart1=Zablokuj w stanie bezczynności po
vaultOptions.general.autoLock.lockAfterTimePart2=minut
vaultOptions.general.unlockAfterStartup=Odblokuj sejf podczas uruchamiania programu Cryptomator
vaultOptions.general.actionAfterUnlock=Po udanym odblokowaniu
vaultOptions.general.actionAfterUnlock.ignore=Nic nie rób
vaultOptions.general.actionAfterUnlock.reveal=Otwórz lokalizację
vaultOptions.general.actionAfterUnlock.ask=Zapytaj
vaultOptions.general.healthBtn=Oceń stan sejfu
vaultOptions.general.startHealthCheckBtn=Rozpocznij Test Spójności
## Mount
vaultOptions.mount=Montowanie
vaultOptions.mount.readonly=Tylko do odczytu
@@ -325,13 +338,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Wybierz pusty katalog
vaultOptions.masterkey=Hasło
vaultOptions.masterkey.changePasswordBtn=Zmiana Hasła
vaultOptions.masterkey.forgetSavedPasswordBtn=Zapomnij zapamiętane hasło
vaultOptions.masterkey.recoveryKeyExpanation=Klucz odzyskiwania jest twoim jedynym sposobem przywrócenia dostępu do sejfu w przypadku utraty hasła.
vaultOptions.masterkey.recoveryKeyExplanation=Klucz odzyskiwania jest twoim jedynym sposobem przywrócenia dostępu do sejfu w przypadku utraty hasła.
vaultOptions.masterkey.showRecoveryKeyBtn=Wyświetl klucz odzyskiwania
vaultOptions.masterkey.recoverPasswordBtn=Odzyskaj hasło
## Auto Lock
vaultOptions.autoLock=Auto-Lock
vaultOptions.autoLock.lockAfterTimePart1=Zablokuj w stanie bezczynności po
vaultOptions.autoLock.lockAfterTimePart2=minutach
# Recovery Key
recoveryKey.title=Klucz odzyskiwania

View File

@@ -13,8 +13,6 @@ generic.button.done=Ok
generic.button.next=Seguinte
generic.button.print=Imprimir
## Error
generic.error.title=Ocorreu um erro inesperado
generic.error.instruction=Isto não devia ter acontecido. Por favor reporte o texto do erro abaixo e descreva os passos que levaram a este problema.
# Defaults
defaults.vault.vaultName=Cofre
@@ -84,7 +82,6 @@ forgetPassword.title=Esqueci a Senha
forgetPassword.confirmBtn=Esqueci a Senha
# Unlock
unlock.title=Destrancar Cofre
unlock.passwordPrompt=Insira a senha para "%s":
unlock.unlockBtn=Destrancar
##
@@ -105,14 +102,17 @@ migration.title=Atualizar Cofre
## Run
migration.run.startMigrationBtn=Migrar Cofre
migration.run.progressHint=Isso pode levar algum tempo…
## Sucess
## Success
migration.success.unlockNow=Destrancar agora
## Missing file system capabilities
## Impossible
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Checks
## Fix Application
# Preferences
preferences.title=Preferências
@@ -175,6 +175,7 @@ vaultOptions.general.vaultName=Nome do Cofre
vaultOptions.general.unlockAfterStartup=Destrancar o cofre ao iniciar o Cryptomator
vaultOptions.general.actionAfterUnlock=Após destrancar com sucesso
vaultOptions.general.actionAfterUnlock.ask=Perguntar
## Mount
vaultOptions.mount.readonly=Somente leitura
vaultOptions.mount.mountPoint.directoryPickerButton=Escolher…
@@ -182,10 +183,10 @@ vaultOptions.mount.mountPoint.directoryPickerButton=Escolher…
vaultOptions.masterkey=Senha
vaultOptions.masterkey.changePasswordBtn=Alterar Senha
vaultOptions.masterkey.forgetSavedPasswordBtn=Esqueça a senha salva
vaultOptions.masterkey.recoveryKeyExpanation=Uma chave de recuperação é a única forma de restaurar o acesso a um cofre se perder a senha.
vaultOptions.masterkey.recoveryKeyExplanation=Uma chave de recuperação é a única forma de restaurar o acesso a um cofre se perder a senha.
vaultOptions.masterkey.showRecoveryKeyBtn=Exibir Chave de Recuperação
vaultOptions.masterkey.recoverPasswordBtn=Recuperar Senha
## Auto Lock
# Recovery Key
recoveryKey.title=Chave de Recuperação

View File

@@ -13,8 +13,6 @@ generic.button.done=Concluído
generic.button.next=Próximo
generic.button.print=Imprimir
## Error
generic.error.title=Ocorreu um erro inesperado
generic.error.instruction=Isso não deveria ter ocorrido. Por favor, reporte o texto do erro abaixo e inclua uma descrição dos passos que levaram a este erro.
# Defaults
defaults.vault.vaultName=Cofre
@@ -95,7 +93,7 @@ forgetPassword.information=Isso removerá a senha salva deste cofre do chaveiro
forgetPassword.confirmBtn=Esquecer Senha
# Unlock
unlock.title=Desbloquear Cofre
unlock.title=Desbloquear "%s"
unlock.passwordPrompt=Digite a senha para "%s":
unlock.savePassword=Lembrar Senha
unlock.unlockBtn=Desbloquear
@@ -130,7 +128,7 @@ migration.start.confirm=Sim, meu cofre está completamente sincronizado
migration.run.enterPassword=Digite a senha para "%s"
migration.run.startMigrationBtn=Migrar Cofre
migration.run.progressHint=Isso pode levar algum tempo…
## Sucess
## Success
migration.success.nextStepsInstructions="%s" migrado com sucesso.\nVocê agora pode desbloquear este cofre.
migration.success.unlockNow=Desbloquear Agora
## Missing file system capabilities
@@ -146,27 +144,38 @@ migration.impossible.reason=O cofre não pode ser migrado automaticamente porque
migration.impossible.moreInfo=O cofre ainda pode ser aberto com uma versão mais antiga. Para instruções sobre como migrar um cofre manualmente, visite
# Health Check
health.title=Verificar Saúde do Cofre
health.start.introduction=A Verificação de Saúde do Cofre contempla um conjunto de validações para detectar e possivelmente corrigir problemas na estrutura interna do seu cofre. Atenção, pois nem todos os problemas podem ser corrigidos. Você precisa da senha do cofre para realizar as verificações.
health.start.configValid=A leitura e a interpretação do arquivo de configuração do cofre foi realizada com sucesso. Prossiga com a seleção das verificações a realizar.
health.start.configInvalid=Foi encontrado um erro ao ler e interpretar o arquivo de configuração do cofre.
health.checkList.header=Verificações de Saúde Disponíveis
health.checkList.selectAllBox=Selecionar Todas
## Start
health.title=Exame de saúde de "%s"
health.intro.header=Status de saúde
health.intro.text=O Health Check é uma coleção de verificações para detectar e possivelmente corrigir problemas na estrutura interna do seu cofre. Lembre-se de:
health.intro.remarkSync=Certifique-se de que todos os dispositivos estejam completamente sincronizados, isso resolve a maioria dos problemas.
health.intro.remarkFix=Nem todos os problemas podem ser corrigidos.
health.intro.remarkBackup=Se os dados estiverem corrompidos, apenas um backup poderá ajudar.
health.intro.affirmation=Eu li e entendi a informação acima
## Start Failure
health.fail.header=Erro ao carregar configuração do Cofre
health.fail.ioError=Ocorreu um erro ao acessar e ler o arquivo de configuração.
health.fail.parseError=Ocorreu um erro ao analisar a configuração do cofre.
health.fail.moreInfo=Mais informações
## Check Selection
health.checkList.description=Selecione as verificações na lista esquerda ou use os botões abaixo.
health.checkList.selectAllButton=Selecionar Todas as Verificações
health.checkList.deselectAllButton=Desfazer seleção de todas as planilhas
health.check.runBatchBtn=Executar as Verificações Selecionadas
## Detail view
health.check.detail.noSelectedCheck=Para obter os resultados, selecione uma verificação de saúde completada na lista à esquerda.
health.check.detail.header=Resultados de %s
health.check.detail.taskNotStarted=A verificação de saúde não foi selecionada para ser realizada.
health.check.detail.taskScheduled=A verificação de saúde do cofre está agendada.
health.check.detail.taskRunning=A verificação de saúde do cofre está em execução...
health.check.detail.taskSucceeded=A verificação de saúde do cofre foi concluída com sucesso após %d milissegundos.
health.check.detail.taskFailed=A verificação de saúde do cofre foi encerrada devido a um erro.
health.check.detail.taskCancelled=A verificação de saúde do cofre foi cancelada.
health.check.detail.problemCount=Foram encontrados %d problemas e %d erros irreparáveis.
health.check.detail.checkScheduled=A verificação está programada.
health.check.detail.checkRunning=A verificação está atualmente em execução…
health.check.detail.checkSkipped=A verificação não foi selecionada para ser executada.
health.check.detail.checkFinished=A verificação foi concluída com sucesso.
health.check.detail.checkFinishedAndFound=A verificação terminou em execução. Por favor, reveja os resultados.
health.check.detail.checkFailed=A verificação foi encerrada devido a um erro.
health.check.detail.checkCancelled=A verificação foi cancelada.
health.check.exportBtn=Exportar Relatório
health.check.fixBtn=Corrigir
## Checks
health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Verificação de Diretório
## Fix Application
health.fix.fixBtn=Corrigir
health.fix.successTip=Consertado com sucesso
health.fix.failTip=Falha na correção, consulte o log para obter detalhes
# Preferences
preferences.title=Preferências
@@ -184,10 +193,6 @@ preferences.general.debugLogging=Ativar log de debug
preferences.general.debugDirectory=Mostrar arquivos de log
preferences.general.autoStart=Iniciar o Cryptomator durante inicialização do sistema
preferences.general.keychainBackend=Armazenar senhas no
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Keyring do Gnome
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=Carteira KDE
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=Keychain Access do macOS
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Proteção de Dados do Windows
preferences.general.interfaceOrientation=Orientação da interface
preferences.general.interfaceOrientation.ltr=Da esquerda para a direita
preferences.general.interfaceOrientation.rtl=Da direita para a esquerda
@@ -304,12 +309,15 @@ wrongFileAlert.link=Para obter assistência, visite
## General
vaultOptions.general=Geral
vaultOptions.general.vaultName=Nome do Cofre
vaultOptions.general.autoLock.lockAfterTimePart1=Bloquear quando inativo por
vaultOptions.general.autoLock.lockAfterTimePart2=minutos
vaultOptions.general.unlockAfterStartup=Desbloqueie o cofre ao iniciar o Cryptomator
vaultOptions.general.actionAfterUnlock=Após desbloquear com sucesso
vaultOptions.general.actionAfterUnlock.ignore=Não fazer nada
vaultOptions.general.actionAfterUnlock.reveal=Revelar Volume
vaultOptions.general.actionAfterUnlock.ask=Perguntar
vaultOptions.general.healthBtn=Iniciar Verificação de Saúde do Cofre
vaultOptions.general.startHealthCheckBtn=Iniciar Exame de Saúde
## Mount
vaultOptions.mount=Montagem
vaultOptions.mount.readonly=Somente Leitura
@@ -325,13 +333,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Escolha um diretório vazio
vaultOptions.masterkey=Senha
vaultOptions.masterkey.changePasswordBtn=Alterar Senha
vaultOptions.masterkey.forgetSavedPasswordBtn=Esquecer a senha salva
vaultOptions.masterkey.recoveryKeyExpanation=Se você perder a sua senha, a única forma de restaurar acesso a um cofre é através de uma chave de recuperação.
vaultOptions.masterkey.recoveryKeyExplanation=Se você perder a sua senha, a única forma de restaurar acesso a um cofre é através de uma chave de recuperação.
vaultOptions.masterkey.showRecoveryKeyBtn=Exibir chave de recuperação
vaultOptions.masterkey.recoverPasswordBtn=Recuperar Senha
## Auto Lock
vaultOptions.autoLock=Bloqueio automático
vaultOptions.autoLock.lockAfterTimePart1=Bloquear quando inativo por
vaultOptions.autoLock.lockAfterTimePart2=minutos
# Recovery Key
recoveryKey.title=Chave de recuperação

View File

@@ -2,82 +2,363 @@
# Generics
## Button
generic.button.apply=Aplică
generic.button.back=Înapoi
generic.button.cancel=Anulează
generic.button.change=Modifică
generic.button.close=Închide
generic.button.copy=Copiază
generic.button.copied=Copiat!
generic.button.done=Terminat
generic.button.next=Următorul
generic.button.print=Tipărește
## Error
# Defaults
defaults.vault.vaultName=Seif
# Tray Menu
traymenu.showMainWindow=Afișează
traymenu.showPreferencesWindow=Preferințe
traymenu.lockAllVaults=Blochează toate
traymenu.quitApplication=Ieșire
traymenu.vault.unlock=Deblocați
traymenu.vault.lock=Blocaţi
traymenu.vault.reveal=Afişare
# Add Vault Wizard
addvaultwizard.title=Adaugă un seif
## Welcome
addvaultwizard.welcome.newButton=Creează seif nou
addvaultwizard.welcome.existingButton=Deschide un seif existent
## New
### Name
addvaultwizard.new.nameInstruction=Alege un nume pentru seif
addvaultwizard.new.namePrompt=Nume seif
### Location
addvaultwizard.new.locationInstruction=Unde ar trebui ca Cryptomator să stocheze fișierele criptate din seiful dumneavoastră?
addvaultwizard.new.locationLabel=Locație stocare
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Locație personalizată
addvaultwizard.new.directoryPickerButton=Alege…
addvaultwizard.new.directoryPickerTitle=Alege Dosar
addvaultwizard.new.fileAlreadyExists=Există deja un fișier sau un dosar cu numele seifului
addvaultwizard.new.locationDoesNotExist=Dosarul în calea specificată nu există sau nu poate fi accesat
addvaultwizard.new.locationIsNotWritable=Nu există acces la scriere la calea specificată
addvaultwizard.new.locationIsOk=Locația potrivită pentru seiful dumneavoastră
addvaultwizard.new.invalidName=Nume seif invalid. Vă rugăm sa luați în considerare un nume de dosar obișnuit.
### Password
addvaultwizard.new.createVaultBtn=Crează seif
addvaultwizard.new.generateRecoveryKeyChoice=Nu veți putea accesa datele dvs. fără parolă. Doriți o cheie de recuperare pentru cazul în care vă pierdeți parola?
addvaultwizard.new.generateRecoveryKeyChoice.yes=Da, vă rog, mai bine sigur decât rău
addvaultwizard.new.generateRecoveryKeyChoice.no=Nu, mulțumesc, nu îmi voi pierde parola
### Information
addvault.new.readme.storageLocation.fileName=IMPORTANT.rtf
addvault.new.readme.storageLocation.1=⚠️ FIȘIERE SEIF ⚠️
addvault.new.readme.storageLocation.2=Aceasta este locația de stocare a seifului dvs.
addvault.new.readme.storageLocation.3=Să NU
addvault.new.readme.storageLocation.4=• modificați fișierele din acest dosar sau
addvault.new.readme.storageLocation.5=• inserați fișiere destinate criptării în acest director.
addvault.new.readme.storageLocation.6=Dacă doriți să criptați fișierele și să vizualizați conținutul seifului, faceți următoarele:
addvault.new.readme.storageLocation.7=1. Adăugați acest seif la Cryptomator.
addvault.new.readme.storageLocation.8=2. Deblocați seiful în Cryptomator.
addvault.new.readme.storageLocation.9=3. Deschideți locația de acces făcând clic pe butonul "Reveal".
addvault.new.readme.storageLocation.10=Dacă aveți nevoie de ajutor, vizitați documentația: %s
addvault.new.readme.accessLocation.fileName=BINEATIVENIT.rtf
addvault.new.readme.accessLocation.1=🔐️ UNITATE CRIPTATĂ 🔐️
addvault.new.readme.accessLocation.2=Aceasta este locația de acces a seifului dvs.
addvault.new.readme.accessLocation.3=Orice fișier adăugat la acest volum va fi criptat de către Cryptomator. Puteți lucra la el ca pe orice altă unitate/folder. Aceasta este doar o vizualizare decriptată a conținutului său, fișierele sunt criptate tot timpul pe hard disk-ul tău.
addvault.new.readme.accessLocation.4=Puteți să ștergeți acest fișier.
## Existing
addvaultwizard.existing.instruction=Alegeți fișierul "masterkey.cryptomator" din seiful dvs. existent.
addvaultwizard.existing.chooseBtn=Alege…
addvaultwizard.existing.filePickerTitle=Selectaţi fişierul Masterkey
## Success
addvaultwizard.success.nextStepsInstructions=Seiful "%s" a fost adăugat.\nTrebuie să deblocați acest seif pentru a accesa sau adăuga conținut. Alternativ, îl puteți debloca în orice moment ulterior.
addvaultwizard.success.unlockNow=Deblochează acum
# Remove Vault
removeVault.title=Eliminați seiful
removeVault.information=Acest lucru va face Cryptomator să uite de acest seif. Îl puteţi adăuga din nou mai târziu. Nici un fişier criptat nu va fi şters din hard disk-ul dvs.
removeVault.confirmBtn=Eliminați seiful
# Change Password
changepassword.title=Schimbați parola
changepassword.enterOldPassword=Introduceți parola curentă pentru "%s"
changepassword.finalConfirmation=Înțeleg că nu voi putea accesa datele mele dacă îmi uit parola
# Forget Password
forgetPassword.title=Parolă uitată
forgetPassword.information=Această acțiune va șterge parola salvată a acestui seif din keychain-ul sistemului de operare.
forgetPassword.confirmBtn=Parolă uitată
# Unlock
unlock.title=Deblocare "%s"
unlock.passwordPrompt=Introduceți parola pentru "%s":
unlock.savePassword=Memorează parola
unlock.unlockBtn=Deblocați
##
unlock.chooseMasterkey.prompt=Nu s-a putut găsi fișierul masterkey pentru acest seif la locația așteptată. Vă rugăm să alegeți manual fișierul cheie.
unlock.chooseMasterkey.filePickerTitle=Selectaţi fişierul Masterkey
## Success
unlock.success.message=Deblocat "%s" cu succes! Seiful dvs. este acum accesibil prin unitatea sa virtuală.
unlock.success.rememberChoice=Ține minte alegerea, nu mai arăta asta din nou
unlock.success.revealBtn=Dezvăluie unitatea
## Failure
unlock.error.heading=Imposibil de deblocat seiful
### Invalid Mount Point
unlock.error.invalidMountPoint.notExisting=Punctul de montare "%s" nu este un dosar, nu este gol sau nu există.
unlock.error.invalidMountPoint.existing=Punctul de montare "%s" există deja sau dosarul părinte lipsește.
# Lock
## Force
lock.forced.heading=Blocarea elegantă a eșuat
lock.forced.message=Blocarea "%s" a fost blocată de operațiile în așteptare sau de fișierele deschise. Puteți forța blocarea acestui seif, dar întreruperea I/O poate duce la pierderea datelor nesalvate.
lock.forced.confirmBtn=Forțați blocarea
## Failure
lock.fail.heading=Blocarea seifului a eșuat.
lock.fail.message=Seiful "%s" nu a putut fi blocat. Asigurați-vă că lucrările nesalvate sunt salvate altundeva și că operațiunile importante de citire/scriere sunt terminate. Pentru a închide seiful omoară procesul Cryptomator.
# Migration
migration.title=Îmbunătățește seiful
## Start
migration.start.prompt=Seiful dvs. "%s" trebuie să fie actualizat la un format mai nou. Înainte de a continua, asigurați-vă că nu există sincronizare în așteptare care să afecteze acest seif.
migration.start.confirm=Da, seiful meu este complet sincronizat
## Run
## Sucess
migration.run.enterPassword=Introduceți parola pentru "%s"
migration.run.startMigrationBtn=Migrează seiful
migration.run.progressHint=Acest lucru poate dura ceva timp…
## Success
migration.success.nextStepsInstructions=Seiful "%s" a fost migrat cu succes.\nAcum puteți debloca seiful dvs.
migration.success.unlockNow=Deblochează acum
## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Tip de fișier nesuportat
migration.error.missingFileSystemCapabilities.description=Migrarea nu a fost pornită, deoarece seiful dvs. este localizat pe un sistem de fișiere necorespunzător.
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=Sistemul de fişiere nu acceptă nume de fişiere lungi.
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Sistemul de fișiere nu suportă căi lungi.
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Sistemul de fișiere nu permite citirea.
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Sistemul de fişiere nu permite scrierea.
## Impossible
migration.impossible.heading=Imposibil de migrat seiful
migration.impossible.reason=Seiful nu poate fi migrat automat deoarece locația sa de stocare sau punctul de acces nu este compatibilă.
migration.impossible.moreInfo=Seiful poate fi deschis în continuare cu o versiune mai veche. Pentru instrucţiuni despre cum să migraţi manual un seif, vizitaţi
# Health Check
## Start
health.title=Verificarea de sănătate a "%s"
health.intro.header=Verificarea stării de sănătate
health.intro.text=Verificarea stării de sănătate este o colecție de verificări pentru a detecta și eventual a remedia problemele din structura internă a seifului. Vă rugăm să țineți cont de:
health.intro.remarkSync=Asigură că toate dispozitivele sunt complet sincronizate, acest lucru rezolvă majoritatea problemelor.
health.intro.remarkFix=Nu toate problemele pot fi rezolvate.
health.intro.remarkBackup=În cazul în care datele sunt corupte, numai o copie de rezervă poate ajuta.
health.intro.affirmation=Am citit și am înțeles informațiile de mai sus
## Start Failure
health.fail.header=Eroare la încărcarea configurației seifului
health.fail.ioError=A apărut o eroare la accesarea și citirea fișierului de configurare.
health.fail.parseError=S-a produs o eroare la analizarea configurației seifului.
health.fail.moreInfo=Mai multe informații
## Check Selection
health.checkList.description=Selectați verificări în lista din stânga sau folosiți butoanele de mai jos.
health.checkList.selectAllButton=Selectați toate verificările
health.checkList.deselectAllButton=Deselectați toate verificările
health.check.runBatchBtn=Execută verificările selectate
## Detail view
## Checks
health.check.detail.noSelectedCheck=Pentru rezultate, selectaţi o verificare de sănătate finalizată în lista din stânga.
health.check.detail.checkScheduled=Verificarea este programată.
health.check.detail.checkRunning=Verificarea se execută la moment…
health.check.detail.checkSkipped=Verificarea nu a fost selectată pentru a rula.
health.check.detail.checkFinished=Verificarea s-a terminat cu succes.
health.check.detail.checkFinishedAndFound=Verificarea s-a terminat. Vă rugăm să examinați rezultatele.
health.check.detail.checkFailed=Verificarea a ieșit din cauza unei erori.
health.check.detail.checkCancelled=Verificarea a fost anulată.
health.check.exportBtn=Exportare raport
## Fix Application
health.fix.fixBtn=Repară
health.fix.successTip=Remediere reușită
health.fix.failTip=Remediere eșuată, vezi jurnalul pentru detalii
# Preferences
preferences.title=Preferințe
## General
preferences.general=Setări Generale
preferences.general.theme=Aspect
preferences.general.theme.automatic=Automat
preferences.general.theme.light=Luminos
preferences.general.theme.dark=Întunecat
preferences.general.unlockThemes=Deblochează modul întunecat
preferences.general.showMinimizeButton=Afișează butonul de minimizare
preferences.general.showTrayIcon=Arată tray icon (necesită repornire)
preferences.general.startHidden=Ascunde fereastra la pornirea Cryptomator
preferences.general.debugLogging=Activează jurnalul de depanare
preferences.general.debugDirectory=Dezvăluie fişierele jurnal
preferences.general.autoStart=Lansați Cryptomator la pornirea sistemului
preferences.general.keychainBackend=Salvează parolele cu
preferences.general.interfaceOrientation=Orientarea interfeței
preferences.general.interfaceOrientation.ltr=De la stânga la dreapta
preferences.general.interfaceOrientation.rtl=De la dreapta la stânga
## Volume
preferences.volume=Unitate virtuală
preferences.volume.type=Tip volum
preferences.volume.webdav.port=Port WebDAV
preferences.volume.webdav.scheme=Schema WebDAV
## Updates
preferences.updates=Actualizări
preferences.updates.currentVersion=Versiunea actuală: %s
preferences.updates.autoUpdateCheck=Verificare automată actualizări
preferences.updates.checkNowBtn=Verifică acum
preferences.updates.updateAvailable=Actualizare la versiunea %s disponibilă.
## Contribution
preferences.contribute=Susțineți-ne
preferences.contribute.registeredFor=Certificat de suporter înregistrat pentru %s
preferences.contribute.noCertificate=Susțineți Cryptomator și primiți un certificat de suport. E ca o cheie de licență dar pentru persoanele minunate care folosesc software gratuit. ;-)
preferences.contribute.getCertificate=Nu aveți deja unul? Aflați cum îl puteți obține.
preferences.contribute.promptText=Lipiți codul certificatului de suporter aici
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
preferences.about=Despre
# Vault Statistics
stats.title=Statistici pentru %s
stats.cacheHitRate=Rata de control cache
## Read
stats.read.throughput.idle=Citire: inactiv
stats.read.throughput.kibs=Citire: %.2f kiB/s
stats.read.throughput.mibs=Citire: %.2f MiB/s
stats.read.total.data.none=Date citite: -
stats.read.total.data.kib=Date citite: %.1f kiB
stats.read.total.data.mib=Date citite: %.1f MiB
stats.read.total.data.gib=Date citite: %.1f GiB
stats.decr.total.data.none=Date decriptate: -
stats.decr.total.data.kib=Date decriptate: %.1f kiB
stats.decr.total.data.mib=Date decriptate: %.1f MiB
stats.decr.total.data.gib=Date decriptate: %.1f GiB
stats.read.accessCount=Total citit: %d
## Write
stats.write.throughput.idle=Scriere: inactiv
stats.write.throughput.kibs=Scrie: %.2f kiB/s
stats.write.throughput.mibs=Scrie: %.2f MiB/s
stats.write.total.data.none=Date scrise: -
stats.write.total.data.kib=Date scrise: %.1f kiB
stats.write.total.data.mib=Date scrise: %.1f MiB
stats.write.total.data.gib=Date scrise: %.1f GiB
stats.encr.total.data.none=Date criptate: -
stats.encr.total.data.kib=Date criptate: %.1f kiB
stats.encr.total.data.mib=Date criptate: %.1f MiB
stats.encr.total.data.gib=Date criptate: %.1f GiB
stats.write.accessCount=Total scrieri: %d
# Main Window
main.closeBtn.tooltip=Închide
main.minimizeBtn.tooltip=Minimizează
main.preferencesBtn.tooltip=Preferințe
main.debugModeEnabled.tooltip=Modul de depanare este activat
main.donationKeyMissing.tooltip=Vă rugăm să luați în considerare o donație
## Drag 'n' Drop
main.dropZone.dropVault=Adaugă acest seif
main.dropZone.unknownDragboardContent=Dacă doriţi să adăugaţi un seif, trageţi-l în această fereastră
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Faceți clic aici pentru a adăuga un seif
main.vaultlist.contextMenu.remove=Elimină…
main.vaultlist.contextMenu.lock=Blocaţi
main.vaultlist.contextMenu.unlock=Deblochează…
main.vaultlist.contextMenu.unlockNow=Deblochează acum
main.vaultlist.contextMenu.vaultoptions=Arată opțiunile seifului
main.vaultlist.contextMenu.reveal=Dezvăluie unitatea
main.vaultlist.addVaultBtn=Adaugă un seif
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Vă mulțumim că ați ales Cryptomator pentru a vă proteja fișierele. Dacă aveți nevoie de asistență, verificați ghidurile noastre de pornire:
### Locked
main.vaultDetail.lockedStatus=BLOCAT
main.vaultDetail.unlockBtn=Deblochează…
main.vaultDetail.unlockNowBtn=Deblochează acum
main.vaultDetail.optionsBtn=Opțiuni seif
main.vaultDetail.passwordSavedInKeychain=Parola a fost salvată
### Unlocked
main.vaultDetail.unlockedStatus=DEBLOCAT
main.vaultDetail.accessLocation=Conținutul seifului tău este accesibil aici:
main.vaultDetail.revealBtn=Dezvăluie unitatea
main.vaultDetail.lockBtn=Blocaţi
main.vaultDetail.bytesPerSecondRead=Citire:
main.vaultDetail.bytesPerSecondWritten=Scriere:
main.vaultDetail.throughput.idle=inactiv
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Statistici de seif
### Missing
main.vaultDetail.missing.info=Cryptomator nu a putut găsi un seif pe această cale.
main.vaultDetail.missing.recheck=Verifică din nou
main.vaultDetail.missing.remove=Eliminați din lista de seifuri…
main.vaultDetail.missing.changeLocation=Schimbați locația seifului…
### Needs Migration
main.vaultDetail.migrateButton=Îmbunătățește seiful
main.vaultDetail.migratePrompt=Înainte de a-l putea accesa, seiful dumneavoastră trebuie actualizat la format nou
# Wrong File Alert
wrongFileAlert.title=Cum să criptați fișierele
wrongFileAlert.header.title=Ați încercat să criptați aceste fișiere?
wrongFileAlert.header.lead=În acest scop, Cryptomator oferă un volum în managerul de fișiere al sistemului dumneavoastră.
wrongFileAlert.instruction.0=Pentru a cripta fișierele, urmați acești pași:
wrongFileAlert.instruction.1=1. Deblocați seiful dvs.
wrongFileAlert.instruction.2=2. Apăsați pe butonul "Afişare" pentru a deschide volumul în managerul de fișiere.
wrongFileAlert.instruction.3=3. Adăugați fişierele la acest volum.
wrongFileAlert.link=Pentru asistență suplimentară, vizitați
# Vault Options
## General
vaultOptions.general=Setări Generale
vaultOptions.general.vaultName=Nume seif
vaultOptions.general.autoLock.lockAfterTimePart1=Blocare când inactiv pentru
vaultOptions.general.autoLock.lockAfterTimePart2=minute
vaultOptions.general.unlockAfterStartup=Deblochează seiful la pornirea Cryptomator
vaultOptions.general.actionAfterUnlock=După deblocarea cu succes
vaultOptions.general.actionAfterUnlock.ignore=Nu fă nimic
vaultOptions.general.actionAfterUnlock.reveal=Dezvăluie unitatea
vaultOptions.general.actionAfterUnlock.ask=Întreabă
vaultOptions.general.startHealthCheckBtn=Începe verificarea de sănătate
## Mount
vaultOptions.mount=Montare
vaultOptions.mount.readonly=Doar citire
vaultOptions.mount.customMountFlags=Atribute de montare personalizate
vaultOptions.mount.winDriveLetterOccupied=ocupat
vaultOptions.mount.mountPoint=Punct de montare
vaultOptions.mount.mountPoint.auto=Alegeţi automat o locaţie potrivită
vaultOptions.mount.mountPoint.driveLetter=Utilizați litera de unitate atribuită
vaultOptions.mount.mountPoint.custom=Cale personalizată
vaultOptions.mount.mountPoint.directoryPickerButton=Alege…
vaultOptions.mount.mountPoint.directoryPickerTitle=Alegeți un dosar gol
## Master Key
## Auto Lock
vaultOptions.masterkey=Parolă
vaultOptions.masterkey.changePasswordBtn=Schimbați parola
vaultOptions.masterkey.forgetSavedPasswordBtn=Parolă salvată uitată
vaultOptions.masterkey.recoveryKeyExplanation=O cheie de recuperare este singurul mijloc de a restabili accesul la un seif în caz că vă pierdeți parola.
vaultOptions.masterkey.showRecoveryKeyBtn=Afișează cheia de recuperare
vaultOptions.masterkey.recoverPasswordBtn=Recuperează parola
# Recovery Key
recoveryKey.title=Cheia de recuperare
recoveryKey.enterPassword.prompt=Introduceți parola pentru a afișa cheia de recuperare pentru "%s:
recoveryKey.display.message=Următoarea cheie de recuperare poate fi folosită pentru a restabili accesul la "%s":
recoveryKey.display.StorageHints=Păstrați cheia de recuperare undeva foarte sigur, de ex.\n • Păstrați-o folosind un manager de parole\n • Salvați-o pe un flash USB stick\n • Imprimați-o pe hârtie
recoveryKey.recover.prompt=Introduceți cheia de recuperare pentru "%s:
recoveryKey.recover.validKey=Aceasta este o cheie de recuperare validă
recoveryKey.printout.heading=Cheia de recuperare Cryptomator\n"%s"\n
# New Password
newPassword.promptText=Introduceți o parolă nouă
newPassword.reenterPassword=Confirmaţi noua parolă
newPassword.passwordsMatch=Parolele corespund!
newPassword.passwordsDoNotMatch=Parolele nu corespund
passwordStrength.messageLabel.tooShort=Folosiți cel puțin %d caractere
passwordStrength.messageLabel.0=Foarte slabă
passwordStrength.messageLabel.1=Slabă
passwordStrength.messageLabel.2=Acceptabilă
passwordStrength.messageLabel.3=Puternică
passwordStrength.messageLabel.4=Foarte puternică
# Quit
quit.prompt=Părăsiți aplicația? Există seifuri deblocate.
quit.lockAndQuit=Blocați și ieșiți

View File

@@ -13,8 +13,11 @@ generic.button.done=Готово
generic.button.next=Далее
generic.button.print=Печать
## Error
generic.error.title=Неизвестная ошибка
generic.error.instruction=Этого не должно было произойти. Создайте отчёт об ошибке ниже и опишите, какие шаги к ней привели.
generic.error.title=Ошибка: %s
generic.error.instruction=Произошла непредвиденная ситуация. Попробуйте найти уже имеющиеся решения этой ошибки. Если об этой ошибке ещё не сообщали, то сделайте это.
generic.error.hyperlink.lookup=Найти ошибку
generic.error.hyperlink.report=Сообщить об ошибке
generic.error.technicalDetails=Подробности:
# Defaults
defaults.vault.vaultName=Хранилище
@@ -41,7 +44,7 @@ addvaultwizard.new.namePrompt=Имя хранилища
addvaultwizard.new.locationInstruction=Где Cryptomator должен хранить зашифрованные файлы хранилища?
addvaultwizard.new.locationLabel=Место хранения
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Своё место
addvaultwizard.new.directoryPickerLabel=Другое место
addvaultwizard.new.directoryPickerButton=Выбрать…
addvaultwizard.new.directoryPickerTitle=Выберите папку
addvaultwizard.new.fileAlreadyExists=Файл или папка с именем хранилища уже существует
@@ -51,7 +54,7 @@ addvaultwizard.new.locationIsOk=Подходящее расположение д
addvaultwizard.new.invalidName=Неверное имя хранилища. Укажите корректное имя папки.
### Password
addvaultwizard.new.createVaultBtn=Создать хранилище
addvaultwizard.new.generateRecoveryKeyChoice=Вы не сможете получить доступ к своим данным без пароля. Хотите создать ключ для восстановления на случай потери пароля?
addvaultwizard.new.generateRecoveryKeyChoice=Вы не сможете получить доступ к своим данным без пароля. Хотите создать ключ для восстановления на случай утери пароля?
addvaultwizard.new.generateRecoveryKeyChoice.yes=Да, лучше предостеречься, чем потом жалеть
addvaultwizard.new.generateRecoveryKeyChoice.no=Нет, спасибо, я не потеряю пароль
### Information
@@ -69,7 +72,7 @@ addvault.new.readme.storageLocation.10=Если вам нужна помощь,
addvault.new.readme.accessLocation.fileName=ПРИВЕТСТВИЕ.rtf
addvault.new.readme.accessLocation.1=🔐️ ЗАШИФРОВАННЫЙ ТОМ 🔐️
addvault.new.readme.accessLocation.2=Это место доступа к вашему хранилищу.
addvault.new.readme.accessLocation.3=Любые файлы, добавленные в этот том, будут зашифрованы Cryptomator. Вы можете работать с ним как с любым другим диском/папкой. Здесь отображается только расшифрованное содержимое тома, ваши файлы остаются зашифрованными на жёстком диске постоянно.
addvault.new.readme.accessLocation.3=Любые файлы, добавленные в этот том, будут зашифрованы Cryptomator. Вы можете работать с ним как с любым другим диском или папкой. Здесь отображается только расшифрованное содержимое тома, ваши файлы остаются зашифрованными на жёстком диске постоянно.
addvault.new.readme.accessLocation.4=Этот файл можно удалить.
## Existing
addvaultwizard.existing.instruction=Выберите файл "masterkey.cryptomator" от имеющегося хранилища.
@@ -87,7 +90,7 @@ removeVault.confirmBtn=Удалить хранилище
# Change Password
changepassword.title=Изменить пароль
changepassword.enterOldPassword=Введите текущий пароль для "%s"
changepassword.finalConfirmation=Я понимаю, что не смогу получить доступ к своим данным, если забуду пароль
changepassword.finalConfirmation=Я понимаю, что не смогу получить доступ к данным, если забуду пароль
# Forget Password
forgetPassword.title=Не помню пароль
@@ -95,12 +98,12 @@ forgetPassword.information=Сохранённый пароль от этого
forgetPassword.confirmBtn=Не помню пароль
# Unlock
unlock.title=Разблокировать хранилище
unlock.title=Разблокировать "%s"
unlock.passwordPrompt=Введите пароль для "%s"
unlock.savePassword=Запомнить пароль
unlock.unlockBtn=Разблокировать
##
unlock.chooseMasterkey.prompt=Не удалось найти файл masterkey для этого хранилища в ожидаемом месте. Выберите ключевой файл вручную.
unlock.chooseMasterkey.prompt=Не удалось найти файл MasterKey для этого хранилища в ожидаемом месте. Выберите ключевой файл вручную.
unlock.chooseMasterkey.filePickerTitle=Выберите файл MasterKey
## Success
unlock.success.message=Разблокировка "%s" успешно выполнена! Доступ в хранилище открыт через его виртуальный диск.
@@ -114,7 +117,7 @@ unlock.error.invalidMountPoint.existing=Точка монтирования %s
# Lock
## Force
lock.forced.heading=Не удалось выполнить мягкую блокировку
lock.forced.heading=Ошибка мягкой блокировки
lock.forced.message=Блокировка "%s" невозможна из-за незавершённых операций или открытых файлов. Вы можете заблокировать это хранилище принудительно, однако прерывание ввода-вывода может привести к потере несохранённых данных.
lock.forced.confirmBtn=Принудительная блокировка
## Failure
@@ -124,13 +127,13 @@ lock.fail.message=Хранилище "%s" не удалось заблокиро
# Migration
migration.title=Обновить хранилище
## Start
migration.start.prompt=Хранилище "%s" нужно преобразовать в более новый формат. Прежде чем продолжить, убедитесь, что нет отложенной синхронизации, которая может повлиять на хранилище.
migration.start.prompt=Хранилище "%s" нужно преобразовать в новый формат. Прежде чем продолжить, убедитесь, что нет отложенной синхронизации, которая может повлиять на хранилище.
migration.start.confirm=Да, моё хранилище полностью синхронизировано
## Run
migration.run.enterPassword=Введите пароль для "%s"
migration.run.startMigrationBtn=Перенести хранилище
migration.run.progressHint=Это может занять некоторое время…
## Sucess
## Success
migration.success.nextStepsInstructions=Перенос "%s" успешно выполнен.\nТеперь можно разблокировать хранилище.
migration.success.unlockNow=Разблокировать
## Missing file system capabilities
@@ -146,27 +149,38 @@ migration.impossible.reason=Хранилище не может быть пере
migration.impossible.moreInfo=Хранилище по-прежнему можно открыть в более старой версии. Чтобы узнать, как вручную перенести хранилище, посетите
# Health Check
health.title=Проверка состояния хранилища
health.start.introduction=Проверка состояния хранилища это набор проверок для обнаружения и устранения проблем во внутренней структуре хранилища. Обратите внимание, что не все проблемы исправимы. Для проверки необходим пароль хранилища.
health.start.configValid=Файл конфигурации хранилища успешно прочитан и обработан. Переход к выбору проверок.
health.start.configInvalid=Ошибка при чтении и разборе файла конфигурации хранилища.
health.checkList.header=Доступные проверки состояния
health.checkList.selectAllBox=Выбрать все
## 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.header=Результаты: %s
health.check.detail.taskNotStarted=Проверка не была выбрана для запуска.
health.check.detail.taskScheduled=Проверка запланирована.
health.check.detail.taskRunning=Проверка выполняется…
health.check.detail.taskSucceeded=Проверка успешно завершена через %d мс.
health.check.detail.taskFailed=Проверка завершилась из-за ошибки.
health.check.detail.taskCancelled=Проверка была отменена.
health.check.detail.problemCount=Проблем: %d. Неисправимых ошибок: %d.
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.exportBtn=Экспорт отчёта
health.check.fixBtn=Исправить
## Checks
health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Проверка папок
## Fix Application
health.fix.fixBtn=Исправить
health.fix.successTip=Исправлено
health.fix.failTip=Не исправлено, подробности в журнале
# Preferences
preferences.title=Настройки
@@ -177,17 +191,13 @@ preferences.general.theme.automatic=Автоматически
preferences.general.theme.light=Светлая
preferences.general.theme.dark=Тёмная
preferences.general.unlockThemes=Разблокировать тёмный режим
preferences.general.showMinimizeButton=Показать кнопку сворачивания
preferences.general.showTrayIcon=Показать значок в панели задач (требуется перезапуск)
preferences.general.showMinimizeButton=Показывать кнопку сворачивания
preferences.general.showTrayIcon=Показывать значок в панели задач (требуется перезапуск)
preferences.general.startHidden=Скрывать окно при запуске Cryptomator
preferences.general.debugLogging=Вести журнал отладки
preferences.general.debugDirectory=Показать файлы журнала
preferences.general.autoStart=Запускать Cryptomator при старте системы
preferences.general.keychainBackend=Хранение паролей
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Связка ключей Gnome
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=Хранилище ключей KDE
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=Доступ к связке ключей macOS
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Защита данных Windows
preferences.general.interfaceOrientation=Интерфейс
preferences.general.interfaceOrientation.ltr=Слева направо
preferences.general.interfaceOrientation.rtl=Справа налево
@@ -214,10 +224,10 @@ preferences.contribute.promptText=Вставьте сюда код сертиф
preferences.about=О программе
# Vault Statistics
stats.title=Статистика по %s
stats.title=Статистика: %s
stats.cacheHitRate=Частота попаданий кэша
## Read
stats.read.throughput.idle=Чтение: бездействие
stats.read.throughput.idle=Чтение: -
stats.read.throughput.kibs=Чтение: %.2f КиБ/с
stats.read.throughput.mibs=Чтение: %.2f МиБ/с
stats.read.total.data.none=Прочитано: -
@@ -228,12 +238,12 @@ 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
stats.read.accessCount=Всего чтений: %d
## Write
stats.write.throughput.idle=Запись: бездействие
stats.write.throughput.idle=Запись: -
stats.write.throughput.kibs=Запись: %.2f КиБ/с
stats.write.throughput.mibs=Запись: %.2f МиБ/с
stats.write.total.data.none=Записано данных: -
stats.write.total.data.none=Записано: -
stats.write.total.data.kib=Записано: %.1f КиБ
stats.write.total.data.mib=Записано: %.1f МиБ
stats.write.total.data.gib=Записано: %.1f ГиБ
@@ -241,7 +251,7 @@ 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
stats.write.accessCount=Всего записей: %d
# Main Window
main.closeBtn.tooltip=Закрыть
@@ -304,19 +314,22 @@ wrongFileAlert.link=Если нужна помощь, посетите
## General
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.healthBtn=Начать проверку состояния
vaultOptions.general.startHealthCheckBtn=Начать проверку состояния
## Mount
vaultOptions.mount=Монтирование
vaultOptions.mount.readonly=Только чтение
vaultOptions.mount.customMountFlags=Свои флаги монтирования
vaultOptions.mount.customMountFlags=Другие флаги монтирования
vaultOptions.mount.winDriveLetterOccupied=занято
vaultOptions.mount.mountPoint=Точка монтирования
vaultOptions.mount.mountPoint.auto=Автоматически выбирать подходящее расположение
vaultOptions.mount.mountPoint.auto=Автовыбор подходящего расположения
vaultOptions.mount.mountPoint.driveLetter=Использовать назначенную букву диска
vaultOptions.mount.mountPoint.custom=Свой путь
vaultOptions.mount.mountPoint.directoryPickerButton=Выбрать…
@@ -325,13 +338,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Выберите пустую
vaultOptions.masterkey=Пароль
vaultOptions.masterkey.changePasswordBtn=Изменить пароль
vaultOptions.masterkey.forgetSavedPasswordBtn=Забыть сохранённый пароль
vaultOptions.masterkey.recoveryKeyExpanation=Ключ восстановления - это единственный способ восстановить доступ к хранилищу при утере пароля.
vaultOptions.masterkey.recoveryKeyExplanation=При утере пароля восстановить доступ к хранилищу можно только с помощью ключа восстановления.
vaultOptions.masterkey.showRecoveryKeyBtn=Показать ключ восстановления
vaultOptions.masterkey.recoverPasswordBtn=Восстановить пароль
## Auto Lock
vaultOptions.autoLock=Автоблок
vaultOptions.autoLock.lockAfterTimePart1=Блокировать при бездействии
vaultOptions.autoLock.lockAfterTimePart2=мин
# Recovery Key
recoveryKey.title=Ключ восстановления

View File

@@ -13,8 +13,11 @@ generic.button.done=Hotovo
generic.button.next=Ďalej
generic.button.print=Tlač
## Error
generic.error.title=Vyskytla sa neočakávaná chyba
generic.error.instruction=Toto sa nemalo stať. Nahláste text chyby uvedený nižšie a uveďte popis krokov, ktoré viedli k tejto chybe.
generic.error.title=Chyba %s
generic.error.instruction=Ejha! Cryptomator toto neočakával. Môžte nahliadnuť do existujúcich riešení tejto chyby. Alebo v prípade že zatiaľ nebola nahlásená, môžte to slobodne urobiť.
generic.error.hyperlink.lookup=Vyhľadať túto chybu
generic.error.hyperlink.report=Nahlásiť túto chybu
generic.error.technicalDetails=Podrobnosti:
# Defaults
defaults.vault.vaultName=Trezor
@@ -40,9 +43,14 @@ addvaultwizard.new.namePrompt=Názov trezoru
### Location
addvaultwizard.new.locationInstruction=Kde by mal Cryptomator uchovávať šifrované súbory vášho trezoru?
addvaultwizard.new.locationLabel=Umiestnenie úložiska
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Vlastné umiestnenie
addvaultwizard.new.directoryPickerButton=Vybrať…
addvaultwizard.new.directoryPickerTitle=Vybrať adresár
addvaultwizard.new.fileAlreadyExists=Súbor alebo adresár s menom trezoru už existuje
addvaultwizard.new.locationDoesNotExist=Adresár na danej ceste neexistuje alebo nie je dostupný
addvaultwizard.new.locationIsNotWritable=Nie je umožnený zápis na danej ceste
addvaultwizard.new.locationIsOk=Vhodné umiestnenie pre Váš trezor
addvaultwizard.new.invalidName=Neplatný názov trezoru. Zvážte bežný názov adresára.
### Password
addvaultwizard.new.createVaultBtn=Vytvoriť trezor
@@ -90,18 +98,19 @@ forgetPassword.information=Týmto vymažete uložené heslo tohto trezoru z vá
forgetPassword.confirmBtn=Zabudnuté heslo
# Unlock
unlock.title=Odomknúť trezor
unlock.title=Odomknúť "%s"
unlock.passwordPrompt=Zadajte heslo pre "%s":
unlock.savePassword=Odomknúť.uložiťHeslo
unlock.unlockBtn=Odomknúť
##
unlock.chooseMasterkey.prompt=Nemožno nájsť hlavný kľúčový súbor pre túto peňaženku na jej očakávanom mieste. Prosím zvoľte kľúčový súbor manuálne.
unlock.chooseMasterkey.prompt=Nemožno nájsť hlavný kľúčový súbor pre tento trezor na jeho očakávanom mieste. Prosím zvoľte kľúčový súbor manuálne.
unlock.chooseMasterkey.filePickerTitle=Zvoľte hlavný kľúčový súbor
## Success
unlock.success.message=Odomknutie "%s" úspešné! Vaša peňaženka je už prístupná cez jej virtuálny disk.
unlock.success.revealBtn=Odkry disk
unlock.success.message=Odomknutie "%s" úspešné! Váš trezor je už prístupný cez jeho virtuálny disk.
unlock.success.rememberChoice=Zapamätať voľbu, už viac nezobrazovať
unlock.success.revealBtn=Odkryť disk
## Failure
unlock.error.heading=Nie je možné odomknúť účet
unlock.error.heading=Nie je možné odomknúť trezor
### Invalid Mount Point
unlock.error.invalidMountPoint.notExisting=Bod pripojenia "%s" nie je adresár, nie je prázdny alebo neexistuje.
unlock.error.invalidMountPoint.existing=Bod pripojenia "%s" už existuje alebo chýba nadradený adresár.
@@ -109,55 +118,100 @@ unlock.error.invalidMountPoint.existing=Bod pripojenia "%s" už existuje alebo c
# Lock
## Force
lock.forced.heading=Bežné uzamknutie zlyhalo
lock.forced.message=Zamknutie "%s" bolo zablokované prebiehajúcimi operáciami alebo otvorenými súbormi. Smiete vynútiť uzamknutie tejto peňaženky, ale prerušením I/O môže viesť k strate alebo neuloženiu dát.
lock.forced.message=Zamknutie "%s" bolo zablokované prebiehajúcimi operáciami alebo otvorenými súbormi. Smiete vynútiť uzamknutie tohto trezoru, ale prerušením I/O môže viesť k strate alebo neuloženiu dát.
lock.forced.confirmBtn=Vynútené uzamknutie
## Failure
lock.fail.heading=Uzatváranie peňaženky zlyhalo.
lock.fail.message=Peňaženku "%s" nie je možné uzamknúť. Uistite sa že neuložená páca je uložená inde a dôležité Read/Write operácie sú ukončené. Ináč uzavretím peňaženky, ukončíte proces Cryptomator-a.
lock.fail.heading=Uzatváranie trezoru zlyhalo.
lock.fail.message=Trezor "%s" nie je možné uzamknúť. Uistite sa že neuložená páca je uložená inde a dôležité Read/Write operácie sú ukončené. Ináč uzavretím trezoru, ukončíte proces Cryptomator-a.
# Migration
migration.title=Aktualizácia trezora
## Start
migration.start.prompt=Váš trezor "%s" vyžaduje aktualizáciu na novší formát. Pred pokračovaním sa uistite že neprebieha synchronizácia ovplyvňujúca tento trezor.
migration.start.confirm=Áno, môj trezor je plne synchronizovaný
## Run
## Sucess
migration.run.enterPassword=Zadajte heslo pre "%s"
migration.run.startMigrationBtn=Migrovať trezor
migration.run.progressHint=Toto môže trvať nejaký čas…
## Success
migration.success.nextStepsInstructions=Migrované "%s" úspešne.\nTeraz môžte odomknúť Váš trezor.
migration.success.unlockNow=Odomknúť teraz
## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Nepodporovaný súborový systém
migration.error.missingFileSystemCapabilities.description=Migrácia nezačala, pretože Váš trezor je umiestnený na neadekvátnom súborovom systéme.
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=Súborový systém nepodporuje dlhé názvy súborov.
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Súborový systém nepodporuje dlhé cesty.
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Súborový systém neumožňuje čítanie.
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Súborový systém neumožňuje zápis.
## Impossible
migration.impossible.heading=Nie je možná migrácia trezora
migration.impossible.reason=Trezor nie je možné automaticky migrovať pretože jeho umiestnenie alebo prístupový bod nie je kompatibilný.
migration.impossible.moreInfo=Trezor je naďalej možné otvátať so staršou verziou. Pre inštrukcie ako manuálne migrovať trezor navštívte
# Health Check
health.title=Kontrola zdravia peňaženky
health.start.introduction=Kontrola zdravia peňaženky je súhrn kontrol na detekciu a prípadnú opravu problémov vo vnútornej štruktúre Vášhej peňaženky. Prosím majte na pamäti že nie všetky problémy sú opravitelné. Potrebujete heslo peňaženky k vykonaniu kontrol.
health.start.configValid=Čítanie a analýza konfigurácie súboru peňaženky bola úspešná. Pokračovať k výberu kontrol.
health.start.configInvalid=Chyba počas čítania a analýzy konfiguračného súboru peňaženky.
health.checkList.header=Dostupné kontroly zdravia
health.checkList.selectAllBox=Označiť všetko
## Start
health.title=Kontrola zdravia "%s"
health.intro.header=Kontrola zdravia
health.intro.text=Kontrola zdravia je súbor kontrol pre detekciu a možné opravy problémov v internej štrukúre Vášho trezora. Prosím majte na pamäti:
health.intro.remarkSync=Uistite sa že všetky zariadenia sú úplne synchronizované, toto rieši väčšinu problémov.
health.intro.remarkFix=Nie všetky problémy sa dajú opraviť.
health.intro.remarkBackup=Ak sú dáta poškodené, môže pomôcť iba záloha.
health.intro.affirmation=Čítal som a rozumiem informáciam uvedeným vyššie
## Start Failure
health.fail.header=Chyba pri načítaní konfigurácie trezora
health.fail.ioError=Vyskytla sa chyba počas prístupu a čítania konfiguračného súboru.
health.fail.parseError=Vyskytla sa chyba počas analýzy konfigurácie trezora.
health.fail.moreInfo=Viac informácií
## Check Selection
health.checkList.description=Vyberte kontroly zo zoznamu vľavo alebo použite tlačítka nižšie.
health.checkList.selectAllButton=Vybrať všetky kontroly
health.checkList.deselectAllButton=Zrušiť výber všetkých kontrol
health.check.runBatchBtn=Spustiť vybrané kontroly
## Detail view
health.check.detail.noSelectedCheck=Pre výsledky označte ukončenú kontrolu zdravia v zozname na ľavo.
health.check.detail.header=Výsledky %s
health.check.detail.taskNotStarted=Nebola zvolená žiadna kontrola k vykonaniu.
health.check.detail.taskScheduled=Kontrola bola naplánovaná.
health.check.detail.taskRunning=Kontrola práve prebieha…
health.check.detail.taskSucceeded=Kontrola úspešne ukončená po %d milisekundách.
health.check.detail.taskFailed=Kontrola ukončená z dôvodu chyby.
health.check.detail.taskCancelled=Kontrola bola zrušená.
health.check.detail.problemCount=Nájdených %d problémov a %d neopravených chýb.
health.check.detail.checkScheduled=Kontrola je naplánovaná.
health.check.detail.checkRunning=Kontrola aktuálne prebieha…
health.check.detail.checkSkipped=Nebola vybraná žiadna kontrola.
health.check.detail.checkFinished=Kontrola skončila úspešne.
health.check.detail.checkFinishedAndFound=Kontrola skončila. Prosím pozrite si jej výsledky.
health.check.detail.checkFailed=Kontrola skončila kôli chybe.
health.check.detail.checkCancelled=Kontrola bola zrušená.
health.check.exportBtn=Exportovať správu
health.check.fixBtn=Opraviť
## Checks
health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Kontrola katalógu
## Fix Application
health.fix.fixBtn=Opraviť
health.fix.successTip=Oprava úspešná
health.fix.failTip=Oprava zlyhala, pre detaily pozrite log-y
# Preferences
preferences.title=Predvoľby
## General
preferences.general=Hlavné
preferences.general.theme=Vzhĺad a pocit
preferences.general.theme.automatic=Automaticky
preferences.general.showMinimizeButton=Predvoľba.hlavná.ukážMinimalizujTlačítko
preferences.general.showTrayIcon=Predvoľba.hlavná.ukážIkonaSytémovejlišty
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome klúčenka
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE účet
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=maccOS reťazový prístup
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Windows ochrana dát
preferences.general.theme.light=Svetlý
preferences.general.theme.dark=Tmavý
preferences.general.unlockThemes=Odomknúť tmavý mód
preferences.general.showMinimizeButton=Ukáž minimalizačné tlačidlo
preferences.general.showTrayIcon=Ukáž ikonu sytémovej lišty (vyžaduje reštart)
preferences.general.startHidden=Skryť okno počas štartu Cryptomator-a
preferences.general.debugLogging=Povoliť logovanie chýb
preferences.general.debugDirectory=Ukázať súbory logov
preferences.general.autoStart=Spustiť Cryptomator pri štarte systému
preferences.general.keychainBackend=Uložiť heslá v
preferences.general.interfaceOrientation=Orientácia rozhrania
preferences.general.interfaceOrientation.ltr=Zľava do prava
preferences.general.interfaceOrientation.rtl=Zprava do ľava
## Volume
preferences.volume=Virtuálny disk
preferences.volume.type=Typ obsahu
preferences.volume.webdav.port=WebDAV port
preferences.volume.webdav.scheme=WebDAV schéma
## Updates
preferences.updates=Aktualizácie
preferences.updates.currentVersion=Aktuálna verzia: %s
preferences.updates.autoUpdateCheck=Automatická kontrola aktualizácii
preferences.updates.checkNowBtn=Skontroluj teraz
preferences.updates.updateAvailable=Možnosť aktualizácie na verziu %s.
## Contribution
preferences.contribute=Podporte nás
preferences.contribute.registeredFor=Certifikát podporovateľa registrovaný na %s
@@ -167,6 +221,7 @@ preferences.contribute.promptText=Vlož sem kód certifikátu podporovateľa
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
preferences.about=O programe
# Vault Statistics
stats.title=Štatistiky pre %s
@@ -200,53 +255,115 @@ stats.write.accessCount=Suma zápisov: %d
# Main Window
main.closeBtn.tooltip=Zavrieť
main.minimizeBtn.tooltip=Minimalizovať
main.preferencesBtn.tooltip=Predvoľby
main.debugModeEnabled.tooltip=Debagovací mód je aktivovaný
main.donationKeyMissing.tooltip=Prosím zvážte obdarovanie
## Drag 'n' Drop
main.dropZone.dropVault=Pridať tento trezor
main.dropZone.unknownDragboardContent=Ak chcete pridať tento trezor, potiahnite ho do tohto okna
## Vault List
main.vaultlist.contextMenu.remove=Odstráň…
main.vaultlist.emptyList.onboardingInstruction=Kliknite sem pre pridanie trezora
main.vaultlist.contextMenu.remove=Odstrániť…
main.vaultlist.contextMenu.lock=Uzamknúť
main.vaultlist.contextMenu.unlock=Odomknúť…
main.vaultlist.contextMenu.unlockNow=Odomknúť teraz
main.vaultlist.contextMenu.vaultoptions=Ukáž možnosti peňaženky
main.vaultlist.contextMenu.vaultoptions=Ukáž možnosti trezora
main.vaultlist.contextMenu.reveal=Odkry disk
main.vaultlist.addVaultBtn=Pridať trezor
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Ďakujeme Vám že ste si zvolili Cryptomator pre ochranu Vaších súborov. Ak potrebujete akúkoľvek pomoc, pozrite si našu príručku ako začať:
### Locked
main.vaultDetail.lockedStatus=Uzamknutý
main.vaultDetail.unlockBtn=Odomknúť…
main.vaultDetail.unlockNowBtn=Odomknúť teraz
main.vaultDetail.optionsBtn=Nastavenia trezora
main.vaultDetail.passwordSavedInKeychain=Heslo uložené
### Unlocked
main.vaultDetail.unlockedStatus=Odomknutý
main.vaultDetail.accessLocation=Obsah Vášho trezora je dostupný tu:
main.vaultDetail.revealBtn=Odkry disk
main.vaultDetail.lockBtn=Uzamknúť
main.vaultDetail.bytesPerSecondRead=Čítanie:
main.vaultDetail.bytesPerSecondWritten=Zápis:
main.vaultDetail.stats=Štatistiky účtu
main.vaultDetail.throughput.idle=nečinný
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Štatistiky trezora
### Missing
main.vaultDetail.missing.info=Cryptomator nevie nájsť trezor na tejto ceste.
main.vaultDetail.missing.recheck=Prekontrolovať
main.vaultDetail.missing.remove=Odstrániť zo zoznamu peňaženky
main.vaultDetail.missing.remove=Odstrániť zo zoznamu trezora
main.vaultDetail.missing.changeLocation=Zmeniť umiestnenie trezora…
### Needs Migration
main.vaultDetail.migrateButton=Aktualizácia trezora
main.vaultDetail.migratePrompt=Váš trezor vyžaduje aktualizáciu na nový formát predtým ako ho použijete
# Wrong File Alert
wrongFileAlert.title=Ako zašifrovať súbory
wrongFileAlert.header.title=Pokúšate sa dešifrovať tieto súbory?
wrongFileAlert.header.lead=Pre tento účel Cryptomator poskytuje zväzok vo Vašom súborovom menežérovi.
wrongFileAlert.instruction.0=Pre zašifrovanie súborov - postupujte týmito krokmi:
wrongFileAlert.instruction.1=1. Odomknúť Váš trezor.
wrongFileAlert.instruction.2=2. Kliknúť na "Odkryť" pre otvorenie zväzku v súborovom menežérovi.
wrongFileAlert.instruction.3=3. Pridať Vaše súbory do tohto zväzku.
wrongFileAlert.link=Pre ďalšiu asistenciu, navštívte
# Vault Options
## General
vaultOptions.general=Hlavné
vaultOptions.general.vaultName=Názov trezoru
vaultOptions.general.autoLock.lockAfterTimePart1=Uzamknutie po uplynutí nečinnosti
vaultOptions.general.autoLock.lockAfterTimePart2=minút
vaultOptions.general.unlockAfterStartup=Odomknúť trezor pri spustení Cryptomator-a
vaultOptions.general.actionAfterUnlock=Po úspešnom odomknutí
vaultOptions.general.actionAfterUnlock.ignore=Nič nerob
vaultOptions.general.actionAfterUnlock.reveal=Odkry disk
vaultOptions.general.healthBtn=Spustiť kontrolu zdravia
vaultOptions.general.actionAfterUnlock.ask=Opýtať sa
vaultOptions.general.startHealthCheckBtn=Spustiť kontrolu zdravia
## Mount
vaultOptions.mount.mountPoint.directoryPickerButton=Vybrať…
vaultOptions.mount=Mapovanie
vaultOptions.mount.readonly=Len-čítanie
vaultOptions.mount.customMountFlags=Vlastné parametre mapovania
vaultOptions.mount.winDriveLetterOccupied=obsadený
vaultOptions.mount.mountPoint=Bod mapovania
vaultOptions.mount.mountPoint.auto=Automaticky zvoľ vhodné umiestnenie
vaultOptions.mount.mountPoint.driveLetter=Použiť pridelené písmeno disku
vaultOptions.mount.mountPoint.custom=Voliteľná cesta
vaultOptions.mount.mountPoint.directoryPickerButton=Zvoliť…
vaultOptions.mount.mountPoint.directoryPickerTitle=Zvoliť prázdny adresár
## Master Key
vaultOptions.masterkey=Heslo
vaultOptions.masterkey.changePasswordBtn=Zmeniť heslo
vaultOptions.masterkey.forgetSavedPasswordBtn=Zabudnúť uložené heslo
## Auto Lock
vaultOptions.autoLock=Automatické-uzamknutie
vaultOptions.autoLock.lockAfterTimePart1=Uzamknutie po uplynutí
vaultOptions.autoLock.lockAfterTimePart2=minút
vaultOptions.masterkey.recoveryKeyExplanation=Kľúč pre obnovu je Vašou jedinou cestou k obnove prístupu do trezoru v prípade straty hesla.
vaultOptions.masterkey.showRecoveryKeyBtn=Ukázať klúč obnovy
vaultOptions.masterkey.recoverPasswordBtn=Odkryť heslo
# Recovery Key
recoveryKey.title=Kľúč obnovy
recoveryKey.enterPassword.prompt=Zadajte Vaše heslo pre zobrazenie kľúča obnovy k "%s":
recoveryKey.display.message=Nasledujúci kľúč obnovy slúži k prístupu k "%s":
recoveryKey.display.StorageHints=Uchovávajte ho na bezpečnom mieste, ako napr.:\n- v menežérovi hesiel\n- uložené na USB kľúči\n- vytlačené na papiery
recoveryKey.recover.prompt=Zadajte Váš kľúč obnovy pre "%s":
recoveryKey.recover.validKey=Toto je platný kľúč obnovy
recoveryKey.printout.heading=Kľúč obnovy Cryptomator-a\n "%s"\n
# New Password
newPassword.promptText=Zadajte nové heslo
newPassword.reenterPassword=Porvrďte nové heslo
newPassword.passwordsMatch=Heslá sa zhodujú!
newPassword.passwordsDoNotMatch=Heslá sa nezhodujú
passwordStrength.messageLabel.tooShort=Použite minimálne %d znakov
passwordStrength.messageLabel.0=Veľmi slabé
passwordStrength.messageLabel.1=Slabé
passwordStrength.messageLabel.2=Dostačujúce
passwordStrength.messageLabel.3=Silné
passwordStrength.messageLabel.4=Veľmi silné
# Quit
quit.prompt=Ukončiť aplikáciu? Sú tu odomknuté trezory.
quit.lockAndQuit=Zamknúť a Skončiť

View File

@@ -13,8 +13,6 @@ generic.button.done=Завршено
generic.button.next=Даље
generic.button.print=Штампај
## Error
generic.error.title=Догодила се неочекивана грешка
generic.error.instruction=Ово није требало да се догоди. Молимо вас пријавите текст грешке испод и додајте опис корака који су довели до ове грешке.
# Defaults
defaults.vault.vaultName=Сеф
@@ -95,7 +93,6 @@ forgetPassword.information=Ово ће избрисати сачувану ло
forgetPassword.confirmBtn=Заборави лозинку
# Unlock
unlock.title=Откључавање сефа
unlock.passwordPrompt=Унесите лозинку за "%s":
unlock.savePassword=Запамти лозинку
unlock.unlockBtn=Откључај
@@ -129,7 +126,7 @@ migration.start.confirm=Да, мој сеф је у потпуности син
migration.run.enterPassword=Унесите лозинку за "%s"
migration.run.startMigrationBtn=Преместите сеф
migration.run.progressHint=Ово би могло потрајати…
## Sucess
## Success
migration.success.nextStepsInstructions="%s" је успешно премештен. Сада можете да откључате ваш сеф.
migration.success.unlockNow=Откључај сада
## Missing file system capabilities
@@ -145,8 +142,11 @@ migration.impossible.reason=Сеф се не може аутоматски пр
migration.impossible.moreInfo=Сеф се и даље може отворити са старијом верзијом. За упутства како ручно преместити сеф, посетите
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Checks
## Fix Application
# Preferences
preferences.title=Подешавања
@@ -164,10 +164,6 @@ preferences.general.debugLogging=Омогући евиденцију откла
preferences.general.debugDirectory=Прикажи датотеке евиденције
preferences.general.autoStart=Покрени Cryptomator при покретању система
preferences.general.keychainBackend=Похрани лозинке са
preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome Keyring
preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE Wallet
preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS Keychain Access
preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Windows Data Protection
preferences.general.interfaceOrientation=Оријентација интерфејса
preferences.general.interfaceOrientation.ltr=Са лева на десно
preferences.general.interfaceOrientation.rtl=Са десна на лево
@@ -289,6 +285,7 @@ vaultOptions.general.actionAfterUnlock=Након успешног откључ
vaultOptions.general.actionAfterUnlock.ignore=Не ради ништа
vaultOptions.general.actionAfterUnlock.reveal=Прикажи диск
vaultOptions.general.actionAfterUnlock.ask=Питај
## Mount
vaultOptions.mount=Монтирање
vaultOptions.mount.readonly=Само читање
@@ -304,10 +301,10 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Изаберите праза
vaultOptions.masterkey=Лозинка
vaultOptions.masterkey.changePasswordBtn=Промена лозинке
vaultOptions.masterkey.forgetSavedPasswordBtn=Заборави сачувану лозинку
vaultOptions.masterkey.recoveryKeyExpanation=Резервни кључ је Ваш једини начин да вратите приступ сефу уколико изгубите лозинку.
vaultOptions.masterkey.recoveryKeyExplanation=Резервни кључ је Ваш једини начин да вратите приступ сефу уколико изгубите лозинку.
vaultOptions.masterkey.showRecoveryKeyBtn=Прикажи Резервни Кључ
vaultOptions.masterkey.recoverPasswordBtn=Обнови лозинку
## Auto Lock
# Recovery Key
recoveryKey.title=Резервни Кључ

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