Compare commits

..

53 Commits

Author SHA1 Message Date
Armin Schrenk
1fb987607c use single method to initialize JavaFX 2025-01-21 17:03:42 +01:00
Armin Schrenk
5d4066d29a fix test 2025-01-21 16:01:49 +01:00
Armin Schrenk
d3909134d5 actually use authentication 2025-01-21 15:55:47 +01:00
Armin Schrenk
fd9d1bf0cf fix unit test 2025-01-16 10:49:57 +01:00
Armin Schrenk
2f812377c3 bump integrations-win to 1.4.1 to fix jvm crashes 2025-01-16 10:31:38 +01:00
Armin Schrenk
ebce90eb74 weakValues are too agressive 2025-01-15 10:02:42 +01:00
Armin Schrenk
c888b52ebb rely on the cache directly after unlock and inject in the cache on keychain changes 2025-01-15 10:02:21 +01:00
Armin Schrenk
e422c7ce4b use caffeine for building a cache
(cherry picked from commit fc709eb700)
2025-01-15 09:38:50 +01:00
Armin Schrenk
41ad8d5dcc response in th ui to keychain impl change 2025-01-14 18:42:08 +01:00
Armin Schrenk
526c3973d6 bump dependencies to add biometric auth providers
* integrations-win to 1.4.0
* integrations-mac to 1.3.0
2025-01-14 15:42:10 +01:00
Armin Schrenk
dc16c961af only store password, if it is not already stored 2025-01-14 15:41:17 +01:00
Ralph Plawetzki
c54a603078 Merge branch 'develop' into 2ndfactor 2025-01-11 17:59:54 +01:00
Ralph Plawetzki
be59097a53 Merge branch 'develop' into 2ndfactor 2024-12-14 07:37:30 +01:00
Ralph Plawetzki
ccc4842839 Use widened integrations-api 2024-12-02 08:16:28 +01:00
Ralph Plawetzki
d95625faa1 Revert "Add CheckBox to enable Touch ID per vault"
This reverts commit cfa3093dd0.
2024-12-02 08:12:03 +01:00
Ralph Plawetzki
c5bfdf32a9 Revert "Save Touch ID setting per vault"
This reverts commit 10bce1fb06.
2024-12-02 08:12:03 +01:00
Ralph Plawetzki
0598681a23 Revert "Decide on Touch ID setting whether user needs"
This reverts commit 2194360c8a.
2024-12-02 08:12:03 +01:00
Ralph Plawetzki
3b8bff0d47 Revert "loadPassphraseForAuthenticatedUser is not needed to"
This reverts commit 2378227756.
2024-12-02 08:12:02 +01:00
Ralph Plawetzki
55051072cb Revert "Actually save preference on checkbox change"
This reverts commit 62827b69cc.
2024-12-02 08:12:02 +01:00
Ralph Plawetzki
6cb409eeaf Revert "Grab new API"
This reverts commit 9516928529.
2024-12-02 08:12:02 +01:00
Ralph Plawetzki
b38a350c48 Revert "Remove log statement used for testing"
This reverts commit 14ba852351.
2024-12-02 08:12:02 +01:00
Ralph Plawetzki
0e5857015a Revert "Change existing keychain entry"
This reverts commit 9cc863ae79.
2024-12-02 08:12:02 +01:00
Ralph Plawetzki
9e9aa20692 Revert "Disable feature for other platforms than Mac"
This reverts commit d8b798ff0f.
2024-12-02 08:12:01 +01:00
Ralph Plawetzki
ad49ca2cb4 Revert "Generalize naming"
This reverts commit 953aee560f.
2024-12-02 08:12:01 +01:00
Ralph Plawetzki
ba84da71f3 Revert "Code cleanups following coderabbitai recommendations"
This reverts commit af3779ba2e.
2024-12-02 08:12:01 +01:00
Ralph Plawetzki
5c34f59d09 Revert "Don't use SNAPSHOTS"
This reverts commit 175ed500a2.
2024-12-02 08:12:01 +01:00
Ralph Plawetzki
7499867665 Revert "Use overloaded method storePassword instead of a new one"
This reverts commit aa34ad52e6.
2024-12-02 08:12:00 +01:00
Ralph Plawetzki
7b293b8082 Revert "New, widened integrations-api"
This reverts commit 2f1b5109d6.
2024-12-02 08:12:00 +01:00
Ralph Plawetzki
46e8a13555 Revert "Improve thread handling"
This reverts commit c8075dbc19.
2024-12-02 08:11:01 +01:00
Ralph Plawetzki
63a3150ec3 Revert "Remove unneeded saving a keychain entry right after"
This reverts commit e8126e68ce.
2024-12-02 08:11:01 +01:00
Ralph Plawetzki
0a78987d30 Revert "Fix typo"
This reverts commit 78675c9638.
2024-12-02 08:11:00 +01:00
Ralph Plawetzki
929782c318 Revert "Fix doubled method due to merge error"
This reverts commit b5dbfd3209.
2024-12-02 08:11:00 +01:00
Ralph Plawetzki
97a0f9c435 Migrate keychain entries on Mac on provider change 2024-12-02 07:56:23 +01:00
Ralph Plawetzki
f7e65f4eec Add cryptomator.integrationsWin.windowsHelloKeychainPaths to Environment 2024-11-30 14:39:56 +01:00
Ralph Plawetzki
b3c56f3aab Add Windows Hello provider 2024-11-30 12:25:36 +01:00
Ralph Plawetzki
b5dbfd3209 Fix doubled method due to merge error 2024-11-24 18:14:26 +01:00
Ralph Plawetzki
78675c9638 Fix typo 2024-11-24 15:02:06 +01:00
Ralph Plawetzki
e8126e68ce Remove unneeded saving a keychain entry right after
it was loaded
2024-11-24 15:02:06 +01:00
Ralph Plawetzki
c8075dbc19 Improve thread handling 2024-11-24 15:02:05 +01:00
Ralph Plawetzki
2f1b5109d6 New, widened integrations-api 2024-11-24 15:01:44 +01:00
Ralph Plawetzki
aa34ad52e6 Use overloaded method storePassword instead of a new one 2024-11-24 15:00:54 +01:00
Ralph Plawetzki
175ed500a2 Don't use SNAPSHOTS 2024-11-24 14:57:16 +01:00
Ralph Plawetzki
af3779ba2e Code cleanups following coderabbitai recommendations 2024-11-24 14:56:38 +01:00
Ralph Plawetzki
953aee560f Generalize naming 2024-11-24 14:56:38 +01:00
Ralph Plawetzki
d8b798ff0f Disable feature for other platforms than Mac 2024-11-24 14:56:38 +01:00
Ralph Plawetzki
9cc863ae79 Change existing keychain entry 2024-11-24 14:56:38 +01:00
Ralph Plawetzki
14ba852351 Remove log statement used for testing 2024-11-24 14:56:37 +01:00
Ralph Plawetzki
9516928529 Grab new API 2024-11-24 14:56:30 +01:00
Ralph Plawetzki
62827b69cc Actually save preference on checkbox change 2024-11-24 14:48:32 +01:00
Ralph Plawetzki
2378227756 loadPassphraseForAuthenticatedUser is not needed to
load as an authenticated user; loadPassphrase is
sufficient
2024-11-24 14:48:32 +01:00
Ralph Plawetzki
2194360c8a Decide on Touch ID setting whether user needs
to authenticate on loading and storing a passphrase
2024-11-24 14:48:32 +01:00
Ralph Plawetzki
10bce1fb06 Save Touch ID setting per vault 2024-11-24 14:48:32 +01:00
Ralph Plawetzki
cfa3093dd0 Add CheckBox to enable Touch ID per vault 2024-11-24 14:48:31 +01:00
118 changed files with 724 additions and 1387 deletions

View File

@@ -10,7 +10,7 @@ on:
required: false
env:
JAVA_DIST: 'temurin'
JAVA_DIST: 'zulu'
JAVA_VERSION: '23.0.1+11'
jobs:
@@ -29,12 +29,12 @@ jobs:
include:
- os: ubuntu-latest
appimage-suffix: x86_64
openjfx-url: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_linux-x64_bin-jmods.zip'
openjfx-sha: '2164bca470bf70a5e2764645e2078ba7f787b274e5be3d7df30d87c5bb62bba6'
- os: ubuntu-24.04-arm
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-x64_bin-jmods.zip'
openjfx-sha: 'd44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
- os: [self-hosted, Linux, ARM64]
appimage-suffix: aarch64
openjfx-url: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_linux-aarch64_bin-jmods.zip'
openjfx-sha: '09c92fa9fa0b82adefd88640a14ebb2a49e5f3f733a57d1542f5590d060ffe1b'
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-aarch64_bin-jmods.zip'
openjfx-sha: '3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
steps:
- uses: actions/checkout@v4
- name: Setup Java
@@ -98,7 +98,7 @@ jobs:
--dest appdir
--name Cryptomator
--vendor "Skymatic GmbH"
--copyright "(C) 2016 - 2025 Skymatic GmbH"
--copyright "(C) 2016 - 2024 Skymatic GmbH"
--app-version "${{ needs.get-version.outputs.semVerNum }}.${{ needs.get-version.outputs.revNum }}"
--java-options "--enable-preview"
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator"
@@ -116,7 +116,6 @@ jobs:
--java-options "-Dcryptomator.showTrayIcon=true"
--java-options "-Dcryptomator.integrationsLinux.trayIconsDir=\"@{appdir}/usr/share/icons/hicolor/symbolic/apps\""
--java-options "-Dcryptomator.buildNumber=\"appimage-${{ needs.get-version.outputs.revNum }}\""
--java-options "-Dcryptomator.networking.truststore.p12Path=\"/etc/cryptomator/certs.p12\""
--resource-dir dist/linux/resources
- name: Patch Cryptomator.AppDir
run: |
@@ -133,13 +132,13 @@ jobs:
cp dist/linux/common/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/usr/share/applications/org.cryptomator.Cryptomator.desktop
cp dist/linux/common/application-vnd.cryptomator.vault.xml Cryptomator.AppDir/usr/share/mime/packages/application-vnd.cryptomator.vault.xml
ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/org.cryptomator.Cryptomator.svg
ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/Cryptomator.svg
ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/.DirIcon
ln -s usr/share/applications/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/org.cryptomator.Cryptomator.desktop
ln -s org.cryptomator.Cryptomator.metainfo.xml Cryptomator.AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.appdata.xml
ln -s usr/share/applications/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/Cryptomator.desktop
ln -s bin/cryptomator.sh Cryptomator.AppDir/AppRun
- name: Download AppImageKit
run: |
curl -L https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-${{ matrix.appimage-suffix }}.AppImage -o appimagetool.AppImage
curl -L https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-${{ matrix.appimage-suffix }}.AppImage -o appimagetool.AppImage
chmod +x appimagetool.AppImage
./appimagetool.AppImage --appimage-extract
- name: Prepare GPG-Agent for signing with key 615D449FE6E6A235
@@ -153,7 +152,7 @@ jobs:
run: >
./squashfs-root/AppRun Cryptomator.AppDir cryptomator-${{ needs.get-version.outputs.semVerStr }}-${{ matrix.appimage-suffix }}.AppImage
-u 'gh-releases-zsync|cryptomator|cryptomator|latest|cryptomator-*-${{ matrix.appimage-suffix }}.AppImage.zsync'
--sign --sign-key=615D449FE6E6A235
--sign --sign-key=615D449FE6E6A235 --sign-args="--batch --pinentry-mode loopback"
- name: Create detached GPG signatures
run: |
gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator-*.AppImage
@@ -176,4 +175,4 @@ jobs:
files: |
cryptomator-*.AppImage
cryptomator-*.zsync
cryptomator-*.asc
cryptomator-*.asc

View File

@@ -6,7 +6,7 @@ on:
types: [labeled]
env:
JAVA_DIST: 'temurin'
JAVA_DIST: 'zulu'
JAVA_VERSION: 23
defaults:

View File

@@ -7,7 +7,7 @@ on:
env:
JDK_VERSION: '23.0.1+11'
JDK_VENDOR: temurin
JDK_VENDOR: zulu
RUNTIME_VERSION_HELPER: >
public class Test {
public static void main(String[] args) {

View File

@@ -16,14 +16,14 @@ on:
type: boolean
env:
JAVA_DIST: 'temurin'
JAVA_DIST: 'zulu'
JAVA_VERSION: '23.0.1+11'
COFFEELIBS_JDK: 23
COFFEELIBS_JDK_VERSION: '23.0.1+11-0ppa1'
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_linux-x64_bin-jmods.zip'
OPENJFX_JMODS_AMD64_HASH: '2164bca470bf70a5e2764645e2078ba7f787b274e5be3d7df30d87c5bb62bba6'
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_linux-aarch64_bin-jmods.zip'
OPENJFX_JMODS_AARCH64_HASH: '09c92fa9fa0b82adefd88640a14ebb2a49e5f3f733a57d1542f5590d060ffe1b'
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-x64_bin-jmods.zip'
OPENJFX_JMODS_AMD64_HASH: 'd44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-aarch64_bin-jmods.zip'
OPENJFX_JMODS_AARCH64_HASH: '3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
jobs:
build:

View File

@@ -22,7 +22,7 @@ on:
value: ${{ jobs.determine-version.outputs.type }}
env:
JAVA_DIST: 'temurin'
JAVA_DIST: 'zulu'
JAVA_VERSION: 23
jobs:

View File

@@ -14,7 +14,7 @@ on:
types: [published]
env:
JAVA_DIST: 'temurin'
JAVA_DIST: 'zulu'
JAVA_VERSION: '23.0.1+11'
jobs:
@@ -35,8 +35,8 @@ jobs:
architecture: x64
output-suffix: x64
fuse-lib: macFUSE
openjfx-url: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_osx-x64_bin-jmods.zip'
openjfx-sha: '8857965975c464a0e5d57709292ce357d0ebb39f6168c41d5ca38301e42c3c8e'
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_osx-x64_bin-jmods.zip'
openjfx-sha: '115cb08bb59d880cfff6e51e0bf0dcc45785ed9d456b8b8425597b04da6ab3d4'
steps:
- uses: actions/checkout@v4
- name: Setup Java
@@ -100,7 +100,7 @@ jobs:
--dest appdir
--name Cryptomator
--vendor "Skymatic GmbH"
--copyright "(C) 2016 - 2025 Skymatic GmbH"
--copyright "(C) 2016 - 2024 Skymatic GmbH"
--app-version "${{ needs.get-version.outputs.semVerNum }}"
--java-options "--enable-preview"
--java-options "--enable-native-access=org.cryptomator.jfuse.mac"

View File

@@ -15,7 +15,7 @@ on:
type: boolean
env:
JAVA_DIST: 'temurin'
JAVA_DIST: 'zulu'
JAVA_VERSION: '23.0.1+11'
jobs:
@@ -36,8 +36,8 @@ jobs:
architecture: aarch64
output-suffix: arm64
fuse-lib: FUSE-T
openjfx-url: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_osx-aarch64_bin-jmods.zip'
openjfx-sha: 'a800724a1f3e6757ecfa0bd5bf7ed64d2e6a7a3f5b3522650a70b8cfc7782fb6'
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_osx-aarch64_bin-jmods.zip'
openjfx-sha: '813c6748f7c99cb7a579d48b48a087b4682b1fad1fc1a4fe5f9b21cf872b15a7'
steps:
- uses: actions/checkout@v4
- name: Setup Java
@@ -101,7 +101,7 @@ jobs:
--dest appdir
--name Cryptomator
--vendor "Skymatic GmbH"
--copyright "(C) 2016 - 2025 Skymatic GmbH"
--copyright "(C) 2016 - 2024 Skymatic GmbH"
--app-version "${{ needs.get-version.outputs.semVerNum }}"
--java-options "--enable-preview"
--java-options "--enable-native-access=org.cryptomator.jfuse.mac"

View File

@@ -4,7 +4,7 @@ on:
pull_request:
env:
JAVA_DIST: 'temurin'
JAVA_DIST: 'zulu'
JAVA_VERSION: 23
defaults:

View File

@@ -11,7 +11,7 @@ defaults:
shell: bash
env:
JAVA_DIST: 'temurin'
JAVA_DIST: 'zulu'
JAVA_VERSION: 23
jobs:

View File

@@ -17,8 +17,8 @@ on:
env:
JAVA_DIST: 'zulu'
JAVA_VERSION: '23.0.1+11'
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_windows-x64_bin-jmods.zip'
OPENJFX_JMODS_AMD64_HASH: 'ee176dcee3bd78bde7910735bd67f67c792882f5b89626796ae06f7a1c0119d3'
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_windows-x64_bin-jmods.zip'
OPENJFX_JMODS_AMD64_HASH: 'f9376d200f5c5b85327d575c1ec1482e6455f19916577f7e2fc9be2f48bb29b6'
WINFSP_MSI: 'https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi'
WINFSP_UNINSTALLER: 'https://github.com/cryptomator/winfsp-uninstaller/releases/latest/download/winfsp-uninstaller.exe'
@@ -89,7 +89,7 @@ jobs:
--verbose
--output runtime
--module-path "jfxjmods;${JAVA_HOME}/jmods"
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.crypto.mscapi,jdk.unsupported,jdk.accessibility,jdk.management.jfr,java.compiler
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.accessibility,jdk.management.jfr,java.compiler
--strip-native-commands
--no-header-files
--no-man-pages
@@ -110,7 +110,7 @@ jobs:
--dest appdir
--name Cryptomator
--vendor "Skymatic GmbH"
--copyright "(C) 2016 - 2025 Skymatic GmbH"
--copyright "(C) 2016 - 2024 Skymatic GmbH"
--app-version "${{ needs.get-version.outputs.semVerNum }}.${{ needs.get-version.outputs.revNum }}"
--java-options "--enable-preview"
--java-options "--enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win"
@@ -130,6 +130,7 @@ jobs:
--java-options "-Dcryptomator.buildNumber=\"msi-${{ needs.get-version.outputs.revNum }}\""
--java-options "-Dcryptomator.integrationsWin.autoStartShellLinkName=\"Cryptomator\""
--java-options "-Dcryptomator.integrationsWin.keychainPaths=\"@{appdata}/Cryptomator/keychain.json;@{userhome}/AppData/Roaming/Cryptomator/keychain.json\""
--java-options "-Dcryptomator.integrationsWin.windowsHelloKeychainPaths=\"@{appdata}/Cryptomator/windowsHelloKeychain.json;@{userhome}/AppData/Roaming/Cryptomator/windowsHelloKeychain.json\""
--java-options "-Djavafx.verbose=${{ inputs.isDebug }}"
--resource-dir dist/win/resources
--icon dist/win/resources/Cryptomator.ico
@@ -218,7 +219,7 @@ jobs:
--dest installer
--name Cryptomator
--vendor "Skymatic GmbH"
--copyright "(C) 2016 - 2025 Skymatic GmbH"
--copyright "(C) 2016 - 2024 Skymatic GmbH"
--app-version "${{ needs.get-version.outputs.semVerNum }}.${{ needs.get-version.outputs.revNum}}"
--win-menu
--win-dir-chooser
@@ -304,7 +305,7 @@ jobs:
-out dist/win/bundle/
-dBundleVersion="${{ needs.get-version.outputs.semVerNum }}.${{ needs.get-version.outputs.revNum }}"
-dBundleVendor="Skymatic GmbH"
-dBundleCopyright="(C) 2016 - 2025 Skymatic GmbH"
-dBundleCopyright="(C) 2016 - 2024 Skymatic GmbH"
-dAboutUrl="https://cryptomator.org"
-dHelpUrl="https://cryptomator.org/contact"
-dUpdateUrl="https://cryptomator.org/downloads/"

42
.idea/compiler.xml generated
View File

@@ -14,16 +14,17 @@
<option name="dagger.fastInit" value="enabled" />
<option name="dagger.formatGeneratedSource" value="enabled" />
<processorPath useClasspath="false">
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.55/dagger-compiler-2.55.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.55/dagger-2.55.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.52/dagger-compiler-2.52.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.52/dagger-2.52.jar" />
<entry name="$MAVEN_REPOSITORY$/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" />
<entry name="$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jspecify/jspecify/1.0.0/jspecify-1.0.0.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-spi/2.55/dagger-spi-2.55.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-spi/2.52/dagger-spi-2.52.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/devtools/ksp/symbol-processing-api/2.0.21-1.0.28/symbol-processing-api-2.0.21-1.0.28.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/2.0.21/kotlin-stdlib-2.0.21.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/devtools/ksp/symbol-processing-api/1.9.24-1.0.20/symbol-processing-api-1.9.24-1.0.20.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.9.0/kotlin-stdlib-jdk8-1.9.0.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.9.24/kotlin-stdlib-1.9.24.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.9.0/kotlin-stdlib-jdk7-1.9.0.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/guava/33.0.0-jre/guava-33.0.0-jre.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" />
@@ -34,33 +35,6 @@
<entry name="$MAVEN_REPOSITORY$/com/google/googlejavaformat/google-java-format/1.5/google-java-format-1.5.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/javac-shaded/9-dev-r4023-3/javac-shaded-9-dev-r4023-3.jar" />
<entry name="$MAVEN_REPOSITORY$/com/squareup/kotlinpoet/1.11.0/kotlinpoet-1.11.0.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.10/kotlin-stdlib-jdk8-1.6.10.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.10/kotlin-stdlib-jdk7-1.6.10.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/1.6.10/kotlin-reflect-1.6.10.jar" />
<entry name="$MAVEN_REPOSITORY$/net/ltgt/gradle/incap/incap/0.2/incap-0.2.jar" />
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.55/dagger-compiler-2.55.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.55/dagger-2.55.jar" />
<entry name="$MAVEN_REPOSITORY$/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" />
<entry name="$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jspecify/jspecify/1.0.0/jspecify-1.0.0.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-spi/2.55/dagger-spi-2.55.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/devtools/ksp/symbol-processing-api/2.0.21-1.0.28/symbol-processing-api-2.0.21-1.0.28.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/2.0.21/kotlin-stdlib-2.0.21.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/guava/33.0.0-jre/guava-33.0.0-jre.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" />
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/3.41.0/checker-qual-3.41.0.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.23.0/error_prone_annotations-2.23.0.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar" />
<entry name="$MAVEN_REPOSITORY$/com/squareup/javapoet/1.13.0/javapoet-1.13.0.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/googlejavaformat/google-java-format/1.5/google-java-format-1.5.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/javac-shaded/9-dev-r4023-3/javac-shaded-9-dev-r4023-3.jar" />
<entry name="$MAVEN_REPOSITORY$/com/squareup/kotlinpoet/1.11.0/kotlinpoet-1.11.0.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.10/kotlin-stdlib-jdk8-1.6.10.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.10/kotlin-stdlib-jdk7-1.6.10.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/1.6.10/kotlin-reflect-1.6.10.jar" />
<entry name="$MAVEN_REPOSITORY$/net/ltgt/gradle/incap/incap/0.2/incap-0.2.jar" />
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar" />
@@ -71,7 +45,7 @@
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="cryptomator" options="-Adagger.fastInit=enabled -Adagger.formatGeneratedSource=enabled" />
<module name="cryptomator" options="-Adagger.fastInit=enabled -Adagger.formatGeneratedSource=enabled --enable-preview" />
</option>
</component>
</project>

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="-Dcryptomator.settingsPath=&quot;@{appdata}/Cryptomator/settings.json;@{userhome}/AppData/Roaming/Cryptomator/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;@{localappdata}/Cryptomator/ipc.socket&quot; -Dcryptomator.logDir=&quot;@{localappdata}/Cryptomator&quot; -Dcryptomator.pluginDir=&quot;@{appdata}/Cryptomator/Plugins&quot; -Dcryptomator.integrationsWin.keychainPaths=&quot;@{appdata}/Cryptomator/keychain.json;@{userhome}/AppData/Roaming/Cryptomator/keychain.json&quot; -Dcryptomator.p12Path=&quot;@{appdata}/Cryptomator/key.p12;@{userhome}/AppData/Roaming/Cryptomator/key.p12&quot; -Dcryptomator.mountPointsDir=&quot;@{userhome}/Cryptomator&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win" />
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath=&quot;@{appdata}/Cryptomator/settings.json;@{userhome}/AppData/Roaming/Cryptomator/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;@{localappdata}/Cryptomator/ipc.socket&quot; -Dcryptomator.logDir=&quot;@{localappdata}/Cryptomator&quot; -Dcryptomator.pluginDir=&quot;@{appdata}/Cryptomator/Plugins&quot; -Dcryptomator.integrationsWin.keychainPaths=&quot;@{appdata}/Cryptomator/keychain.json;@{userhome}/AppData/Roaming/Cryptomator/keychain.json&quot; -Dcryptomator.integrationsWin.windowsHelloKeychainPaths=&quot;@{appdata}/Cryptomator/windowsHelloKeychain.json;@{userhome}/AppData/Roaming/Cryptomator/windowsHelloKeychain.json&quot; -Dcryptomator.p12Path=&quot;@{appdata}/Cryptomator/key.p12;@{userhome}/AppData/Roaming/Cryptomator/key.p12&quot; -Dcryptomator.mountPointsDir=&quot;@{userhome}/Cryptomator&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win" />
<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="-Dcryptomator.settingsPath=&quot;@{appdata}/Cryptomator-Dev/settings.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;@{localappdata}/Cryptomator-Dev/ipc.socket&quot; -Dcryptomator.logDir=&quot;@{localappdata}/Cryptomator-Dev&quot; -Dcryptomator.pluginDir=&quot;@{appdata}/Cryptomator-Dev/Plugins&quot; -Dcryptomator.integrationsWin.keychainPaths=&quot;@{appdata}/Cryptomator-Dev/keychain.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/keychain.json&quot; -Dcryptomator.p12Path=&quot;@{appdata}/Cryptomator-Dev/key.p12;@{userhome}/AppData/Roaming/Cryptomator-Dev/key.p12&quot; -Dcryptomator.mountPointsDir=&quot;@{userhome}/Cryptomator-Dev&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win" />
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath=&quot;@{appdata}/Cryptomator-Dev/settings.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/settings.json&quot; -Dcryptomator.ipcSocketPath=&quot;@{localappdata}/Cryptomator-Dev/ipc.socket&quot; -Dcryptomator.logDir=&quot;@{localappdata}/Cryptomator-Dev&quot; -Dcryptomator.pluginDir=&quot;@{appdata}/Cryptomator-Dev/Plugins&quot; -Dcryptomator.integrationsWin.keychainPaths=&quot;@{appdata}/Cryptomator-Dev/keychain.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/keychain.json&quot; -Dcryptomator.integrationsWin.windowsHelloKeychainPaths=&quot;@{appdata}/Cryptomator-Dev/windowsHelloKeychain.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/windowsHelloKeychain.json&quot; -Dcryptomator.p12Path=&quot;@{appdata}/Cryptomator-Dev/key.p12;@{userhome}/AppData/Roaming/Cryptomator-Dev/key.p12&quot; -Dcryptomator.mountPointsDir=&quot;@{userhome}/Cryptomator-Dev&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win" />
<method v="2">
<option name="Make" enabled="true" />
</method>

View File

@@ -3,7 +3,7 @@
[![Build](https://github.com/cryptomator/cryptomator/workflows/Build/badge.svg)](https://github.com/cryptomator/cryptomator/actions?query=workflow%3ABuild)
[![Known Vulnerabilities](https://snyk.io/test/github/cryptomator/cryptomator/badge.svg)](https://snyk.io/test/github/cryptomator/cryptomator)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=cryptomator_cryptomator&metric=alert_status)](https://sonarcloud.io/dashboard?id=cryptomator_cryptomator)
[![Mastodon](https://img.shields.io/mastodon/follow/176112?domain=mastodon.online&style=flat)](https://mastodon.online/@cryptomator)
[![Twitter](https://img.shields.io/badge/twitter-@Cryptomator-blue.svg?style=flat)](http://twitter.com/Cryptomator)
[![Crowdin](https://badges.crowdin.net/cryptomator/localized.svg)](https://translate.cryptomator.org/)
[![Latest Release](https://img.shields.io/github/release/cryptomator/cryptomator.svg)](https://github.com/cryptomator/cryptomator/releases/latest)
[![Community](https://img.shields.io/badge/help-Community-orange.svg)](https://community.cryptomator.org)
@@ -32,9 +32,9 @@ Become our Gold Sponsor and showcase your brand to a targeted audience! Please c
### Special Shoutout
Continuous integration hosting for ARM64 builds is provided by [MacStadium](https://www.macstadium.com/company/opensource).
Continuous integration hosting for ARM64 builds is provided by [MacStadium](https://www.macstadium.com/opensource).
<a href="https://www.macstadium.com/company/opensource"><img src="https://uploads-ssl.webflow.com/5ac3c046c82724970fc60918/5c019d917bba312af7553b49_MacStadium-developerlogo.png" alt="MacStadium" height="100"></a>
<a href="https://www.macstadium.com/opensource"><img src="https://uploads-ssl.webflow.com/5ac3c046c82724970fc60918/5c019d917bba312af7553b49_MacStadium-developerlogo.png" alt="MacStadium" height="100"></a>
---
@@ -54,7 +54,7 @@ Download native binaries of Cryptomator on [cryptomator.org](https://cryptomator
- File names get encrypted
- Folder structure gets obfuscated
- Use as many vaults in your Dropbox as you want, each having individual passwords
- More than Five thousand commits for the security of your data!! :tada:
- Four thousand commits for the security of your data!! :tada:
### Privacy
@@ -72,13 +72,13 @@ Download native binaries of Cryptomator on [cryptomator.org](https://cryptomator
### Security Architecture
For more information on the security details visit [cryptomator.org](https://docs.cryptomator.org/security/architecture/).
For more information on the security details visit [cryptomator.org](https://docs.cryptomator.org/en/latest/security/architecture/).
## Building
### Dependencies
* JDK 23 (e.g. temurin, zulu)
* JDK 22 (e.g. temurin, zulu)
* Maven 3
### Run Maven

View File

@@ -25,10 +25,10 @@ cp ../../../target/cryptomator-*.jar ../../../target/mods
JAVAFX_VERSION=22.0.2
JAVAFX_ARCH="x64"
JAVAFX_JMODS_SHA256='2164bca470bf70a5e2764645e2078ba7f787b274e5be3d7df30d87c5bb62bba6'
JAVAFX_JMODS_SHA256='d44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
if [ "${CPU_ARCH}" = "aarch64" ]; then
JAVAFX_ARCH="aarch64"
JAVAFX_JMODS_SHA256='09c92fa9fa0b82adefd88640a14ebb2a49e5f3f733a57d1542f5590d060ffe1b'
JAVAFX_JMODS_SHA256='3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
fi
# download javaFX jmods
@@ -76,7 +76,7 @@ ${JAVA_HOME}/bin/jpackage \
--vendor "Skymatic GmbH" \
--java-options "--enable-preview" \
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" \
--copyright "(C) 2016 - 2025 Skymatic GmbH" \
--copyright "(C) 2016 - 2024 Skymatic GmbH" \
--java-options "-Xss5m" \
--java-options "-Xmx256m" \
--app-version "${VERSION}.${REVISION_NO}" \
@@ -91,7 +91,6 @@ ${JAVA_HOME}/bin/jpackage \
--java-options "-Dcryptomator.showTrayIcon=true" \
--java-options "-Dcryptomator.integrationsLinux.trayIconsDir=\"@{appdir}/usr/share/icons/hicolor/symbolic/apps\"" \
--java-options "-Dcryptomator.buildNumber=\"appimage-${REVISION_NO}\"" \
--java-options "-Dcryptomator.networking.truststore.p12Path=\"/etc/cryptomator/certs.p12\"" \
--resource-dir ../resources
# transform AppDir
@@ -109,13 +108,13 @@ cp ../common/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/usr/share/ap
cp ../common/org.cryptomator.Cryptomator.metainfo.xml Cryptomator.AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.metainfo.xml
cp ../common/application-vnd.cryptomator.vault.xml Cryptomator.AppDir/usr/share/mime/packages/application-vnd.cryptomator.vault.xml
ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/org.cryptomator.Cryptomator.svg
ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/Cryptomator.svg
ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/.DirIcon
ln -s usr/share/applications/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/org.cryptomator.Cryptomator.desktop
ln -s org.cryptomator.Cryptomator.metainfo.xml Cryptomator.AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.appdata.xml
ln -s usr/share/applications/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/Cryptomator.desktop
ln -s bin/cryptomator.sh Cryptomator.AppDir/AppRun
# load AppImageTool
curl -L https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-${CPU_ARCH}.AppImage -o /tmp/appimagetool.AppImage
curl -L https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-${CPU_ARCH}.AppImage -o /tmp/appimagetool.AppImage
chmod +x /tmp/appimagetool.AppImage
# create AppImage

View File

@@ -1,10 +1,11 @@
<?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>Encryption for your cloud made easy</summary>
<summary>Encryption made easy and optimized for the cloud</summary>
<description>
<p>
@@ -43,16 +44,12 @@
<screenshots>
<screenshot type="default">
<caption>Encrypt your data, protect your privacy</caption>
<image>https://static.cryptomator.org/desktop/flathubScreenshots/MainWindowUnlocked_light.png</image>
<caption>Light theme</caption>
<image>https://user-images.githubusercontent.com/11858409/156986109-6e58f59c-8b8c-4501-b33b-bb1e33007cea.png</image>
</screenshot>
<screenshot>
<caption>Dark theme available</caption>
<image>https://static.cryptomator.org/desktop/flathubScreenshots/MainWindowUnlock_dark.png</image>
</screenshot>
<screenshot>
<caption>Uses AES-GCM 256 - an industry standardized, quantum resistant encryption</caption>
<image>https://static.cryptomator.org/desktop/flathubScreenshots/MainWindowUnlockDialog_light.png</image>
<caption>Dark theme</caption>
<image>https://user-images.githubusercontent.com/11858409/156986113-6c5d7801-86e0-4643-bc2f-aff9d95d3ce0.png</image>
</screenshot>
</screenshots>
@@ -77,18 +74,6 @@
</content_rating>
<releases>
<release date="2025-04-09" version="1.15.3">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.15.3</url>
</release>
<release date="2025-04-04" version="1.15.2">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.15.2</url>
</release>
<release date="2025-02-05" version="1.15.1">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.15.1</url>
</release>
<release date="2025-02-03" version="1.15.0">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.15.0</url>
</release>
<release date="2024-11-19" version="1.14.2">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.14.2</url>
</release>

View File

@@ -2,7 +2,7 @@ Source: cryptomator
Maintainer: Cryptobot <releases@cryptomator.org>
Section: utils
Priority: optional
Build-Depends: debhelper (>=10), coffeelibs-jdk-23 (>= 23.0.1+11-0ppa1), libgtk-3-0, libxxf86vm1, libgl1
Build-Depends: debhelper (>=10), coffeelibs-jdk-22 (>= 22.0.1+8-0ppa1), libgtk-3-0, libxxf86vm1, libgl1
Standards-Version: 4.5.0
Homepage: https://cryptomator.org
Vcs-Git: https://github.com/cryptomator/cryptomator.git

View File

@@ -4,11 +4,11 @@ Upstream-Contact: Cryptomator <info@cryptomator.org>
Source: https://cryptomator.org
Files: *
Copyright: 2016-2025 Skymatic GmbH
Copyright: 2016-2024 Skymatic GmbH
License: GPL-3+
Files: debian/org.cryptomator.Cryptomator.appdata.xml
Copyright: 2016-2025 Skymatic GmbH
Copyright: 2016-2024 Skymatic GmbH
License: FSFAP
License: GPL-3+

View File

@@ -45,7 +45,7 @@ override_dh_auto_build:
--vendor "Skymatic GmbH" \
--java-options "--enable-preview" \
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" \
--copyright "(C) 2016 - 2025 Skymatic GmbH" \
--copyright "(C) 2016 - 2024 Skymatic GmbH" \
--java-options "-Xss5m" \
--java-options "-Xmx256m" \
--java-options "-Dfile.encoding=\"utf-8\"" \
@@ -62,7 +62,6 @@ override_dh_auto_build:
--java-options "-Dcryptomator.appVersion=\"${SEMVER_STR}\"" \
--java-options "-Dcryptomator.disableUpdateCheck=\"${DISABLE_UPDATE_CHECK}\"" \
--java-options "-Dcryptomator.integrationsLinux.autoStartCmd=\"cryptomator\"" \
--java-options "-Dcryptomator.networking.truststore.p12Path=\"/etc/cryptomator/certs.p12\"" \
--app-version "${VERSION_NUM}.${REVISION_NUM}" \
--resource-dir resources \
--verbose

View File

@@ -24,7 +24,7 @@ rm -rf runtime dmg *.app *.dmg
# set variables
APP_NAME="Cryptomator"
VENDOR="Skymatic GmbH"
COPYRIGHT_YEARS="2016 - 2025"
COPYRIGHT_YEARS="2016 - 2024"
PACKAGE_IDENTIFIER="org.cryptomator"
MAIN_JAR_GLOB="cryptomator-*.jar"
MODULE_AND_MAIN_CLASS="org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator"
@@ -32,15 +32,15 @@ REVISION_NO=`git rev-list --count HEAD`
VERSION_NO=`mvn -f../../../pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout | sed -rn 's/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/p'`
FUSE_LIB="FUSE-T"
JAVAFX_VERSION=23.0.1
JAVAFX_VERSION=22.0.2
JAVAFX_ARCH="undefined"
JAVAFX_JMODS_SHA256="undefined"
if [ "$(machine)" = "arm64e" ]; then
JAVAFX_ARCH="aarch64"
JAVAFX_JMODS_SHA256="a800724a1f3e6757ecfa0bd5bf7ed64d2e6a7a3f5b3522650a70b8cfc7782fb6"
JAVAFX_JMODS_SHA256="813c6748f7c99cb7a579d48b48a087b4682b1fad1fc1a4fe5f9b21cf872b15a7"
else
JAVAFX_ARCH="x64"
JAVAFX_JMODS_SHA256="8857965975c464a0e5d57709292ce357d0ebb39f6168c41d5ca38301e42c3c8e"
JAVAFX_JMODS_SHA256="115cb08bb59d880cfff6e51e0bf0dcc45785ed9d456b8b8425597b04da6ab3d4"
fi
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-${JAVAFX_VERSION}_osx-${JAVAFX_ARCH}_bin-jmods.zip"

View File

@@ -17,7 +17,7 @@
\f1\b0 \
\
\f0\b \'a9 2016 \'96 2025 Skymatic GmbH
\f0\b \'a9 2016 \'96 2024 Skymatic GmbH
\f1\b0 \
\
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.\

2
dist/win/build.bat vendored
View File

@@ -11,7 +11,7 @@ SET HELP_URL="https://cryptomator.org/contact/"
SET MODULE_AND_MAIN_CLASS="org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator"
SET LOOPBACK_ALIAS="cryptomator-vault"
pwsh -NoLogo -NoProfile -ExecutionPolicy Unrestricted -Command .\build.ps1^
powershell -NoLogo -NoProfile -ExecutionPolicy Unrestricted -Command .\build.ps1^
-AppName %APPNAME%^
-MainJarGlob "%MAIN_JAR_GLOB%"^
-ModuleAndMainClass "%MODULE_AND_MAIN_CLASS%"^

10
dist/win/build.ps1 vendored
View File

@@ -51,23 +51,23 @@ if ($clean -and (Test-Path -Path $runtimeImagePath)) {
}
## download jfx jmods
$javaFxVersion='23.0.1'
$javaFxVersion='22.0.2'
$javaFxJmodsUrl = "https://download2.gluonhq.com/openjfx/${javaFxVersion}/openjfx-${javaFxVersion}_windows-x64_bin-jmods.zip"
$javaFxJmodsSHA256 = 'ee176dcee3bd78bde7910735bd67f67c792882f5b89626796ae06f7a1c0119d3'
$javaFxJmodsSHA256 = 'f9376d200f5c5b85327d575c1ec1482e6455f19916577f7e2fc9be2f48bb29b6'
$javaFxJmods = '.\resources\jfxJmods.zip'
if( !(Test-Path -Path $javaFxJmods) ) {
Write-Output "Downloading ${javaFxJmodsUrl}..."
Invoke-WebRequest $javaFxJmodsUrl -OutFile $javaFxJmods # redirects are followed by default
}
$jmodsChecksumActual = $(Get-FileHash -Path $javaFxJmods -Algorithm SHA256).Hash.ToLower()
$jmodsChecksumActual = $(Get-FileHash -Path $javaFxJmods -Algorithm SHA256).Hash
if( $jmodsChecksumActual -ne $javaFxJmodsSHA256 ) {
Write-Error "Checksum mismatch for jfxJmods.zip. Expected: $javaFxJmodsSHA256
, actual: $jmodsChecksumActual"
exit 1;
}
Expand-Archive -Path $javaFxJmods -Force -DestinationPath ".\resources\"
Remove-Item -Recurse -Force -Path ".\resources\javafx-jmods" -ErrorAction Ignore
Remove-Item -Recurse -Force -Path ".\resources\javafx-jmods"
Move-Item -Force -Path ".\resources\javafx-jmods-*" -Destination ".\resources\javafx-jmods" -ErrorAction Stop
## create custom runtime
@@ -75,7 +75,7 @@ Move-Item -Force -Path ".\resources\javafx-jmods-*" -Destination ".\resources\ja
--verbose `
--output runtime `
--module-path "$Env:JAVA_HOME/jmods;$buildDir/resources/javafx-jmods" `
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.accessibility,jdk.management.jfr,jdk.crypto.mscapi,java.compiler,javafx.base,javafx.graphics,javafx.controls,javafx.fxml `
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.accessibility,jdk.management.jfr,java.compiler,javafx.base,javafx.graphics,javafx.controls,javafx.fxml `
--strip-native-commands `
--no-header-files `
--no-man-pages `

View File

@@ -10,7 +10,7 @@
\vieww12000\viewh15840\viewkind0
\pard\tx283\tx567\tx850\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\b\fs16\lang7 Cryptomator is distributed under the GPLv3 License, found below. Please see the bottom of this document for any other license applicable to code used within Cryptomator.\b0\par
\par
\b\'a9 2016 \'96 2025 Skymatic GmbH \b0\par
\b\'a9 2016 \'96 2024 Skymatic GmbH \b0\par
\par
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.\par
\par

BIN
dist/win/contrib/dokan1.dll vendored Executable file

Binary file not shown.

View File

@@ -10,7 +10,7 @@
\vieww12000\viewh15840\viewkind0
\pard\tx283\tx567\tx850\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\b\fs16\lang7 Cryptomator is distributed under the GPLv3 License, found below. Please see the bottom of this document for any other license applicable to code used within Cryptomator.\b0\par
\par
\b\'a9 2016 \'96 2025 Skymatic GmbH \b0\par
\b\'a9 2016 \'96 2024 Skymatic GmbH \b0\par
\par
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.\par
\par

52
pom.xml
View File

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.cryptomator</groupId>
<artifactId>cryptomator</artifactId>
<version>1.15.3</version>
<version>1.15.0-SNAPSHOT</version>
<name>Cryptomator Desktop App</name>
<organization>
@@ -33,46 +33,43 @@
<nonModularGroupIds>org.ow2.asm,org.apache.jackrabbit,org.apache.httpcomponents</nonModularGroupIds>
<!-- cryptomator dependencies -->
<cryptomator.cryptofs.version>2.8.0</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.5.0</cryptomator.integrations.version>
<cryptomator.integrations.win.version>1.3.0</cryptomator.integrations.win.version>
<cryptomator.integrations.mac.version>1.2.4</cryptomator.integrations.mac.version>
<cryptomator.integrations.linux.version>1.5.2</cryptomator.integrations.linux.version>
<cryptomator.fuse.version>5.0.5</cryptomator.fuse.version>
<cryptomator.webdav.version>2.0.10</cryptomator.webdav.version>
<cryptomator.cryptofs.version>2.7.1</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.4.0</cryptomator.integrations.version>
<cryptomator.integrations.win.version>1.4.1</cryptomator.integrations.win.version>
<cryptomator.integrations.mac.version>1.3.0</cryptomator.integrations.mac.version>
<cryptomator.integrations.linux.version>1.5.1</cryptomator.integrations.linux.version>
<cryptomator.fuse.version>5.0.2</cryptomator.fuse.version>
<cryptomator.webdav.version>2.0.7</cryptomator.webdav.version>
<!-- 3rd party dependencies -->
<commons-lang3.version>3.17.0</commons-lang3.version>
<dagger.version>2.55</dagger.version>
<dagger.version>2.52</dagger.version>
<easybind.version>2.2</easybind.version>
<jackson.version>2.18.2</jackson.version>
<javafx.version>23.0.1</javafx.version>
<jackson.version>2.18.1</jackson.version>
<javafx.version>22.0.2</javafx.version>
<jwt.version>4.4.0</jwt.version>
<nimbus-jose.version>9.37.3</nimbus-jose.version>
<logback.version>1.5.16</logback.version>
<logback.version>1.5.12</logback.version>
<slf4j.version>2.0.16</slf4j.version>
<tinyoauth2.version>0.8.0</tinyoauth2.version>
<zxcvbn.version>1.9.0</zxcvbn.version>
<!-- test dependencies -->
<junit.jupiter.version>5.11.4</junit.jupiter.version>
<mockito.version>5.15.2</mockito.version>
<junit.jupiter.version>5.11.3</junit.jupiter.version>
<mockito.version>5.14.2</mockito.version>
<hamcrest.version>3.0</hamcrest.version>
<!-- build-time dependencies -->
<jetbrains.annotations.version>26.0.1</jetbrains.annotations.version>
<dependency-check.version>12.0.1</dependency-check.version>
<dependency-check.version>11.1.0</dependency-check.version>
<jacoco.version>0.8.12</jacoco.version>
<license-generator.version>2.5.0</license-generator.version>
<junit-tree-reporter.version>1.4.0</junit-tree-reporter.version>
<license-generator.version>2.4.0</license-generator.version>
<junit-tree-reporter.version>1.3.0</junit-tree-reporter.version>
<mvn-compiler.version>3.13.0</mvn-compiler.version>
<mvn-resources.version>3.3.1</mvn-resources.version>
<mvn-dependency.version>3.8.1</mvn-dependency.version>
<mvn-surefire.version>3.5.2</mvn-surefire.version>
<mvn-jar.version>3.4.2</mvn-jar.version>
<!-- Property used by surefire to determine jacoco engine -->
<surefire.jacoco.args></surefire.jacoco.args>
</properties>
<dependencies>
@@ -208,7 +205,7 @@
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>3.2.0</version>
<version>3.1.8</version>
</dependency>
<!-- JUnit / Mockito / Hamcrest -->
<dependency>
@@ -311,6 +308,7 @@
<compilerArgs>
<arg>-Adagger.fastInit=enabled</arg>
<arg>-Adagger.formatGeneratedSource=enabled</arg>
<arg>--enable-preview</arg>
</compilerArgs>
</configuration>
</plugin>
@@ -337,11 +335,11 @@
</dependency>
</dependencies>
<configuration>
<argLine>--enable-preview</argLine>
<reportFormat>plain</reportFormat>
<consoleOutputReporter>
<disable>true</disable>
</consoleOutputReporter>
<argLine>@{surefire.jacoco.args} -javaagent:${org.mockito:mockito-core:jar}</argLine>
<statelessTestsetInfoReporter
implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5StatelessTestsetInfoTreeReporter">
</statelessTestsetInfoReporter>
@@ -351,13 +349,6 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>jar-paths-to-properties</id>
<phase>validate</phase>
<goals>
<goal>properties</goal>
</goals>
</execution>
<!-- sort jars into two buckets (classpath and modulepath). exclude openjfx, which gets jlinked separately -->
<execution>
<id>copy-mods</id>
@@ -430,9 +421,6 @@
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<propertyName>surefire.jacoco.args</propertyName>
</configuration>
</execution>
<execution>
<id>report</id>

View File

@@ -1,5 +1,4 @@
import ch.qos.logback.classic.spi.Configurator;
import org.cryptomator.networking.SSLContextWithPKCS12TrustStore;
import org.cryptomator.common.locationpresets.DropboxLinuxLocationPresetsProvider;
import org.cryptomator.common.locationpresets.DropboxMacLocationPresetsProvider;
import org.cryptomator.common.locationpresets.DropboxWindowsLocationPresetsProvider;
@@ -14,9 +13,6 @@ import org.cryptomator.common.locationpresets.OneDriveLinuxLocationPresetsProvid
import org.cryptomator.common.locationpresets.OneDriveMacLocationPresetsProvider;
import org.cryptomator.common.locationpresets.OneDriveWindowsLocationPresetsProvider;
import org.cryptomator.common.locationpresets.PCloudLocationPresetsProvider;
import org.cryptomator.networking.SSLContextWithMacKeychain;
import org.cryptomator.networking.SSLContextProvider;
import org.cryptomator.networking.SSLContextWithWindowsCertStore;
import org.cryptomator.integrations.tray.TrayMenuController;
import org.cryptomator.logging.LogbackConfiguratorFactory;
import org.cryptomator.ui.traymenu.AwtTrayMenuController;
@@ -58,11 +54,9 @@ open module org.cryptomator.desktop {
requires com.github.benmanes.caffeine;
uses org.cryptomator.common.locationpresets.LocationPresetsProvider;
uses SSLContextProvider;
provides TrayMenuController with AwtTrayMenuController;
provides Configurator with LogbackConfiguratorFactory;
provides SSLContextProvider with SSLContextWithWindowsCertStore, SSLContextWithMacKeychain, SSLContextWithPKCS12TrustStore;
provides LocationPresetsProvider with //
DropboxWindowsLocationPresetsProvider, DropboxMacLocationPresetsProvider, DropboxLinuxLocationPresetsProvider, //
GoogleDriveMacLocationPresetsProvider, GoogleDriveWindowsLocationPresetsProvider, //

View File

@@ -0,0 +1,20 @@
package org.cryptomator;
import javafx.application.Platform;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class JavaFXUtil {
public static boolean startPlatform() throws InterruptedException {
CountDownLatch latch = new CountDownLatch(1);
try {
Platform.startup(latch::countDown);
} catch (IllegalStateException e) {
//already initialized
latch.countDown();
}
return latch.await(5, TimeUnit.SECONDS);
}
}

View File

@@ -23,6 +23,7 @@ public class Environment {
private static final String SETTINGS_PATH_PROP_NAME = "cryptomator.settingsPath";
private static final String IPC_SOCKET_PATH_PROP_NAME = "cryptomator.ipcSocketPath";
private static final String KEYCHAIN_PATHS_PROP_NAME = "cryptomator.integrationsWin.keychainPaths";
private static final String WINDOWS_HELLO_KEYCHAIN_PATHS_PROP_NAME = "cryptomator.integrationsWin.windowsHelloKeychainPaths";
private static final String P12_PATH_PROP_NAME = "cryptomator.p12Path";
private static final String LOG_DIR_PROP_NAME = "cryptomator.logDir";
private static final String LOOPBACK_ALIAS_PROP_NAME = "cryptomator.loopbackAlias";
@@ -45,6 +46,7 @@ public class Environment {
logCryptomatorSystemProperty(SETTINGS_PATH_PROP_NAME);
logCryptomatorSystemProperty(IPC_SOCKET_PATH_PROP_NAME);
logCryptomatorSystemProperty(KEYCHAIN_PATHS_PROP_NAME);
logCryptomatorSystemProperty(WINDOWS_HELLO_KEYCHAIN_PATHS_PROP_NAME);
logCryptomatorSystemProperty(P12_PATH_PROP_NAME);
logCryptomatorSystemProperty(LOG_DIR_PROP_NAME);
logCryptomatorSystemProperty(LOOPBACK_ALIAS_PROP_NAME);
@@ -85,6 +87,10 @@ public class Environment {
return getPaths(KEYCHAIN_PATHS_PROP_NAME);
}
public Stream<Path> getWindowsHelloKeychainPath() {
return getPaths(WINDOWS_HELLO_KEYCHAIN_PATHS_PROP_NAME);
}
public Stream<Path> getP12Path() {
return getPaths(P12_PATH_PROP_NAME);
}

View File

@@ -24,7 +24,7 @@ public class KeychainManager implements KeychainAccessProvider {
KeychainManager(ObjectExpression<KeychainAccessProvider> selectedKeychain) {
this.keychain = selectedKeychain;
this.passphraseStoredProperties = Caffeine.newBuilder() //
.weakValues() //
.softValues() //
.build(this::createStoredPassphraseProperty);
keychain.addListener(ignored -> passphraseStoredProperties.invalidateAll());
}
@@ -43,8 +43,13 @@ public class KeychainManager implements KeychainAccessProvider {
}
@Override
public void storePassphrase(String key, String displayName, CharSequence passphrase, boolean ignored) throws KeychainAccessException {
getKeychainOrFail().storePassphrase(key, displayName, passphrase);
public void storePassphrase(String key, String displayName, CharSequence passphrase) throws KeychainAccessException {
storePassphrase(key, displayName, passphrase, true); //TODO: currently only TouchID is using this parameter, so this is okayish
}
@Override
public void storePassphrase(String key, String displayName, CharSequence passphrase, boolean requireOsAuthentication) throws KeychainAccessException {
getKeychainOrFail().storePassphrase(key, displayName, passphrase, requireOsAuthentication);
setPassphraseStored(key, true);
}
@@ -101,13 +106,11 @@ public class KeychainManager implements KeychainAccessProvider {
}
private void setPassphraseStored(String key, boolean value) {
BooleanProperty property = passphraseStoredProperties.getIfPresent(key);
if (property != null) {
if (Platform.isFxApplicationThread()) {
property.set(value);
} else {
Platform.runLater(() -> property.set(value));
}
BooleanProperty property = passphraseStoredProperties.get(key, _ -> new SimpleBooleanProperty(value));
if (Platform.isFxApplicationThread()) {
property.set(value);
} else {
Platform.runLater(() -> property.set(value));
}
}
@@ -134,4 +137,8 @@ public class KeychainManager implements KeychainAccessProvider {
}
}
public ObjectExpression<KeychainAccessProvider> getKeychainImplementation() {
return this.keychain;
}
}

View File

@@ -44,7 +44,6 @@ import javafx.beans.property.SimpleBooleanProperty;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.ReadOnlyFileSystemException;
import java.util.EnumSet;
import java.util.Objects;
import java.util.Set;
@@ -112,22 +111,15 @@ public class Vault {
private CryptoFileSystem createCryptoFileSystem(MasterkeyLoader keyLoader) throws IOException, MasterkeyLoadingFailedException {
Set<FileSystemFlags> flags = EnumSet.noneOf(FileSystemFlags.class);
var createReadOnly = vaultSettings.usesReadOnlyMode.get();
try {
FileSystemCapabilityChecker.assertWriteAccess(getPath());
} catch (FileSystemCapabilityChecker.MissingCapabilityException e) {
if (!createReadOnly) {
throw new ReadOnlyFileSystemException();
}
}
if (createReadOnly) {
if (vaultSettings.usesReadOnlyMode.get()) {
flags.add(FileSystemFlags.READONLY);
} else if (vaultSettings.maxCleartextFilenameLength.get() == -1) {
LOG.debug("Determining cleartext filename length limitations...");
var checker = new FileSystemCapabilityChecker();
int shorteningThreshold = configCache.get().allegedShorteningThreshold();
int ciphertextLimit = FileSystemCapabilityChecker.determineSupportedCiphertextFileNameLength(getPath());
int ciphertextLimit = checker.determineSupportedCiphertextFileNameLength(getPath());
if (ciphertextLimit < shorteningThreshold) {
int cleartextLimit = FileSystemCapabilityChecker.determineSupportedCleartextFileNameLength(getPath());
int cleartextLimit = checker.determineSupportedCleartextFileNameLength(getPath());
vaultSettings.maxCleartextFilenameLength.set(cleartextLimit);
} else {
vaultSettings.maxCleartextFilenameLength.setValue(UNLIMITED_FILENAME_LENGTH);

View File

@@ -9,9 +9,8 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder;
import dagger.Lazy;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.Environment;
import org.cryptomator.common.ShutdownHook;
import org.cryptomator.common.SubstitutingProperties;
import org.cryptomator.networking.SSLContextProvider;
import org.cryptomator.common.ShutdownHook;
import org.cryptomator.ipc.IpcCommunicator;
import org.cryptomator.logging.DebugMode;
import org.cryptomator.ui.fxapp.FxApplicationComponent;
@@ -20,10 +19,8 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.net.ssl.SSLContext;
import javafx.application.Application;
import javafx.stage.Stage;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
@@ -51,16 +48,14 @@ public class Cryptomator {
private final Environment env;
private final Lazy<IpcMessageHandler> ipcMessageHandler;
private final ShutdownHook shutdownHook;
private final SecureRandom csprng;
@Inject
Cryptomator(DebugMode debugMode, SupportedLanguages supportedLanguages, Environment env, Lazy<IpcMessageHandler> ipcMessageHandler, ShutdownHook shutdownHook, SecureRandom csprng) {
Cryptomator(DebugMode debugMode, SupportedLanguages supportedLanguages, Environment env, Lazy<IpcMessageHandler> ipcMessageHandler, ShutdownHook shutdownHook) {
this.debugMode = debugMode;
this.supportedLanguages = supportedLanguages;
this.env = env;
this.ipcMessageHandler = ipcMessageHandler;
this.shutdownHook = shutdownHook;
this.csprng = csprng;
}
public static void main(String[] args) {
@@ -94,7 +89,7 @@ public class Cryptomator {
LOG.info("Starting Cryptomator {} on {} {} ({})", env.getAppVersion(), SystemUtils.OS_NAME, SystemUtils.OS_VERSION, SystemUtils.OS_ARCH);
debugMode.initialize();
supportedLanguages.applyPreferred();
changeDefaultSSLContext();
/*
* Attempts to create an IPC connection to a running Cryptomator instance and sends it the given args.
* If no external process could be reached, the args will be handled by the loopback IPC endpoint.
@@ -120,17 +115,6 @@ public class Cryptomator {
}
}
private void changeDefaultSSLContext() {
SSLContextProvider.loadAll().findFirst().ifPresent(p -> {
try {
var context = p.getContext(csprng);
SSLContext.setDefault(context);
} catch (SSLContextProvider.SSLContextBuildException e) {
LOG.warn("Failed to change default SSL context with provider {}", p.getClass().getName(), e);
}
});
}
/**
* Launches the JavaFX application, blocking the main thread until shuts down.
*

View File

@@ -1,33 +0,0 @@
package org.cryptomator.networking;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
abstract class SSLContextDifferentTrustStoreBase implements SSLContextProvider {
abstract KeyStore getTruststore() throws KeyStoreException, CertificateException, IOException, NoSuchAlgorithmException;
@Override
public SSLContext getContext(SecureRandom csprng) throws SSLContextBuildException {
try {
KeyStore truststore = getTruststore();
truststore.load(null, null);
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(truststore);
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), csprng);
return context;
} catch (KeyStoreException | CertificateException | NoSuchAlgorithmException | KeyManagementException | IOException e) {
throw new SSLContextBuildException(e);
}
}
}

View File

@@ -1,24 +0,0 @@
package org.cryptomator.networking;
import org.cryptomator.integrations.common.IntegrationsLoader;
import javax.net.ssl.SSLContext;
import java.security.SecureRandom;
import java.util.ServiceLoader;
import java.util.stream.Stream;
public interface SSLContextProvider {
SSLContext getContext(SecureRandom csprng) throws SSLContextBuildException;
class SSLContextBuildException extends Exception {
SSLContextBuildException(Throwable t) {
super(t);
}
}
static Stream<SSLContextProvider> loadAll() {
return IntegrationsLoader.loadAll(ServiceLoader.load(SSLContextProvider.class), SSLContextProvider.class);
}
}

View File

@@ -1,21 +0,0 @@
package org.cryptomator.networking;
import org.cryptomator.integrations.common.OperatingSystem;
import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
/**
* SSLContextProvider for macOS using the macOS Keychain as truststore
*/
@OperatingSystem(OperatingSystem.Value.MAC)
public class SSLContextWithMacKeychain extends SSLContextDifferentTrustStoreBase implements SSLContextProvider {
@Override
KeyStore getTruststore() throws KeyStoreException, CertificateException, IOException, NoSuchAlgorithmException {
return KeyStore.getInstance("KeychainStore-ROOT");
}
}

View File

@@ -1,42 +0,0 @@
package org.cryptomator.networking;
import org.cryptomator.integrations.common.CheckAvailability;
import org.cryptomator.integrations.common.OperatingSystem;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.util.Optional;
/**
* SSLContextProvider for Linux using a PKCS#12 file as trust store
*/
@OperatingSystem(OperatingSystem.Value.LINUX)
@CheckAvailability
public class SSLContextWithPKCS12TrustStore extends SSLContextDifferentTrustStoreBase implements SSLContextProvider {
private static final String CERT_FILE_LOCATION_PROPERTY = "cryptomator.networking.truststore.p12Path";
@Override
KeyStore getTruststore() throws KeyStoreException, CertificateException, IOException, NoSuchAlgorithmException {
var pkcs12FilePath = Path.of(System.getProperty(CERT_FILE_LOCATION_PROPERTY));
try {
return KeyStore.getInstance(pkcs12FilePath.toFile(), new char[]{});
} catch (IllegalArgumentException e) {
throw new NoSuchFileException(pkcs12FilePath.toString());
}
}
@CheckAvailability
public static boolean isSupported() {
var pkcs12Path = System.getProperty(CERT_FILE_LOCATION_PROPERTY);
return Optional.ofNullable(pkcs12Path) //
.map(Path::of) //
.map(Files::exists).orElse(false);
}
}

View File

@@ -1,21 +0,0 @@
package org.cryptomator.networking;
import org.cryptomator.integrations.common.OperatingSystem;
import java.security.KeyStore;
import java.security.KeyStoreException;
/**
* SSLContextProvider for Windows using the Windows certificate store as trust store
* <p>
* In order to work, the jdk.crypto.mscapi jmod is needed
*/
@OperatingSystem(OperatingSystem.Value.WINDOWS)
public class SSLContextWithWindowsCertStore extends SSLContextDifferentTrustStoreBase implements SSLContextProvider {
@Override
KeyStore getTruststore() throws KeyStoreException {
return KeyStore.getInstance("WINDOWS-ROOT");
}
}

View File

@@ -26,7 +26,7 @@ public class CreateNewVaultExpertSettingsController implements FxController {
public static final int MAX_SHORTENING_THRESHOLD = 220;
public static final int MIN_SHORTENING_THRESHOLD = 36;
private static final String DOCS_NAME_SHORTENING_URL = "https://docs.cryptomator.org/security/architecture/#name-shortening";
private static final String DOCS_NAME_SHORTENING_URL = "https://docs.cryptomator.org/en/1.7/security/architecture/#name-shortening";
private final Stage window;
private final Lazy<Application> application;

View File

@@ -40,6 +40,7 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Optional;
import java.util.ResourceBundle;
import java.util.concurrent.ExecutorService;
@@ -49,7 +50,7 @@ public class CreateNewVaultLocationController implements FxController {
private static final Logger LOG = LoggerFactory.getLogger(CreateNewVaultLocationController.class);
private static final Path DEFAULT_CUSTOM_VAULT_PATH = Paths.get(System.getProperty("user.home"));
private static final String TEMP_FILE_PREFIX = ".locationTest.cryptomator";
private static final String TEMP_FILE_FORMAT = ".locationTest.cryptomator.tmp";
private final Stage window;
private final Lazy<Scene> chooseNameScene;
@@ -125,19 +126,16 @@ public class CreateNewVaultLocationController implements FxController {
private boolean isActuallyWritable(Path p) {
Path tmpDir = null;
try {
tmpDir = Files.createTempDirectory(p, TEMP_FILE_PREFIX );
Path tmpFile = p.resolve(TEMP_FILE_FORMAT);
try (var chan = Files.newByteChannel(tmpFile, StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE, StandardOpenOption.DELETE_ON_CLOSE)) {
return true;
} catch (IOException e) {
return false;
} finally {
if (tmpDir != null) {
try {
Files.deleteIfExists(tmpDir);
} catch (IOException e) {
LOG.warn("Unable to delete temporary directory {}. Needs to be deleted manually.", tmpDir);
}
try {
Files.deleteIfExists(tmpFile);
} catch (IOException e) {
LOG.warn("Unable to delete temporary file {}. Needs to be deleted manually.", tmpFile);
}
}
}

View File

@@ -2,34 +2,31 @@ package org.cryptomator.ui.dialogs;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.ui.common.StageFactory;
import org.cryptomator.ui.controls.FontAwesome5Icon;
import org.cryptomator.ui.fxapp.FxApplicationScoped;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Singleton;
import javafx.collections.ObservableList;
import javafx.stage.Stage;
import java.util.ResourceBundle;
import java.util.function.Consumer;
@FxApplicationScoped
@Singleton
public class Dialogs {
private final ResourceBundle resourceBundle;
private final StageFactory stageFactory;
@Inject
public Dialogs(ResourceBundle resourceBundle, StageFactory stageFactory) {
public Dialogs(ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle;
this.stageFactory = stageFactory;
}
private static final Logger LOG = LoggerFactory.getLogger(Dialogs.class);
private SimpleDialog.Builder createDialogBuilder() {
return new SimpleDialog.Builder(resourceBundle, stageFactory);
return new SimpleDialog.Builder(resourceBundle);
}
public SimpleDialog.Builder prepareRemoveVaultDialog(Stage window, Vault vault, ObservableList<Vault> vaults) {
@@ -68,23 +65,11 @@ public class Dialogs {
.setTitleKey("dokanySupportEnd.title") //
.setMessageKey("dokanySupportEnd.message") //
.setDescriptionKey("dokanySupportEnd.description") //
.setIcon(FontAwesome5Icon.EXCLAMATION) //
.setIcon(FontAwesome5Icon.QUESTION) //
.setOkButtonKey("generic.button.close") //
.setCancelButtonKey("dokanySupportEnd.preferencesBtn") //
.setOkAction(Stage::close) //
.setCancelAction(cancelAction);
}
public SimpleDialog.Builder prepareRetryIfReadonlyDialog(Stage window, Consumer<Stage> okAction) {
return createDialogBuilder() //
.setOwner(window) //
.setTitleKey("retryIfReadonly.title") //
.setMessageKey("retryIfReadonly.message") //
.setDescriptionKey("retryIfReadonly.description") //
.setIcon(FontAwesome5Icon.EXCLAMATION) //
.setOkButtonKey("retryIfReadonly.retry") //
.setCancelButtonKey("generic.button.close") //
.setOkAction(okAction) //
.setCancelAction(Stage::close);
}
}

View File

@@ -2,7 +2,6 @@ package org.cryptomator.ui.dialogs;
import org.cryptomator.ui.common.FxmlFile;
import org.cryptomator.ui.common.FxmlLoaderFactory;
import org.cryptomator.ui.common.StageFactory;
import org.cryptomator.ui.controls.FontAwesome5Icon;
import javafx.scene.Scene;
@@ -18,23 +17,24 @@ import java.util.function.Consumer;
public class SimpleDialog {
private final ResourceBundle resourceBundle;
private final Stage dialogStage;
SimpleDialog(Builder builder) throws IOException {
this.resourceBundle = builder.resourceBundle;
dialogStage = builder.stageFactory.create();
dialogStage = new Stage();
dialogStage.initOwner(builder.owner);
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.setTitle(resolveText(builder.titleKey, builder.titleArgs));
dialogStage.setResizable(false);
FxmlLoaderFactory loaderFactory = FxmlLoaderFactory.forController( //
new SimpleDialogController(resolveText(builder.messageKey, null), //
resolveText(builder.descriptionKey, null), //
builder.icon, resolveText(builder.okButtonKey, null), //
resolveText(builder.cancelButtonKey, null), //
() -> builder.okAction.accept(dialogStage), //
() -> builder.cancelAction.accept(dialogStage)), //
FxmlLoaderFactory loaderFactory = FxmlLoaderFactory.forController(
new SimpleDialogController(resolveText(builder.messageKey, null),
resolveText(builder.descriptionKey, null),
builder.icon,resolveText(builder.okButtonKey, null),
resolveText(builder.cancelButtonKey, null),
() -> builder.okAction.accept(dialogStage),
() -> builder.cancelAction.accept(dialogStage)),
Scene::new, builder.resourceBundle);
dialogStage.setScene(new Scene(loaderFactory.load(FxmlFile.SIMPLE_DIALOG.getRessourcePathString()).getRoot()));
@@ -60,7 +60,6 @@ public class SimpleDialog {
private Stage owner;
private final ResourceBundle resourceBundle;
private final StageFactory stageFactory;
private String titleKey;
private String[] titleArgs;
private String messageKey;
@@ -72,9 +71,8 @@ public class SimpleDialog {
private Consumer<Stage> okAction = Stage::close;
private Consumer<Stage> cancelAction = Stage::close;
public Builder(ResourceBundle resourceBundle, StageFactory stageFactory) {
public Builder(ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle;
this.stageFactory = stageFactory;
}
public Builder setOwner(Stage owner) {
@@ -124,11 +122,11 @@ public class SimpleDialog {
}
public SimpleDialog build() {
Objects.requireNonNull(titleKey, "SimpleDialog titleKey must be set.");
Objects.requireNonNull(messageKey, "SimpleDialog messageKey must be set.");
Objects.requireNonNull(descriptionKey, "SimpleDialog descriptionKey must be set.");
Objects.requireNonNull(okButtonKey, "SimpleDialog okButtonKey must be set.");
Objects.requireNonNull(cancelButtonKey, "SimpleDialog cancelButtonKey must be set.");
Objects.requireNonNull(titleKey,"SimpleDialog titleKey must be set.");
Objects.requireNonNull(messageKey,"SimpleDialog messageKey must be set.");
Objects.requireNonNull(descriptionKey,"SimpleDialog descriptionKey must be set.");
Objects.requireNonNull(okButtonKey,"SimpleDialog okButtonKey must be set.");
Objects.requireNonNull(cancelButtonKey,"SimpleDialog cancelButtonKey must be set.");
try {
return new SimpleDialog(this);

View File

@@ -112,12 +112,12 @@ public class MasterkeyFileLoadingStrategy implements KeyLoadingStrategy {
}
private void savePasswordToSystemkeychain(Passphrase passphrase) {
if (keychain.isSupported()) {
try {
try {
if (keychain.isSupported() && !keychain.getPassphraseStoredProperty(vault.getId()).getValue()) {
keychain.storePassphrase(vault.getId(), vault.getDisplayName(), passphrase);
} catch (KeychainAccessException e) {
LOG.error("Failed to store passphrase in system keychain.", e);
}
} catch (KeychainAccessException e) {
LOG.error("Failed to store passphrase in system keychain.", e);
}
}

View File

@@ -36,7 +36,6 @@ import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import javafx.util.Duration;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
@PassphraseEntryScoped
public class PassphraseEntryController implements FxController {
@@ -50,7 +49,6 @@ public class PassphraseEntryController implements FxController {
private final ForgetPasswordComponent.Builder forgetPassword;
private final KeychainManager keychain;
private final StringBinding vaultName;
private final ExecutorService backgroundExecutorService;
private final BooleanProperty unlockInProgress = new SimpleBooleanProperty();
private final ObjectBinding<ContentDisplay> unlockButtonContentDisplay = Bindings.when(unlockInProgress).then(ContentDisplay.LEFT).otherwise(ContentDisplay.TEXT_ONLY);
private final BooleanProperty unlockButtonDisabled = new SimpleBooleanProperty();
@@ -66,7 +64,7 @@ public class PassphraseEntryController implements FxController {
public Animation unlockAnimation;
@Inject
public PassphraseEntryController(@KeyLoading Stage window, @KeyLoading Vault vault, CompletableFuture<PassphraseEntryResult> result, @Nullable @Named("savedPassword") Passphrase savedPassword, ForgetPasswordComponent.Builder forgetPassword, KeychainManager keychain, ExecutorService backgroundExecutorService) {
public PassphraseEntryController(@KeyLoading Stage window, @KeyLoading Vault vault, CompletableFuture<PassphraseEntryResult> result, @Nullable @Named("savedPassword") Passphrase savedPassword, ForgetPasswordComponent.Builder forgetPassword, KeychainManager keychain) {
this.window = window;
this.vault = vault;
this.result = result;
@@ -74,8 +72,8 @@ public class PassphraseEntryController implements FxController {
this.forgetPassword = forgetPassword;
this.keychain = keychain;
this.vaultName = WeakBindings.bindString(vault.displayNameProperty());
this.backgroundExecutorService = backgroundExecutorService;
window.setOnHiding(this::windowClosed);
result.whenCompleteAsync((r, t) -> unlockInProgress.set(false), Platform::runLater);
}
@FXML
@@ -121,6 +119,8 @@ public class PassphraseEntryController implements FxController {
new KeyFrame(Duration.millis(800), legsExtendedY, legsExtendedX, faceHidden), //
new KeyFrame(Duration.millis(1000), faceVisible) //
);
result.whenCompleteAsync((r, t) -> stopUnlockAnimation());
}
@FXML
@@ -133,9 +133,6 @@ public class PassphraseEntryController implements FxController {
result.cancel(true);
LOG.debug("Unlock canceled by user.");
}
if( passwordField != null) {
passwordField.getCharacters().destroy();
}
}
@@ -145,7 +142,7 @@ public class PassphraseEntryController implements FxController {
unlockInProgress.set(true);
CharSequence pwFieldContents = passwordField.getCharacters();
Passphrase pw = Passphrase.copyOf(pwFieldContents);
result.completeAsync(() -> new PassphraseEntryResult(pw, savePasswordCheckbox.isSelected()), backgroundExecutorService);
result.complete(new PassphraseEntryResult(pw, savePasswordCheckbox.isSelected()));
startUnlockAnimation();
}

View File

@@ -8,9 +8,9 @@ import org.cryptomator.ui.vaultoptions.SelectedVaultOptionsTab;
import org.cryptomator.ui.vaultoptions.VaultOptionsComponent;
import javax.inject.Inject;
import javafx.beans.binding.Bindings;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.stage.Stage;
@@ -21,7 +21,6 @@ public class VaultDetailLockedController implements FxController {
private final ReadOnlyObjectProperty<Vault> vault;
private final FxApplicationWindows appWindows;
private final VaultOptionsComponent.Factory vaultOptionsWindow;
private final KeychainManager keychain;
private final Stage mainWindow;
private final ObservableValue<Boolean> passwordSaved;
@@ -30,13 +29,11 @@ public class VaultDetailLockedController implements FxController {
this.vault = vault;
this.appWindows = appWindows;
this.vaultOptionsWindow = vaultOptionsWindow;
this.keychain = keychain;
this.mainWindow = mainWindow;
if (keychain.isSupported() && !keychain.isLocked()) {
this.passwordSaved = vault.flatMap(v -> keychain.getPassphraseStoredProperty(v.getId())).orElse(false);
} else {
this.passwordSaved = new SimpleBooleanProperty(false);
}
this.passwordSaved = Bindings.createBooleanBinding(() -> {
var v = vault.get();
return v != null && keychain.getPassphraseStoredProperty(v.getId()).getValue();
}, vault, keychain.getKeychainImplementation());
}
@FXML

View File

@@ -13,16 +13,10 @@ 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.geometry.Insets;
import javafx.scene.layout.HBox;
// unscoped because each cell needs its own controller
public class VaultListCellController implements FxController {
private static final Insets COMPACT_INSETS = new Insets(6, 12, 6, 12);
private static final Insets DEFAULT_INSETS = new Insets(12);
private final ObjectProperty<Vault> vault = new SimpleObjectProperty<>();
private final ObservableValue<FontAwesome5Icon> glyph;
private final ObservableValue<Boolean> compactMode;
@@ -31,8 +25,6 @@ public class VaultListCellController implements FxController {
/* FXML */
public FontAwesome5IconView vaultStateView;
@FXML
public HBox vaultListCell;
@Inject
VaultListCellController(Settings settings) {
@@ -45,7 +37,6 @@ public class VaultListCellController implements FxController {
.onCondition(vault.flatMap(Vault::stateProperty).map(VaultState.Value.PROCESSING::equals).orElse(false)) //
.afterStop(() -> vaultStateView.setRotate(0)) //
.build();
this.vaultListCell.paddingProperty().bind(compactMode.map(c -> c ? COMPACT_INSETS : DEFAULT_INSETS));
}
// TODO deduplicate w/ VaultDetailController

View File

@@ -16,7 +16,7 @@ import javafx.fxml.FXML;
public class WelcomeController implements FxController {
private static final Logger LOG = LoggerFactory.getLogger(WelcomeController.class);
private static final String GETTING_STARTED_URI = "https://docs.cryptomator.org/desktop/getting-started/";
private static final String GETTING_STARTED_URI = "https://docs.cryptomator.org/en/1.7/desktop/getting-started/";
private final Application application;
private final BooleanBinding noVaultPresent;

View File

@@ -10,7 +10,7 @@ import javafx.stage.Stage;
public class MigrationImpossibleController implements FxController {
private static final String HELP_URI = "https://docs.cryptomator.org/help/manual-migration/";
private static final String HELP_URI = "https://docs.cryptomator.org/en/1.7/help/manual-migration/";
private final Application application;
private final Stage window;

View File

@@ -1,10 +1,14 @@
package org.cryptomator.ui.preferences;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.Environment;
import org.cryptomator.common.Passphrase;
import org.cryptomator.common.keychain.KeychainManager;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.integrations.autostart.AutoStartProvider;
import org.cryptomator.integrations.autostart.ToggleAutoStartFailedException;
import org.cryptomator.integrations.common.NamedServiceProvider;
import org.cryptomator.integrations.keychain.KeychainAccessException;
import org.cryptomator.integrations.keychain.KeychainAccessProvider;
import org.cryptomator.integrations.quickaccess.QuickAccessService;
import org.cryptomator.ui.common.FxController;
@@ -14,6 +18,7 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javafx.application.Application;
import javafx.beans.Observable;
import javafx.beans.binding.Bindings;
import javafx.fxml.FXML;
import javafx.scene.control.CheckBox;
@@ -36,6 +41,7 @@ public class GeneralPreferencesController implements FxController {
private final Application application;
private final Environment environment;
private final List<KeychainAccessProvider> keychainAccessProviders;
private final KeychainManager keychain;
private final FxApplicationWindows appWindows;
public CheckBox useKeychainCheckbox;
public ChoiceBox<KeychainAccessProvider> keychainBackendChoiceBox;
@@ -48,11 +54,12 @@ public class GeneralPreferencesController implements FxController {
public ToggleGroup nodeOrientation;
@Inject
GeneralPreferencesController(@PreferencesWindow Stage window, Settings settings, Optional<AutoStartProvider> autoStartProvider, List<KeychainAccessProvider> keychainAccessProviders, Application application, Environment environment, FxApplicationWindows appWindows) {
GeneralPreferencesController(@PreferencesWindow Stage window, Settings settings, Optional<AutoStartProvider> autoStartProvider, List<KeychainAccessProvider> keychainAccessProviders, KeychainManager keychain, Application application, Environment environment, FxApplicationWindows appWindows) {
this.window = window;
this.settings = settings;
this.autoStartProvider = autoStartProvider;
this.keychainAccessProviders = keychainAccessProviders;
this.keychain = keychain;
this.quickAccessServices = QuickAccessService.get().toList();
this.application = application;
this.environment = environment;
@@ -73,6 +80,7 @@ public class GeneralPreferencesController implements FxController {
Bindings.bindBidirectional(settings.keychainProvider, keychainBackendChoiceBox.valueProperty(), keychainSettingsConverter);
useKeychainCheckbox.selectedProperty().bindBidirectional(settings.useKeychain);
keychainBackendChoiceBox.disableProperty().bind(useKeychainCheckbox.selectedProperty().not());
keychainBackendChoiceBox.valueProperty().addListener(this::migrateKeychainEntriesOnMac);
useQuickAccessCheckbox.selectedProperty().bindBidirectional(settings.useQuickAccess);
var quickAccessSettingsConverter = new ServiceToSettingsConverter<>(quickAccessServices);
@@ -83,6 +91,35 @@ public class GeneralPreferencesController implements FxController {
quickAccessServiceChoiceBox.disableProperty().bind(useQuickAccessCheckbox.selectedProperty().not());
}
public void migrateKeychainEntriesOnMac(Observable observable) {
if (!SystemUtils.IS_OS_MAC) {
return;
}
var provider = keychainBackendChoiceBox.getSelectionModel().getSelectedItem();
var providerId = "org.cryptomator.macos.keychain.MacSystemKeychainAccess";
var isSystemKeychain = provider.getClass().getName().equals(providerId);
List<String> vaults = settings.directories.stream()
.map(vault -> vault.id)
.toList();
if (!vaults.isEmpty()) {
LOG.info("Migrating keychain entries for vaults: {}", vaults);
}
for (String vaultId :vaults) {
try {
if (keychain.isPassphraseStored(vaultId)) {
var passphrase = keychain.loadPassphrase(vaultId);
keychain.deletePassphrase(vaultId);
keychain.storePassphrase(vaultId, vaultId, new Passphrase(passphrase), !isSystemKeychain);
}
} catch (KeychainAccessException e) {
LOG.error("Failed to migrate keychain entries.", e);
}
}
}
public boolean isAutoStartSupported() {
return autoStartProvider.isPresent();
}

View File

@@ -22,7 +22,7 @@ import java.util.ResourceBundle;
@PreferencesScoped
public class VolumePreferencesController implements FxController {
public static final String DOCS_MOUNTING_URL = "https://docs.cryptomator.org/desktop/volume-type/";
public static final String DOCS_MOUNTING_URL = "https://docs.cryptomator.org/en/1.7/desktop/volume-type/";
public static final int MIN_PORT = 1024;
public static final int MAX_PORT = 65535;

View File

@@ -10,7 +10,6 @@ import org.cryptomator.integrations.mount.MountFailedException;
import org.cryptomator.ui.common.FxmlFile;
import org.cryptomator.ui.common.FxmlScene;
import org.cryptomator.ui.common.VaultService;
import org.cryptomator.ui.dialogs.Dialogs;
import org.cryptomator.ui.fxapp.FxApplicationWindows;
import org.cryptomator.ui.fxapp.PrimaryStage;
import org.cryptomator.ui.keyloading.KeyLoadingStrategy;
@@ -26,8 +25,6 @@ import javafx.scene.Scene;
import javafx.stage.Screen;
import javafx.stage.Stage;
import java.io.IOException;
import java.nio.file.ReadOnlyFileSystemException;
import java.util.concurrent.TimeUnit;
/**
* A multi-step task that consists of background activities as well as user interaction.
@@ -49,7 +46,6 @@ public class UnlockWorkflow extends Task<Void> {
private final FxApplicationWindows appWindows;
private final KeyLoadingStrategy keyLoadingStrategy;
private final ObjectProperty<IllegalMountPointException> illegalMountPointException;
private final Dialogs dialogs;
@Inject
UnlockWorkflow(@PrimaryStage Stage mainWindow, //
@@ -61,8 +57,7 @@ public class UnlockWorkflow extends Task<Void> {
@FxmlScene(FxmlFile.UNLOCK_REQUIRES_RESTART) Lazy<Scene> restartRequiredScene, //
FxApplicationWindows appWindows, //
@UnlockWindow KeyLoadingStrategy keyLoadingStrategy, //
@UnlockWindow ObjectProperty<IllegalMountPointException> illegalMountPointException, //
Dialogs dialogs) {
@UnlockWindow ObjectProperty<IllegalMountPointException> illegalMountPointException) {
this.mainWindow = mainWindow;
this.window = window;
this.vault = vault;
@@ -73,7 +68,6 @@ public class UnlockWorkflow extends Task<Void> {
this.appWindows = appWindows;
this.keyLoadingStrategy = keyLoadingStrategy;
this.illegalMountPointException = illegalMountPointException;
this.dialogs = dialogs;
}
@Override
@@ -150,36 +144,11 @@ public class UnlockWorkflow extends Task<Void> {
switch (throwable) {
case IllegalMountPointException e -> handleIllegalMountPointError(e);
case ConflictingMountServiceException _ -> handleConflictingMountServiceException();
case ReadOnlyFileSystemException _ -> handleReadOnlyFileSystem();
default -> handleGenericError(throwable);
}
vault.stateProperty().transition(VaultState.Value.PROCESSING, VaultState.Value.LOCKED);
}
private void handleReadOnlyFileSystem() {
var readOnlyDialog = dialogs.prepareRetryIfReadonlyDialog(mainWindow, stage -> {
stage.close();
this.retry();
}).build();
Platform.runLater(readOnlyDialog::showAndWait);
}
private void retry() {
try {
vault.getVaultSettings().usesReadOnlyMode.set(true);
var isLocked = vault.stateProperty().awaitState(VaultState.Value.LOCKED, 5, TimeUnit.SECONDS);
if (!isLocked) {
LOG.error("Vault did not changed to LOCKED state within 5 seconds. Aborting unlock retry.");
} else {
appWindows.startUnlockWorkflow(vault, mainWindow);
}
} catch (InterruptedException e) {
LOG.error("Waiting for LOCKED vault state was interrupted. Aborting unlock retry.", e);
Thread.currentThread().interrupt();
}
}
@Override
protected void cancelled() {
LOG.debug("Unlock of '{}' canceled.", vault.getDisplayName());

View File

@@ -17,8 +17,6 @@ import org.cryptomator.ui.preferences.VolumePreferencesController;
import javax.inject.Inject;
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
import javafx.beans.value.ObservableBooleanValue;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
@@ -52,6 +50,7 @@ public class MountOptionsController implements FxController {
private final ObservableValue<String> defaultMountFlags;
private final ObservableValue<Boolean> mountpointDirSupported;
private final ObservableValue<Boolean> mountpointDriveLetterSupported;
private final ObservableValue<Boolean> readOnlySupported;
private final ObservableValue<Boolean> mountFlagsSupported;
private final ObservableValue<Boolean> defaultMountServiceSelected;
private final ObservableValue<String> directoryPath;
@@ -61,7 +60,6 @@ public class MountOptionsController implements FxController {
private final ObservableValue<MountService> selectedMountService;
private final ObservableValue<Boolean> selectedMountServiceRequiresRestart;
private final ObservableValue<Boolean> loopbackPortChangeable;
private final ObservableBooleanValue readOnlyOptionAllowed;
//-- FXML objects --
@@ -110,10 +108,10 @@ public class MountOptionsController implements FxController {
});
this.mountFlagsSupported = selectedMountService.map(s -> s.hasCapability(MountCapability.MOUNT_FLAGS));
this.defaultMountServiceSelected = ObservableUtil.mapWithDefault(vaultSettings.mountService, _ -> false, true);
this.readOnlySupported = selectedMountService.map(s -> s.hasCapability(MountCapability.READ_ONLY));
this.mountpointDirSupported = selectedMountService.map(s -> s.hasCapability(MountCapability.MOUNT_TO_EXISTING_DIR) || s.hasCapability(MountCapability.MOUNT_WITHIN_EXISTING_PARENT));
this.mountpointDriveLetterSupported = selectedMountService.map(s -> s.hasCapability(MountCapability.MOUNT_AS_DRIVE_LETTER));
this.loopbackPortChangeable = selectedMountService.map(s -> s.hasCapability(MountCapability.LOOPBACK_PORT) && vaultSettings.mountService.getValue() != null);
this.readOnlyOptionAllowed = BooleanBinding.booleanExpression(selectedMountService.map(s -> s.hasCapability(MountCapability.READ_ONLY))).or(vaultSettings.usesReadOnlyMode);
}
private MountService reselectMountService() {
@@ -347,12 +345,12 @@ public class MountOptionsController implements FxController {
return mountpointDriveLetterSupported.getValue();
}
public ObservableValue<Boolean> readOnlyOptionAllowedProperty() {
return readOnlyOptionAllowed;
public ObservableValue<Boolean> readOnlySupportedProperty() {
return readOnlySupported;
}
public boolean isReadOnlyOptionAllowed() {
return readOnlyOptionAllowed.getValue();
public boolean isReadOnlySupported() {
return readOnlySupported.getValue();
}
public ObservableValue<String> directoryPathProperty() {

View File

@@ -15,7 +15,7 @@ import java.io.UncheckedIOException;
@WrongFileAlertScoped
public class WrongFileAlertController implements FxController {
private static final String DOCUMENTATION_URI = "https://docs.cryptomator.org/desktop/accessing-vaults/";
private static final String DOCUMENTATION_URI = "https://docs.cryptomator.org/en/1.7/desktop/accessing-vaults/";
private final Application app;
private final Stage window;

View File

@@ -22,7 +22,7 @@
</ImageView>
<VBox spacing="3" HBox.hgrow="ALWAYS" alignment="CENTER_LEFT">
<FormattedLabel styleClass="label-extra-large" format="Cryptomator %s" arg1="${controller.fullApplicationVersion}"/>
<Label text="© 2016 2025 Skymatic GmbH"/>
<Label text="© 2016 2024 Skymatic GmbH"/>
</VBox>
</HBox>

View File

@@ -1,19 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Tooltip?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<HBox xmlns:fx="http://javafx.com/fxml"
xmlns="http://javafx.com/javafx"
fx:id="vaultListCell"
fx:controller="org.cryptomator.ui.mainwindow.VaultListCellController"
prefHeight="60"
prefWidth="200"
spacing="12"
alignment="CENTER_LEFT">
<!-- Remark Check the containing list view for a fixed cell size before editing height properties -->
<padding>
<Insets topRightBottomLeft="12"/>
</padding>
<children>
<VBox alignment="CENTER" minWidth="20">
<FontAwesome5IconView fx:id="vaultStateView" glyph="${controller.glyph}" HBox.hgrow="NEVER" glyphSize="16"/>

View File

@@ -54,7 +54,7 @@
<Button text="%generic.button.apply" fx:id="vaultLoopbackPortApplyButton" onAction="#doChangeLoopbackPort"/>
</HBox>
<CheckBox fx:id="readOnlyCheckbox" text="%vaultOptions.mount.readonly" visible="${controller.readOnlyOptionAllowed}" managed="${controller.readOnlyOptionAllowed}"/>
<CheckBox fx:id="readOnlyCheckbox" text="%vaultOptions.mount.readonly" visible="${controller.readOnlySupported}" managed="${controller.readOnlySupported}"/>
<VBox visible="${controller.mountFlagsSupported}" managed="${controller.mountFlagsSupported}">
<CheckBox fx:id="customMountFlagsCheckbox" text="%vaultOptions.mount.customMountFlags" onAction="#toggleUseCustomMountFlags"/>

View File

@@ -107,7 +107,6 @@ addvaultwizard.success.unlockNow=Unlock Now
removeVault.title=Remove "%s"
removeVault.message=Remove vault?
removeVault.description=This will only make Cryptomator forget about this vault. You can add it again. No encrypted files will be deleted from your hard drive.
removeVault.confirmBtn=Remove Vault
# Change Password
changepassword.title=Change Password
@@ -178,7 +177,7 @@ hub.registerFailed.description.generic=An error was thrown in the registration p
hub.registerFailed.description.deviceAlreadyExists=This device is already registered for a different user. Try to change the user account or use a different device.
### Unauthorized
hub.unauthorized.message=Access denied
hub.unauthorized.description=You are not authorized to open this vault. Contact the vault's owner to request access.
hub.unauthorized.description=Your device has not yet been authorized to access this vault. Ask the vault owner to authorize it.
### Requires Account Initialization
hub.requireAccountInit.message=Action required
hub.requireAccountInit.description.0=To proceed, please complete the steps required in your
@@ -554,12 +553,6 @@ dokanySupportEnd.message=Support end for Dokany
dokanySupportEnd.description=The volume type Dokany is no longer supported by Cryptomator. Your settings are adjusted to use the default volume type now. You can view the default type in the preferences.
dokanySupportEnd.preferencesBtn=Open Preferences
#Retry If Readonly
retryIfReadonly.title=Restricted Vault Access
retryIfReadonly.message=No write access to vault directory
retryIfReadonly.description=Cryptomator cannot write to the vault directory. You can change the vault to be read-only and try again. This option can be disabled in the vault options.
retryIfReadonly.retry=Change and Retry
# Share Vault
shareVault.title=Share Vault
shareVault.message=Would you like to share your vault with others?

View File

@@ -118,6 +118,4 @@
#Dokany Support End
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=تم النسخ!
generic.button.done=تم
generic.button.next=التالي
generic.button.print=طباعة
generic.button.remove=حذف
# Error
error.message=حدث خطأ ما
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=افتح الان
removeVault.title=احذف الحافظة
removeVault.message=حذف المخزن؟
removeVault.description=سيؤدي هذا إلى نسيان Cryptomator لهذا المخزن فقط. يمكنك إضافته مرة أخرى لاحقاً. لن يتم حذف أي من الملفات المشفرة من القرص الصلب الخاص بك.
removeVault.confirmBtn=احذف الحافظة
# Change Password
changepassword.title=تغيير كلمة المرور
@@ -176,6 +176,7 @@ hub.registerFailed.description.generic=حدث خطأ في عملية تسجيل
hub.registerFailed.description.deviceAlreadyExists=هذا الجهاز مسجل لمستخدم مختلف بالفعل. حاول تغيير حساب المستخدم أو استخدام جهاز مختلف.
### Unauthorized
hub.unauthorized.message=تم رفض الوصول
hub.unauthorized.description=لم يتم بعد منح الإذن لجهازك بالوصول إلى هذا المخزن. اطلب من مالك المخزن أن يأذن بذلك.
### Requires Account Initialization
hub.requireAccountInit.message=مطلوب اتخاذ إجراء
hub.requireAccountInit.description.0=للمتابعة، يرجى إكمال الخطوات المطلوبة في
@@ -286,7 +287,6 @@ preferences.general.debugLogging=تمكين سجلات التصحيح
preferences.general.debugDirectory=عرض ملفات السجل
preferences.general.autoStart=تشغيل Cryptomator عند بدء تشغيل النظام
preferences.general.keychainBackend=تخزين كلمات المرور مع
preferences.general.quickAccessService=إضافة الخزانات المفتوحة إلى منطقة الوصول السريع
## Interface
preferences.interface=الواجهة
preferences.interface.theme=الشكل والمظهر
@@ -300,7 +300,6 @@ preferences.interface.interfaceOrientation=اتجاه الواجهة
preferences.interface.interfaceOrientation.ltr=من اليسار إلى اليمين
preferences.interface.interfaceOrientation.rtl=من اليمين إلى اليسار
preferences.interface.showTrayIcon=إظهار أيقونة اللوحة (يتطلب إعادة تشغيل)
preferences.interface.compactMode=تمكين قائمة الخزنة المدمجة
## Volume
preferences.volume=القرص الإفتراضي
preferences.volume.type=نوع القرص الافتراضي
@@ -334,14 +333,12 @@ preferences.contribute.registeredFor=شهادة الداعم مسجلة لـ %s
preferences.contribute.noCertificate=ادعم Cryptomator واحصل على شهادة الداعم. إنها مثل مفتاح الترخيص لكن للأشخاص الرائعين الذين يستخدمون البرامج المجانية ؛-)
preferences.contribute.getCertificate=ليس لديك واحدة بعد؟ تعلم كيف يمكنك الحصول عليها.
preferences.contribute.promptText=قم بلصق رمز شهادة الداعم هنا
preferences.contribute.thankYou=نشكرك على دعمك لتطوير Cryptomator مفتوح المصدر!
preferences.contribute.donate=تبرع
preferences.contribute.sponsor=الراعي
### Remove License Key Dialog
removeCert.title=إزالة الشهادة
removeCert.message=إزالة شهادة الداعم؟
removeCert.description=الميزات الأساسية لـ Cryptomator غير متأثرة بهذا. لا يتم تقييد الوصول إلى خزاناتك ولا يتم تخفيض مستوى الأمان.
removeCert.confirmBtn=حذف
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -391,11 +388,7 @@ main.vaultlist.contextMenu.unlock=فتح…
main.vaultlist.contextMenu.unlockNow=افتح الان
main.vaultlist.contextMenu.vaultoptions=إظهار خيارات المخزن
main.vaultlist.contextMenu.reveal=اظهار القرص
main.vaultlist.addVaultBtn.menuItemNew=إنشاء مخزن جديد...
main.vaultlist.addVaultBtn.menuItemExisting=افتح مخزن موجود...
##Notificaition
main.notification.updateAvailable=هناك تحديث متاح.
main.notification.support=دعم Cryptomator.
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=شكرا لاختيار Cryptomator لحماية ملفاتك. إذا كنت بحاجة إلى أية مساعدة، تحقق من دليل وتعليمات الإستخدام:
@@ -551,8 +544,6 @@ dokanySupportEnd.message=انتهاء الدعم لـDokany
dokanySupportEnd.description=نوع وحدة التخزين Dokany لم يعد مدعوماً من قبل Cryptomator. تم تعديل إعداداتك لاستخدام نوع وحدة التخزين الافتراضي الآن. يمكنك عرض النوع الافتراضي في التفضيلات.
dokanySupportEnd.preferencesBtn=فتح التفضيلات
#Retry If Readonly
# Share Vault
shareVault.title=مشاركة الخزانة
shareVault.message=هل ترغب في مشاركة خزانتك مع الآخرين؟

View File

@@ -13,7 +13,6 @@ generic.button.copied=Күсермә алынды!
generic.button.done=Тамам
generic.button.next=Киләһе
generic.button.print=Баҫтыр
generic.button.remove=Алып ташлау
# Error
error.message=Хата килеп сыҡты
@@ -105,6 +104,7 @@ addvaultwizard.success.unlockNow=Хәҙер бикте ас
removeVault.title="%s" һаҡлағысын алып ташла
removeVault.message=Һаҡлағысты алып ташларғамы?
removeVault.description=Cryptomator был һаҡлағысты ғына онотасаҡ. Һеҙ уны яңынан өҫтәй алаһығыҙ. Ҡаты дисктан шифрланған файлдар юйылмаясаҡ.
removeVault.confirmBtn=Һаҡлағысты алып ташла
# Change Password
changepassword.title=Серһүҙҙе үҙгәртеү
@@ -164,6 +164,7 @@ hub.registerSuccess.unlockBtn=Биген ас
### Registration Failed
### Unauthorized
hub.unauthorized.message=Инеү кире ҡағылды
hub.unauthorized.description=Һеҙҙең йыһаз әлегә был һаҡлағысҡа инеү хоҡуғына эйә түгел. Һаҡлағыс хужаһынан рөхсәт һорағыҙ.
### Requires Account Initialization
hub.requireAccountInit.message=Эш-хәрәкәт кәрәкле
hub.requireAccountInit.description.0=Дауам итер өсөн, кәрәкле аҙымдар тамамланырға тейеш урын:
@@ -315,6 +316,7 @@ preferences.contribute.getCertificate=Юҡ мы әллә? Уны нисек ал
preferences.contribute.promptText=Ярҙамсы сертификатын бында йәбештерегеҙ
### Remove License Key Dialog
removeCert.confirmBtn=Алып ташлау
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -515,6 +517,4 @@ updateReminder.yesAutomatically=Эйе, автоматик рәүештә
#Dokany Support End
dokanySupportEnd.preferencesBtn=Көйләүҙәрҙе ас
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=Скапіявана!
generic.button.done=Файна
generic.button.next=Далей
generic.button.print=Друкаваць
generic.button.remove=Выдаліць
# Error
error.message=Адбылася памылка
@@ -105,6 +104,7 @@ addvaultwizard.success.unlockNow=Разамкнуць зараз
removeVault.title=Выдаліць "%s"
removeVault.message=Ці выдаліць скарбніцу?
removeVault.description=Гэта прывядзе толькі да таго, што Cryptomator забудзецца на гэтую скрынку. Ты зможаш дадаць яе пазней ізноў. Аніякія зашыфраваныя файлы з тайго жорсткага дыску не выдаляцьмуцца.
removeVault.confirmBtn=Выдаліць скарбніцу
# Change Password
changepassword.title=Змяніць пароль
@@ -157,6 +157,7 @@ hub.registerSuccess.unlockBtn=Адамкнуць
### Registration Failed
### Unauthorized
hub.unauthorized.message=Адмова ў доступе
hub.unauthorized.description=Тваёй прыладзе ў дадзены момант не дазволена мець доступ да гэтай скрабніцы. Запытайся ўладальніка скрабніцы за дазволам.
### Requires Account Initialization
### License Exceeded
hub.invalidLicense.message=Несапраўдная ліцэнзія Hub
@@ -302,6 +303,7 @@ preferences.contribute.getCertificate=Яшчэ ня маеш такога? Да
preferences.contribute.promptText=Устаў код сэртыфікату ахвяравальніка сюды
### Remove License Key Dialog
removeCert.confirmBtn=Выдаліць
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -495,6 +497,4 @@ updateReminder.yesAutomatically=Так, аўтаматычна
#Dokany Support End
dokanySupportEnd.preferencesBtn=Адчыніць налады
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=Копирано!
generic.button.done=Готово
generic.button.next=Напред
generic.button.print=Отпечатване
generic.button.remove=Премахване
# Error
error.message=Възникна грешка
@@ -105,6 +104,7 @@ addvaultwizard.success.unlockNow=Отключване сега
removeVault.title=Премахване на „%s“
removeVault.message=Премахване на хранилище?
removeVault.description=По този начин Криптоматор ще забрави за това хранилище. Можете да го добавите отново. Шифрованите файлове няма да бъдат премахнати от твърдия диск.
removeVault.confirmBtn=Премахване
# Change Password
changepassword.title=Промяна на парола
@@ -164,6 +164,7 @@ hub.registerSuccess.unlockBtn=Отключване
### Registration Failed
### Unauthorized
hub.unauthorized.message=Отказан достъп
hub.unauthorized.description=Устройството не е упълномощено за достъп до това хранилище. Поискайте достъп от собственика.
### Requires Account Initialization
hub.requireAccountInit.message=Необходимо е действие
hub.requireAccountInit.description.0=За да продължите завършете необходимите стъпки в
@@ -315,6 +316,7 @@ preferences.contribute.getCertificate=Все още нямате? Научете
preferences.contribute.promptText=Поставете тук кода на сертификата за дарение
### Remove License Key Dialog
removeCert.confirmBtn=Премахване
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -515,6 +517,4 @@ updateReminder.yesAutomatically=Да, автоматично
#Dokany Support End
dokanySupportEnd.preferencesBtn=Към настройките
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=কপি হয়েছে!
generic.button.done=সম্পন্ন হয়েছে
generic.button.next=পরবর্তী
generic.button.print=প্রিন্ট
generic.button.remove=বাতিল
# Error
error.message=ত্রুটি %s
@@ -128,6 +127,7 @@ lock.forced.retryBtn=পুনরায় চেষ্টা করুন
## Contribution
### Remove License Key Dialog
removeCert.confirmBtn=বাতিল
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -182,6 +182,4 @@ vaultOptions.mount.mountPoint.directoryPickerButton=নির্বাচন ক
#Dokany Support End
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=Kopirano!
generic.button.done=Gotovo
generic.button.next=Sljedeće
generic.button.print=Ispis
generic.button.remove=Ukloni
# Error
error.message=Došlo je do greške
@@ -79,6 +78,7 @@ addvaultwizard.success.unlockNow=Otključaj sada
# Remove Vault
removeVault.title=Ukloni Sef
removeVault.description=Ovo će samo natjerati Cryptomator da zaboravi na ovaj sef. Možete ga dodati ponovo kasnije. Nijedna enkriptovana datoteka neće se izbrisati s vašeg diska.
removeVault.confirmBtn=Ukloni Sef
# Change Password
changepassword.title=Promjeni lozinku
@@ -175,6 +175,7 @@ preferences.updates.updateAvailable=Dostupno ažuriranje na verziju %s.
## Contribution
### Remove License Key Dialog
removeCert.confirmBtn=Ukloni
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -318,6 +319,4 @@ quit.lockAndQuitBtn=Zaključaj i zatvori
#Dokany Support End
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=Copiat!
generic.button.done=Fet
generic.button.next=Següent
generic.button.print=Imprimeix
generic.button.remove=Elimina
# Error
error.message=S'ha produït un error
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Desbloqueja ara
removeVault.title=Elimina la caixa forta
removeVault.message=Voleu eliminar la caixa forta?
removeVault.description=Cryptomator simplement deixarà de mostrar la caixa forta. Podeu tornar a afegir-la més endavant. Cap fitxer xifrat serà eliminat del disc dur.
removeVault.confirmBtn=Elimina la caixa forta
# Change Password
changepassword.title=Canvia la contrasenya
@@ -176,6 +176,7 @@ hub.registerFailed.description.generic=S'ha produït un error en el procés de r
hub.registerFailed.description.deviceAlreadyExists=El dispositiu ja ha estat registrat per un altre usuari. Mireu de canviar el compte d'usuari o feu servir un dispositiu diferent.
### Unauthorized
hub.unauthorized.message=Accés denegat
hub.unauthorized.description=El vostre dispositiu no ha estat encara autoritzat a accedir a aquesta caixa forta. Demaneu autorització al propietari.
### Requires Account Initialization
hub.requireAccountInit.message=Acció necessària
hub.requireAccountInit.description.0=Per a continuar, si us plau, seguiu els passos necessaris en el vostre
@@ -286,7 +287,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.quickAccessService=Afegeix caixes fortes desblocades a l'àrea d'accés directe
## Interface
preferences.interface=Interfície
preferences.interface.theme=Aparença
@@ -300,7 +300,6 @@ preferences.interface.interfaceOrientation=Orientació de la interfície
preferences.interface.interfaceOrientation.ltr=Esquerra a dreta
preferences.interface.interfaceOrientation.rtl=Dreta a esquerra
preferences.interface.showTrayIcon=Mostra la icona en la barra (cal reiniciar)
preferences.interface.compactMode=Activa la llista compacta de caixes fortes
## Volume
preferences.volume=Unitat virtual
preferences.volume.type=Tipus de volum per defecte
@@ -320,13 +319,6 @@ preferences.updates.currentVersion=Versió actual: %s
preferences.updates.autoUpdateCheck=Comprova automàticament si hi ha actualitzacions
preferences.updates.checkNowBtn=Comprova-ho ara
preferences.updates.updateAvailable=L'actualització a la versió %s es troba disponible.
preferences.updates.lastUpdateCheck=Darrera comprovació: %s
preferences.updates.lastUpdateCheck.never=mai
preferences.updates.lastUpdateCheck.recently=recentment
preferences.updates.lastUpdateCheck.daysAgo=Fa %s dies
preferences.updates.lastUpdateCheck.hoursAgo=fa %s hores
preferences.updates.checkFailed=Ha fallat la cerca d'actualitzacions. Si us plau, comproveu la connexió a Internet o torneu a provar-ho més tard.
preferences.updates.upToDate=Cryptomator està actualitzat.
## Contribution
preferences.contribute=Doneu-nos suport
@@ -334,13 +326,9 @@ preferences.contribute.registeredFor=Certificat de col·laborador registrat per
preferences.contribute.noCertificate=Doneu suport a Cryptomator i rebeu un certificat de col·laborador. És com una clau de llicència però per a gent meravellosa que fa servir programari lliure. ;-)
preferences.contribute.getCertificate=Encara no en teniu cap? Sapigueu com aconseguir-ne un.
preferences.contribute.promptText=Enganxeu aquí el certificat de col·laborador
preferences.contribute.thankYou=Gràcies pel vostre suport al desenvolupament open-source de Cryptomator!
preferences.contribute.donate=Feu un donatiu
preferences.contribute.sponsor=Patrocinador
### Remove License Key Dialog
removeCert.title=Suprimeix certificat
removeCert.description=Les característiques principals de Cryptomator no es veuen afectades per això. Ni l'accés a les vostres caixes fortes s'ha restringit ni el nivell de seguretat ha estat rebaixat.
removeCert.confirmBtn=Elimina
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -390,11 +378,7 @@ main.vaultlist.contextMenu.unlock=Desbloca…
main.vaultlist.contextMenu.unlockNow=Desbloqueja ara
main.vaultlist.contextMenu.vaultoptions=Opcions de la caixa forta
main.vaultlist.contextMenu.reveal=Mostra la unitat
main.vaultlist.addVaultBtn.menuItemNew=Crea una nova caixa forta…
main.vaultlist.addVaultBtn.menuItemExisting=Obri una caixa forta existent...
##Notificaition
main.notification.updateAvailable=Hi ha una actualització disponible.
main.notification.support=Doneu suport a Cryptomator.
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Gràcies per escollir Cryptomator per protegir els vostres fitxers. Si vos cal ajuda, llegiu les nostres guies per donar els Primers passos:
@@ -547,8 +531,6 @@ updateReminder.yesAutomatically=Sí, automàticament
#Dokany Support End
dokanySupportEnd.preferencesBtn=Obrir les Preferències
#Retry If Readonly
# Share Vault
shareVault.title=Comparteix la caixa forta
shareVault.message=Voleu compartir la vostra caixa forta amb altres persones?

View File

@@ -13,7 +13,6 @@ generic.button.copied=Zkopírováno!
generic.button.done=Hotovo
generic.button.next=Další
generic.button.print=Tisk
generic.button.remove=Odstranit
# Error
error.message=Chyba %s
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Odemknout nyní
removeVault.title=Odstranit trezor
removeVault.message=Odstranit trezor?
removeVault.description=Toto jen umožní Cryptomatoru zapomenout tento trezor. Později jej můžete opět přidat. Žádné šifrované soubory nebudou z vašeho disku smazány.
removeVault.confirmBtn=Odstranit trezor
# Change Password
changepassword.title=Změnit heslo
@@ -137,7 +137,6 @@ unlock.success.revealBtn=Zobrazit jednotku
unlock.error.customPath.message=Nelze připojit trezor k vlastní cestě
unlock.error.customPath.description.notSupported=Pokud chcete pokračovat v používání vlastní cesty, přejděte do nastavení a vyberte typ hlasitosti, který ji podporuje. V opačném případě přejděte do možností trezoru a vyberte podporovaný přípojný bod.
unlock.error.customPath.description.notExists=Cesta k připojení neexistuje. Buď ji vytvořte ve vašem lokálním souborovém systému, nebo ji změňte v možnostech trezoru.
unlock.error.customPath.description.inUse=Označení úložiště nebo vlastní cesta "%s" se již používá.
unlock.error.restartRequired.message=Nelze odemknout trezor
unlock.error.restartRequired.description=Změňte typ svazku v možnostech trezoru nebo restartujte Cryptomator.
unlock.error.title=Odemknutí "%s" selhalo
@@ -172,6 +171,7 @@ hub.registerFailed.description.generic=Došlo k chybě v registračním procesu.
hub.registerFailed.description.deviceAlreadyExists=Toto zařízení je již registrováno pro jiného uživatele. Zkuste změnit uživatelský účet nebo použijte jiné zařízení.
### Unauthorized
hub.unauthorized.message=Přístup odepřen
hub.unauthorized.description=Vaše zařízení dosud nebylo oprávněno k přístupu k tomuto trezoru. Požádejte vlastníka trezoru, aby jej autorizoval.
### Requires Account Initialization
hub.requireAccountInit.message=Požadována akce
hub.requireAccountInit.description.0=Chcete-li pokračovat, vyplňte prosím požadované kroky ve vašem
@@ -315,6 +315,7 @@ preferences.contribute.getCertificate=Ještě žádný nemáte? Naučte se, jak
preferences.contribute.promptText=Sem vložte kód certifikátu podporovatele
### Remove License Key Dialog
removeCert.confirmBtn=Odstranit
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -515,8 +516,6 @@ dokanySupportEnd.title=Oznámení o zastaralosti
dokanySupportEnd.message=Konec podpory pro Dokany
dokanySupportEnd.preferencesBtn=Otevřít předvolby
#Retry If Readonly
# Share Vault
shareVault.title=Sdílet trezor
shareVault.message=Chcete sdílet svůj trezor s ostatními?

View File

@@ -13,7 +13,6 @@ generic.button.copied=Kopieret!
generic.button.done=Færdig
generic.button.next=Næste
generic.button.print=Print
generic.button.remove=Fjern
# Error
error.message=Der opstod en fejl
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Lås op nu
removeVault.title=Fjern "%s"
removeVault.message=Fjern boks?
removeVault.description=Dette får blot Cryptomator til at glemme boksen. Du kan tilføje den igen senere. Ingen krypterede filer bliver slettet fra harddisken.
removeVault.confirmBtn=Fjern boks
# Change Password
changepassword.title=Skift adgangskode
@@ -176,7 +176,7 @@ hub.registerFailed.description.generic=Der opstod en fejl i registreringsprocess
hub.registerFailed.description.deviceAlreadyExists=Denne enhed er allerede registreret af en anden bruger. Prøv at ændre brugerkontoen eller brug en anden enhed.
### Unauthorized
hub.unauthorized.message=Adgang nægtet
hub.unauthorized.description=Du har ikke tilladelse til at åbne denne boks. Kontant ejeren af boksen for at anmode om adgang.
hub.unauthorized.description=Din enhed er endnu ikke blevet godkendt til at få adgang til denne boks. Spørg boks-ejeren om godkendelse.
### Requires Account Initialization
hub.requireAccountInit.message=Handling påkrævet
hub.requireAccountInit.description.0=For at fortsætte, skal du fuldføre de nødvendige trin i din
@@ -287,7 +287,6 @@ preferences.general.debugLogging=Aktivér fejllogning
preferences.general.debugDirectory=Vis logfiler
preferences.general.autoStart=Start Cryptomator automatisk ved opstart
preferences.general.keychainBackend=Gem adgangskoder med
preferences.general.quickAccessService=Tilføj oplåste bokse til området hurtig adgang
## Interface
preferences.interface=Brugerflade
preferences.interface.theme=Udseende
@@ -320,7 +319,6 @@ preferences.updates.currentVersion=Nuværende version: %s
preferences.updates.autoUpdateCheck=Søg automatisk efter opdateringer
preferences.updates.checkNowBtn=Kontrollér nu
preferences.updates.updateAvailable=Opdatering til version %s er tilgængelig.
preferences.updates.checkFailed=Søgning efter opdateringer fejlede. Tjek din internetforbindelse eller forsøg igen senere.
## Contribution
preferences.contribute=Støt os
@@ -330,6 +328,7 @@ preferences.contribute.getCertificate=Har du ikke et allerede? Se her hvordan du
preferences.contribute.promptText=Indsæt koden for supporter-certifikatet her
### Remove License Key Dialog
removeCert.confirmBtn=Fjern
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -380,8 +379,6 @@ main.vaultlist.contextMenu.unlockNow=Lås op nu
main.vaultlist.contextMenu.vaultoptions=Vis boksindstillinger
main.vaultlist.contextMenu.reveal=Vis drev
##Notificaition
main.notification.updateAvailable=Opdatering er tilgængelig.
main.notification.support=Støt Cryptomator.
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Tak fordi du valgte Cryptomator til at beskytte dine filer. Hvis du har brug for hjælp, så tjek vores guider for at komme i gang:
@@ -534,8 +531,6 @@ updateReminder.yesAutomatically=Ja, automatisk
#Dokany Support End
dokanySupportEnd.preferencesBtn=Åbn Indstillinger
#Retry If Readonly
# Share Vault
shareVault.title=Del Boks
shareVault.message=Vil du dele din boks med andre?

View File

@@ -13,7 +13,6 @@ generic.button.copied=Kopiert!
generic.button.done=Fertig
generic.button.next=Weiter
generic.button.print=Drucken
generic.button.remove=Entfernen
# Error
error.message=Ein Fehler ist aufgetreten
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Jetzt entsperren
removeVault.title=„%s“ entfernen
removeVault.message=Tresor entfernen?
removeVault.description=Dieser Tresor wird nur aus der Tresorliste entfernt; du kannst ihn später jederzeit wieder hinzufügen. Es werden keine verschlüsselten Daten gelöscht.
removeVault.confirmBtn=Tresor entfernen
# Change Password
changepassword.title=Passwort ändern
@@ -176,6 +176,7 @@ hub.registerFailed.description.generic=Im Registrierungsprozess ist ein Fehler a
hub.registerFailed.description.deviceAlreadyExists=Dieses Gerät ist bereits für einen anderen Benutzer registriert. Ändere das Benutzerkonto oder verwende ein anderes Gerät.
### Unauthorized
hub.unauthorized.message=Zugriff verweigert
hub.unauthorized.description=Dein Gerät wurde noch nicht für den Zugriff auf diesen Tresor autorisiert. Bitte den Tresorbesitzer, dein Gerät zu autorisieren.
### Requires Account Initialization
hub.requireAccountInit.message=Aktion erforderlich
hub.requireAccountInit.description.0=Um fortzufahren, führe bitte die erforderlichen Schritte in deinem
@@ -244,7 +245,7 @@ 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 Integritätsprüfung in der Liste links aus.
health.check.detail.noSelectedCheck=Wähle für die Ergebnisse eine abgeschlossene Intregritätsprüfung in der Liste links aus.
health.check.detail.checkScheduled=Die Prüfung ist geplant.
health.check.detail.checkRunning=Die Prüfung läuft derzeit …
health.check.detail.checkSkipped=Die Prüfung wurde nicht zur Ausführung ausgewählt.
@@ -286,7 +287,7 @@ 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.quickAccessService=Entsperrte Tresore zum Schnellzugriff hinzufügen
preferences.general.quickAccessService=Die entsperrten Tresore zum Schnellzugriff hinzufügen
## Interface
preferences.interface=Benutzeroberfläche
preferences.interface.theme=Erscheinungsbild
@@ -300,7 +301,7 @@ preferences.interface.interfaceOrientation=Oberflächenausrichtung
preferences.interface.interfaceOrientation.ltr=Von links nach rechts
preferences.interface.interfaceOrientation.rtl=Von rechts nach links
preferences.interface.showTrayIcon=Symbol im Infobereich anzeigen (Neustart erforderlich)
preferences.interface.compactMode=Kompakte Tresorliste
preferences.interface.compactMode=Kompakte Tresoransicht einschalten
## Volume
preferences.volume=Virtuelles Laufwerk
preferences.volume.type=Standard-Laufwerkstyp
@@ -342,6 +343,7 @@ preferences.contribute.sponsor=Sponsern
removeCert.title=Zertifikat entfernen
removeCert.message=Supporter-Zertifikat entfernen?
removeCert.description=Die Kernfunktionen von Cryptomator sind davon nicht betroffen. Weder der Zugriff auf deine Tresore ist eingeschränkt, noch wird das Sicherheitsniveau verringert.
removeCert.confirmBtn=Entfernen
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -546,13 +548,11 @@ updateReminder.yesOnce=Ja, einmalig
updateReminder.yesAutomatically=Ja, automatisch
#Dokany Support End
dokanySupportEnd.title=Hinweis zur Ausmusterung
dokanySupportEnd.message=Supportende für Dokany
dokanySupportEnd.title=Hinweis: nicht mehr verwendet
dokanySupportEnd.message=Ende der Unterstützung für Dokany
dokanySupportEnd.description=Der Laufwerkstyp Dokany wird von Cryptomator nicht weiter unterstützt. Deine Einstellungen wurden angepasst, dass der Standard-Laufwerkstyp verwendet wird. Du kannst den Standardtyp in den Einstellungen anzeigen lassen.
dokanySupportEnd.preferencesBtn=Einstellungen öffnen
#Retry If Readonly
# Share Vault
shareVault.title=Tresor teilen
shareVault.message=Möchtest du deinen Tresor mit anderen teilen?

View File

@@ -13,7 +13,6 @@ generic.button.copied=Αντιγράφηκε!
generic.button.done=Κλείσιμο
generic.button.next=Επόμενο
generic.button.print=Εκτύπωση
generic.button.remove=Αφαίρεση
# Error
error.message=Παρουσιάστηκε σφάλμα
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Ξεκλείδωμα τώρα
removeVault.title=Διαγραφή "%s"
removeVault.message=Διαγραφή κρύπτης;
removeVault.description=Αυτό θα κάνει το Cryptomator να ξεχάσει αυτή την κρύπτη. Μπορείτε να την προσθέσετε ξανά. Κανένα κρυπτογραφημένο αρχείο δε θα διαγραφεί από τον σκληρό σας δίσκο.
removeVault.confirmBtn=Διαγραφή Κρύπτης
# Change Password
changepassword.title=Αλλαγή κωδικού πρόσβασης
@@ -176,7 +176,7 @@ hub.registerFailed.description.generic=Παρουσιάστηκε σφάλμα
hub.registerFailed.description.deviceAlreadyExists=Αυτή η συσκευή είναι ήδη εγγεγραμμένη για διαφορετικό χρήστη. Προσπαθήστε να αλλάξετε τον λογαριασμό χρήστη ή να χρησιμοποιήσετε διαφορετική συσκευή.
### Unauthorized
hub.unauthorized.message=Δεν επιτρέπεται η πρόσβαση
hub.unauthorized.description=Δεν είστε εξουσιοδοτημένοι να ανοίξετε αυτή την κρύπτη. Επικοινωνήστε με τον ιδιοκτήτη τς κρύπτης για να ζητήσετε πρόσβαση.
hub.unauthorized.description=Η συσκευή σας δεν έχει ακόμη εξουσιοδοτηθεί να έχει πρόσβαση σε αυτή την κρύπτη. Ζητήστε από τον κάτοχο της κρύπτης να την εξουσιοδοτήσει.
### Requires Account Initialization
hub.requireAccountInit.message=Απαιτείται ενέργεια
hub.requireAccountInit.description.0=Για να συνεχίσετε, παρακαλούμε ολοκληρώστε τα βήματα που απαιτούνται στο δικό σας
@@ -343,6 +343,7 @@ preferences.contribute.sponsor=Χορηγός
removeCert.title=Αφαίρεση Πιστοποιητικού
removeCert.message=Αφαίρεση πιστοποιητικού υποστηρικτή;
removeCert.description=Οι βασικές λειτουργίες του Cryptomator δεν επηρεάζονται από αυτό. Ούτε η πρόσβαση στις κρύπτες σας είναι περιορισμένη ούτε το επίπεδο ασφάλειας μειώνεται.
removeCert.confirmBtn=Αφαίρεση
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -552,12 +553,6 @@ dokanySupportEnd.message=Τέλος υποστήριξης για Dokany
dokanySupportEnd.description=Ο τύπος τόμου Dokany δεν υποστηρίζεται πλέον από το Cryptomator. Οι ρυθμίσεις σας έχουν προσαρμοστεί για να χρησιμοποιούν τον προεπιλεγμένο τύπο τόμου. Μπορείτε να δείτε τον προεπιλεγμένο τύπο στις προτιμήσεις.
dokanySupportEnd.preferencesBtn=Άνοιγμα Προτιμήσεων
#Retry If Readonly
retryIfReadonly.title=Περιορισμένη Πρόσβαση Κρύπτης
retryIfReadonly.message=Δεν υπάρχει πρόσβαση εγγραφής στον κατάλογο κρύπτης
retryIfReadonly.description=Το Cryptomator δεν μπορεί να γράψει στον κατάλογο κρύπτης. Μπορείτε να αλλάξετε την κρύπτη ώστε να είναι μόνο για ανάγνωση και να προσπαθήσετε ξανά. Αυτή η επιλογή μπορεί να απενεργοποιηθεί στις επιλογές κρύπτης.
retryIfReadonly.retry=Αλλαγή και Επανάληψη
# Share Vault
shareVault.title=Κοινή χρήση Κρύπτης
shareVault.message=Θα θέλατε να μοιραστείτε την κρύπτη σας με άλλους;

View File

@@ -0,0 +1,198 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=Apply
generic.button.back=Back
generic.button.cancel=Cancel
generic.button.change=Change
generic.button.choose=Choose…
generic.button.close=Close
generic.button.done=Done
generic.button.next=Next
# Error
# Defaults
# Tray Menu
traymenu.showMainWindow=Show
traymenu.showPreferencesWindow=Preferences
traymenu.quitApplication=Quit
traymenu.vault.unlock=Unlock
traymenu.vault.lock=Lock
traymenu.vault.reveal=Reveal
# Add Vault Wizard
addvaultwizard.title=Add Vault
## New
### Name
addvaultwizard.new.nameInstruction=Choose a name for the vault
addvaultwizard.new.namePrompt=Vault Name
### Location
addvaultwizard.new.locationInstruction=Where should Cryptomator store the encrypted files of your vault?
addvaultwizard.new.locationLabel=Storage location
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerButton=Choose…
addvaultwizard.new.directoryPickerTitle=Select Directory
### Expert Settings
### Password
addvaultwizard.new.createVaultBtn=Create Vault
### Information
## Existing
addvaultwizard.existing.chooseBtn=Choose…
## Success
addvaultwizard.success.nextStepsInstructions=Added vault "%s".\nYou need to unlock this vault to access or add contents. Alternatively you can unlock it at any later point in time.
addvaultwizard.success.unlockNow=Unlock Now
# Remove Vault
removeVault.confirmBtn=Remove Vault
# Change Password
changepassword.title=Change Password
changepassword.enterOldPassword=Enter the current password for "%s"
# Forget Password
forgetPassword.title=Forget Password
forgetPassword.confirmBtn=Forget Password
# Unlock
unlock.passwordPrompt=Enter password for "%s":
unlock.unlockBtn=Unlock
## Select
unlock.chooseMasterkey.filePickerTitle=Select Masterkey File
## Success
unlock.success.revealBtn=Reveal Drive
## Failure
## Hub
### Waiting
### Receive Key
### Register Device
### Register Device Legacy
### Registration Success
hub.registerSuccess.unlockBtn=Unlock
### Registration Failed
### Unauthorized
### Requires Account Initialization
### License Exceeded
# Lock
## Force
## Failure
# Migration
migration.title=Upgrade Vault
## Start
migration.start.header=Upgrade Vault
## Run
migration.run.enterPassword=Enter the password for "%s"
migration.run.startMigrationBtn=Migrate Vault
## Success
migration.success.nextStepsInstructions=Migrated "%s" successfully.\nYou can now unlock your vault.
migration.success.unlockNow=Unlock Now
## Missing file system capabilities
## Impossible
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Result view
## Fix Application
# Preferences
preferences.title=Preferences
## General
preferences.general=General
preferences.general.startHidden=Hide window when starting Cryptomator
preferences.general.debugLogging=Enable debug logging
## Interface
## Volume
preferences.volume=Virtual Drive
## Updates
preferences.updates=Updates
preferences.updates.currentVersion=Current Version: %s
preferences.updates.autoUpdateCheck=Check for updates automatically
preferences.updates.checkNowBtn=Check Now
preferences.updates.updateAvailable=Update to version %s available.
## Contribution
### Remove License Key Dialog
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
# Vault Statistics
## Read
## Write
## Accesses
# Main Window
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Click here to add a vault
main.vaultlist.contextMenu.lock=Lock
main.vaultlist.contextMenu.unlockNow=Unlock Now
main.vaultlist.contextMenu.reveal=Reveal Drive
##Notificaition
## Vault Detail
### Welcome
### Locked
main.vaultDetail.lockedStatus=LOCKED
main.vaultDetail.unlockNowBtn=Unlock Now
main.vaultDetail.optionsBtn=Vault Options
### Unlocked
main.vaultDetail.unlockedStatus=UNLOCKED
main.vaultDetail.accessLocation=Your vault's contents are accessible here:
main.vaultDetail.revealBtn=Reveal Drive
main.vaultDetail.lockBtn=Lock
main.vaultDetail.throughput.idle=idle
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Missing
### Needs Migration
main.vaultDetail.migrateButton=Upgrade Vault
### Error
# Wrong File Alert
# Vault Options
## General
vaultOptions.general=General
vaultOptions.general.vaultName=Vault Name
vaultOptions.general.actionAfterUnlock.reveal=Reveal Drive
## Mount
vaultOptions.mount=Mounting
vaultOptions.mount.mountPoint.directoryPickerButton=Choose…
## Master Key
vaultOptions.masterkey.changePasswordBtn=Change Password
## Hub
# Recovery Key
## Display Recovery Key
## Reset Password
### Enter Recovery Key
### Reset Password
### Recovery Key Password Reset Success
# Convert Vault
# New Password
passwordStrength.messageLabel.0=Very weak
passwordStrength.messageLabel.1=Weak
passwordStrength.messageLabel.2=Fair
passwordStrength.messageLabel.3=Strong
passwordStrength.messageLabel.4=Very strong
# Quit
# Forced Quit
# Update Reminder
#Dokany Support End
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=¡Copiado!
generic.button.done=Hecho
generic.button.next=Siguiente
generic.button.print=Imprimir
generic.button.remove=Eliminar
# Error
error.message=Ocurrió un error
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Desbloquear ahora
removeVault.title=Eliminar "%s"
removeVault.message=¿Eliminar bóveda?
removeVault.description=Esto sólo hará que Cryptomator olvide la bóveda. Se la puede añadir de nuevo más tarde. Los archivos cifrados no se eliminarán del disco duro.
removeVault.confirmBtn=Eliminar bóveda
# Change Password
changepassword.title=Cambiar contraseña
@@ -176,7 +176,7 @@ hub.registerFailed.description.generic=Ha ocurrido un error al intentar registra
hub.registerFailed.description.deviceAlreadyExists=Este dispositivo ya se ha registrado para otro usuario. Intente cambiar la cuenta de usuario o utilice un dispositivo diferente.
### Unauthorized
hub.unauthorized.message=Acceso denegado
hub.unauthorized.description=No tiene autorización para abrir esta bóveda. Contacta al propietario de la bóveda para solicitar acceso.
hub.unauthorized.description=Su dispositivo aún no ha sido autorizado para acceder a esta bóveda. Pídale al propietario de la bóveda que lo autorice.
### Requires Account Initialization
hub.requireAccountInit.message=Acción requerida
hub.requireAccountInit.description.0=Para continuar, por favor complete los pasos necesarios en su
@@ -343,6 +343,7 @@ preferences.contribute.sponsor=Patrocinador
removeCert.title=Eliminar Certificado
removeCert.message=¿Eliminar certificado de soporte?
removeCert.description=Las características principales de Cryptomator no se ven afectadas por esto. No se restringe el acceso a sus bóvedas ni se reduce el nivel de seguridad.
removeCert.confirmBtn=Eliminar
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -552,12 +553,6 @@ dokanySupportEnd.message=Fin de soporte para Dokany
dokanySupportEnd.description=El tipo de volumen Dokany ya no está soportado por Cryptomator. Su configuración se ajusta para utilizar el tipo de volumen predeterminado ahora. Puede ver el tipo predeterminado en las preferencias.
dokanySupportEnd.preferencesBtn=Abrir preferencias
#Retry If Readonly
retryIfReadonly.title=Acceso restringido a la Bóveda
retryIfReadonly.message=No tiene acceso de escritura al directorio de bóveda
retryIfReadonly.description=Cryptomator no puede escribir en el directorio de la bóveda. Puede cambiar la bóveda para que sea de solo lectura e inténtelo de nuevo. Esta opción puede desactivarse en las opciones de bóveda.
retryIfReadonly.retry=Cambiar y reintentar
# Share Vault
shareVault.title=Compartir bóveda
shareVault.message=¿Le gustaría compartir su bóveda con alguien más?

View File

@@ -13,7 +13,6 @@ generic.button.copied=کپی شد!
generic.button.done=انجام شده
generic.button.next=بعدی
generic.button.print=چاپ
generic.button.remove=حذف
# Error
error.message=خطایی رخ داده است
@@ -156,6 +155,7 @@ preferences.updates.upToDate=Cryptomator به روز می باشد.
## Contribution
### Remove License Key Dialog
removeCert.confirmBtn=حذف
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -210,6 +210,4 @@ vaultOptions.mount.mountPoint.directoryPickerButton=انتخاب کنید…
#Dokany Support End
#Retry If Readonly
# Share Vault

View File

@@ -2,10 +2,10 @@
# Generics
## Button
generic.button.apply=Käytä
generic.button.apply=Vahvista
generic.button.back=Takaisin
generic.button.cancel=Peruuta
generic.button.change=Vaihda
generic.button.change=Muuta
generic.button.choose=Valitse…
generic.button.close=Sulje
generic.button.copy=Kopioi
@@ -13,7 +13,6 @@ generic.button.copied=Kopioitu!
generic.button.done=Valmis
generic.button.next=Seuraava
generic.button.print=Tulosta
generic.button.remove=Poista
# Error
error.message=Tapahtui virhe
@@ -23,32 +22,27 @@ error.hyperlink.report=Ilmoita ongelmasta
error.technicalDetails=Tiedot:
error.existingSolutionDescription=Cryptomator ei odottanut tämän tapahtuvan. Mutta löysimme olemassa olevan ratkaisun tähän virheeseen. Ole hyvä ja katso seuraavaa linkkiä.
error.hyperlink.solution=Etsi ratkaisu
error.lookupPermissionMessage=Cryptomator voi etsiä ratkaisun tähän ongelmaan verkosta. Tämä lähettää pyynnön ongelmatietokannallemme IP-osoitteestasi.
error.dismiss=Ohita
error.lookUpSolution=Etsi ratkaisu
# Defaults
defaults.vault.vaultName=Holvi
defaults.vault.vaultName=Vault
# Tray Menu
traymenu.showMainWindow=Näytä
traymenu.showPreferencesWindow=Asetukset
traymenu.lockAllVaults=Lukitse kaikki
traymenu.lockAllVaults=Lukitse Kaikki
traymenu.quitApplication=Sulje
traymenu.vault.unlock=Avaa
traymenu.vault.lock=Lukitse
traymenu.vault.reveal=Paljasta
# Add Vault Wizard
addvaultwizard.title=Lisää holvi
addvaultwizard.title=Lisää Vault
## New
addvaultwizard.new.title=Lisää uusi holvi
### Name
addvaultwizard.new.nameInstruction=Valitse holvin nimi
addvaultwizard.new.namePrompt=Holvin nimi
addvaultwizard.new.nameInstruction=Anna uusi nimi Vaultille
addvaultwizard.new.namePrompt=Vault Nimi
### Location
addvaultwizard.new.locationInstruction=Missä Cryptomatorin tulisi säilyttää holvisi salattuja tiedostoja?
addvaultwizard.new.locationLoading=Etsitään paikallisesta tiedostojärjestelmästä pilvikansioita…
addvaultwizard.new.locationInstruction=Missä pitäisi Cryptomator tallentaa salattuja tiedostoja Vault?
addvaultwizard.new.locationLabel=Tallennustilan sijainti
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Oma sijainti
@@ -65,11 +59,6 @@ addvaultwizard.new.validCharacters.chars=Sanamerkit (e.g. a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Numerot
addvaultwizard.new.validCharacters.dashes=Hyphen (%s) tai alaviiva (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Ota lisäasetukset käyttöön
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Syötä arvo väliltä 36 ja 220 (oletus 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Avaa dokumentaatio lisätietoja varten.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Salattujen tiedostonimien enimmäispituus
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Kelvollinen
### Password
addvaultwizard.new.createVaultBtn=Luo Uusi Vault
addvaultwizard.new.generateRecoveryKeyChoice=Et voi käyttää tietojasi ilman salasanaasi. Haluatko palautusavaimen siltä varalta, että menetät salasanasi?
@@ -93,7 +82,6 @@ addvault.new.readme.accessLocation.2=Tämä on salatun holvisi tallennuskansio.
addvault.new.readme.accessLocation.3=Cryptomator salaa kaikki tänne siirtämäsi tiedostot. Voit työskennellä tässä kansiossa aivan samalla tavalla kuin muutenkin. Tämä on ainoastaan näkymä jossa salaus on purettu. Todellisuudessa kaikki tiedostot pysyvät salattuina aina.
addvault.new.readme.accessLocation.4=Voit halutessasi poistaa tämän tiedoston. Poistaminen ei vaikuta Cryptomatorin toimintaan.
## Existing
addvaultwizard.existing.title=Lisää olemassa oleva holvi
addvaultwizard.existing.instruction=Valitse olemassa olevan Cryptomator holvin "vault.cryptomator" -tiedosto. Mikäli "vault.cryptomator" -tiedostoa ei ole, valitse "masterkey.cryptomator" -tiedosto.
addvaultwizard.existing.chooseBtn=Valitse…
addvaultwizard.existing.filePickerTitle=Valitse Holvi -tiedosto
@@ -105,31 +93,32 @@ addvaultwizard.success.unlockNow=Avaa Nyt
# Remove Vault
removeVault.title=Poista "%s"
removeVault.message=Poistetaanko holvi?
removeVault.description=Tämä toiminto ainoastaan poistaa valitun holvin Cryptomatorin näkymästä. Voit lisätä sen uudelleen. Salattuja tiedostoja ei poisteta levyltäsi.
removeVault.description=Tämä toiminto ainoastaan poistaa valitun holvin Cryptomatorin näkymästä. Salattuja tiedostoja tai holvia itsessään ei poisteta.
removeVault.confirmBtn=Poista Holvi
# Change Password
changepassword.title=Vaihda salasana
changepassword.enterOldPassword=Kirjoita holvin "%s" nykyinen salasana
changepassword.enterOldPassword=Syötä "%s": n nykyinen salasana
changepassword.finalConfirmation=Ymmärrän, että tiedostojani ei voi palauttaa, mikäli unohdan salasanani.
# Forget Password
forgetPassword.title=Unohda salasana
forgetPassword.title=Unohda Salasana
forgetPassword.message=Unohda tallennetut salasanat?
forgetPassword.description=Tämä poistaa valitun holvin tallennetun salasanan järjestelmäsi avainrenkaasta.
forgetPassword.confirmBtn=Unohda salasana
forgetPassword.confirmBtn=Unohda Salasana
# Unlock
unlock.title=Avaa "%s"
unlock.passwordPrompt=Syötä holvin "%s" salasana:
unlock.passwordPrompt=Syötä salasana "%s":lle
unlock.savePassword=Muista salasana
unlock.unlockBtn=Avaa
## Select
unlock.chooseMasterkey.message=Masterkey-tiedostoa ei löydy
unlock.chooseMasterkey.description=Cryptomator ei paikantanut masterkey-tiedostoa holville "%s". Ole hyvä ja valitse tiedosto manuaalisesti.
unlock.chooseMasterkey.filePickerTitle=Valitse masterkey-tiedosto
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator masterkey
unlock.chooseMasterkey.message=Masterkey -tiedostoa ei löydy
unlock.chooseMasterkey.description=Cryptomator ei paikantanut masterkey -tiedostoa holville "%s". Ole hyvä ja valitse tiedosto manuaalisesti.
unlock.chooseMasterkey.filePickerTitle=Valitse Masterkey -tiedosto
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Masterkey
## Success
unlock.success.message=Avaus onnistui
unlock.success.message=Lukituksen purku onnistui
unlock.success.description="%s" holvin sisältö on nyt saatavilla sen hallinnointikohteessa.
unlock.success.rememberChoice=Muista valintani. Älä kysy uudelleen.
unlock.success.revealBtn=Paljasta Asema
@@ -137,14 +126,6 @@ unlock.success.revealBtn=Paljasta Asema
unlock.error.customPath.message=Holvia ei pystytty yhdistämään valittuun polkuun
unlock.error.customPath.description.notSupported=Mikäli haluat jatkaa mukautetun polun käyttöä, ole hyvä ja mene Asetuksiin ja valitse volyymityyppi mikä tukee sitä. Muussa tapauksessa avaa holvin asetukset ja valitse tuettu mukautettu polku.
unlock.error.customPath.description.notExists=Valitsemaasi mukautettua polkua ei ole olemassa. Voit joko luoda uuden polun tai muuttaa polkua holvisi asetuksissa.
unlock.error.customPath.description.inUse=Aseman kirjain tai mukautettu liitospolku "%s" on jo käytössä.
unlock.error.customPath.description.hideawayNotDir=Avaukseen käytettävää väliaikaista piilotettua tiedostoa "%3$s" ei voitu poistaa. Tarkista tiedosto ja poista se manuaalisesti.
unlock.error.customPath.description.couldNotBeCleaned=Holviasi ei voilu liittää polkuun "%s". Yritä uudelleen tai valitse toinen polku.
unlock.error.customPath.description.notEmptyDir=Mukautettu liitospolku "%s" ei ole tyhtjä kansio. Valitse tyhjä kansio ja yritä uudelleen.
unlock.error.customPath.description.generic=Olet valinnut mukautetun liitospolun holvillesi, mutta sen kanssa ilmeni ongelma: %2$s
unlock.error.restartRequired.message=Holvin avaus epäonnistui
unlock.error.restartRequired.description=Vaihda aseman tyyppiä holvin asetuksissa tai käynnistä Cryptomator uudelleen.
unlock.error.title="%s" avaaminen epäonnistui
## Hub
hub.noKeychain.message=Laitteen avainta ei löytynyt
hub.noKeychain.description=Hub-holvien purkamiseksi tarvitaan laiteavain joka on suojattu avainrenkaalla. Jatkaaksesi, kytke “%s” päälle ja valitse avainrengas asetuksista.
@@ -157,30 +138,15 @@ hub.auth.loginLink=Uudelleenohjaus epäonnistui? Avaa tästä manuaalisesti.
hub.receive.message=Odotetaan vastausta…
hub.receive.description=Cryptomator yhdistää Hub:iin. Ole hyvä ja odota.
### Register Device
hub.register.message=Uusi laite
hub.register.description=Tämä on ensimmäinen Hub-yhteys tästä laitteesta. Rekisteröi se käyttäen Account Keytäsi.
hub.register.nameLabel=Laitteen Nimi
hub.register.invalidAccountKeyLabel=Virheellinen Account Key
hub.register.registerBtn=Rekisteröidy
### Register Device Legacy
hub.register.legacy.occupiedMsg=Nimi on jo käytössä
hub.register.legacy.description=Tämä on ensimmäinen Hub-yhteys tästä laitteesta. Ole hyvä ja rekisteröi se.
### Registration Success
hub.registerSuccess.message=Laite rekisteröity
hub.registerSuccess.description=Laitteesi on rekisteröity onnistuneesti. Voit nyt avata holvin.
hub.registerSuccess.unlockBtn=Avaa
hub.registerSuccess.legacy.description=Käyttääksesi holvia, holvin omistajan on valtuutettava laitteesi.
### Registration Failed
hub.registerFailed.message=Laitteen rekisteröinti epäonnistui
hub.registerFailed.description.generic=Rekisteröinnissä tapahtui virhe. Löydät lisätietoja lokitiedostoista.
hub.registerFailed.description.deviceAlreadyExists=Tämä laite on jo rekisteröity toiselle käyttäjälle. Yritä vaihtaa käyttäjätiliä tai käytää toista laitetta.
### Unauthorized
hub.unauthorized.message=Pääsy estetty
hub.unauthorized.description=Laitteellasi ei ole pääsyvaltuutusta tähän holviin. Pyydä holvin omistajaa lisäämän valtuutus laitteellesi.
### Requires Account Initialization
hub.requireAccountInit.message=Toimia vaaditaan
hub.requireAccountInit.description.0=Jatkaaksesi, ole hyvä ja suorita tarvittavat toimenpiteet
hub.requireAccountInit.description.1=Hub käyttäjäprofiili
hub.requireAccountInit.description.2=.
### License Exceeded
hub.invalidLicense.message=Hub-lisenssi ei ole voimassa
hub.invalidLicense.description=Cryptomator Hub:illasi ei ole voimassa olevaa lisenssiä. Ole hyvä ja ilmoita Hubin järjestelmänvalvojalle lisenssin päivittämiseksi tai sen uusimiseksi.
@@ -228,335 +194,82 @@ migration.impossible.moreInfo=Varasto voidaan edelleen avata vanhemmalla versiol
## Start
health.title="%s" kuntotarkastus
health.intro.header=Kuntotarkastus
health.intro.text=Kuntotarkistus on kokoelma testejä, joilla havaitaan ja korjataan ongelmia holvissasi. Ole hyvä ja pidä mielessäsi:
health.intro.remarkSync=Varmista että kaikki laitteet ovat täysin synkronoitu, tämä ratkaisee useimmat ongelmat.
health.intro.remarkFix=Kaikkia ongelmia ei voida ratkaista.
health.intro.remarkBackup=Jos tiedot ovat korruptoituneita, vain varmuuskopiosta on apua.
health.intro.affirmation=Olen lukenut ja ymmärtänyt yllä mainitut huomiot
## Start Failure
health.fail.header=Virhe ladattaessa holvin asetuksia
health.fail.ioError=Asetustiedostoa lukiessa tapahtui virhe.
health.fail.parseError=Holvin asetuksia jäsentäessä tapahtui virhe.
health.fail.moreInfo=Lisätietoja
## Check Selection
health.checkList.description=Valitse testit vasemmalta luettelosta tai käytä alla olevia painikkeita.
health.checkList.selectAllButton=Valitse kaikki testit
health.checkList.deselectAllButton=Poista testivalinnat
health.check.runBatchBtn=Suorita valitut testit
## Detail view
health.check.detail.noSelectedCheck=Katsoaksesi tulokset, valitse suoritettu kuntotarkistus vasemmalta luettelosta.
health.check.detail.checkScheduled=Testi on ajoitettu.
health.check.detail.checkRunning=Testi on käynnissä…
health.check.detail.checkSkipped=Testiä ei valittu suoritettavaksi.
health.check.detail.checkFinished=Testi suoritettiin onnistuneesti.
health.check.detail.checkFinishedAndFound=Testi suorietttiin loppuun. Ole hyvä ja katso tulokset.
health.check.detail.checkFailed=Testi päättyi virheen vuoksi.
health.check.detail.checkCancelled=Testi peruutettiin.
health.check.detail.listFilters.label=Suodata
health.check.detail.fixAllSpecificBtn=Korjaa kaikki tyyppiä
health.check.exportBtn=Vie raportti
## Result view
health.result.severityFilter.all=Vakavuus - Kaikki
health.result.severityFilter.good=Hyvä
health.result.severityFilter.info=Huomio
health.result.severityFilter.warn=Varoitus
health.result.severityFilter.crit=Kriittinen
health.result.severityTip.good=Vakavuus: Hyvä\nNormaali holvirakenne.
health.result.severityTip.info=Vakavuus: Huomio\nHolvin rakenne ehjä. Ehdotetaan korjausta.
health.result.severityTip.warn=Vakavuus: Varoitus\nHolvin rakenne korruptoitunut. Korjaus erittäin suositeltavaa.
health.result.severityTip.crit=Vakavuus: Kriittinen\nHolvin rakenne korruptoitunut. Tietoja menetetty.
health.result.fixStateFilter.all=Korjauksen tila - Kaikki
health.result.fixStateFilter.fixable=Korjattavissa
health.result.fixStateFilter.notFixable=Ei korjattavissa
health.result.fixStateFilter.fixing=Korjataan…
health.result.fixStateFilter.fixed=Korjattu
health.result.fixStateFilter.fixFailed=Korjaus epäonnistui
## Fix Application
health.fix.fixBtn=Korjaa
health.fix.successTip=Korjaus onnistui
health.fix.failTip=Korjaus epäonnistui, katso lisätietoja lokista
# Preferences
preferences.title=Asetukset
## General
preferences.general=Yleiset
preferences.general.startHidden=Piilota ikkuna kun Cryptomator käynnistyy
preferences.general.autoCloseVaults=Lukitse avoimet holvit automaattisesti kun ohjelma sammutetaan
preferences.general.debugLogging=Ota virheloki käyttöön
preferences.general.debugDirectory=Näytä lokitiedostot
preferences.general.autoStart=Käynnistä Cryptomator järjestelmän käynnistyessä
preferences.general.keychainBackend=Tallenna salasanat käyttäen
preferences.general.quickAccessService=Lisää avatut holvit pikavalikkoon
## Interface
preferences.interface=Käyttöliittymä
preferences.interface.theme=Ulkonäkö
preferences.interface.theme.automatic=Automaattinen
preferences.interface.theme.dark=Tumma
preferences.interface.theme.light=Vaalea
preferences.interface.unlockThemes=Hanki tumma tila
preferences.interface.language=Kieli (vaatii uudelleenkäynnistyksen)
preferences.interface.language.auto=Järjestelmän oletus
preferences.interface.interfaceOrientation=Käyttöliittymän kätisyys
preferences.interface.interfaceOrientation.ltr=Vasemmalta oikealle
preferences.interface.interfaceOrientation.rtl=Oikealta vasemmalle
preferences.interface.showTrayIcon=Näytä ilmoitusalueen kuvake (vaatii uudelleenkäynnistyksen)
preferences.interface.compactMode=Käytä kompaktia holviluetteloa
## Volume
preferences.volume=Virtuaaliasema
preferences.volume.type=Aseman oletustyyppi
preferences.volume.type.automatic=Automaattinen
preferences.volume.docsTooltip=Lue lisää asematyypeistä dokumentaatiosta.
preferences.volume.fuseRestartRequired=Jotta muutokset tulevat voimaan, Cryptomator täytyy käynnistää uudelleen.
preferences.volume.tcp.port=Oletus TCP-portti
preferences.volume.supportedFeatures=Valittu asematyyppi tukee seuraavia ominaisuuksia:
preferences.volume.feature.mountAuto=Automaattinen liitospolun valinta
preferences.volume.feature.mountToDir=Mukautettu kansio litospolkuna
preferences.volume.feature.mountToDriveLetter=Aseman kirjain liitospolkuna
preferences.volume.feature.mountFlags=Mukautetut liitosasetukset
preferences.volume.feature.readOnly=Liitos vain lukuoikeuksilla
## Updates
preferences.updates=Päivitykset
preferences.updates.currentVersion=Nykyinen versio: %s
preferences.updates.autoUpdateCheck=Tarkista päivitykset automaattisesti
preferences.updates.checkNowBtn=Tarkista nyt
preferences.updates.updateAvailable=Päivitys versioon %s saatavilla.
preferences.updates.lastUpdateCheck=Edellinen tarkistus: %s
preferences.updates.lastUpdateCheck.never=ei koskaan
preferences.updates.lastUpdateCheck.recently=viimeaikoina
preferences.updates.lastUpdateCheck.daysAgo=%s päivää sitten
preferences.updates.lastUpdateCheck.hoursAgo=%s tuntia sitten
preferences.updates.checkFailed=Päivitysten etsiminen epäonnistui. Tarkista internetyhteys tai yritä myöhemmin uudelleen.
preferences.updates.upToDate=Cryptomator on ajan tasalla.
## Contribution
preferences.contribute=Tue meitä
preferences.contribute.noCertificate=Tue Cryptomatoria ja saa tukijasertifikaatti. Se on kuin lisenssiavain, mutta mahtaville ihmisille, jotka käyttävät vapaata ohjelmistoa. ;-)
preferences.contribute.getCertificate=Eikö sinulla ole sellaista? Lue lisää miten voit hankkia sellaisen.
preferences.contribute.promptText=Liitä tukijasertifikaatin koodi tähän
preferences.contribute.thankYou=Kiitos tuestasi Cryptomatorin avoimeen kehittämiseen!
preferences.contribute.donate=Lahjoita
preferences.contribute.sponsor=Sponsori
### Remove License Key Dialog
removeCert.title=Poista sertifikaatti
removeCert.message=Poista tukijasertifikaatti?
removeCert.description=Tämä ei vaikuta Cryptomatorin ydintoimintoihin. Holveihin pääsyä ei rajoiteta eikä turvallisuutta heikennetä.
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
preferences.about=Tietoja
# Vault Statistics
stats.title=%s tilastot
## Read
stats.read.throughput.idle=Luku: toimeton
stats.read.throughput.kibs=Luku: %.2f KiB/s
stats.read.throughput.mibs=Luku: %.2f MiB/s
stats.read.total.data.none=Dataa luettu: -
stats.read.total.data.kib=Dataa luettu: %.1f KiB
stats.read.total.data.mib=Dataa luettu: %.1f MiB
stats.read.total.data.gib=Dataa luettu: %.1f GiB
stats.decr.total.data.none=Dataa purettu: -
stats.decr.total.data.kib=Dataa purettu: %.1f KiB
stats.decr.total.data.mib=Dataa purettu: %.1f MiB
stats.decr.total.data.gib=Dataa purettu: %.1f GiB
stats.read.accessCount=Lukuja yhteensä: %d
## Write
stats.write.throughput.idle=Kirjoitus: toimeton
stats.write.throughput.kibs=Kirjoitus: %.2f KiB/s
stats.write.throughput.mibs=Kirjoitus: %.2f MiB/s
stats.write.total.data.none=Dataa kirjoitettu: -
stats.write.total.data.kib=Dataa kirjoitettu: %.1f KiB
stats.write.total.data.mib=Dataa kirjoitettu: %.1f MiB
stats.write.total.data.gib=Dataa kirjoitettu: %.1f GiB
stats.encr.total.data.none=Dataa salattu: -
stats.encr.total.data.kib=Dataa salattu: %.1f KiB
stats.encr.total.data.mib=Dataa salattu: %.1f MiB
stats.encr.total.data.gib=Dataa salattu: %.1f GiB
stats.write.accessCount=Kirjoituksia yhteensä: %d
## Accesses
stats.access.current=Tiedostoja avattuna: %d
stats.access.total=Avauksia yhteensä: %d
# Main Window
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Klikkaa tästä lisätäksesi holvin
main.vaultlist.contextMenu.remove=Poista…
main.vaultlist.contextMenu.lock=Lukitse
main.vaultlist.contextMenu.unlock=Avaa…
main.vaultlist.contextMenu.unlockNow=Avaa Nyt
main.vaultlist.contextMenu.vaultoptions=Näytä holvin asetukset
main.vaultlist.contextMenu.reveal=Paljasta Asema
main.vaultlist.addVaultBtn.menuItemNew=Luo uusi holvi...
main.vaultlist.addVaultBtn.menuItemExisting=Avaa olemassa oleva holvi...
##Notificaition
main.notification.updateAvailable=Päivitys on saatavilla.
main.notification.support=Tue Cryptomatoria.
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Kiitos kun valitsit Cryptomatorin tiedostojesi suojaamiseen. Mikäli tarvitset apua, tutustu aloitusoppaaseemme:
### Locked
main.vaultDetail.lockedStatus=LUKITTU
main.vaultDetail.unlockBtn=Avaa…
main.vaultDetail.unlockNowBtn=Avaa Nyt
main.vaultDetail.optionsBtn=Holvin asetukset
main.vaultDetail.passwordSavedInKeychain=Salasana on tallennettu
main.vaultDetail.share=Jaa…
### Unlocked
main.vaultDetail.unlockedStatus=AVATTU
main.vaultDetail.accessLocation=Holvisi sisältö on saatavilla täältä:
main.vaultDetail.revealBtn=Paljasta Asema
main.vaultDetail.copyUri=Kopioi URI
main.vaultDetail.lockBtn=Lukitse
main.vaultDetail.bytesPerSecondRead=Luku:
main.vaultDetail.bytesPerSecondWritten=Kirjoitus:
main.vaultDetail.throughput.idle=toimeton
main.vaultDetail.throughput.kbps=%.1f KiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Holvin tilastot
main.vaultDetail.locateEncryptedFileBtn=Etsi salattu tiedosto
main.vaultDetail.locateEncryptedFileBtn.tooltip=Valitse tiedosto holvistasi löytääksesi sen salatun vastineen
main.vaultDetail.encryptedPathsCopied=Polut kopioitu leikepöydälle!
main.vaultDetail.filePickerTitle=Valitse tiedosto holvin sisältä
### Missing
main.vaultDetail.missing.info=Cryptomator ei löytänyt täältä holvia.
main.vaultDetail.missing.recheck=Tarkista uudelleen
main.vaultDetail.missing.remove=Poista holvilistalta…
main.vaultDetail.missing.changeLocation=Vaihda holvin sijaintia…
### Needs Migration
main.vaultDetail.migrateButton=Päivitä Holvi
main.vaultDetail.migratePrompt=Holvisi täytyy muuntaa uuteen muotoon ennen kuin voit avata sen
### Error
main.vaultDetail.error.info=Tapahtui virhe ladatessa holvia levyltä.
main.vaultDetail.error.reload=Päivitä
main.vaultDetail.error.windowTitle=Virhe ladatessa holvia
# Wrong File Alert
wrongFileAlert.title=Kuinka tiedostoja salataan
wrongFileAlert.message=Yritkö salata nämä tiedostot?
wrongFileAlert.instruction.0=Salaa tiedostot seuraavasti:
wrongFileAlert.instruction.1=1. Avaa holvisi.
wrongFileAlert.instruction.2=2. Klikkaa "Paljasta" avataksesi aseman tiedostoselaimessasi.
wrongFileAlert.instruction.3=3. Siirrä tiedostosi asemalle.
wrongFileAlert.link=Lisäapua varten katso
# Vault Options
## General
vaultOptions.general=Yleiset
vaultOptions.general.vaultName=Holvin nimi
vaultOptions.general.autoLock.lockAfterTimePart1=Lukitse kun ollut käyttämättä
vaultOptions.general.autoLock.lockAfterTimePart2=minuuttia
vaultOptions.general.unlockAfterStartup=Avaa holvi kun Cryptomator käynnistyy
vaultOptions.general.actionAfterUnlock=Avauksen jälkeen
vaultOptions.general.actionAfterUnlock.ignore=Älä tee mitään
vaultOptions.general.vaultName=Vault Nimi
vaultOptions.general.actionAfterUnlock.reveal=Paljasta Asema
vaultOptions.general.actionAfterUnlock.ask=Kysy
vaultOptions.general.startHealthCheckBtn=Aloita kuntotarkastus
## Mount
vaultOptions.mount=Liittäminen
vaultOptions.mount.info=Avaa virtuaaliaseman asetukset muuttaaksesi oletuksia.
vaultOptions.mount.readonly=Vain luku
vaultOptions.mount.customMountFlags=Mukautetut liitosasetukset
vaultOptions.mount.winDriveLetterOccupied=käytössä
vaultOptions.mount.mountPoint=Liitoskohta
vaultOptions.mount.mountPoint.auto=Valitse sopiva sijainti automaattisesti
vaultOptions.mount.mountPoint.driveLetter=Käytä määritettyä asemakirjainta
vaultOptions.mount.mountPoint.custom=Käytä valittua kansiota
vaultOptions.mount.mountPoint.directoryPickerButton=Valitse…
vaultOptions.mount.mountPoint.directoryPickerTitle=Valitse kansio
vaultOptions.mount.volumeType.default=Oletus (%s)
vaultOptions.mount.volumeType.restartRequired=Jotta tätä asematyyppiä voidaan käyttää, Cryptomator täytyy käynnistää uudelleen.
vaultOptions.mount.volume.tcp.port=TCP-portti
vaultOptions.mount.volume.type=Aseman tyyppi
## Master Key
vaultOptions.masterkey=Salasana
vaultOptions.masterkey.changePasswordBtn=Vaihda salasana
vaultOptions.masterkey.forgetSavedPasswordBtn=Unohda tallennettu salasana
vaultOptions.masterkey.recoveryKeyExplanation=Palautusavain on ainoa tapa päästä käsiksi holviin jos unohdat salasanasi.
vaultOptions.masterkey.showRecoveryKeyBtn=Näytä Palautusavain
vaultOptions.masterkey.recoverPasswordBtn=Palauta salasana
## Hub
vaultOptions.hub=Palautus
vaultOptions.hub.convertInfo=Voit käyttää palautusavainta muuttaaksesi tämä Hub-holvin salasanapohjaiseksi holviksi hätätapauksessa.
vaultOptions.hub.convertBtn=Muunna salasanapohjaiseksi holviksi
# Recovery Key
## Display Recovery Key
recoveryKey.display.title=Näytä palautusavain
recoveryKey.create.message=Salasana vaaditaan
recoveryKey.create.description=Syötä salasana holville "%s" näyttääksesi sen palautusavaimen.
recoveryKey.display.description=Tällä palautusavaimella voidaan palauttaa pääsy holviin "%s":
recoveryKey.display.StorageHints=Pidä se hyvin tallessa, esimerkiksi\n • Säilytä se salasananhallintaohjelmassa\n • Tallenna se USB-asemalle\n • Tulosta se paperille
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=Palauta salasana
recoveryKey.recover.prompt=Syötä palautusavain holville "%s":
recoveryKey.recover.correctKey=Tämä palautusavain on oikea
recoveryKey.recover.wrongKey=Tämä palautusavain kuuluu jollekin toiselle holville
recoveryKey.recover.invalidKey=Tämä palautusavain ei ole kelvollinen
recoveryKey.printout.heading=Cryptomator palautusavain\n"%s"\n
### Reset Password
recoveryKey.recover.resetBtn=Palauta
### Recovery Key Password Reset Success
recoveryKey.recover.resetSuccess.message=Salasanan palautus onnistui
recoveryKey.recover.resetSuccess.description=Voit avata holvin uudella salasanalla.
# Convert Vault
convertVault.title=Muunna holvi
convertVault.convert.convertBtn.before=Muunna
convertVault.convert.convertBtn.processing=Muunnetaan…
convertVault.success.message=Muuntaminen onnistui
convertVault.hubToPassword.success.description=Voit nyt avata holvin valitulla salasanalla ilman Hub-yhteyttä.
# New Password
newPassword.promptText=Syötä uusi salasana
newPassword.reenterPassword=Vahvista uusi salasana
newPassword.passwordsMatch=Salasanat täsmäävät!
newPassword.passwordsDoNotMatch=Salasanat eivät täsmää
passwordStrength.messageLabel.tooShort=Käytä ainakin %d merkkiä
passwordStrength.messageLabel.0=Erittäin heikko
passwordStrength.messageLabel.1=Heikko
passwordStrength.messageLabel.2=Kohtalainen
passwordStrength.messageLabel.3=Vahva
passwordStrength.messageLabel.4=Erittäin vahva
# Quit
quit.title=Lopeta ohjelma
quit.message=Holveja on auki
quit.description=Vahvista että haluat lopettaa. Cryptomator lukitsee kaikki avatut holvit datan menetyksen ehkäisemiseksi.
quit.lockAndQuitBtn=Lukitse ja lopeta
# Forced Quit
quit.forced.message=Joitain holveja ei voitu lukita
quit.forced.description=Holvien lukiseminen estyi odottavien tehtävien tai avattujen tiedostojen vuoksi. Voit pakottaa lukituksen, mutta datasiirron keskeyttäminen voi johtaa datan menetykseen.
quit.forced.forceAndQuitBtn=Pakota ja lopeta
# Update Reminder
updateReminder.title=Päivitysten tarkistus
updateReminder.message=Tarkistetaanko päivitykset?
updateReminder.description=Pysy ajan tasalla uusista ominaisuuksista, korjauksista ja turvallisuusparannuksista. Suosittelemme tarkistamaan päivitykset automaattisesti.
updateReminder.notNow=Ei nyt
updateReminder.yesOnce=Kyllä, vain tämän kerran
updateReminder.yesAutomatically=Kyllä, automaattisesti
#Dokany Support End
dokanySupportEnd.preferencesBtn=Avaa asetukset
#Retry If Readonly
# Share Vault
shareVault.title=Jaa holvi
shareVault.message=Haluatko jakaa holvisi muiden kanssa?
shareVault.description=Ole aina varuillasi jakaessasi holvia muiden kanssa. Noudata näitä ohjeita:
shareVault.instruction.1=1. Jaa käyttöoikeus salattuun holvikansioon pilvipalvelun kautta.
shareVault.instruction.2=2. Jaa holvin salasana turvallisella tavalla.
shareVault.remarkBestPractices=Lisätietoja varten tutustu hyvien käytäntöjen suosituksiin dokumentaatiossamme.
shareVault.docsTooltip=Avaa dokumentaatio lukeaksesi lisää holvein jakamisesta.
shareVault.visitHub=Käy Cryptomator Hubissa
shareVault.hub.message=Kuinka jakaa Hub -holvi
shareVault.hub.instruction.1=1. Jaa käyttöoikeus salattuun holvikansioon pilvipalvelun kautta.
shareVault.hub.openHub=Avaa Cryptomator Hub

View File

@@ -13,7 +13,6 @@ generic.button.copied=Nakopya na!
generic.button.done=Tapos na
generic.button.next=Sunod
generic.button.print=I-print
generic.button.remove=Tanggalin
# Error
error.message=Error %s
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=I-unlock Ngayon
removeVault.title=Tanggalin %s
removeVault.message=Itangal ang vault?
removeVault.description=Makakalimutan lang nito ang Cryptomator tungkol sa vault na ito. Maaari mo itong idagdag muli. Walang matatanggal na mga naka-encrypt na file mula sa iyong hard drive.
removeVault.confirmBtn=Itangal ang vault
# Change Password
changepassword.title=Palitan ANG password
@@ -176,6 +176,7 @@ hub.registerFailed.description.generic=Nagkaroon ng error sa proseso ng pag regi
hub.registerFailed.description.deviceAlreadyExists=Ang device na ito ay registrado na sa ibang user. Subukang palitan ang user account o gumamit ng ibang device.
### Unauthorized
hub.unauthorized.message=Walang pahintulot
hub.unauthorized.description=Hindi pa pinahihintulutan ang iyong device na i-access ang vault na ito. Hilingin sa may-ari ng vault na pahintulutan ito.
### Requires Account Initialization
hub.requireAccountInit.message=Kinakailangan ang pagkilos
hub.requireAccountInit.description.0=Upang magpatuloy, mangyaring kumpletuhin ang mga hakbang na kinakailangan sa iyong
@@ -335,6 +336,7 @@ preferences.contribute.getCertificate=Wala ka na ba? Alamin kung paano mo ito ma
preferences.contribute.promptText=I-paste ang code ng certificate ng tagasuporta dito
### Remove License Key Dialog
removeCert.confirmBtn=Tanggalin
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -540,8 +542,6 @@ dokanySupportEnd.message=Pagtatapos ng suporta para sa Dokany
dokanySupportEnd.description=Ang uri ng volume na Dokany ay hindi na sinusuportahan ng Cryptomator. Isinasaayos ang iyong mga setting upang magamit ang default na uri ng volume ngayon. Maaari mong tingnan ang default na uri sa mga kagustuhan.
dokanySupportEnd.preferencesBtn=Buksan ang Mga Kagustuhan
#Retry If Readonly
# Share Vault
shareVault.title=Ibahagi ang Vault
shareVault.message=Gusto mo bang ibahagi ang iyong vault sa iba?

View File

@@ -13,7 +13,6 @@ generic.button.copied=Copié !
generic.button.done=OK
generic.button.next=Suivant
generic.button.print=Imprimer
generic.button.remove=Supprimer
# Error
error.message=Une erreur s'est produite
@@ -23,9 +22,9 @@ error.hyperlink.report=Signaler cette erreur
error.technicalDetails=Détails :
error.existingSolutionDescription=Cryptomator ne s'attendait pas à ce que cela se produise. Mais nous avons trouvé une solution existante pour cette erreur. Veuillez consulter le lien suivant.
error.hyperlink.solution=Rechercher la solution
error.lookupPermissionMessage=Cryptomator peut chercher une solution à ce problème en ligne. Une requête sera envoyée à notre base de données de problèmes à partir de votre adresse IP.
error.lookupPermissionMessage=Cryptomator peut trouver une solution à ce problème en ligne. Cela enverra une requête à notre base de données de problèmes à partir de votre adresse IP.
error.dismiss=Ignorer
error.lookUpSolution=Chercher une solution
error.lookUpSolution=Rechercher la solution
# Defaults
defaults.vault.vaultName=Coffre
@@ -66,7 +65,7 @@ addvaultwizard.new.validCharacters.numbers=Nombres
addvaultwizard.new.validCharacters.dashes=Tiret (%s) ou tiret du bas (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Activer les paramètres experts
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Entrez une valeur comprise entre 36 et 220 (par défaut 220)
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Entrez une valeur entre 36 et 220 (par défaut 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Ouvrez la documentation pour en savoir plus.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Longueur maximale des noms de fichiers chiffrés
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valide
@@ -95,7 +94,7 @@ addvault.new.readme.accessLocation.4=Vous pouvez supprimer ce fichier.
## Existing
addvaultwizard.existing.title=Ajouter un coffre existant
addvaultwizard.existing.instruction=Choisissez le fichier « vault.cryptomator » de votre volume existant. Si seul le fichier « masterkey.cryptomator » est présent, sélectionnez celui-là.
addvaultwizard.existing.chooseBtn=Choisir
addvaultwizard.existing.chooseBtn=Choisir...
addvaultwizard.existing.filePickerTitle=Sélectionnez le fichier correspondant au volume chiffré
addvaultwizard.existing.filePickerMimeDesc=Coffre-fort Cryptomator
## Success
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Déverrouiller
removeVault.title=Supprimer "%s"
removeVault.message=Supprimer le coffre ?
removeVault.description=Ceci ne fera que retirer ce coffre de Cryptomator. Vous pourrez lajouter à nouveau plus tard. Aucun fichier chiffré ne sera supprimé de votre disque dur.
removeVault.confirmBtn=Supprimer le coffre
# Change Password
changepassword.title=Modifier le mot de passe
@@ -127,7 +127,7 @@ unlock.unlockBtn=Déverrouiller
unlock.chooseMasterkey.message=Fichier Masterkey introuvable
unlock.chooseMasterkey.description=Impossible de trouver le fichier clef à l'adresse attendue pour l'espace chiffré "%s". Veuillez sélectionner le fichier clef manuellement.
unlock.chooseMasterkey.filePickerTitle=Sélectionner le fichier clef
unlock.chooseMasterkey.filePickerMimeDesc=Clé principale Cryptomator
unlock.chooseMasterkey.filePickerMimeDesc=\ clé principale Cryptomator
## Success
unlock.success.message=Déverrouillage réussi
unlock.success.description=“%s” déverrouillé ! Le contenu de votre espace chiffré est maintenant accessible par son lecteur virtuel.
@@ -142,7 +142,7 @@ unlock.error.customPath.description.hideawayNotDir=Le fichier temporaire et cach
unlock.error.customPath.description.couldNotBeCleaned=Votre coffre n'a pas pu être monté au point "%s". Veuillez réessayer ou choisissez un autre point.
unlock.error.customPath.description.notEmptyDir=Le chemin de montage personnalisé "%s" n'est pas un dossier vide. Veuillez choisir un dossier vide et réessayez.
unlock.error.customPath.description.generic=Vous avez sélectionné un point de montage personnalisé pour ce coffre, mais son utilisation a échoué avec le message : %2$s
unlock.error.restartRequired.message=Impossible de déverrouiller le coffre
unlock.error.restartRequired.message=Impossible de déverrouiller le volume
unlock.error.restartRequired.description=Modifiez le type de volume dans les options du coffre ou redémarrez Cryptomator.
unlock.error.title=Échec du déverrouillage de "%s"
## Hub
@@ -152,7 +152,7 @@ hub.noKeychain.openBtn=Ouvrir les préférences
### Waiting
hub.auth.message=Authentification en cours…
hub.auth.description=Vous devriez automatiquement être redirigé vers la page de connexion.
hub.auth.loginLink=Vous n'êtes pas redirigé·e ? Cliquez ici pour l'ouvrir.
hub.auth.loginLink=Vous n'avez pas été redirigé(e) ? Cliquez ici pour l'ouvrir.
### Receive Key
hub.receive.message=Traitement de la réponse…
hub.receive.description=Cryptomator est en train de recevoir et de traiter la réponse de Hub. Veuillez patienter.
@@ -171,12 +171,12 @@ hub.registerSuccess.description=Votre appareil est enregistré avec succès. Vou
hub.registerSuccess.unlockBtn=Déverrouiller
hub.registerSuccess.legacy.description=Pour accéder au coffre, votre appareil doit être autorisé par le propriétaire du coffre.
### Registration Failed
hub.registerFailed.message=Échec de l'enregistrement de l'appareil
hub.registerFailed.message=Echec de l'enregistrement de l'appareil
hub.registerFailed.description.generic=Le processus de nommage a retourné une erreur. Pour plus de détails, regardez dans le journal de l'application.
hub.registerFailed.description.deviceAlreadyExists=Cet appareil est déjà enregistré pour un autre utilisateur. Essayez de changer de compte ou utilisez un autre appareil.
### Unauthorized
hub.unauthorized.message=Accès refusé
hub.unauthorized.description=Vous n'êtes pas autorisé à ouvrir ce coffre. Contactez le propriétaire du coffre pour en demander l'accès.
hub.unauthorized.description=Votre appareil n'a pas encore été autorisé à accéder à ce coffre. Demandez au propriétaire du coffre de l'autoriser.
### Requires Account Initialization
hub.requireAccountInit.message=Action requise
hub.requireAccountInit.description.0=Pour continuer, veuillez compléter les étapes requises
@@ -343,6 +343,7 @@ preferences.contribute.sponsor=Parrain
removeCert.title=Supprimer le certificat
removeCert.message=Supprimer le certificat de soutien ?
removeCert.description=
removeCert.confirmBtn=Retirer
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -552,12 +553,6 @@ dokanySupportEnd.message=Fin de la prise en charge de Dokany
dokanySupportEnd.description=Le type de volume Dokany n'est plus pris en charge par Cryptomator. Vos paramètres sont à présent ajustés pour utiliser le type de volume par défaut. Vous pouvez voir le type par défaut dans les préférences.
dokanySupportEnd.preferencesBtn=Ouvrir les préférences
#Retry If Readonly
retryIfReadonly.title=Accès restreint au coffre
retryIfReadonly.message=Pas d'accès en écriture au dossier du coffre
retryIfReadonly.description=Cryptomator ne peut pas écrire dans le dossier du coffre. Vous pouvez passer le coffre en mode lecture seule et réessayer. Cette option peut être désactivée dans les options du coffre.
retryIfReadonly.retry=Changer et réessayer
# Share Vault
shareVault.title=Partager le coffre
shareVault.message=Vous aimeriez partager votre coffre avec d'autres personnes ?

View File

@@ -13,7 +13,6 @@ generic.button.copied=Copiado!
generic.button.done=Feito
generic.button.next=Seguinte
generic.button.print=Imprimir
generic.button.remove=Eliminar
# Error
error.message=Produciuse un erro
@@ -82,6 +81,7 @@ lock.forced.retryBtn=Tentar de novo
## Contribution
### Remove License Key Dialog
removeCert.confirmBtn=Eliminar
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -132,6 +132,4 @@ lock.forced.retryBtn=Tentar de novo
#Dokany Support End
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=הועתק!
generic.button.done=סיום
generic.button.next=הבא
generic.button.print=הדפס
generic.button.remove=הסר
# Error
error.message=אירעה שגיאה
@@ -105,6 +104,7 @@ addvaultwizard.success.unlockNow=בטל נעילה כעת
removeVault.title=הסר כספת
removeVault.message=להסיר את ה vault?
removeVault.description=זה יגרום ל-Cryptomator לשכוח מהכספת הזו. תוכל/י להוסיף אותה שוב מאוחר יותר. קבצים מוצפנים לא ימחקו מהכונן שלך.
removeVault.confirmBtn=הסר כספת
# Change Password
changepassword.title=שנה סיסמה
@@ -159,6 +159,7 @@ hub.registerSuccess.unlockBtn=בטל נעילה
### Registration Failed
### Unauthorized
hub.unauthorized.message=הגישה נדחתה
hub.unauthorized.description=המכשיר שלך טרם אושר לגשת לכספת הזאת. יש לבקש אישור גישה מבעל הכספת.
### Requires Account Initialization
### License Exceeded
hub.invalidLicense.message=רישיון האב לא תקף
@@ -304,6 +305,7 @@ preferences.contribute.getCertificate=עדיין אין לכם אחד? לימד
preferences.contribute.promptText=הדבק את קוד תעודת התומך כאן
### Remove License Key Dialog
removeCert.confirmBtn=הסר
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -491,6 +493,4 @@ updateReminder.notNow=לא עכשיו
#Dokany Support End
dokanySupportEnd.preferencesBtn=פתח העדפות
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=कॉपी हुआ!
generic.button.done=हो गया
generic.button.next=अगला
generic.button.print=प्रिंट करें
generic.button.remove=हटाएँ
# Error
error.message=एक त्रुटि पाई गई
@@ -101,6 +100,7 @@ addvaultwizard.success.unlockNow=अब अनलॉक करें
removeVault.title=वॉल्ट हटाए
removeVault.message=वॉल्ट हटाए?
removeVault.description=यह करने से सिर्फ क्रिप्टोमेटर इस वॉल्ट के बारे में भूल जाएगा। आप इस वॉल्ट को वापस ऐड कर पाएंगे। कोई भी एन्क्रिप्टेड फाइल आपकी हार्ड डिस्क से नहीं डिलीट होगी।
removeVault.confirmBtn=वॉल्ट हटाए
# Change Password
changepassword.title=पासवर्ड बदलें
@@ -221,6 +221,7 @@ preferences.updates.updateAvailable=संस्करण %s की तरफ
preferences.contribute=हमें सपोर्ट करें
### Remove License Key Dialog
removeCert.confirmBtn=हटाएँ
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -314,6 +315,4 @@ quit.forced.message=कुछ वॉल्ट्स लॉक नहीं ह
#Dokany Support End
dokanySupportEnd.preferencesBtn=प्राथमिकताएँ खोलें
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=Kopirano!
generic.button.done=Gotovo
generic.button.next=Sljedeći
generic.button.print=Ispiši
generic.button.remove=Ukloni
# Error
error.message=Greška: %s
@@ -86,6 +85,7 @@ addvaultwizard.success.unlockNow=Otključaj sada
# Remove Vault
removeVault.title=Ukloni trezor
removeVault.description=Ovo će jedino učiniti da Cryptomator zaboravi trezor. Možete ga kasnije ponovno dodati. Niti jedna šifrirana datoteka neće biti uklonjena s Vašeg tvrdog diska.
removeVault.confirmBtn=Ukloni trezor
# Change Password
changepassword.title=Promijeni lozinku
@@ -232,6 +232,7 @@ preferences.contribute.getCertificate=Još ga nemate? Naučite kako ga dobiti.
preferences.contribute.promptText=Zalijepi certifikat podržavatelja ovdje
### Remove License Key Dialog
removeCert.confirmBtn=Ukloni
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -381,6 +382,4 @@ quit.lockAndQuitBtn=Zaključaj i napusti
#Dokany Support End
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=Másolva!
generic.button.done=Kész
generic.button.next=Következő
generic.button.print=Nyomtatás
generic.button.remove=Eltávolítás
# Error
error.message=Hiba: %s
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Azonnali feloldás
removeVault.title=Széf eltávolitása
removeVault.message=Vault eltávolitása?
removeVault.description=Ez kizárolag a Cryptomator-ból távolitja el ezt a széfet. Később hozzáadhatja újra. A titkosított fájlokat nem törli a merevlemezről.
removeVault.confirmBtn=Széf eltávolitása
# Change Password
changepassword.title=Jelszó megváltoztatása
@@ -176,6 +176,7 @@ hub.registerFailed.description.generic=Hiba történt a regisztrációs folyamat
hub.registerFailed.description.deviceAlreadyExists=Ez az eszköz már egy másik felhasználóhoz van regisztrálva. Próbáljon meg felhasználói fiókot váltani, vagy használjon egy másik eszközt.
### Unauthorized
hub.unauthorized.message=Hozzáférés megtagadva
hub.unauthorized.description=Eszköze még nem kapott engedélyt ehhez a széfhez. Kérje a széf tulajdonosát, hogy engedélyezze a hozzáférést.
### Requires Account Initialization
hub.requireAccountInit.message=Beavatkozás szükséges
hub.requireAccountInit.description.0=A folytatáshoz kérlek töltsd ki a szükséges lépéseket a te
@@ -342,6 +343,7 @@ preferences.contribute.sponsor=Szponzor
removeCert.title=Tanúsítvány eltávolítása
removeCert.message=Eltávolítja a támogatói tanúsítványt?
removeCert.description=A Cryptomator alapvető funkcióit ez nem érinti. Sem a széfekhez való hozzáférés nem korlátozott, sem a biztonsági szint nem csökken.
removeCert.confirmBtn=Eltávolítás
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -551,8 +553,6 @@ dokanySupportEnd.message=Vége a Dokany támogatásának
dokanySupportEnd.description=A Cryptomator nem támogatja tovább a Dokany kötettípust. A beállítások az alapértelmezett kötettípus használatára lettek állítva. Az alapértelmezett típust a beállítások közt tekintheted meg.
dokanySupportEnd.preferencesBtn=Beállítások megnyitása
#Retry If Readonly
# Share Vault
shareVault.title=Széf megosztása
shareVault.message=Szeretné megosztani a széfét másokkal?

View File

@@ -13,7 +13,6 @@ generic.button.copied=Tersalin!
generic.button.done=Selesai
generic.button.next=Lanjut
generic.button.print=Cetak
generic.button.remove=Hapus
# Error
error.message=Terjadi kesalahan %s
@@ -28,7 +27,7 @@ error.dismiss=Tutup
error.lookUpSolution=Cari tahu solusinya
# Defaults
defaults.vault.vaultName=Brangkas
defaults.vault.vaultName=Vault
# Tray Menu
traymenu.showMainWindow=Tampilkan
@@ -42,7 +41,7 @@ traymenu.vault.reveal=Perlihatkan
# Add Vault Wizard
addvaultwizard.title=Tambah Brankas
## New
addvaultwizard.new.title=Tambah Brankas Baru
addvaultwizard.new.title=Tambah Vault baru
### Name
addvaultwizard.new.nameInstruction=Buat sebuah nama untuk brankas
addvaultwizard.new.namePrompt=Nama Brankas
@@ -58,8 +57,8 @@ addvaultwizard.new.fileAlreadyExists=Sudah ada file atau direktori dengan nama v
addvaultwizard.new.locationDoesNotExist=Direktori pada path yang dipilih tidak tersedia atau tidak dapat diakses
addvaultwizard.new.locationIsNotWritable=Anda tidak memiliki hak akses untuk menulis pada path yang dipilih
addvaultwizard.new.locationIsOk=Lokasi yang sesuai dengan vault Anda
addvaultwizard.new.invalidName=Nama brangkas tidak valid
addvaultwizard.new.validName=Nama brangkas yang valid
addvaultwizard.new.invalidName=Nama Vault tidak valid
addvaultwizard.new.validName=Nama vault yang valid
addvaultwizard.new.validCharacters.message=Nama vault mungkin berisi karakter berikut:
addvaultwizard.new.validCharacters.chars=Karakter kata (mis. a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Angka
@@ -71,7 +70,7 @@ addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Buka dokumentasi u
addvaultwizard.new.expertSettings.shorteningThreshold.title=Panjang maksimum nama file terenkripsi
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valid
### Password
addvaultwizard.new.createVaultBtn=Buat Brangkas
addvaultwizard.new.createVaultBtn=Buat Vault
addvaultwizard.new.generateRecoveryKeyChoice=Anda tidak dapat mengakses data tanpa kata sandi yang Anda miliki. Apa Anda ingin sebuah kunci pemulihan untuk berjaga-jaga jika seandainya Anda kehilangan kata sandi?
addvaultwizard.new.generateRecoveryKeyChoice.yes=Ya tolong, Lebih baik aman daripada menyesal
addvaultwizard.new.generateRecoveryKeyChoice.no=Tidak terima kasih, Saya tidak akan kehilangan kata sandi saya
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Buka Kunci Sekarang
removeVault.title=Hapus Vault
removeVault.message=Hapus vault?
removeVault.description=Tindakan ini hanya akan membuat Cryptomator melupakan vault ini. Anda dapat menambahkan vault ini lagi nanti. File yang telah dienkripsi tidak akan dihapus dari hard drive Anda.
removeVault.confirmBtn=Hapus Vault
# Change Password
changepassword.title=Ubah Kata Sandi
@@ -176,6 +176,7 @@ hub.registerFailed.description.generic=Kesalahan terjadi dalam proses pendaftara
hub.registerFailed.description.deviceAlreadyExists=Perangkat ini sudah terdaftar untuk pengguna lain. Cobalah menggunakan akun pengguna atau perangkat yang berbeda.
### Unauthorized
hub.unauthorized.message=Akses ditolak
hub.unauthorized.description=Perangkat Anda belum diizinkan mengakses vault ini. Mintalah pemilik vault untuk mengizinkannya.
### Requires Account Initialization
hub.requireAccountInit.message=Tindakan diperlukan
hub.requireAccountInit.description.0=Untuk melanjutkan, silakan lengkapi langkah-langkah yang diperlukan
@@ -286,7 +287,6 @@ preferences.general.debugLogging=Aktifkan pencatatan debug
preferences.general.debugDirectory=Perlihatkan file log
preferences.general.autoStart=Jalankan Cryptomator saat sistem dimulai
preferences.general.keychainBackend=Simpan kata sandi dengan
preferences.general.quickAccessService=Tambahkan brankas terbuka ke area akses cepat
## Interface
preferences.interface=Tampilan
preferences.interface.theme=Tampilan & Suasana
@@ -300,7 +300,6 @@ preferences.interface.interfaceOrientation=Orientasi Antarmuka
preferences.interface.interfaceOrientation.ltr=Kiri ke Kanan
preferences.interface.interfaceOrientation.rtl=Kanan ke Kiri
preferences.interface.showTrayIcon=Tampilkan ikon tray (aplikasi perlu dimuat ulang)
preferences.interface.compactMode=Aktifkan daftar brankas kompak
## Volume
preferences.volume=Drive Virtual
preferences.volume.type=Jenis Default Volume
@@ -320,13 +319,6 @@ preferences.updates.currentVersion=Versi Saat Ini: %s
preferences.updates.autoUpdateCheck=Otomatis periksa update
preferences.updates.checkNowBtn=Periksa Sekarang
preferences.updates.updateAvailable=Pembaharuan ke versi %s tersedia.
preferences.updates.lastUpdateCheck=Terakhir Diperiksa: %s
preferences.updates.lastUpdateCheck.never=jangan pernah
preferences.updates.lastUpdateCheck.recently=baru-baru ini
preferences.updates.lastUpdateCheck.daysAgo=%s hari yang lalu
preferences.updates.lastUpdateCheck.hoursAgo=%s jam yang lalu
preferences.updates.checkFailed=Gagal mencari pembaruan. Harap periksa koneksi internet Anda atau coba lagi nanti.
preferences.updates.upToDate=Cryptomator versi terkini.
## Contribution
preferences.contribute=Dukung Kami
@@ -334,14 +326,9 @@ preferences.contribute.registeredFor=Sertifikat supporter terdaftar atas nama %s
preferences.contribute.noCertificate=Dukung Cryptomator dan terima sebuah sertifikat supporter. Sertifikat ini layaknya kunci lisensi, tetapi hanya untuk orang-orang hebat yang menggunakan aplikasi versi gratis. ;-)
preferences.contribute.getCertificate=Belum punya? Pelajari bagaimana Anda bisa mendapatkannya.
preferences.contribute.promptText=Tempel kode sertifikat supporter di sini
preferences.contribute.thankYou=Terima kasih telah mendukung pengembangan open-source Cryptomator!
preferences.contribute.donate=Donasi
preferences.contribute.sponsor=Sponsor
### Remove License Key Dialog
removeCert.title=Hapus Sertifikat
removeCert.message=Hapus sertifikat dukungan?
removeCert.description=Fitur inti Cryptomator tidak terpengaruh oleh hal ini. Akses ke brankas Anda tidak dibatasi dan tingkat keamanannya tidak diturunkan.
removeCert.confirmBtn=Hapus
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -391,11 +378,7 @@ main.vaultlist.contextMenu.unlock=Buka Kunci…
main.vaultlist.contextMenu.unlockNow=Buka Kunci Sekarang
main.vaultlist.contextMenu.vaultoptions=Tampilkan Opsi Vault
main.vaultlist.contextMenu.reveal=Buka Drive
main.vaultlist.addVaultBtn.menuItemNew=Buat Vault Baru...
main.vaultlist.addVaultBtn.menuItemExisting=Buka Vault yang Tersedia...
##Notificaition
main.notification.updateAvailable=Pembaruan tersedia.
main.notification.support=Dukung Cryptomator.
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Terima kasih telah memilih Cryptomator untuk melindungi file Anda. Jika Anda memerlukan bantuan, lihat panduan awal kami:
@@ -546,13 +529,8 @@ updateReminder.yesOnce=Ya, Sekali
updateReminder.yesAutomatically=Ya, Secara Otomatis
#Dokany Support End
dokanySupportEnd.title=Pemberitahuan penghentian
dokanySupportEnd.message=Dukungan untuk Dokany telah berakhir
dokanySupportEnd.description=Volume berjenis Dokany sudah tidak didukung oleh Cryptomator. Konfigurasi Anda telah disesuai kan dengan tipe volume yang saat ini. Anda dapat melihat tipe baku dipreferensi.
dokanySupportEnd.preferencesBtn=Buka Preferensi
#Retry If Readonly
# Share Vault
shareVault.title=Bagikan Vault
shareVault.message=Apakah Anda ingin berbagi vault dengan orang lain?

View File

@@ -13,7 +13,6 @@ generic.button.copied=Copiato!
generic.button.done=Fatto
generic.button.next=Avanti
generic.button.print=Stampa
generic.button.remove=Rimuovi
# Error
error.message=Si è verificato un errore
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Sblocca Ora
removeVault.title=Rimuovi Cassaforte
removeVault.message=Rimuovere cassaforte?
removeVault.description=Questo farà solo dimenticare questa cassaforte a Cryptomator. Puoi aggiungerla nuovamente in seguito. Nessun file crittografato sarà eliminato dal tuo disco rigido.
removeVault.confirmBtn=Rimuovi Cassaforte
# Change Password
changepassword.title=Modifica la Password
@@ -176,7 +176,7 @@ hub.registerFailed.description.generic=Si è verificato un errore nel processo d
hub.registerFailed.description.deviceAlreadyExists=Questo dispositivo è già registrato per un utente diverso. Prova a cambiare l'account utente o usa un altro dispositivo.
### Unauthorized
hub.unauthorized.message=Accesso negato
hub.unauthorized.description=Non sei autorizzato ad aprire questa cassaforte. Chiedi l'accesso al proprietario.
hub.unauthorized.description=Il tuo dispositivo non è ancora stato autorizzato ad accedere a questa cassaforte. Chiedi al proprietario della cassaforte di autorizzarlo.
### Requires Account Initialization
hub.requireAccountInit.message=Azione richiesta
hub.requireAccountInit.description.0=Per procedere, completa i passaggi richiesti nel tuo
@@ -343,6 +343,7 @@ preferences.contribute.sponsor=Sponsor
removeCert.title=Rimuovi Certificato
removeCert.message=Rimuovere il certificato supporter?
removeCert.description=Questo non incide sulle funzionalità principali di Cryptomator. Non ti viene negato l'accesso alle tue casseforti e non viene abbassato il livello di sicurezza.
removeCert.confirmBtn=Rimuovi
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -552,12 +553,6 @@ dokanySupportEnd.message=Supporto terminato per Dokany
dokanySupportEnd.description=Il tipo di volume Dokany non è più supportato da Cryptomator. Le impostazioni sono state aggiornate per utilizzare il tipo di volume ora predefinito. È possibile visualizzare il tipo predefinito nelle preferenze.
dokanySupportEnd.preferencesBtn=Apri Preferenze
#Retry If Readonly
retryIfReadonly.title=Accesso Limitato Cassaforte
retryIfReadonly.message=Accesso negato in scrittura alla cartella della cassaforte
retryIfReadonly.description=Cryptomator non può scrivere nella cartella della cassaforte. Puoi cambiare l'impostazione "sola lettura" della cassaforte e riprovare. Questa opzione può essere impostata nelle opzioni della cassaforte.
retryIfReadonly.retry=Modifica e riprova
# Share Vault
shareVault.title=Condividi cassaforte
shareVault.message=Vuoi condividere la tua cassaforte con altri?

View File

@@ -13,7 +13,6 @@ generic.button.copied=コピー完了!
generic.button.done=完了
generic.button.next=次へ
generic.button.print=印刷
generic.button.remove=削除
# Error
error.message=エラー %s
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=今すぐ解錠
removeVault.title=金庫を削除
removeVault.message=金庫を削除しますか?
removeVault.description=この操作で Cryptomator がこの金庫を認識しなくなります。あとで再度追加することが可能です。暗号化されたファイルがドライブから削除されることはありません。
removeVault.confirmBtn=金庫を削除
# Change Password
changepassword.title=パスワードの変更
@@ -176,6 +176,7 @@ hub.registerFailed.description.generic=登録中にエラーが発生しまし
hub.registerFailed.description.deviceAlreadyExists=このデバイスは既に別のユーザーに登録されています。ユーザーアカウントを変更するか、別のデバイスを使用してください。
### Unauthorized
hub.unauthorized.message=アクセスが拒否されました
hub.unauthorized.description=お使いのデバイスはまだこの金庫にアクセスする権限がありません。金庫のオーナーに権限を与えてもらってください。
### Requires Account Initialization
hub.requireAccountInit.message=アクションが必要です
hub.requireAccountInit.description.0=続行するには以下のサイトで必要な手順を完了してください
@@ -335,6 +336,7 @@ preferences.contribute.getCertificate=まだ証明書を手に入れていませ
preferences.contribute.promptText=サポーター証明書をここに張り付けてください
### Remove License Key Dialog
removeCert.confirmBtn=削除
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -540,8 +542,6 @@ dokanySupportEnd.message=Dokany のサポート終了
dokanySupportEnd.description=ボリュームタイプ
dokanySupportEnd.preferencesBtn=環境設定を開く
#Retry If Readonly
# Share Vault
shareVault.title=保管庫を共有する
shareVault.message=保管庫を他の人と共有しますか?

View File

@@ -6,26 +6,21 @@ generic.button.apply=적용
generic.button.back=이전
generic.button.cancel=취소
generic.button.change=변경
generic.button.choose=선택
generic.button.choose=선택
generic.button.close=닫기
generic.button.copy=복사
generic.button.copied=복사됨!
generic.button.done=완료
generic.button.next=다음
generic.button.print=인쇄
generic.button.remove=제거
# Error
error.message=오류 발생
error.description=예상치 못한 에러가 발생했습니다. 해결법을 검색하십시오. 만약 고된 적이 없는 에러일 경우, 새로 신고해도 좋습니다.
error.message=오류 발생했습니다
error.description=예상치 못한 에러가 발생했습니다. 온라인에 에러를 검색해서 해결하십시오. 만약 고된 적이 없는 에러일 경우, 새로 신고해도 좋습니다.
error.hyperlink.lookup=에러 검색하기
error.hyperlink.report=에러 보고하기
error.technicalDetails=상세 정보:
error.existingSolutionDescription=Cryptomator에 알 수 없는 문제가 발생했습니다. 하지만 이 오류에 대한 기존 해결법이 있습니다. 다음 링크를 살펴보십시오.
error.hyperlink.solution=해결법 찾기
error.lookupPermissionMessage=Cryptomator는 온라인에서 이 문제에 대한 해결책을 찾아볼 수 있습니다. 그러면 귀하의 IP 주소가 문제 데이터베이스로 전송됩니다.
error.dismiss=무시
error.lookUpSolution=해결법 찾기
# Defaults
defaults.vault.vaultName=Vault
@@ -42,17 +37,16 @@ traymenu.vault.reveal=표시
# Add Vault Wizard
addvaultwizard.title=Vault 추가
## New
addvaultwizard.new.title=새로운 Vault 추가
addvaultwizard.new.title=새로운 금고 추가
### Name
addvaultwizard.new.nameInstruction=새 Vault의 이름을 입력하십시
addvaultwizard.new.nameInstruction=새 Vault의 이름을 입력하십시
addvaultwizard.new.namePrompt=Vault 이름
### Location
addvaultwizard.new.locationInstruction=Cryptomator Vault의 암호화 파일을 어디에 저장하시겠습니까?
addvaultwizard.new.locationLoading=기본 클라우드 저장소 디렉터리에 대한 로컬 파일 시스템을 확인하는 중…
addvaultwizard.new.locationInstruction=Cryptomator Vault의 암호화 파일을 어디에 저장하시겠습니까?
addvaultwizard.new.locationLabel=저장 위치
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=사용자 지정 위치
addvaultwizard.new.directoryPickerButton=선택
addvaultwizard.new.directoryPickerButton=선택
addvaultwizard.new.directoryPickerTitle=디렉터리 선택
addvaultwizard.new.fileAlreadyExists=Vault 내에 이미 존재하는 파일 또는 디렉터리 이름입니다.
addvaultwizard.new.locationDoesNotExist=지정된 디렉터리가 존재하지 않거나 접근 할 수 없습니다.
@@ -65,7 +59,7 @@ addvaultwizard.new.validCharacters.chars=문자 (예시: a, ж or 수)
addvaultwizard.new.validCharacters.numbers=숫자
addvaultwizard.new.validCharacters.dashes=대시 (%s) 또는 언더바 (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=전문가 설정 활성화
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=전문가 설정 활성화
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=36과 220 사이 숫자를 입력해주세요 (기본값: 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=더 자세한 정보는 관련 문서에서 볼 수 있습니다.
addvaultwizard.new.expertSettings.shorteningThreshold.title=암호화된 파일명의 최대 길이
@@ -73,29 +67,29 @@ addvaultwizard.new.expertSettings.shorteningThreshold.valid=유효
### Password
addvaultwizard.new.createVaultBtn=Vault 생성
addvaultwizard.new.generateRecoveryKeyChoice=비밀번호가 없으면 데이터에 접근할 수 없습니다. 비밀번호를 잊었을 때를 대비한 복구 키를 원하십니까?
addvaultwizard.new.generateRecoveryKeyChoice.yes=네, 보안보다 비밀번호를 잊어버리는 것이 더 걱정됩니다.
addvaultwizard.new.generateRecoveryKeyChoice.yes=네, 보안보다 비밀번호를 잊어버리는 것이 더 걱정됩니다
addvaultwizard.new.generateRecoveryKeyChoice.no=아니요, 나는 비밀번호를 잊지 않을겁니다.
### Information
addvault.new.readme.storageLocation.fileName=IMPORTANT.rtf
addvault.new.readme.storageLocation.1=⚠️ VAULT 파일 ⚠️
addvault.new.readme.storageLocation.2=해당 디렉토리는 당신의 Vault 저장 위치입니다.
addvault.new.readme.storageLocation.3=금지 사항
addvault.new.readme.storageLocation.2=해당 디렉토리는 당신의 Vault 저장 위치 입니다.
addvault.new.readme.storageLocation.3=금지사항
addvault.new.readme.storageLocation.4=• 이 디렉터리를 포함한 어떤 파일도 다른 파일로 교체하거나
addvault.new.readme.storageLocation.5=• 암호화하고자 하는 파일을 이 디렉터리에 붙여넣지 마십시.
addvault.new.readme.storageLocation.5=• 암호화를 위한 파일을 이 디렉터리에 붙여넣지 마십시.
addvault.new.readme.storageLocation.6=파일을 암호화하고 Vault 의 내용을 보려면 다음을 수행하십시오.
addvault.new.readme.storageLocation.7=1. 이 Vault를 Cryptomator에 추가하십시.
addvault.new.readme.storageLocation.8=2. Cryptomator에서 Vault 잠금을 해제하십시.
addvault.new.readme.storageLocation.9=3. "표시" 버튼을 클릭하여 Vault에 접근하십시.
addvault.new.readme.storageLocation.10=만일 도움이 필요하신 경우, 다음의 문서를 참조하십시: %s
addvault.new.readme.storageLocation.7=1. 이 Vault를 Cryptomator에 추가하십시.
addvault.new.readme.storageLocation.8=2. Cryptomator에서 Vault 잠금을 해제하십시.
addvault.new.readme.storageLocation.9=3. "표시" 버튼을 클릭하여 Vault에 접근하십시.
addvault.new.readme.storageLocation.10=만일 도움이 필요하신 경우, 다음의 문서를 참조하십시: %s
addvault.new.readme.accessLocation.fileName=WELCOME.rtf
addvault.new.readme.accessLocation.1=🔐️ 암호화 된 볼륨 🔐️
addvault.new.readme.accessLocation.2=이것은 당신의 Vault 접근 위치입니다.
addvault.new.readme.accessLocation.3=이 볼륨에 추가된 모든 파일은 Cryptomator로 암호화됩니다. 다른 드라이브/폴더처럼 작업할 수 있습니다. 볼륨의 내용은 복호화 된 것처럼 보지만, 모든 파일은 항상 암호화되어 하드디스크에 저장됩니다.
addvault.new.readme.accessLocation.3=이 볼륨에 추가된 모든 파일은 Cryptomator로 암호화됩니다. 다른 드라이브/폴더처럼 작업할 수 있습니다. 볼륨의 내용은 복호화 된 것 처럼 보여지지만, 모든 파일은 항상 암호화되어 하드디스크에 저장됩니다.
addvault.new.readme.accessLocation.4=이 파일은 지우셔도 무방합니다.
## Existing
addvaultwizard.existing.title=기존 금고 추가
addvaultwizard.existing.instruction=이미 존재하는 vault 폴더 내에서 "vault.cryptomator" 파일을 선택하세요. 만약 "masterkey.cryptomator"만 있다면 그걸 대신 선택하세요.
addvaultwizard.existing.chooseBtn=선택
addvaultwizard.existing.chooseBtn=선택
addvaultwizard.existing.filePickerTitle=Vault 파일 선택
addvaultwizard.existing.filePickerMimeDesc=Cryptomator Vault
## Success
@@ -105,83 +99,59 @@ addvaultwizard.success.unlockNow=지금 잠금해제
# Remove Vault
removeVault.title=Vault 제거
removeVault.message=Vault를 삭제하시겠습니까?
removeVault.description=이 행위는 Cryptomator에서 이 Vault를 지웁니다. 나중에 다시 추가할 수 있습니다. 암호화된 파일은 하드디스크에서 삭제되지 않니다.
removeVault.description=이 행위는 단지 Cryptomator에서 이 Vault를 잊게합니다. 나중에 다시 추가 할 수 있습니다. 암호화된 파일은 하드디스크에서 삭제되지 않을 것입니다.
removeVault.confirmBtn=Vault 제거
# Change Password
changepassword.title=비밀번호 변경
changepassword.enterOldPassword="%s"의 비밀번호를 입력하여 주십시요.
changepassword.finalConfirmation=비밀번호를 잊어버리면, 데이터에 접근할 수 없다는 것을 이해했습니다.
changepassword.finalConfirmation=비밀번호를 잊어버리면, 데이터에 접근할 수 없을 이해했습니다.
# Forget Password
forgetPassword.title=비밀번호 삭제
forgetPassword.title=비밀번호 분실
forgetPassword.message=저장된 비밀번호를 삭제할까요?
forgetPassword.description=시스템 키체인에서 이 Vault의 저장된 비밀번호가 삭제될 것입니다.
forgetPassword.confirmBtn=비밀번호 삭제
forgetPassword.confirmBtn=비밀번호 분실
# Unlock
unlock.title="%s" 잠금 해제
unlock.passwordPrompt="%s"의 비밀번호를 입력하십시.
unlock.passwordPrompt="%s"의 비밀번호를 입력하십시.
unlock.savePassword=비밀번호 기억
unlock.unlockBtn=잠금해제
## Select
unlock.chooseMasterkey.message=마스터키 파일을 찾을 수 없습니다
unlock.chooseMasterkey.description=이 Vault의 Masterkey를 찾지 못했습니다. 마스터 키 위치를 수동으로 선택하여 주십시.
unlock.chooseMasterkey.filePickerTitle=Masterkey 파일 선택
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Masterkey
unlock.chooseMasterkey.description=추정되는 위치에서 이 Vault의 마스터 키를 찾지 못했습니다. 마스터 키 위치를 수동으로 선택하여 주십시.
unlock.chooseMasterkey.filePickerTitle=마스터키 파일 선택
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator 마스터키
## Success
unlock.success.message=잠금 해제 성공
unlock.success.description="%s"이(가) 성공적으로 잠금 해제되었습니다. 이제 이 Vault를 마운트 지점으로 접근할 수 있습니다.
unlock.success.rememberChoice=선택 기억하기, 다시 묻지 않음
unlock.success.description="%s"이(가) 성공적으로 잠금해제되었습니다. 이제 이 Vault를 가상드라이브로 접근할 수 있습니다.
unlock.success.rememberChoice=선택 기억, 다시 묻지 않음
unlock.success.revealBtn=드라이브 표시
## Failure
unlock.error.customPath.message=Vault를 사용자 정의 경로에 마운트할 수 없습니다.
unlock.error.customPath.description.notSupported=사용자 지정 경로를 계속 사용하려면 설정으로 이동하여 이를 지원하는 볼륨 유형을 선택하십시오. 그렇지 않으면 볼트 옵션으로 이동하여 지원되는 마운트 지점을 선택하십시오.
unlock.error.customPath.description.notExists=사용자 정의 마운트 경로가 존재하지 않습니다. 로컬 파일 시스템에서 생성하거나 볼트 옵션에서 변경하세요.
unlock.error.customPath.description.inUse=드라이브 문자 또는 사용자 정의 마운트 경로 "%s"가 이미 사용 중입니다.
unlock.error.customPath.description.hideawayNotDir=잠금 해제에 사용된 임시 숨김 파일 "%3$s"을 제거할 수 없습니다. 파일을 확인한 후 수동으로 삭제해 주세요.
unlock.error.customPath.description.couldNotBeCleaned=Vault를 "%s" 경로에 마운트할 수 없습니다. 다시 시도하거나 다른 경로를 선택하세요.
unlock.error.customPath.description.notEmptyDir=사용자 정의 마운트 경로 "%s"은 빈 폴더가 아닙니다. 빈 폴더를 선택하고 다시 시도하세요.
unlock.error.customPath.description.generic=이 볼트에 대한 사용자 정의 마운트 경로를 선택했지만 다음 메시지와 함께 해당 경로를 사용하지 못했습니다: %2$s
unlock.error.restartRequired.message=Vault을 잠금 해제할 수 없습니다.
unlock.error.restartRequired.description=볼트 옵션에서 볼륨 유형을 변경하거나 Cryptomator를 다시 시작하십시오.
unlock.error.title="%s" 잠금 해제 실패
## Hub
hub.noKeychain.message=장치 키에 액세스할 수 없습니다
hub.noKeychain.description=허브 저장소를 잠금 해제하려면 키체인을 사용하여 보호되는 장치 키가 필요합니다. 계속하려면 "%s"을 활성화하고 기본 설정에서 키체인을 선택하십시오.
hub.noKeychain.openBtn=설정 열기
### Waiting
hub.auth.message=인증 대기중…
hub.auth.description=자동으로 로그인 페이지로 리다이렉트 될 것입니다.
hub.auth.loginLink=수동으로 열려면 클릭하십시오.
### Receive Key
hub.receive.message=응답 처리중…
hub.receive.description=Hub로부터 응답을 처리하고 있습니다. 잠시만 기다려 주십시오.
### Register Device
hub.register.message=새 기기
hub.register.description=이 기기로부터 첫번째 Hub 접근입니다. Account Key로 등록하십시오.
hub.register.nameLabel=기기 이름
hub.register.invalidAccountKeyLabel=유효하지 않은 계정 키
hub.register.registerBtn=등록
### Register Device Legacy
hub.register.legacy.occupiedMsg=이미 사용 중인 이름
hub.register.legacy.description=이 기기로부터 첫번째 Hub 접근입니다. 등록하십시오.
### Registration Success
hub.registerSuccess.message=기기 등록됨
hub.registerSuccess.description=등록에 성공하였습니다. Vault를 잠금 해제할 수 있습니다.
hub.registerSuccess.unlockBtn=잠금 해제
hub.registerSuccess.legacy.description=Vault에 접근하기 위해서는 이 기기를 Vault 소유주가 추가적으로 허가해야 합니다.
hub.registerSuccess.unlockBtn=잠금해제
### Registration Failed
hub.registerFailed.message=기기 등록 실패
hub.registerFailed.description.generic=등록 중에 에러가 발생했습니다. 앱 로그에서 자세한 정보를 확인할 수 있습니다.
hub.registerFailed.description.deviceAlreadyExists=이 기기는 이미 다른 사용자에 등록되어 있습니다. 다른 사용자 계정이나 다른 기기를 사용해보세요.
### Unauthorized
hub.unauthorized.message=액세스 거부
hub.unauthorized.description=해당 Vault에 접근하도록 허가되지 않았습니다. Vault 소유자에게 권한을 요청하세요.
hub.unauthorized.message=액세스 거부
hub.unauthorized.description=귀하의 기기는 아직 이 저장소에 액세스할 수 있는 권한이 없습니다. Vault 소유자에게 승인을 요청하세요.
### Requires Account Initialization
hub.requireAccountInit.message=조치가 필요함
hub.requireAccountInit.description.0=진행하려면 필요한 조치를 완료하십시오:
hub.requireAccountInit.description.1=Hub 사용자 프로필
hub.requireAccountInit.description.2=.
### License Exceeded
hub.invalidLicense.message=Hub 라이선스가 잘못되었습니다.
hub.invalidLicense.description=Cryptomator Hub 인스턴스에 잘못된 라이선스가 있습니다. 라이센스를 업그레이드하거나 갱신하려면 허브 관리자에게 알리십시오.
@@ -230,10 +200,9 @@ migration.impossible.moreInfo=Vault를 이전 버전으로 계속 열수 있습
health.title="%s"의 상태 검사
health.intro.header=상태 검사
health.intro.text=상태 검사는 Vault의 내부 구조의 문제점을 점검하고 해결할 수 있는 기능입니다. 다음 사항을 유의하시기 바랍니다:
health.intro.remarkSync=모든 장치가 완전히 동기화됐는지 확인하십시오. 대부분의 문제를 해결합니다.
health.intro.remarkFix=모든 문제를 해결할 수 있는 것은 아닙니다.
health.intro.remarkBackup=데이터가 손상된 경우 백업만이 유일한 해결책입니다.
health.intro.affirmation=나는 위 정보를 읽었으며, 이해했습니다.
health.intro.affirmation=나는 위 정보를 읽고 정말 이해했습니다.
## Start Failure
health.fail.header=Vault 설정을 불러오는 중 에러 발생
health.fail.ioError=설정 파일에 접근하는 중 에러가 발생했습니다.
@@ -254,17 +223,13 @@ health.check.detail.checkFinishedAndFound=검사가 완료되었습니다. 검
health.check.detail.checkFailed=오류로 인해 검사가 종료되었습니다.
health.check.detail.checkCancelled=검사가 취소되었습니다
health.check.detail.listFilters.label=필터
health.check.detail.fixAllSpecificBtn=모든 문제 형식 고치기
health.check.exportBtn=보고서 내보내기
## Result view
health.result.severityFilter.all=모든 상태 표시
health.result.severityFilter.good=양호
health.result.severityFilter.info=정보
health.result.severityFilter.warn=경고
health.result.severityFilter.crit=심각
health.result.severityTip.good=상태: 양호\n정상적인 vault 구조를 가지고 있습니다.
health.result.severityTip.info=상태: 정보\nVault 구조 온전함, 문제 해결 권장됨.
health.result.severityTip.warn=상태: 경고\nVault 구조 손상됨, 문제 해결 요구됨.
health.result.severityTip.crit=상태: 심각\nVault 구조가 손상되었습니다. 데이터 손실이 발생했습니다.
health.result.fixStateFilter.all=모든 문제 해결 상태
health.result.fixStateFilter.fixable=문제 해결 가능
@@ -273,7 +238,7 @@ health.result.fixStateFilter.fixing=문제 해결중…
health.result.fixStateFilter.fixed=문제 해결됨
health.result.fixStateFilter.fixFailed=문제 해결 실패
## Fix Application
health.fix.fixBtn=문제 해결
health.fix.fixBtn=문제해결
health.fix.successTip=문제 해결이 성공적으로 완료되었습니다
health.fix.failTip=문제 해결 실패, 상세 정보는 로그를 참조하십시요.
@@ -282,15 +247,13 @@ preferences.title=환경설정
## General
preferences.general=일반
preferences.general.startHidden=Cryptomator를 시작할 때 창 숨김
preferences.general.autoCloseVaults=애플리케이션을 닫을 때 자동으로 열린 Vault를 잠그기.
preferences.general.debugLogging=디버그 로깅 활성화
preferences.general.debugDirectory=로그 파일 표시
preferences.general.debugLogging=디버그 로그기록을 사용하도록 설정
preferences.general.debugDirectory=Log 파일 표시
preferences.general.autoStart=시스템 시작 시 Cryptomator 실행
preferences.general.keychainBackend=다음 경로에 비밀번호 저장
preferences.general.quickAccessService=열린 Vault를 빠른 접근 위치에 추가하기
## Interface
preferences.interface=인터페이스
preferences.interface.theme=테마
preferences.interface.theme=테마설정
preferences.interface.theme.automatic=자동
preferences.interface.theme.dark=어둡게
preferences.interface.theme.light=밝게
@@ -301,16 +264,11 @@ preferences.interface.interfaceOrientation=인터페이스 방향
preferences.interface.interfaceOrientation.ltr=왼쪽에서 오른쪽으로
preferences.interface.interfaceOrientation.rtl=오른쪽에서 왼쪽으로
preferences.interface.showTrayIcon=트레이 아이콘 보기 (재시작 필요)
preferences.interface.compactMode=간소화 Vault 리스트 활성화
## Volume
preferences.volume=가상 드라이브
preferences.volume.type=기본 볼륨 타입
preferences.volume.type.automatic=자동
preferences.volume.docsTooltip=다른 볼륨 타입에 대해서는 문서를 참조하십시오.
preferences.volume.fuseRestartRequired=변경 사항을 적용하기 위해, Cryptomator의 재시작이 필요합니다.
preferences.volume.tcp.port=기본 TCP 포트
preferences.volume.supportedFeatures=현재 선택한 볼륨 타입은 다음과 같은 기능들을 지원합니다:
preferences.volume.feature.mountAuto=마운트 지점 자동 지정
preferences.volume.feature.mountToDir=마운트할 폴더 지정
preferences.volume.feature.mountToDriveLetter=마운트할 드라이브 문자
preferences.volume.feature.mountFlags=사용자 정의 마운트 설정
@@ -331,18 +289,13 @@ preferences.updates.upToDate=현재 최신 버전의 Cryptomator를 사용하고
## Contribution
preferences.contribute=후원하기
preferences.contribute.registeredFor=%s(으)로 후원자 인증 등록됨
preferences.contribute.registeredFor=%s (으)로 후원자 인증 등록됨
preferences.contribute.noCertificate=Cryptomator를 후원하시고 후원자 인증을 받으십시요. 라이선스 키와 비슷하지만 무료 소프트웨어를 사용하는 멋진 사람들을 위한 것입니다. ;-)
preferences.contribute.getCertificate=아직 후원자 인증이 없으신가요? 어떻게 얻는지 배울 수 있습니다.
preferences.contribute.promptText=후원자 인증코드를 여기에 붙여넣기
preferences.contribute.thankYou=Cryptomator의 오픈 소스 개발을 지원해 주셔서 감사합니다!
preferences.contribute.donate=후원하기
preferences.contribute.sponsor=스폰서
### Remove License Key Dialog
removeCert.title=인증서 제거
removeCert.message=서포터 인증서를 제거하시겠습니까?
removeCert.description=Cryptomator의 핵심 기능은 영향을 받지 않습니다. Vault에 대한 접근이 제한되거나 보안이 약화되지 않습니다.
removeCert.confirmBtn=제거
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -380,35 +333,30 @@ stats.write.accessCount=총 쓰기 횟수: %d
## Accesses
stats.access.current=접근: %d
stats.access.total=총 접근: %d
# Main Window
## Vault List
main.vaultlist.emptyList.onboardingInstruction=여기를 클릭하여 Vault를 추가하세요
main.vaultlist.emptyList.onboardingInstruction=Vault를 추가하기 위해 이곳을 클릭합니다.
main.vaultlist.contextMenu.remove=제거...
main.vaultlist.contextMenu.lock=잠금
main.vaultlist.contextMenu.unlock=잠금 해제...
main.vaultlist.contextMenu.unlockNow=지금 잠금 해제
main.vaultlist.contextMenu.unlock=잠금해제...
main.vaultlist.contextMenu.unlockNow=지금 잠금해제
main.vaultlist.contextMenu.vaultoptions=Vault 옵션 보기
main.vaultlist.contextMenu.reveal=드라이브 표시
main.vaultlist.addVaultBtn.menuItemNew=새 Vault 생성...
main.vaultlist.addVaultBtn.menuItemExisting=기존 Vault 열기...
##Notificaition
main.notification.updateAvailable=업데이트가 있습니다.
main.notification.support=Cryptomator 지원하기.
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=파일을 보호하기 위해 Cryptomator를 선택해주셔서 감사합니다. 만약 다른 도움이 필요하시면, 시작 안내서를 참조하시기 바랍니다.
main.vaultDetail.welcomeOnboarding=파일을 보호하기 위해 Cryptomator를 선택해주셔서 감사합니다. 만약 다른 도움이 필요하시면, 시작안내서를 참조하시기 바랍니다.
### Locked
main.vaultDetail.lockedStatus=잠김
main.vaultDetail.unlockBtn=잠금 해제...
main.vaultDetail.unlockNowBtn=지금 잠금 해제
main.vaultDetail.unlockBtn=잠금해제...
main.vaultDetail.unlockNowBtn=지금 잠금해제
main.vaultDetail.optionsBtn=Vault 옵션
main.vaultDetail.passwordSavedInKeychain=비밀번호 저장됨
main.vaultDetail.share=공유하기
main.vaultDetail.share=공유하기
### Unlocked
main.vaultDetail.unlockedStatus=잠금 해제됨
main.vaultDetail.unlockedStatus=잠금해제됨
main.vaultDetail.accessLocation=이 Vault의 내용은 다음의 경로에서 접근할 수 있습니다:
main.vaultDetail.revealBtn=드라이브 표시
main.vaultDetail.copyUri=URI 복사
@@ -420,9 +368,6 @@ main.vaultDetail.throughput.kbps=%.1f KiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Vault 통계
main.vaultDetail.locateEncryptedFileBtn=암호화된 파일 위치
main.vaultDetail.locateEncryptedFileBtn.tooltip=암호화된 파일을 보기 위해 Vault에서 파일을 선택하십시오.
main.vaultDetail.encryptedPathsCopied=클립보드에 복사됨!
main.vaultDetail.filePickerTitle=Vault 내부에서 파일 선택
### Missing
main.vaultDetail.missing.info=Cryptomator가 이 경로에 있는 Vault를 찾지 못했습니다.
main.vaultDetail.missing.recheck=다시 시도
@@ -430,27 +375,26 @@ main.vaultDetail.missing.remove=Vault 목록에서 제거...
main.vaultDetail.missing.changeLocation=Vault 위치 변경
### Needs Migration
main.vaultDetail.migrateButton=Vault 업그레이드
main.vaultDetail.migratePrompt=Vault에 접근하기 전, 새로운 포으로 업그레이드가 필요합니다.
main.vaultDetail.migratePrompt=Vault에 접근하기 전, 새로운 포으로 업그레이드가 필요합니다.
### Error
main.vaultDetail.error.info=디스크에서 Vault를 로드 중 에러 발생
main.vaultDetail.error.reload=새로고침
main.vaultDetail.error.windowTitle=Vault 로중 에러 발생
main.vaultDetail.error.windowTitle=Vault 로중 에러 발생
# Wrong File Alert
wrongFileAlert.title=파일 암호화 방법
wrongFileAlert.message=이 파일들을 암호화하려고 하십니까?
wrongFileAlert.description=이 목적을 위해, Cryptomator는 파일 관리자에 볼륨을 제공합니다.
wrongFileAlert.instruction.0=파일을 암호화 하려면, 다음의 3단계를 따르십시:
wrongFileAlert.instruction.1=1. Vault 잠금 해제하십시오.
wrongFileAlert.instruction.2=2. "표시" 버튼을 클릭해 파일 탐색기에서 볼륨을 여십시오.
wrongFileAlert.instruction.3=3. 이 볼륨에 파일 추가하십시오.
wrongFileAlert.link=더 많은 지원을 위해, 다음을 방문하십시
wrongFileAlert.instruction.0=파일을 암호화 하려면, 다음의 3단계를 따르십시:
wrongFileAlert.instruction.1=1. Vault 잠금해제
wrongFileAlert.instruction.2=2. 파일 관리자에서 열람된 볼륨의 "표시" 버튼 클릭
wrongFileAlert.instruction.3=3. 이 볼륨에 파일 추가
wrongFileAlert.link=추후 지원을 위해, 다음을 방문하십시
# Vault Options
## General
vaultOptions.general=일반
vaultOptions.general.vaultName=Vault 이름
vaultOptions.general.autoLock.lockAfterTimePart1=다음 시간 동안 유휴상태 시 잠그기
vaultOptions.general.autoLock.lockAfterTimePart1=다음 시간동안 유휴상태 시 잠금 :
vaultOptions.general.autoLock.lockAfterTimePart2=
vaultOptions.general.unlockAfterStartup=Cryptomator를 시작할 때 Vault 잠금 해제
vaultOptions.general.actionAfterUnlock=성공적으로 잠금해제 후
@@ -461,7 +405,6 @@ vaultOptions.general.startHealthCheckBtn=상태 검사 시작
## Mount
vaultOptions.mount=드라이브 구성
vaultOptions.mount.info=기본 설정을 바꾸기 위해 가상 드라이브 설정을 여십시오.
vaultOptions.mount.readonly=읽기 전용
vaultOptions.mount.customMountFlags=사용자 정의 매개변수 사용
vaultOptions.mount.winDriveLetterOccupied=사용됨
@@ -471,10 +414,7 @@ vaultOptions.mount.mountPoint.driveLetter=드라이브 문자를 지정하여
vaultOptions.mount.mountPoint.custom=선택한 디렉토리 사용
vaultOptions.mount.mountPoint.directoryPickerButton=선택
vaultOptions.mount.mountPoint.directoryPickerTitle=디렉토리 선택
vaultOptions.mount.volumeType.default=기본 (%s)
vaultOptions.mount.volumeType.restartRequired=이 볼륨 타입을 사용하기 위해, Cryptomator의 재시작이 필요합니다.
vaultOptions.mount.volume.tcp.port=TCP 포트
vaultOptions.mount.volume.type=볼륨 타입
## Master Key
vaultOptions.masterkey=비밀번호
vaultOptions.masterkey.changePasswordBtn=비밀번호 변경
@@ -484,8 +424,6 @@ vaultOptions.masterkey.showRecoveryKeyBtn=복구 키 표시
vaultOptions.masterkey.recoverPasswordBtn=비밀번호 재설정
## Hub
vaultOptions.hub=복구
vaultOptions.hub.convertInfo=비상상황에 이 Hub Vault를 비밀번호 기반 Vault로 변환하기 위해 복구 키를 사용할 수 있습니다.
vaultOptions.hub.convertBtn=비밀번호 기반 Vault로 변환하기
# Recovery Key
## Display Recovery Key
@@ -493,7 +431,7 @@ recoveryKey.display.title=복구 키 보기
recoveryKey.create.message=비밀번호가 필요합니다
recoveryKey.create.description="%s"의 복구 키를 표시하려면 비밀번호를 입력해 주세요.
recoveryKey.display.description="%s" 데이터 접근을 복원하는데 사용 할 수 있는 복구 키 입니다:
recoveryKey.display.StorageHints=매우 안전한곳에 보관하십시. 예시:\n • 비밀번호 관리자를 사용하여 저장\n • USB 플래시 드라이브에 저장\n • 종이 출력
recoveryKey.display.StorageHints=매우 안전한곳에 보관하십시. 예시:\n • 비밀번호 관리자를 사용하여 저장\n • USB 플래시 드라이브에 저장\n • 종이 출력
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=비밀번호 바꾸기
@@ -509,11 +447,9 @@ recoveryKey.recover.resetSuccess.message=비밀번호 재설정 성공
recoveryKey.recover.resetSuccess.description=이제 해당 vault를 새 비밀번호로 잠금 해제할 수 있습니다.
# Convert Vault
convertVault.title=Vault 변환
convertVault.convert.convertBtn.before=변환
convertVault.convert.convertBtn.processing=변환중…
convertVault.success.message=변환 완료
convertVault.hubToPassword.success.description=이제 Hub 접근 없이 지정된 비밀번호로 Vault를 잠금해제할 수 있습니다.
# New Password
newPassword.promptText=새 비밀번호를 입력하세요
@@ -530,50 +466,16 @@ passwordStrength.messageLabel.4=매우 강함
# Quit
quit.title=앱 종료
quit.message=잠금 해제된 vault들이 존재합니다
quit.description=정말로 나가시겠습니까? Cryptomator는 데이터 손실을 막기 위해 열린 Vault를 잠글 것입니다.
quit.lockAndQuitBtn=Vault 잠금 후 종료하기
# Forced Quit
quit.forced.message=일부 Vault를 잠글 수 없습니다.
quit.forced.description=대기 중인 작동이나 파일이 열려있어 Vault를 잠그는데 실패하였습니다. 남은 Vault를 강제로 잠글 수 있으나, 입/출력의 중단은 저장되지 않은 데이터의 유실을 초래할 수 있습니다.
quit.forced.forceAndQuitBtn=Vault 강제 잠금 후 종료하기
# Update Reminder
updateReminder.title=업데이트 확인
updateReminder.message=업데이트 확인
updateReminder.description=새로운 기능, 버그 수정, 보안 향상을 위해 업데이트하십시오. 업데이트 자동 확인을 권장합니다.
updateReminder.notNow=나중에
updateReminder.yesOnce=예, 한번만
updateReminder.yesAutomatically=예, 자동으로
#Dokany Support End
dokanySupportEnd.title=지원 중단 경고
dokanySupportEnd.message=Dokany에 대한 지원 중단
dokanySupportEnd.description=Cryptomator에서 Dokany 볼륨 형식은 더이상 지원되지 않습니다. 기본 볼륨 형식을 사용하도록 설정이 조정되었으며, 설정에서 기본 형식을 확인할 수 있습니다.
dokanySupportEnd.preferencesBtn=설정 열기
#Retry If Readonly
retryIfReadonly.title=Vault 접근 제한됨
retryIfReadonly.message=Vault 디렉터리에 쓰기 권한 없음
retryIfReadonly.description=Cryptomator가 Vault 디렉터리에 쓸 수 없습니다. Vault를 읽기 전용으로 설정하고 다시 시도할 수 있습니다. 이 옵션은 Vault 옵션에서 바꿀 수 있습니다.
retryIfReadonly.retry=바꾸고 다시 시도하기
# Share Vault
shareVault.title=Vault 공유
shareVault.message=Vault를 다른 사람과 공유하려 하십니까?
shareVault.description=Vault를 타인과 공유할 때에는 항상 주의하십시오. 간단히 이 단계들을 따르십시오.
shareVault.instruction.1=1. 암호화된 Vault 폴더를 클라우드 스토리지를 통해 공유하십시오.
shareVault.instruction.2=2. Vault의 비밀번호를 안전한 방식으로 전달하십시오.
shareVault.remarkBestPractices=문서에 있는 권장사항을 통해 더 많은 정보를 확인하십시오.
shareVault.docsTooltip=Vault의 공유에 대해서는 문서를 참조하십시오.
shareVault.hubAd.description=팀에서 작업하는 안전한 방법
shareVault.hubAd.keyManagement=• 사전지식 없는 키 관리
shareVault.hubAd.authentication=• 강력한 인증
shareVault.hubAd.encryption=• 종단간 암호화
shareVault.visitHub=Cryptomator Hub 방문하기
shareVault.hub.message=Hub Vault를 공유하는법
shareVault.hub.description=다른 팀 구성원과 Vault를 공유하기 위해서는 다음 단계를 따르십시오:
shareVault.hub.instruction.1=1. 암호화된 Vault 폴더를 클라우드 스토리지를 통해 공유하십시오.
shareVault.hub.instruction.2=2. Cryptomator Hub에서 팀 구성원에 접근을 허가하기
shareVault.hub.openHub=Cryptomator Hub 열기

View File

@@ -85,6 +85,7 @@ addvaultwizard.success.unlockNow=Atslēgt tagad
# Remove Vault
removeVault.title=Noņemt glabātuvi
removeVault.description=Šis tikai liks Cryptomator aizmirst šo glabātuvi. Jūs to variet pievienot vēlāk atkārtoti. Nekādi šifrētie dati no diska netiks dzēsti.
removeVault.confirmBtn=Noņemt glabātuvi
# Change Password
changepassword.title=Mainīt paroli
@@ -280,6 +281,4 @@ quit.lockAndQuitBtn=Aizslēgt un aizvērt
#Dokany Support End
#Retry If Readonly
# Share Vault

View File

@@ -164,6 +164,4 @@ vaultOptions.mount.mountPoint.directoryPickerButton=Избор…
#Dokany Support End
#Retry If Readonly
# Share Vault

View File

@@ -118,6 +118,4 @@
#Dokany Support End
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=Kopiert!
generic.button.done=Ferdig
generic.button.next=Neste
generic.button.print=Skriv ut
generic.button.remove=Fjern
# Error
error.message=Feilkode %s
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Lås opp nå
removeVault.title=Fjern hvelvet
removeVault.message=Fjerne hvelv?
removeVault.description=Dette vil kun få Cryptomator til å glemme dette hvelvet. Du kan legge til hvelvet senere igjen. Ingen krypterte filer blir slettet fra harddisken.
removeVault.confirmBtn=Fjern hvelvet
# Change Password
changepassword.title=Endre passord
@@ -176,6 +176,7 @@ hub.registerFailed.description.generic=En feil ble gjort under registreringspros
hub.registerFailed.description.deviceAlreadyExists=Denne enheten er allerede registrert for en annen bruker. Prøv å endre brukerkontoen eller bruk en annen enhet.
### Unauthorized
hub.unauthorized.message=Ingen tilgang
hub.unauthorized.description=Enheten din har ikke blitt autorisert til å få tilgang til dette hvelvet ennå. Spør hvelveieren om å tillate det.
### Requires Account Initialization
hub.requireAccountInit.message=Påkrevd handling
hub.requireAccountInit.description.0=For å fortsette, fullfør trinnene som kreves i din
@@ -332,11 +333,9 @@ preferences.contribute.registeredFor=Supporter sertifikat registrert for %s
preferences.contribute.noCertificate=Støtt Cryptomator og motta et supporter-sertifikat. Det er som en lisensnøkkel, men for fantastiske mennesker som bruker fri programvare. ;-)
preferences.contribute.getCertificate=Har du ikke en allerede? Lær hvordan du kan skaffe den.
preferences.contribute.promptText=Lim inn supporter sertifikatkoden her
preferences.contribute.donate=Donér
preferences.contribute.sponsor=Sponsor
### Remove License Key Dialog
removeCert.title=Fjern sertifikat
removeCert.confirmBtn=Fjern
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -387,7 +386,6 @@ main.vaultlist.contextMenu.unlockNow=Lås opp nå
main.vaultlist.contextMenu.vaultoptions=Alternativer for hvelvet
main.vaultlist.contextMenu.reveal=Vis enheten
##Notificaition
main.notification.support=Støtt Cryptomator.
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Takk for at du valgte Cryptomator for å beskytte filene dine. Hvis du trenger hjelp, sjekk ut våre guider for å komme i gang:
@@ -543,8 +541,6 @@ dokanySupportEnd.message=Støtte for Dokany er avsluttet
dokanySupportEnd.description=Volumtypen Dokany støttes ikke lenger av Cryptomator. Innstillingene dine er justert for å bruke standard volumtype nå. Du kan se standardtypen i innstillingene.
dokanySupportEnd.preferencesBtn=Åpne innstillinger
#Retry If Readonly
# Share Vault
shareVault.title=Del hvelv
shareVault.message=Vil du dele hvelvet ditt med andre?

View File

@@ -13,7 +13,6 @@ generic.button.copied=Gekopieerd!
generic.button.done=Klaar
generic.button.next=Volgende
generic.button.print=Afdrukken
generic.button.remove=Verwijderen
# Error
error.message=Er deed zich een fout voor
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Nu Ontgrendelen
removeVault.title=Verwijder Kluis
removeVault.message=Kluis verwijderen?
removeVault.description=Dit laat Cryptomator enkel deze kluis vergeten. U kunt deze later opnieuw toevoegen. Er worden geen versleutelde bestanden van uw harde schijf verwijderd.
removeVault.confirmBtn=Verwijder Kluis
# Change Password
changepassword.title=Wijzig wachtwoord
@@ -176,7 +176,7 @@ hub.registerFailed.description.generic=Er is een fout gemaakt in het registratie
hub.registerFailed.description.deviceAlreadyExists=Dit apparaat is al geregistreerd voor een andere gebruiker. Probeer de account te wijzigen of gebruik een ander apparaat.
### Unauthorized
hub.unauthorized.message=Toegang geweigerd
hub.unauthorized.description=U bent niet geautoriseerd om deze kluis te openen. Neem contact op met de eigenaar van de kluis om toegang aan te vragen.
hub.unauthorized.description=Uw apparaat is nog niet gemachtigd om toegang te krijgen tot deze kluis. Vraag de eigenaar van de kluis om toestemming te geven.
### Requires Account Initialization
hub.requireAccountInit.message=Actie vereist
hub.requireAccountInit.description.0=Om verder te gaan, gelieve de stappen te voltooien in uw
@@ -343,6 +343,7 @@ preferences.contribute.sponsor=Sponsor
removeCert.title=Verwijder Certificaat
removeCert.message=Certificaat verwijderen?
removeCert.description=De kernfuncties van Cryptomator worden hierdoor niet beïnvloed. Toegang tot uw kluizen wordt niet beperkt, noch wordt het beveiligingsniveau verlaagd.
removeCert.confirmBtn=Verwijderen
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -552,12 +553,6 @@ dokanySupportEnd.message=Ondersteuning beëindigd voor Dokany
dokanySupportEnd.description=Het volumetype Dokany wordt niet langer ondersteund door Cryptomator. Uw instellingen zijn aangepast om nu het standaard volumetype te gebruiken. U kunt het standaardtype bekijken in de voorkeuren.
dokanySupportEnd.preferencesBtn=Open Voorkeuren
#Retry If Readonly
retryIfReadonly.title=Beperkte toegang tot kluis
retryIfReadonly.message=Geen schrijftoegang tot de kluis map
retryIfReadonly.description=Cryptomator kan niet naar de kluis map schrijven. U kunt de kluis veranderen om alleen-lezen te zijn en het opnieuw proberen. Deze optie kan worden uitgeschakeld in de kluis opties.
retryIfReadonly.retry=Wijzig en probeer opnieuw
# Share Vault
shareVault.title=Kluis delen
shareVault.message=Wilt u uw kluis met anderen delen?
@@ -574,6 +569,6 @@ shareVault.visitHub=Bezoek Cryptomator Hub
shareVault.hub.message=Hoe een Hub kluis delen
shareVault.hub.description=Om de inhoud van de kluis te delen met een ander teamlid, moet u twee stappen uitvoeren:
shareVault.hub.instruction.1=1. Deel toegang van de versleutelde kluis map via de cloud opslag.
shareVault.hub.instruction.1=1. Deel toegang van de versleutelde kluismap via de cloud opslag.
shareVault.hub.instruction.2=2. Geef teamlid toegang in Cryptomator Hub.
shareVault.hub.openHub=Open Cryptomator Hub

View File

@@ -72,6 +72,7 @@ addvaultwizard.success.unlockNow=Lås opp no
# Remove Vault
removeVault.title=Fjern kvelv
removeVault.description=Dette vil berre få Cryptomator til å gløyma denne kvelven. Du kan legga til kvelven seinare igjen. Ingen krypterte filer blir sletta frå harddisken.
removeVault.confirmBtn=Fjern kvelv
# Change Password
changepassword.title=Byt passord
@@ -278,6 +279,4 @@ quit.lockAndQuitBtn=Lås og avslutt
#Dokany Support End
#Retry If Readonly
# Share Vault

View File

@@ -118,6 +118,4 @@
#Dokany Support End
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=ਕਾਪੀ ਕੀਤਾ!
generic.button.done=ਮੁਕੰਮਲ
generic.button.next=ਅੱਗੇ
generic.button.print=ਪਰਿੰਟ ਕਰੋ
generic.button.remove=ਹਟਾਓ
# Error
error.message=ਇੱਕ ਤਰੁੱਟੀ ਆਈ ਹੈ
@@ -52,7 +51,6 @@ addvaultwizard.new.directoryPickerLabel=ਪਸੰਦੀਦਾ ਟਿਕਾਣਾ
addvaultwizard.new.directoryPickerButton=…ਚੁਣੋ
addvaultwizard.new.directoryPickerTitle=ਡਾਇਰੈਕਟਰੀ ਚੁਣੋ
addvaultwizard.new.fileAlreadyExists=ਵਾਲਟ ਨਾਂ ਨਾਲ ਫਾਇਲ ਜਾਂ ਡਾਇਰੈਕਟਰੀ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ
addvaultwizard.new.locationIsOk=ਤੁਹਾਡੇ ਵਾਲਟ ਲਈ ਢੁੱਕਵਾਂ ਟਿਕਾਣਾ
addvaultwizard.new.invalidName=ਗਲਤ ਵਾਲਟ ਨਾਂ
addvaultwizard.new.validName=ਵਾਜਬ ਵਾਲਟ ਨਾਂ
addvaultwizard.new.validCharacters.message=ਵਾਲਟ ਨਾਂ ਵਿੱਚ ਅੱਗੇ ਦਿੱਤੇ ਅੱਖਰ ਹੋ ਸਕਦੇ ਹਨ:
@@ -61,8 +59,6 @@ addvaultwizard.new.validCharacters.numbers=ਅੰਕ
addvaultwizard.new.validCharacters.dashes=ਹਾਈਫਨ (%s) ਜਾਂ ਹੇਠਾਂ ਲਾਈਨ (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=ਮਾਹਰ ਸੈਟਿੰਗਾਂ ਨੂੰ ਸਮਰੱਥ ਕਰੋ
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=ਮੁੱਲ 36 ਤੋਂ 220 ਵਿਚਾਲੇ ਚਾਹੀਦਾ ਹੈ (ਮੂਲ 220 ਹੈ)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=ਹੋਰ ਸਿੱਖਣ ਲਈ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਖੋਲ੍ਹੋ।
addvaultwizard.new.expertSettings.shorteningThreshold.valid=ਵਾਜਬ
### Password
addvaultwizard.new.createVaultBtn=ਵਾਲਟ ਬਣਾਓ
@@ -99,6 +95,7 @@ addvaultwizard.success.unlockNow=ਹੁਣੇ ਅਣ-ਲਾਕ ਕਰੋ
removeVault.title=ਵਾਲਟ ਹਟਾਓ
removeVault.message=ਵਾਲਟ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?
removeVault.description=ਇਸ ਸਿਰਫ਼ Cryptomator ਨੂੰ ਇਹ ਵਾਲਟ ਭੁਲਾਏਗਾ। ਤੁਸੀਂ ਇਸ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਵੀ ਜੋੜ ਸਕਦੇ ਹੋ। ਕੋਈ ਵੀ ਇੰਕ੍ਰਿਪਟ ਕੀਤੀ ਫਾਇਲ ਤੁਹਾਡੀ ਹਾਰਡ ਡਰਾਇਵ ਉਤੋਂ ਹਟਾਈ ਨਹੀਂ ਜਾਵੇਗੀ।
removeVault.confirmBtn=ਵਾਲਟ ਹਟਾਓ
# Change Password
changepassword.title=ਪਾਸਵਰਡ ਬਦਲੋ
@@ -149,10 +146,8 @@ hub.registerFailed.message=ਡਿਵਾਈਸ ਰਜਿਸਟਰ ਕਰਨਾ
hub.unauthorized.message=ਪਹੁੰਚ ਤੋਂ ਇਨਾਕਰ
### Requires Account Initialization
hub.requireAccountInit.message=ਕਾਰਵਾਈ ਦੀ ਲੋੜ ਹੈ
hub.requireAccountInit.description.1=ਹੱਬ ਵਰਤੋਂਕਾਰ ਪਰੋਫਾਇਲ
hub.requireAccountInit.description.2=.
### License Exceeded
hub.invalidLicense.message=ਹੱਬ ਲਸੰਸ ਗ਼ੈਰਵਾਜਬ ਹੈ
# Lock
## Force
@@ -168,7 +163,6 @@ lock.fail.description=ਵਾਲਟ "%s" ਨੂੰ ਲਾਕ ਨਹੀਂ ਕੀ
migration.title=ਵਾਲਟ ਅੱਪਗਰੇਡ ਕਰੋ
## Start
migration.start.header=ਵਾਲਟ ਅੱਪਗਰੇਡ ਕਰੋ
migration.start.remarkUndone=ਇਸ ਅੱਪਗਰੇਡ ਨੂੰ ਵਾਪਸ ਨਹੀਂ ਲਿਆ ਜਾ ਸਕਦਾ ਹੈ।
migration.start.confirm=ਮੈਂ ਉੱਤੇ ਦਿੱਤੀ ਜਾਣਕਾਰੀ ਨੂੰ ਪੜ੍ਹੋ ਅਤੇ ਸਮਝ ਲਿਆ ਹੈ
## Run
migration.run.enterPassword="%s" ਲਈ ਪਾਸਵਰਡ ਦਿਓ
@@ -202,15 +196,9 @@ health.intro.affirmation=ਮੈਂ ਉੱਤੇ ਦਿੱਤੀ ਜਾਣਕਾ
health.fail.header=ਵਾਲਟ ਸੰਰਚਨਾ ਲੋਡ ਕਰਨ ਲਈ ਗਲਤੀ
health.fail.moreInfo=ਹੋਰ ਜਾਣਕਾਰੀ
## Check Selection
health.checkList.selectAllButton=ਸਭ ਚੋਣਾਂ ਨੂੰ ਚੁਣੋ
health.checkList.deselectAllButton=ਸਭ ਚੋਣਾਂ ਨੂੰ ਨਾ ਚੁਣੋ
health.check.runBatchBtn=ਚੁਣੀਆਂ ਚੋਣਾਂ ਨੂੰ ਚਲਾਓ
## Detail view
health.check.detail.checkScheduled=ਜਾਂਚ ਨੂੰ ਸੈਡਿਊਲ ਕੀਤਾ ਗਿਆ ਹੈ।
health.check.detail.checkRunning=ਜਾਂਚ ਇਸ ਵੇਲੇ ਚੱਲ ਰਹੀ ਹੈ…
health.check.detail.checkCancelled=ਜਾਂਚ ਨੂੰ ਰੱਦ ਕੀਤਾ ਗਿਆ ਹੈ।
health.check.detail.listFilters.label=ਫਿਲਟਰ
health.check.exportBtn=ਰਿਪੋਰਟ ਨੂੰ ਐਕਸਪੋਰਟ ਕਰੋ
## Result view
health.result.severityFilter.good=ਵਧੀਆ
health.result.severityFilter.info=ਜਾਣਕਾਰੀ
@@ -248,7 +236,6 @@ preferences.volume=ਵਰਚੁਅਲ ਡਰਾਇਵ
preferences.volume.type=ਮੂਲ ਵਾਲੀਅਮ ਕਿਸਮ
preferences.volume.type.automatic=ਆਟੋਮੈਟਿਕ
preferences.volume.tcp.port=ਮੂਲ TCP ਪੋਰਟ
preferences.volume.feature.readOnly=ਸਿਰਫ਼-ਪੜ੍ਹਨ ਲਈ ਮਾਊਂਟ
## Updates
preferences.updates=ਅੱਪਡੇਟ
preferences.updates.currentVersion=ਮੌਜੂਦਾ ਵਰਜ਼ਨ: %s
@@ -260,18 +247,15 @@ preferences.updates.lastUpdateCheck.never=ਕਦੇ ਨਹੀਂ
preferences.updates.lastUpdateCheck.recently=ਸੱਜਰੇ
preferences.updates.lastUpdateCheck.daysAgo=%s ਦਿਨ ਪਹਿਲਾਂ
preferences.updates.lastUpdateCheck.hoursAgo=%s ਘੰਟੇ ਪਹਿਲਾਂ
preferences.updates.upToDate=Cryptomator ਅੱਪ-ਟੂ-ਡੇਟ ਹੈ।
## Contribution
preferences.contribute=ਸਾਡਾ ਸਮਰਥਨ ਕਰੋ
preferences.contribute.registeredFor=%s ਲਈ ਰਜਿਸਟਰ ਕੀਤਾ ਸਹਿਯੋਗੀ ਸਰਟੀਫਿਕੇਟ
preferences.contribute.thankYou=Cryptomator ਦੇ ਖੁੱਲ੍ਹੇ ਸਰੋਤ ਵਿਕਾਸ ਨੂੰ ਸਹਿਯੋਗ ਦੇਣ ਲਈ ਤੁਹਾਡਾ ਧੰਨਵਾਦ ਹੈ!
preferences.contribute.donate=ਦਾਨ ਕਰੋ
preferences.contribute.sponsor=ਸਪਾਂਸਰ
### Remove License Key Dialog
removeCert.title=ਸਰਟੀਫਿਕੇਟ ਨੂੰ ਹਟਾਓ
removeCert.message=ਸਹਿਯੋਗੀ ਸਰਟੀਫਿਕੇਟ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?
removeCert.confirmBtn=ਹਟਾਓ
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -349,7 +333,6 @@ main.vaultDetail.throughput.kbps=%.1f KiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=ਵਾਲਟ ਅੰਕੜੇ
main.vaultDetail.locateEncryptedFileBtn=ਇੰਕ੍ਰਿਪਟ ਕੀਤੀ ਫਾਇਲ ਨੂੰ ਲੱਭੋ
main.vaultDetail.filePickerTitle=ਵਾਲਟ ਵਿੱਚ ਫਾਇਲ ਨੂੰ ਚੁਣੋ
### Missing
main.vaultDetail.missing.info=Cryptomator ਇਸ ਮਾਗਰ ਉੱਤੇ ਵਾਲਟ ਨਹੀਂ ਲੱਭਿਆ ਸਕੀ।
main.vaultDetail.missing.recheck=ਮੁੜ-ਜਾਂਚੋ
@@ -410,7 +393,6 @@ vaultOptions.masterkey.showRecoveryKeyBtn=ਰਿਕਰਵੀ ਕੁੰਜੀ ਦ
vaultOptions.masterkey.recoverPasswordBtn=ਪਾਸਵਰਡ ਰੀਸੈੱਟ ਕਰੋ
## Hub
vaultOptions.hub=ਰਿਕਵਰੀ
vaultOptions.hub.convertBtn=ਪਾਸਵਰਡ ਅਧਾਰਿਤ ਵਾਲਟ ਲਈ ਬਦਲੋ
# Recovery Key
## Display Recovery Key
@@ -431,13 +413,8 @@ recoveryKey.printout.heading=Cryptomator ਰਿਕਵਰੀ ਕੁੰਜੀ\n"%s
recoveryKey.recover.resetBtn=ਰੀਸੈੱਟ ਕਰੋ
### Recovery Key Password Reset Success
recoveryKey.recover.resetSuccess.message=ਪਾਸਵਰਡ ਨੂੰ ਕਾਮਯਾਬੀ ਨਾਲ ਮੁੜ-ਸੈੱਟ ਕੀਤਾ ਗਿਆ
recoveryKey.recover.resetSuccess.description=ਤੁਸੀਂ ਆਪਣੇ ਵਾਲਟ ਨੂੰ ਨਵੇਂ ਪਾਸਵਰਡ ਨਾਲ ਖੋਲ੍ਹ ਸਕਦੇ ਹੋ
# Convert Vault
convertVault.title=ਵਾਲਟ ਨੂੰ ਬਦਲੋ
convertVault.convert.convertBtn.before=ਬਦਲੋ
convertVault.convert.convertBtn.processing=…ਬਦਲਿਆ ਜਾ ਰਿਹਾ ਹੈ
convertVault.success.message=ਬਦਲਣਾ ਕਾਮਯਾਬ ਹੈ
# New Password
newPassword.promptText=ਨਵਾਂ ਪਾਸਵਰਡ ਦਿਓ
@@ -475,8 +452,6 @@ dokanySupportEnd.title=ਬਰਤਰਫ਼ੀ ਨੋਟਿਸ
dokanySupportEnd.message=Dokany ਲਈ ਸਹਿਯੋਗ ਖ਼ਤਮ
dokanySupportEnd.preferencesBtn=ਪਸੰਦੀਦਾ ਖੋਲ੍ਹੋ
#Retry If Readonly
# Share Vault
shareVault.title=ਵਾਲਟ ਨੂੰ ਸਾਂਝਾ ਕਰੋ
shareVault.message=ਕੀ ਤੁਸੀਂ ਆਪਣੇ ਵਾਲਟ ਨੂੰ ਹੋਰਾਂ ਨਾਲ ਸਾਂਝਾ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?

View File

@@ -13,7 +13,6 @@ generic.button.copied=Skopiowano!
generic.button.done=Gotowe
generic.button.next=Dalej
generic.button.print=Drukuj
generic.button.remove=Usuń
# Error
error.message=Wystąpił błąd
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Odblokuj teraz
removeVault.title=Usuń sejf
removeVault.message=Usunąć sejf?
removeVault.description=To tylko sprawi, że Cryptomator nie będzie widział tego sejfu. Możesz dodać go ponownie później. Żadne zaszyfrowane pliki nie zostaną usunięte z dysku twardego.
removeVault.confirmBtn=Usuń sejf
# Change Password
changepassword.title=Zmiana Hasła
@@ -150,7 +150,7 @@ hub.noKeychain.message=Brak dostępu do klucza urządzenia
hub.noKeychain.description=Aby odblokować sejfy na Hubie, wymagany jest klucz urządzenia zabezpieczony za pomocą pęku kluczy. Aby kontynuować, włącz "%s" i wybierz Pęk kluczy w ustawieniach.
hub.noKeychain.openBtn=Otwórz ustawienia
### Waiting
hub.auth.message=Oczekiwanie na autoryzację…
hub.auth.message=Czekanie na autoryzację…
hub.auth.description=Przekierowanie na stronę logowania nastąpi automatycznie.
hub.auth.loginLink=Nie przekierowano? Kliknij tutaj.
### Receive Key
@@ -176,6 +176,7 @@ hub.registerFailed.description.generic=Wystąpił błąd w procesie rejestracji.
hub.registerFailed.description.deviceAlreadyExists=To urządzenie jest już zarejestrowane dla innego użytkownika. Spróbuj zmienić konto użytkownika lub użyć innego urządzenia.
### Unauthorized
hub.unauthorized.message=Brak dostępu
hub.unauthorized.description=Twoje urządzenie nie zostało jeszcze upoważnione do dostępu do tego sejfu. Poproś właściciela sejfu o autoryzację.
### Requires Account Initialization
hub.requireAccountInit.message=Wymagane działanie
hub.requireAccountInit.description.0=Aby kontynuować, wykonaj wymagane kroki w Twoim
@@ -245,7 +246,7 @@ 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.checkScheduled=Test został zaplanowany.
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.
@@ -336,12 +337,12 @@ preferences.contribute.getCertificate=Nie masz jeszcze? Dowiedz się, jak możes
preferences.contribute.promptText=Wklej tutaj kod certyfikatu darczyńcy
preferences.contribute.thankYou=Dziękujemy za wsparcie rozwoju Cryptomatora!
preferences.contribute.donate=Wspomóż
preferences.contribute.sponsor=Sponsor
### Remove License Key Dialog
removeCert.title=Usuń Certyfikat
removeCert.message=Usunąć certyfikat wsparcia?
removeCert.description=Nie ma to wpływu na podstawowe funkcje Cryptomatora. Dostęp do twoich sejfów nie jest ograniczony oraz nie zmniejsza się poziom bezpieczeństwa.
removeCert.description=Nie ma to wpływu na podstawowe funkcje Cryptomatora. Dostęp do twoich sejfów nie jest ograniczony, oraz nie zmniejsza się poziom bezpieczeństwa.
removeCert.confirmBtn=Usuń
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -368,7 +369,7 @@ stats.write.throughput.idle=Zapis: bezczynny
stats.write.throughput.kibs=Zapis: %.2f KiB/s
stats.write.throughput.mibs=Zapis: %.2f MiB/s
stats.write.total.data.none=Zapisane dane: -
stats.write.total.data.kib=Zapisane dane: %.1f KiB
stats.write.total.data.kib=Zapis danych: %.1f KiB
stats.write.total.data.mib=Zapisane dane: %.1f MiB
stats.write.total.data.gib=Zapisane dane: %.1f GiB
stats.encr.total.data.none=Dane zaszyfrowane: -
@@ -413,7 +414,7 @@ main.vaultDetail.revealBtn=Otwórz lokalizację
main.vaultDetail.copyUri=Kopiuj URI
main.vaultDetail.lockBtn=Blokuj
main.vaultDetail.bytesPerSecondRead=Odczyt:
main.vaultDetail.bytesPerSecondWritten=Zapis:
main.vaultDetail.bytesPerSecondWritten=Zapisz:
main.vaultDetail.throughput.idle=bezczynny
main.vaultDetail.throughput.kbps=%.1f KiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
@@ -441,7 +442,7 @@ wrongFileAlert.message=Czy chciałeś zaszyfrować te pliki?
wrongFileAlert.description=W tym celu Cryptomator zapewnia udział dostępny w menedżerze plików.
wrongFileAlert.instruction.0=Aby zaszyfrować pliki, wykonaj następujące kroki:
wrongFileAlert.instruction.1=1. Odblokuj swój sejf.
wrongFileAlert.instruction.2=2. Kliknij "Otwórz lokalizację", aby otworzyć udział w menedżerze plików.
wrongFileAlert.instruction.2=2. Kliknij na "Otwórz lokalizację", aby otworzyć udział w menedżerze plików.
wrongFileAlert.instruction.3=3. Dodaj pliki do tego udziału.
wrongFileAlert.link=Aby uzyskać pomoc, wejdź na
@@ -500,7 +501,7 @@ recoveryKey.recover.prompt=Wprowadź klucz odzyskiwania dla "%s":
recoveryKey.recover.correctKey=To jest prawidłowy klucz odzyskiwania
recoveryKey.recover.wrongKey=Ten klucz należy do innego sejfu
recoveryKey.recover.invalidKey=Ten klucz jest nieprawidłowy
recoveryKey.printout.heading=Cryptomator - Klucz odzyskiwania\n"%s"\n
recoveryKey.printout.heading=Cryptomator - Klucz odzyskiwania "%s"\n
### Reset Password
recoveryKey.recover.resetBtn=Resetuj
### Recovery Key Password Reset Success
@@ -551,8 +552,6 @@ dokanySupportEnd.message=Koniec wsparcia dla Dokany
dokanySupportEnd.description=Typ udziału Dokany nie jest już wspierany przez Cryptomator. Twoje ustawienia zostały dostosowane do domyślnego typu udziału. Możesz sprawdzić jaki jest domyślny typ w ustawieniach.
dokanySupportEnd.preferencesBtn=Otwórz ustawienia
#Retry If Readonly
# Share Vault
shareVault.title=Udostępnij sejf
shareVault.message=Czy chcesz udostępnić swój sejf innym?

View File

@@ -13,7 +13,6 @@ generic.button.copied=Copiado!
generic.button.done=Ok
generic.button.next=Seguinte
generic.button.print=Imprimir
generic.button.remove=Remover
# Error
error.message=Erro %s
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Desbloquear agora
removeVault.title=Remover Cofre
removeVault.message=Remover Cofre?
removeVault.description=Isto fará unicamente com que o Cryptomator esqueça este cofre. Poderá adicioná-lo novamente mais tarde. Nenhum ficheiro encriptado será apagado do seu disco rígido.
removeVault.confirmBtn=Remover Cofre
# Change Password
changepassword.title=Alterar Palavra-passe
@@ -176,7 +176,7 @@ hub.registerFailed.description.generic=Ocorreu um erro no processo de registo. P
hub.registerFailed.description.deviceAlreadyExists=Este dispositivo já está registado para um utilizador diferente. Tente alterar a conta de utilizador ou use um dispositivo diferente.
### Unauthorized
hub.unauthorized.message=Acesso negado
hub.unauthorized.description=Não está autorizado a abrir este cofre. Contacte o proprietário do cofre para solicitar o acesso.
hub.unauthorized.description=O seu dispositivo ainda não foi autorizado a aceder a este cofre. Peça ao proprietário do cofre para o autorizar.
### Requires Account Initialization
hub.requireAccountInit.message=Ação requerida
hub.requireAccountInit.description.0=Para continuar, conclua as etapas necessárias no seu
@@ -343,6 +343,7 @@ preferences.contribute.sponsor=Patrocinador
removeCert.title=Remover certificado
removeCert.message=Remover o certificado de apoiante?
removeCert.description=As principais caraterísticas do Cryptomator não são afectadas por isto. Nem o acesso aos seus cofres é restringido nem o nível de segurança é reduzido.
removeCert.confirmBtn=Remover
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -552,12 +553,6 @@ dokanySupportEnd.message=Suporte termina para o Dokany
dokanySupportEnd.description=O tipo de volume Dokany não é mais suportado pelo Cryptomator. As configurações serão ajustadas para usar o tipo de volume padrão por agora. Pode ver o tipo padrão nas preferências.
dokanySupportEnd.preferencesBtn=Abrir preferências
#Retry If Readonly
retryIfReadonly.title=Acesso ao Cofre Restrito
retryIfReadonly.message=Sem acesso de gravação ao diretório do cofre
retryIfReadonly.description=O Cryptomator não pode escrever no diretório do cofre. Pode alterar o cofre para ser apenas de leitura e tentar novamente. Esta opção pode ser desactivada nas opções do cofre.
retryIfReadonly.retry=Alterar e tentar de novo
# Share Vault
shareVault.title=Partilhar cofre
shareVault.message=Quer partilhar o seu cofre com outros?

View File

@@ -13,17 +13,16 @@ generic.button.copied=Copiado!
generic.button.done=Concluído
generic.button.next=Próximo
generic.button.print=Imprimir
generic.button.remove=Remover
# Error
error.message=Erro %s
error.description=O Cryptomator não esperava que isso acontecesse. Você pode procurar soluções existentes para este erro. Ou, se ainda não foi relatado, sinta-se à vontade para fazê-lo.
error.description=O Cryptomator encontrou um erro inesperado. Você pode procurar soluções pré-existentes na internet ou até mesmo reportar como bug.
error.hyperlink.lookup=Procure este erro
error.hyperlink.report=Reportar este erro
error.technicalDetails=Detalhes:
error.existingSolutionDescription=O Cryptomator encontrou um erro inesperado, mas há uma solução pré-existente disponível no seguinte link.
error.hyperlink.solution=Procure a solução
error.lookupPermissionMessage=O Cryptomator pode procurar uma solução para este problema online. Isso enviará uma solicitação para nosso banco de dados de problemas a partir do seu endereço IP.
error.lookupPermissionMessage=O Cryptomator pode procurar uma solução online. Isso enviará um pedido ao nosso banco de problemas a partir do seu endereço IP.
error.dismiss=Ignorar
error.lookUpSolution=Procurar solução
@@ -56,7 +55,7 @@ addvaultwizard.new.directoryPickerButton=Escolher…
addvaultwizard.new.directoryPickerTitle=Selecionar Diretório
addvaultwizard.new.fileAlreadyExists=Já existe um arquivo ou diretório com esse nome
addvaultwizard.new.locationDoesNotExist=Um diretório no caminho especificado não existe ou não pode ser acessado
addvaultwizard.new.locationIsNotWritable=Sem acesso de gravação no caminho especificado
addvaultwizard.new.locationIsNotWritable=Não há acesso de escrita nesse caminho
addvaultwizard.new.locationIsOk=Local adequado para o seu cofre
addvaultwizard.new.invalidName=Nome do cofre inválido
addvaultwizard.new.validName=Nome do cofre válido
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Desbloquear Agora
removeVault.title=Remover o cofre "%s"
removeVault.message=Remover o cofre?
removeVault.description=Isso só fará com que o Cryptomator esqueça esse cofre. Você pode adicioná-lo novamente. Nenhum arquivo criptografado será excluído do seu disco rígido.
removeVault.confirmBtn=Remover Cofre
# Change Password
changepassword.title=Alterar Senha
@@ -176,7 +176,7 @@ hub.registerFailed.description.generic=Um erro ocorreu no processo de registro.
hub.registerFailed.description.deviceAlreadyExists=Este dispositivo já está registrado para um usuário diferente. Tente alterar a conta de usuário ou use um dispositivo diferente.
### Unauthorized
hub.unauthorized.message=Acesso negado
hub.unauthorized.description=Você não está autorizado a abrir este cofre. Entre em contato com o proprietário do cofre para solicitar acesso.
hub.unauthorized.description=Seu dispositivo ainda não foi autorizado a acessar este cofre. Peça ao proprietário do cofre para autorizá-lo.
### Requires Account Initialization
hub.requireAccountInit.message=Ação necessária
hub.requireAccountInit.description.0=Para prosseguir, por favor, complete os passos necessários
@@ -343,6 +343,7 @@ preferences.contribute.sponsor=Patrocinador
removeCert.title=Excluir Certificado
removeCert.message=Excluir certificado de apoiador?
removeCert.description=Os principais recursos do Cryptomador não são afetados por isso. Nem o acesso aos seus cofres é restrito, nem o nível de segurança é reduzido.
removeCert.confirmBtn=Remover
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -552,12 +553,6 @@ dokanySupportEnd.message=Fim do suporte para o Dokany
dokanySupportEnd.description=O volume do tipo Dokany não é mais suportado pelo Cryptomator. Suas configurações serão ajustadas para usar o tipo de volume padrão agora. Você pode ver o tipo padrão nas preferências.
dokanySupportEnd.preferencesBtn=Abrir Preferências
#Retry If Readonly
retryIfReadonly.title=Acesso Restrito ao Cofre
retryIfReadonly.message=Sem acesso de gravação ao diretório do cofre
retryIfReadonly.description=O Cryptomator não pode escrever no diretório do cofre. Você pode alterar o cofre para somente leitura e tentar novamente. Esta opção pode ser desativada nas opções de cofre.
retryIfReadonly.retry=Alterar e Repetir
# Share Vault
shareVault.title=Compartilhar Cofre
shareVault.message=Gostaria de compartilhar o seu cofre com outras pessoas?

View File

@@ -13,7 +13,6 @@ generic.button.copied=Copiat!
generic.button.done=Terminat
generic.button.next=Următorul
generic.button.print=Tipărește
generic.button.remove=Șterge
# Error
error.message=A apărut o eroare
@@ -21,7 +20,7 @@ error.description=Cryptomator nu se aștepta să se întâmple asta. Puteți că
error.hyperlink.lookup=Caută soluții pentru această eroare
error.hyperlink.report=Raportează această eroare
error.technicalDetails=Detalii:
error.existingSolutionDescription=Cryptomator nu s-a aşteptat să se întâmple asta. Dar am găsit o soluţie existenta pentru această eroare. Vă rugăm să cititi următorul link.
error.existingSolutionDescription=Cryptomator nu s-a aşteptat să se întâmple asta. Dar am găsit o soluţie pentru această eroare. Vă rugăm să cititi următorul link.
error.hyperlink.solution=Caută soluția
error.lookupPermissionMessage=Cryptomator poate căuta online o soluție pentru această problemă. O cerere va fi trimisa către baza noastră de date de la adresa ta IP.
error.dismiss=Renunță
@@ -48,7 +47,6 @@ 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.locationLoading=Se verifică sistemul de fișiere locale pentru directoarele implicite de stocare în nor…
addvaultwizard.new.locationLabel=Locație stocare
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Locație personalizată
@@ -106,6 +104,7 @@ addvaultwizard.success.unlockNow=Deblochează acum
removeVault.title=Eliminați seiful
removeVault.message=Ștergeți seiful?
removeVault.description=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
@@ -160,7 +159,7 @@ hub.receive.description=In acest moment Criptomatorul primește și procesează
hub.register.message=Dispozitiv nou
hub.register.description=Acesta este primul acces la Hub de pe acest dispozitiv. Vă rugăm să îl înregistrați folosind cheia de cont.
hub.register.nameLabel=Numele dispozitivului
hub.register.invalidAccountKeyLabel=Cheie cont invalidă
hub.register.invalidAccountKeyLabel=Cheie cont nevalidă
hub.register.registerBtn=Înregistrare
### Register Device Legacy
hub.register.legacy.occupiedMsg=Numele este deja în uz
@@ -173,9 +172,9 @@ hub.registerSuccess.legacy.description=Pentru a accesa seiful dispozitivului tre
### Registration Failed
hub.registerFailed.message=Înregistrarea dispozitivului a eșuat
hub.registerFailed.description.generic=.
hub.registerFailed.description.deviceAlreadyExists=Acest dispozitiv este deja înregistrat pentru un alt utilizator. Încercați să schimbați contul de utilizator sau folosiți un alt dispozitiv.
### Unauthorized
hub.unauthorized.message=Acces respins
hub.unauthorized.description=Dispozitivul dvs. nu a fost autorizat să acceseze acest seif. Solicitați proprietarului seifului să va autorizeze accesul.
### Requires Account Initialization
hub.requireAccountInit.message=Acțiune necesară
hub.requireAccountInit.description.0=Pentru a continua, vă rugăm să finalizaţi paşii necesari în
@@ -322,8 +321,7 @@ preferences.updates.updateAvailable=Actualizare la versiunea %s disponibilă.
preferences.updates.lastUpdateCheck=Ultima verificare: %s
preferences.updates.lastUpdateCheck.never=niciodată
preferences.updates.lastUpdateCheck.recently=recent
preferences.updates.lastUpdateCheck.daysAgo=Acum %s zile
preferences.updates.lastUpdateCheck.hoursAgo=%s ore în urmă
preferences.updates.lastUpdateCheck.daysAgo=acum %s zile
preferences.updates.checkFailed=Căutarea actualizărilor a eșuat. Verificați conexiunea la internet sau încercați din nou mai târziu.
preferences.updates.upToDate=Cryptomator este actualizat.
@@ -333,13 +331,9 @@ preferences.contribute.registeredFor=Certificat de suporter înregistrat pentru
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
preferences.contribute.thankYou=Va mulțumim pentru suportul dumneavoastră la dezvoltarea open-source a Cryptomatorului
preferences.contribute.donate=Donez
preferences.contribute.sponsor=Sponsor
### Remove License Key Dialog
removeCert.title=Elimina Certificat
removeCert.message=Elimina Certificat suporter?
removeCert.confirmBtn=Șterge
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -389,11 +383,7 @@ main.vaultlist.contextMenu.unlock=Deblochează…
main.vaultlist.contextMenu.unlockNow=Deblochează acum
main.vaultlist.contextMenu.vaultoptions=Arată opțiunile seifului
main.vaultlist.contextMenu.reveal=Dezvăluie unitatea
main.vaultlist.addVaultBtn.menuItemNew=Creare seif nou...
main.vaultlist.addVaultBtn.menuItemExisting=Deschide un seif existent...
##Notificaition
main.notification.updateAvailable=O nouă versiune este valabilă.
main.notification.support=Susține Cryptomator.
## 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:
@@ -403,7 +393,6 @@ main.vaultDetail.unlockBtn=Deblochează…
main.vaultDetail.unlockNowBtn=Deblochează acum
main.vaultDetail.optionsBtn=Opțiuni seif
main.vaultDetail.passwordSavedInKeychain=Parola a fost salvată
main.vaultDetail.share=Distribuie…
### Unlocked
main.vaultDetail.unlockedStatus=DEBLOCAT
main.vaultDetail.accessLocation=Conținutul seifului tău este accesibil aici:
@@ -470,8 +459,7 @@ vaultOptions.mount.mountPoint.directoryPickerButton=Alege…
vaultOptions.mount.mountPoint.directoryPickerTitle=Alege un director
vaultOptions.mount.volumeType.default=Implicit (%s)
vaultOptions.mount.volumeType.restartRequired=Cryptomator trebuie repornit pentru ca modificările să fie aplicate.
vaultOptions.mount.volume.tcp.port=Port TCP
vaultOptions.mount.volume.type=Tip volum
vaultOptions.mount.volume.tcp.port=Portul TCP
## Master Key
vaultOptions.masterkey=Parolă
vaultOptions.masterkey.changePasswordBtn=Schimbați parola
@@ -544,28 +532,22 @@ updateReminder.yesOnce=Da, o dată
updateReminder.yesAutomatically=Da, automat
#Dokany Support End
dokanySupportEnd.message=Se termină suportul pentru Dokany
dokanySupportEnd.description=Tipul de volum Dokany nu mai este suportat de Cryptomator. Setările dumneavoastra sunt ajustate pentru a utiliza acum tipul de volum implicit. Puteți vizualiza tipul implicit din preferințe.
dokanySupportEnd.description=Tipul de volum Dokany nu mai este suportat de Criptomator. Setările dvs. sunt ajustate pentru a utiliza acum tipul de volum implicit. Puteți vizualiza tipul implicit din preferințe.
dokanySupportEnd.preferencesBtn=Deschideţi preferinţele
#Retry If Readonly
# Share Vault
shareVault.title=Partajare seif
shareVault.message=Doriți să vă împărtășiți seiful cu ceilalți?
shareVault.description=Fiți întotdeauna precauți când împărtășiți seiful cu alte persoane. Pe scurt, urmați acești pași:
shareVault.instruction.1=1. Partajati accesul la folderul criptat din seif prin stocarea în cloud.
shareVault.instruction.2=2. Partajati parola seifului într-un mod sigur.
shareVault.instruction.1=1. Partajarea accesului la folderul criptat din seif prin stocarea în cloud.
shareVault.instruction.2=2. Partajează parola seifului într-un mod sigur.
shareVault.remarkBestPractices=Pentru mai multe informații, consultați cele mai bune practici sugerate în documentele noastre.
shareVault.docsTooltip=Deschideți documentația pentru a afla mai multe despre tipurile diferite de unități de stocare.
shareVault.hubAd.description=Modul securizat pentru a lucra în echipe
shareVault.hubAd.keyManagement=Fara cunostinte despre managementul cheie.
shareVault.hubAd.description=Modul securizat de a lucra în echipe
shareVault.hubAd.keyManagement=• Managementul cheie al cunoașterii spațiale
shareVault.hubAd.authentication=• Autentificare puternică
shareVault.hubAd.encryption=• Criptare în ambele părți
shareVault.visitHub=Vizitează Hub-ul Cryptomator
shareVault.visitHub=Vizitează Hub pentru Criptomator
shareVault.hub.message=Cum să partajezi un seif Hub
shareVault.hub.description=Pentru a partaja conținutul de seif cu un alt membru al echipei, trebuie să efectuați doi pași:
shareVault.hub.instruction.1=1. Partajarea accesului la folderul criptat din seif prin stocarea in nor.
shareVault.hub.instruction.2=2. Acordă acces membrului echipei din hub-ul Cryptomator.
shareVault.hub.openHub=Deschide Cryptomator Hub
shareVault.hub.instruction.1=1. Partajarea accesului la folderul criptat din seif prin stocarea în cloud.
shareVault.hub.instruction.2=2. Acordă acces membrului echipei din hub-ul Cryptomator.

View File

@@ -13,7 +13,6 @@ generic.button.copied=Скопировано!
generic.button.done=Готово
generic.button.next=Далее
generic.button.print=Печать
generic.button.remove=Удалить
# Error
error.message=Произошла ошибка
@@ -48,7 +47,7 @@ addvaultwizard.new.nameInstruction=Выберите имя для хранили
addvaultwizard.new.namePrompt=Имя хранилища
### Location
addvaultwizard.new.locationInstruction=Где Cryptomator должен хранить зашифрованные файлы хранилища?
addvaultwizard.new.locationLoading=Поиск облачных каталогов по умолчанию в локальной файловой системе
addvaultwizard.new.locationLoading=Поиск в локальной файловой системе облачных каталогов по умолчанию…
addvaultwizard.new.locationLabel=Место хранения
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Другое место
@@ -61,7 +60,7 @@ addvaultwizard.new.locationIsOk=Подходящее расположение д
addvaultwizard.new.invalidName=Неверное имя хранилища
addvaultwizard.new.validName=Допустимое имя хранилища
addvaultwizard.new.validCharacters.message=Имя хранилища может содержать следующие символы:
addvaultwizard.new.validCharacters.chars=Буквы (например: a, ж или 수)
addvaultwizard.new.validCharacters.chars=Буквы (например, a, ж или 수)
addvaultwizard.new.validCharacters.numbers=Цифры
addvaultwizard.new.validCharacters.dashes=Дефис (%s) или подчёркивание (%s)
### Expert Settings
@@ -106,6 +105,7 @@ addvaultwizard.success.unlockNow=Разблокировать
removeVault.title=Удалить "%s"
removeVault.message=Удалить хранилище?
removeVault.description=Cryptomator просто забудет это хранилище. Позже вы можете добавить его снова. Зашифрованные файлы не будут удалены с диска.
removeVault.confirmBtn=Удалить хранилище
# Change Password
changepassword.title=Изменить пароль
@@ -124,8 +124,8 @@ unlock.passwordPrompt=Введите пароль для "%s"
unlock.savePassword=Запомнить пароль
unlock.unlockBtn=Разблокировать
## Select
unlock.chooseMasterkey.message=Файл Masterkey не найден
unlock.chooseMasterkey.description=Не удалось найти файл Masterkey для хранилища "%s". Выберите ключевой файл вручную.
unlock.chooseMasterkey.message=Файл мастер-ключа не найден
unlock.chooseMasterkey.description=Не удалось найти файл мастер-ключа для хранилища "%s". Выберите ключевой файл вручную.
unlock.chooseMasterkey.filePickerTitle=Выберите файл MasterKey
unlock.chooseMasterkey.filePickerMimeDesc=Мастер-ключ Cryptomator
## Success
@@ -152,7 +152,7 @@ hub.noKeychain.openBtn=Открыть настройки
### Waiting
hub.auth.message=Ожидание аутентификации…
hub.auth.description=Вы должны быть автоматически перенаправлены на страницу входа.
hub.auth.loginLink=Перенаправления не произошло? Нажмите здесь, чтобы открыть её.
hub.auth.loginLink=Не перенаправлено? Нажмите здесь, чтобы открыть её.
### Receive Key
hub.receive.message=Обработка ответа…
hub.receive.description=Cryptomator принимает и обрабатывает ответ от хаба. Подождите.
@@ -160,7 +160,7 @@ hub.receive.description=Cryptomator принимает и обрабатывае
hub.register.message=Новое устройство
hub.register.description=Это первый доступ к хабу с этого устройства. Авторизуйтесь, используя ваш ключ аккаунта.
hub.register.nameLabel=Имя устройства
hub.register.invalidAccountKeyLabel=Неверный ключ учётной записи
hub.register.invalidAccountKeyLabel=Неверный Account Key
hub.register.registerBtn=Регистрация
### Register Device Legacy
hub.register.legacy.occupiedMsg=Имя уже используется
@@ -175,8 +175,8 @@ hub.registerFailed.message=Ошибка регистрации устройст
hub.registerFailed.description.generic=Ошибка регистрации. Подробную информацию см. в журнале приложения.
hub.registerFailed.description.deviceAlreadyExists=Это устройство уже зарегистрировано другим пользователем. Попробуйте изменить учётную запись или используйте другое устройство.
### Unauthorized
hub.unauthorized.message=Нет доступа
hub.unauthorized.description=Вы не авторизованы для открытия этого хранилища. Свяжитесь с владельцем хранилища, чтобы запросить доступ.
hub.unauthorized.message=Доступ запрещен
hub.unauthorized.description=Устройство ещё не авторизовано для доступа к этому хранилищу. Попросите владельца хранилища разрешить его.
### Requires Account Initialization
hub.requireAccountInit.message=Требуется действие
hub.requireAccountInit.description.0=Для продолжения выполните необходимые шаги в
@@ -290,7 +290,7 @@ preferences.general.keychainBackend=Хранение паролей
preferences.general.quickAccessService=Добавлять открытые хранилища в область быстрого доступа
## Interface
preferences.interface=Интерфейс
preferences.interface.theme=Тема
preferences.interface.theme=Отображение
preferences.interface.theme.automatic=Автоматически
preferences.interface.theme.dark=Тёмная
preferences.interface.theme.light=Светлая
@@ -343,6 +343,7 @@ preferences.contribute.sponsor=Спонсировать
removeCert.title=Удалить сертификат
removeCert.message=Удалить сертификат поддержки?
removeCert.description=Ключевые функции криптоматора не затронуты этим. Ни один доступ к хранилищу не ограничен, уровень безопасности не снижен.
removeCert.confirmBtn=Удалить
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -552,12 +553,6 @@ dokanySupportEnd.message=Заканчивается поддержка для Do
dokanySupportEnd.description=Cryptomator больше не поддерживает тома Dokany. Параметры будут изменены на использование типа томов по умолчанию. Тип по умолчанию см. в настройках.
dokanySupportEnd.preferencesBtn=Открыть настройки
#Retry If Readonly
retryIfReadonly.title=Ограниченный доступ к хранилищу
retryIfReadonly.message=Нет доступа на запись в каталог хранилища
retryIfReadonly.description=Cryptomator не может выполнять запись в папку хранилища. Можно изменить у хранилища доступ только для чтения и повторить попытку. Эта опция может быть отключена в параметрах хранилища.
retryIfReadonly.retry=Изменить и повторить
# Share Vault
shareVault.title=Поделиться хранилищем
shareVault.message=Хотите поделиться хранилищем с другими?

View File

@@ -135,6 +135,4 @@ hub.registerSuccess.unlockBtn=අගුළුහරින්න
#Dokany Support End
#Retry If Readonly
# Share Vault

View File

@@ -13,7 +13,6 @@ generic.button.copied=Skopírované!
generic.button.done=Hotovo
generic.button.next=Ďalej
generic.button.print=Tlač
generic.button.remove=Odstrániť
# Error
error.message=Vyskytla sa chyba
@@ -105,6 +104,7 @@ addvaultwizard.success.unlockNow=Odomknúť teraz
removeVault.title=Odstrániť "%s"
removeVault.message=Odstrániť trezor?
removeVault.description=To spôsobí, že Cryptomator iba zabudne na tento trezor. Môžete ho pridať znova neskôr. Z pevného disku sa neodstránia žiadne šifrované súbory.
removeVault.confirmBtn=Odstrániť trezor
# Change Password
changepassword.title=Zmeniť heslo
@@ -168,6 +168,7 @@ hub.registerSuccess.unlockBtn=Odomknúť
hub.registerFailed.message=Registrácia zariadenia zlyhala
### Unauthorized
hub.unauthorized.message=Prístup zamietnutý
hub.unauthorized.description=Vaše zaradenie zatiaľ ešte nebolo autorizované pre pristúp tohto trezora. Požiadajte majiteľa trezora o autorizovanie.
### Requires Account Initialization
hub.requireAccountInit.message=Vyžadovaná akcia
hub.requireAccountInit.description.0=Pre pokračovanie vyplňte potrebné kroky vo vašom
@@ -334,6 +335,7 @@ preferences.contribute.sponsor=Sponzor
removeCert.title=Odstrániť certifikát
removeCert.message=Odstrániť certifikát podporovateľa?
removeCert.description=Funkcionality jadra Cryptomator-a nie sú týmto dotknuté. Žiadny pristúp do Vášho trezora ani úroveň zabezpečenia nie je znížená.
removeCert.confirmBtn=Odstrániť
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -542,8 +544,6 @@ dokanySupportEnd.message=Ukončenie podpory pre Dokany
dokanySupportEnd.description=Typ média Dokany už Cryptomator viac nepodporuje. Vaše nastavenia sú nastavené používať základný typ média. Základný typ môžete vidieť v nastaveniach.
dokanySupportEnd.preferencesBtn=Otvoriť predvoľby
#Retry If Readonly
# Share Vault
shareVault.title=Zdielať trezor
shareVault.hubAd.authentication=* Silná autentifikácia

View File

@@ -13,7 +13,6 @@ generic.button.copied=Kopirano!
generic.button.done=Opravljeno
generic.button.next=Naslednji
generic.button.print=Natisni
generic.button.remove=Odstrani
# Error
error.message=Prišlo je do napake
@@ -117,6 +116,7 @@ preferences.updates.lastUpdateCheck.daysAgo=%s dni nazaj
## Contribution
### Remove License Key Dialog
removeCert.confirmBtn=Odstrani
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -178,6 +178,4 @@ recoveryKey.recover.invalidKey=Obnovitveni ključ ni pravilen
#Dokany Support End
#Retry If Readonly
# Share Vault

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