Compare commits

...
Author SHA1 Message Date
Armin Schrenk 2b03477d31 prepare 1.14.0 2024-08-19 16:36:31 +02:00
CryptobotandGitHub f25e23da82 New Crowdin updates (#3463)
New translations strings.properties

Arabic; Chinese Simplified; Chinese Traditional; Dutch; Filipino; French; German; Greek; Italian; Japanese; Korean; Persian; Polish; Portuguese; Portuguese, Brazilian; Punjabi; Russian; Slovak; Spanish; Swedish; Turkish; Urdu (Pakistan); 

[ci skip]
2024-08-19 16:33:41 +02:00
dependabot[bot]andGitHub 82368e2632 Bump the java-production-dependencies group across 1 directory with 9 updates (#3516) 2024-08-19 14:29:15 +00:00
dependabot[bot]andGitHub 9057090b56 Bump the maven-build-plugins group across 1 directory with 3 updates (#3513) 2024-08-19 14:18:32 +00:00
dependabot[bot]andGitHub 357937e0bf Bump the java-test-dependencies group across 1 directory with 2 updates (#3514) 2024-08-19 14:17:07 +00:00
Armin Schrenk f84a2396eb ignore integrations-api 2.0.0-alpha1 2024-08-19 10:42:58 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Armin Schrenk
193dcad6e8 Bump the javafx group with 5 updates (#3498)
* Bump javafx from 22.0.1 to 22.0.2
* update build scripts to updated jfx version

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Armin Schrenk <armin.schrenk@skymatic.de>
2024-08-19 10:34:14 +02:00
Armin Schrenk 257f4427b8 catch all methods of adding a vault for #2880 2024-08-19 10:27:13 +02:00
Armin Schrenk 4778ba0770 add autostart for deb artifact 2024-08-16 15:56:58 +02:00
Armin SchrenkandGitHub 77b908199e Mitigates #2880 (#3512) 2024-08-16 12:59:38 +02:00
Armin SchrenkandGitHub d448c42f87 Feature: JDK 22.0.2+9 for release artifacts (#3510)
* update jdks for release artifacts to jdk 22.02+9
2024-08-14 16:40:44 +02:00
Armin Schrenk b9403222ba add java.compiler module to build scripts
references 93d0fd41a6 and https://github.com/google/dagger/issues/4321
2024-08-13 16:28:09 +02:00
Armin Schrenk 93d0fd41a6 Update cryptofs to 2.7.0-beta1
Closes #2058
2024-08-13 11:59:23 +02:00
Armin Schrenk 067bd4752c prevent leaking of NVD API key into logs 2024-08-09 11:30:16 +02:00
Armin Schrenk fb4f9fc68f Update integrations-win and -linux for quickAccess service providers 2024-08-09 11:05:02 +02:00
Armin SchrenkandGitHub a20667a156 Merge pull request #3494 from cryptomator/feature/quick-access
Feature: Add unlocked vaults to an quick access area
2024-08-07 16:42:53 +02:00
Armin Schrenk 4d47544244 cleanup 2024-08-07 16:32:30 +02:00
Armin Schrenk d59f149f7c Load quick access service lazy 2024-08-06 15:17:18 +02:00
Armin Schrenk 028f6e7a02 clean up 2024-08-06 15:08:29 +02:00
Armin Schrenk 71e4f98665 hard code default quickaccess service 2024-08-06 12:26:26 +02:00
Tobias Hagemann d60ced52fe added codesigning jdk files in build.sh for local macos builds to match mac-dmg.yml ci build 2024-07-30 21:14:32 +02:00
Tobias Hagemann 45c7d2b071 added provisioning profile to mac build process with updated entitlements 2024-07-30 18:48:54 +02:00
Ralph PlawetzkiandGitHub 7a789d2eed Fixes #3501 (PR #3502) 2024-07-30 12:27:16 +02:00
Armin Schrenk cc1e542146 clean up 2024-07-23 16:50:27 +02:00
Armin Schrenk e4e84d46b6 hide option, if no quick access service is present 2024-07-23 16:50:15 +02:00
Armin Schrenk 61fc53bf9c rename internal method 2024-07-23 16:39:34 +02:00
Tobias HagemannandGitHub f8386a5a99 Update README.md 2024-07-18 15:09:05 +02:00
Armin Schrenk da7e89fc72 fix windows build script 2024-07-17 16:35:33 +02:00
Armin Schrenk 6b57a0ad9c add translation 2024-07-17 11:34:29 +02:00
Armin Schrenk f1eb997804 make quickAccessService togglable & selectable in UI 2024-07-16 17:25:47 +02:00
Armin Schrenk 2fe5180721 cleanup 2024-07-16 17:19:52 +02:00
Armin Schrenk 2fa88490bd update to integrations-api 1.4.0-beta2
* differ between using quick access and actual impl
* rename properties
2024-07-16 13:36:37 +02:00
Jan-Peter Klein 5f5b5a5426 set preferences window min width and height 2024-07-09 13:48:45 +02:00
Jan-Peter Klein cb054bb4f5 fix update available check in preference tab selection 2024-07-09 13:46:41 +02:00
dependabot[bot]andGitHub b4f9bc62ca Bump the maven-build-plugins group across 1 directory with 3 updates (#3484) 2024-07-08 07:52:56 +00:00
Tobias HagemannandGitHub 34bface2d7 Merge pull request #3481 from purejava/fix-#3480 2024-07-07 16:40:40 +02:00
Ralph Plawetzki 70e52b1a31 Fix typo
Closes #3480
2024-07-07 15:41:28 +02:00
Tobias HagemannandGitHub 59a2398c4c Update README.md 2024-07-04 11:49:37 +02:00
Armin Schrenk e5003c1783 use quick access service in unlock/lock 2024-06-27 17:47:05 +02:00
Armin Schrenk d6fd012f71 fix av whitelisting step in win-exe workflow 2024-06-26 13:28:37 +02:00
Armin Schrenk d9d8c84230 adjust formatting of metainfo file 2024-06-26 13:23:38 +02:00
Julian Raufelder 1ad2cc3ee5 Update to JDK 22 2024-06-26 11:57:17 +02:00
Armin Schrenk 2eac09f6be [ci skip] Merge branch 'main' into develop 2024-06-26 10:29:47 +02:00
Armin Schrenk 4114ea6163 Merge branch 'release/1.13.0' 2024-06-26 10:29:15 +02:00
Armin Schrenk 82da9f7a88 finalize release 2024-06-26 10:27:29 +02:00
Armin Schrenk aa08046c4d Merge branch 'develop' into release/1.13.0 2024-06-21 15:18:39 +02:00
Armin Schrenk b6d7f63470 [ci skip] also sign binaries from CraC project (dammn zulu jdk) 2024-06-21 15:10:47 +02:00
Armin Schrenk 624d18238c Merge branch 'develop' into release/1.13.0 2024-06-21 14:38:38 +02:00
Armin Schrenk 3bfe2b7a9e fix Windows build 2024-06-21 14:38:17 +02:00
51 changed files with 581 additions and 104 deletions
+3
View File
@@ -7,6 +7,9 @@ updates:
day: "monday"
time: "06:00"
timezone: "Etc/UTC"
ignore:
- dependency-name: "org.cryptomator:integrations-api"
versions: ["2.0.0-alpha1"]
groups:
java-test-dependencies:
patterns:
+6 -6
View File
@@ -11,7 +11,7 @@ on:
env:
JAVA_DIST: 'zulu'
JAVA_VERSION: '22.0.1+8'
JAVA_VERSION: '22.0.2+9'
jobs:
get-version:
@@ -29,12 +29,12 @@ jobs:
include:
- os: ubuntu-latest
appimage-suffix: x86_64
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-x64_bin-jmods.zip'
openjfx-sha: 'fbb22f35951c2e049cc2554dd03c2c56b4f5adc4b2ae9248872f46175ac103d8'
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/22.0.1/openjfx-22.0.1_linux-aarch64_bin-jmods.zip'
openjfx-sha: '1982ad168a5e8d7cf4a9458a7d088b4f0552d0ac3f24f23fb88f8bc7e8d69a13'
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
@@ -80,7 +80,7 @@ jobs:
--verbose
--output runtime
--module-path "${JAVA_HOME}/jmods:openjfx-jmods"
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net,java.compiler
--strip-native-commands
--no-header-files
--no-man-pages
+6 -6
View File
@@ -17,13 +17,13 @@ on:
env:
JAVA_DIST: 'zulu'
JAVA_VERSION: '22.0.1+8'
JAVA_VERSION: '22.0.2+9'
COFFEELIBS_JDK: 22
COFFEELIBS_JDK_VERSION: '22.0.1+8-0ppa1'
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-x64_bin-jmods.zip'
OPENJFX_JMODS_AMD64_HASH: 'fbb22f35951c2e049cc2554dd03c2c56b4f5adc4b2ae9248872f46175ac103d8'
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-aarch64_bin-jmods.zip'
OPENJFX_JMODS_AARCH64_HASH: '1982ad168a5e8d7cf4a9458a7d088b4f0552d0ac3f24f23fb88f8bc7e8d69a13'
COFFEELIBS_JDK_VERSION: '22.0.2+9-0ppa1'
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:
+12 -7
View File
@@ -16,7 +16,7 @@ on:
env:
JAVA_DIST: 'zulu'
JAVA_VERSION: '22.0.1+8'
JAVA_VERSION: '22.0.2+9'
jobs:
get-version:
@@ -37,15 +37,15 @@ jobs:
output-suffix: x64
xcode-path: '/Applications/Xcode_13.2.1.app'
fuse-lib: macFUSE
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_osx-x64_bin-jmods.zip'
openjfx-sha: 'e07a11c112abbdebe7c058b44c151e1e475de748671d896aef3d73f32453c248'
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_osx-x64_bin-jmods.zip'
openjfx-sha: '115cb08bb59d880cfff6e51e0bf0dcc45785ed9d456b8b8425597b04da6ab3d4'
- os: [self-hosted, macOS, ARM64]
architecture: aarch64
output-suffix: arm64
xcode-path: '/Applications/Xcode_13.2.1.app'
fuse-lib: FUSE-T
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_osx-aarch64_bin-jmods.zip'
openjfx-sha: '572fce94b9b09d316b960a49e3c2b5d35231ed0463e3b1c4020b8de89783b51d'
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
@@ -91,7 +91,7 @@ jobs:
--verbose
--output runtime
--module-path "${JAVA_HOME}/jmods:openjfx-jmods"
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.accessibility,jdk.management.jfr
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.accessibility,jdk.management.jfr,java.compiler
--strip-native-commands
--no-header-files
--no-man-pages
@@ -137,9 +137,11 @@ jobs:
mv dist/mac/resources/Cryptomator-Vault.icns Cryptomator.app/Contents/Resources/
sed -i '' "s|###BUNDLE_SHORT_VERSION_STRING###|${VERSION_NO}|g" Cryptomator.app/Contents/Info.plist
sed -i '' "s|###BUNDLE_VERSION###|${REVISION_NO}|g" Cryptomator.app/Contents/Info.plist
echo -n "$PROVISIONING_PROFILE_BASE64" | base64 --decode --output Cryptomator.app/Contents/embedded.provisionprofile
env:
VERSION_NO: ${{ needs.get-version.outputs.semVerNum }}
REVISION_NO: ${{ needs.get-version.outputs.revNum }}
PROVISIONING_PROFILE_BASE64: ${{ secrets.MACOS_PROVISIONING_PROFILE_BASE64 }}
- name: Generate license for dmg
run: >
mvn -B -Djavafx.platform=mac license:add-third-party
@@ -175,7 +177,7 @@ jobs:
run: |
echo "Codesigning jdk files..."
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ -name 'jspawnhelper' -exec codesign --force -o runtime -s ${CODESIGN_IDENTITY} {} \;
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ \( -name 'jspawnhelper' -o -name 'pauseengine' -o -name 'simengine' \) -exec codesign --force -o runtime -s ${CODESIGN_IDENTITY} {} \;
echo "Codesigning jar contents..."
find Cryptomator.app/Contents/runtime/Contents/MacOS -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
for JAR_PATH in `find Cryptomator.app -name "*.jar"`; do
@@ -194,9 +196,12 @@ jobs:
fi
done
echo "Codesigning Cryptomator.app..."
sed -i '' "s|###APP_IDENTIFIER_PREFIX###|${TEAM_IDENTIFIER}.|g" dist/mac/Cryptomator.entitlements
sed -i '' "s|###TEAM_IDENTIFIER###|${TEAM_IDENTIFIER}|g" dist/mac/Cryptomator.entitlements
codesign --force --deep --entitlements dist/mac/Cryptomator.entitlements -o runtime -s ${CODESIGN_IDENTITY} Cryptomator.app
env:
CODESIGN_IDENTITY: ${{ secrets.MACOS_CODESIGN_IDENTITY }}
TEAM_IDENTIFIER: ${{ secrets.MACOS_TEAM_IDENTIFIER }}
- name: Prepare .dmg contents
run: |
mkdir dmg
+9 -7
View File
@@ -16,9 +16,9 @@ on:
env:
JAVA_DIST: 'zulu'
JAVA_VERSION: '22.0.1+8'
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_windows-x64_bin-jmods.zip'
OPENJFX_JMODS_AMD64_HASH: 'de82e53179032a49bec005deb4438e8f261d08c4b58864a5c17e1d87286b09dd'
JAVA_VERSION: '22.0.2+9'
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.unsupported,jdk.accessibility,jdk.management.jfr
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.accessibility,jdk.management.jfr,java.compiler
--strip-native-commands
--no-header-files
--no-man-pages
@@ -113,7 +113,7 @@ jobs:
--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"
--java-options "--enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win"
--java-options "-Xss5m"
--java-options "-Xmx256m"
--java-options "-Dcryptomator.appVersion=\"${{ needs.get-version.outputs.semVerStr }}\""
@@ -199,7 +199,7 @@ jobs:
}
- name: Generate license for MSI
run: >
mvn -B license:add-third-party -Djavafx.platform=win
mvn -B license:add-third-party "-Djavafx.platform=win"
"-Dlicense.thirdPartyFilename=license.rtf"
"-Dlicense.outputDirectory=dist/win/resources"
"-Dlicense.fileTemplate=dist/win/resources/licenseTemplate.ftl"
@@ -279,7 +279,7 @@ jobs:
cache: 'maven'
- name: Generate license for exe
run: >
mvn -B license:add-third-party -Djavafx.platform=win
mvn -B license:add-third-party "-Djavafx.platform=win"
"-Dlicense.thirdPartyFilename=license.rtf"
"-Dlicense.fileTemplate=dist/win/bundle/resources/licenseTemplate.ftl"
"-Dlicense.outputDirectory=dist/win/bundle/resources"
@@ -390,12 +390,14 @@ jobs:
needs: [publish]
with:
url: ${{ needs.publish.outputs.download-url-msi }}
secrets: inherit
allowlist-exe:
uses: ./.github/workflows/av-whitelist.yml
needs: [publish]
with:
url: ${{ needs.publish.outputs.download-url-exe }}
secrets: inherit
notify-winget:
name: Notify for winget-release
+1 -1
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" />
<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" />
<method v="2">
<option name="Make" enabled="true" />
</method>
+1 -1
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" />
<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" />
<method v="2">
<option name="Make" enabled="true" />
</method>
+3 -3
View File
@@ -31,8 +31,8 @@ Cryptomator is provided free of charge as an open-source project despite the hig
<tbody>
<tr>
<td><a href="https://mowcapital.com/"><img src="https://cryptomator.org/img/sponsors/mowcapital.svg" alt="Mow Capital" height="28"></a></td>
<td><a href="https://www.easeus.com/"><img src="https://cryptomator.org/img/sponsors/easeus.png" alt="EaseUS" height="40"></a></td>
<td><a href="https://www.hassmann-it-forensik.de/"><img src="https://cryptomator.org/img/sponsors/hassmannitforensik.png" alt="Hassmann IT-Forensik" height="40"></a></td>
<td><a href="https://www.hassmann-it-forensik.de/"><img src="https://cryptomator.org/img/sponsors/hassmannitforensik.png" alt="Hassmann IT-Forensik" height="56"></a></td>
<td><a href="https://www.route4me.com/"><img src="https://cryptomator.org/img/sponsors/route4me.svg" alt="Route4Me" height="56"></a></td>
</tr>
</tbody>
</table>
@@ -85,7 +85,7 @@ For more information on the security details visit [cryptomator.org](https://doc
### Dependencies
* JDK 21 (e.g. temurin, zulu)
* JDK 22 (e.g. temurin, zulu)
* Maven 3
### Run Maven
+5 -5
View File
@@ -23,16 +23,16 @@ mvn -B -f ../../../pom.xml clean package -Plinux -DskipTests -Djavafx.platform=l
cp ../../../LICENSE.txt ../../../target
cp ../../../target/cryptomator-*.jar ../../../target/mods
JAVAFX_VERSION=22.0.1
JAVAFX_VERSION=22.0.2
JAVAFX_ARCH="x64"
JAVAFX_JMODS_SHA256='fbb22f35951c2e049cc2554dd03c2c56b4f5adc4b2ae9248872f46175ac103d8'
JAVAFX_JMODS_SHA256='d44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
if [ "${CPU_ARCH}" = "aarch64" ]; then
JAVAFX_ARCH="aarch64"
JAVAFX_JMODS_SHA256='1982ad168a5e8d7cf4a9458a7d088b4f0552d0ac3f24f23fb88f8bc7e8d69a13'
JAVAFX_JMODS_SHA256='3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
fi
# download javaFX jmods
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-21.0.1_linux-${JAVAFX_ARCH}_bin-jmods.zip"
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-${JAVAFX_VERSION}_linux-${JAVAFX_ARCH}_bin-jmods.zip"
curl -L ${JAVAFX_JMODS_URL} -o openjfx-jmods.zip
@@ -56,7 +56,7 @@ ${JAVA_HOME}/bin/jlink \
--verbose \
--output runtime \
--module-path "${JAVA_HOME}/jmods:openjfx-jmods" \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net,java.compiler \
--strip-native-commands \
--no-header-files \
--no-man-pages \
+3 -1
View File
@@ -68,13 +68,15 @@
<developer id="de.skymatic">
<name>Skymatic GmbH</name>
</developer>
<content_rating type="oars-1.1">
<content_attribute id="social-info">mild</content_attribute> <!-- update checker connects to https://api.cryptomator.org/updates/latestVersion.json -->
</content_rating>
<releases>
<release date="2024-06-26" version="1.13.0">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.13.0</url>
</release>
<release date="2024-03-27" version="1.12.4">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.12.4</url>
</release>
+2 -1
View File
@@ -28,7 +28,7 @@ override_dh_auto_build:
$(JAVA_HOME)/bin/jlink \
--output runtime \
--module-path "${JMODS_PATH}" \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net,java.compiler \
--strip-native-commands \
--no-header-files \
--no-man-pages \
@@ -61,6 +61,7 @@ override_dh_auto_build:
--java-options "-Dcryptomator.buildNumber=\"deb-${REVISION_NUM}\"" \
--java-options "-Dcryptomator.appVersion=\"${SEMVER_STR}\"" \
--java-options "-Dcryptomator.disableUpdateCheck=\"${DISABLE_UPDATE_CHECK}\"" \
--java-options "-Dcryptomator.integrationsLinux.autoStartCmd=\"cryptomator\"" \
--app-version "${VERSION_NUM}.${REVISION_NUM}" \
--resource-dir resources \
--verbose
+1
View File
@@ -0,0 +1 @@
embedded.provisionprofile
+8
View File
@@ -2,6 +2,10 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.application-identifier</key>
<string>###APP_IDENTIFIER_PREFIX###org.cryptomator</string>
<key>com.apple.developer.team-identifier</key>
<string>###TEAM_IDENTIFIER###</string>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
@@ -10,5 +14,9 @@
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>###APP_IDENTIFIER_PREFIX###org.cryptomator</string>
</array>
</dict>
</plist>
+2 -1
View File
@@ -5,4 +5,5 @@ dmg/
*.dmg
license.rtf
openjfx-jmods.zip
*.jmod
*.jmod
Cryptomator.entitlements
+20 -9
View File
@@ -1,12 +1,15 @@
#!/bin/bash
# parse options
usage() { echo "Usage: $0 [-s <codesign-identity>]" 1>&2; exit 1; }
while getopts ":s:" o; do
usage() { echo "Usage: $0 [-s <codesign-identity>] [-t <team-identifier>]" 1>&2; exit 1; }
while getopts ":s:t:" o; do
case "${o}" in
s)
CODESIGN_IDENTITY=${OPTARG}
;;
t)
TEAM_IDENTIFIER=${OPTARG}
;;
*)
usage
;;
@@ -29,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_VERISON=22.0.1
JAVAFX_VERSION=22.0.2
JAVAFX_ARCH="undefined"
JAVAFX_JMODS_SHA256="undefined"
if [ "$(machine)" = "arm64e" ]; then
JAVAFX_ARCH="aarch64"
JAVAFX_JMODS_SHA256="572fce94b9b09d316b960a49e3c2b5d35231ed0463e3b1c4020b8de89783b51d"
JAVAFX_JMODS_SHA256="813c6748f7c99cb7a579d48b48a087b4682b1fad1fc1a4fe5f9b21cf872b15a7"
else
JAVAFX_ARCH="x64"
JAVAFX_JMODS_SHA256="e07a11c112abbdebe7c058b44c151e1e475de748671d896aef3d73f32453c248"
JAVAFX_JMODS_SHA256="115cb08bb59d880cfff6e51e0bf0dcc45785ed9d456b8b8425597b04da6ab3d4"
fi
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-${JAVAFX_VERSION}_osx-${JAVAFX_ARCH}_bin-jmods.zip"
@@ -52,7 +55,7 @@ fi
# download and check jmods
curl -L ${JAVAFX_JMODS_URL} -o openjfx-jmods.zip
echo "${JAVAFX_JMODS_SHA256} openjfx-jmods.zip" | shasum -a256 --check
echo "${JAVAFX_JMODS_SHA256} openjfx-jmods.zip" | shasum -a256 --check
mkdir -p openjfx-jmods/
unzip -jo openjfx-jmods.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javafx.fxml.jmod \*/javafx.graphics.jmod -d openjfx-jmods
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
@@ -76,7 +79,7 @@ cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
${JAVA_HOME}/bin/jlink \
--output runtime \
--module-path "${JAVA_HOME}/jmods:openjfx-jmods" \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,java.compiler \
--strip-native-commands \
--no-header-files \
--no-man-pages \
@@ -121,6 +124,7 @@ ${JAVA_HOME}/bin/jpackage \
cp ../resources/${APP_NAME}-Vault.icns ${APP_NAME}.app/Contents/Resources/
sed -i '' "s|###BUNDLE_SHORT_VERSION_STRING###|${VERSION_NO}|g" ${APP_NAME}.app/Contents/Info.plist
sed -i '' "s|###BUNDLE_VERSION###|${REVISION_NO}|g" ${APP_NAME}.app/Contents/Info.plist
cp ../embedded.provisionprofile ${APP_NAME}.app/Contents/
# generate license
mvn -B -Djavafx.platform=mac -f../../../pom.xml license:add-third-party \
@@ -133,7 +137,11 @@ mvn -B -Djavafx.platform=mac -f../../../pom.xml license:add-third-party \
-Dlicense.licenseMergesUrl=file://$(pwd)/../../../license/merges
# codesign
if [ -n "${CODESIGN_IDENTITY}" ]; then
if [ -n "${CODESIGN_IDENTITY}" ] && [ -n "${TEAM_IDENTIFIER}" ]; then
echo "Codesigning jdk files..."
find ${APP_NAME}.app/Contents/runtime/Contents/Home/lib/ -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
find ${APP_NAME}.app/Contents/runtime/Contents/Home/lib/ -name 'jspawnhelper' -exec codesign --force -o runtime -s ${CODESIGN_IDENTITY} {} \;
echo "Codesigning jar contents..."
find ${APP_NAME}.app/Contents/runtime/Contents/MacOS -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
for JAR_PATH in `find ${APP_NAME}.app -name "*.jar"`; do
if [[ `unzip -l ${JAR_PATH} | grep '.dylib\|.jnilib'` ]]; then
@@ -151,7 +159,10 @@ if [ -n "${CODESIGN_IDENTITY}" ]; then
fi
done
echo "Codesigning ${APP_NAME}.app..."
codesign --force --deep --entitlements ../${APP_NAME}.entitlements -o runtime -s ${CODESIGN_IDENTITY} ${APP_NAME}.app
cp ../${APP_NAME}.entitlements .
sed -i '' "s|###APP_IDENTIFIER_PREFIX###|${TEAM_IDENTIFIER}.|g" ${APP_NAME}.entitlements
sed -i '' "s|###TEAM_IDENTIFIER###|${TEAM_IDENTIFIER}|g" ${APP_NAME}.entitlements
codesign --force --deep --entitlements ${APP_NAME}.entitlements -o runtime -s ${CODESIGN_IDENTITY} ${APP_NAME}.app
fi
# prepare dmg contents
+7 -7
View File
@@ -41,7 +41,7 @@ Write-Output "`$Env:JAVA_HOME=$Env:JAVA_HOME"
$copyright = "(C) $CopyrightStartYear - $((Get-Date).Year) $Vendor"
# compile
&mvn -B -f $buildDir/../../pom.xml clean package -DskipTests -Pwin -Djavafx.platform=win
&mvn -B -f $buildDir/../../pom.xml clean package -DskipTests -Pwin "-Djavafx.platform=win"
Copy-Item "$buildDir\..\..\target\$MainJarGlob.jar" -Destination "$buildDir\..\..\target\mods"
# add runtime
@@ -51,9 +51,9 @@ if ($clean -and (Test-Path -Path $runtimeImagePath)) {
}
## download jfx jmods
$javaFxVersion='22.0.1'
$javaFxVersion='22.0.2'
$javaFxJmodsUrl = "https://download2.gluonhq.com/openjfx/${javaFxVersion}/openjfx-${javaFxVersion}_windows-x64_bin-jmods.zip"
$javaFxJmodsSHA256 = 'de82e53179032a49bec005deb4438e8f261d08c4b58864a5c17e1d87286b09dd'
$javaFxJmodsSHA256 = 'f9376d200f5c5b85327d575c1ec1482e6455f19916577f7e2fc9be2f48bb29b6'
$javaFxJmods = '.\resources\jfxJmods.zip'
if( !(Test-Path -Path $javaFxJmods) ) {
Write-Output "Downloading ${javaFxJmodsUrl}..."
@@ -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,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 `
@@ -100,7 +100,7 @@ if ($clean -and (Test-Path -Path $appPath)) {
--vendor $Vendor `
--copyright $copyright `
--java-options "--enable-preview" `
--java-options "--enable-native-access=org.cryptomator.jfuse.win" `
--java-options "--enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win" `
--java-options "-Xss5m" `
--java-options "-Xmx256m" `
--java-options "-Dcryptomator.appVersion=`"$semVerNo`"" `
@@ -122,7 +122,7 @@ if ($clean -and (Test-Path -Path $appPath)) {
--icon resources/$AppName.ico
#Create RTF license for msi
&mvn -B -f $buildDir/../../pom.xml license:add-third-party -Djavafx.platform=win `
&mvn -B -f $buildDir/../../pom.xml license:add-third-party "-Djavafx.platform=win" `
"-Dlicense.thirdPartyFilename=license.rtf" `
"-Dlicense.fileTemplate=$buildDir\resources\licenseTemplate.ftl" `
"-Dlicense.outputDirectory=$buildDir\resources\" `
@@ -167,7 +167,7 @@ $Env:JP_WIXHELPER_DIR = "."
--file-associations resources/FAvaultFile.properties
#Create RTF license for bundle
&mvn -B -f $buildDir/../../pom.xml license:add-third-party -Djavafx.platform=win `
&mvn -B -f $buildDir/../../pom.xml license:add-third-party "-Djavafx.platform=win" `
"-Dlicense.thirdPartyFilename=license.rtf" `
"-Dlicense.fileTemplate=$buildDir\bundle\resources\licenseTemplate.ftl" `
"-Dlicense.outputDirectory=$buildDir\bundle\resources\" `
+20 -20
View File
@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.cryptomator</groupId>
<artifactId>cryptomator</artifactId>
<version>1.13.0</version>
<version>1.14.0</version>
<name>Cryptomator Desktop App</name>
<organization>
@@ -33,44 +33,44 @@
<nonModularGroupIds>org.ow2.asm,org.apache.jackrabbit,org.apache.httpcomponents</nonModularGroupIds>
<!-- cryptomator dependencies -->
<cryptomator.cryptofs.version>2.6.9</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.3.1</cryptomator.integrations.version>
<cryptomator.integrations.win.version>1.2.5</cryptomator.integrations.win.version>
<cryptomator.cryptofs.version>2.7.0-beta1</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.4.0-beta2</cryptomator.integrations.version>
<cryptomator.integrations.win.version>1.3.0-beta1</cryptomator.integrations.win.version> <!-- TODO update to 1.3.0 once released -->
<cryptomator.integrations.mac.version>1.2.4</cryptomator.integrations.mac.version>
<cryptomator.integrations.linux.version>1.4.5</cryptomator.integrations.linux.version>
<cryptomator.integrations.linux.version>1.5.0-beta4</cryptomator.integrations.linux.version> <!-- TODO update to 1.5.0 once released -->
<cryptomator.fuse.version>5.0.0</cryptomator.fuse.version>
<cryptomator.webdav.version>2.0.6</cryptomator.webdav.version>
<!-- 3rd party dependencies -->
<commons-lang3.version>3.14.0</commons-lang3.version>
<dagger.version>2.51.1</dagger.version>
<commons-lang3.version>3.16.0</commons-lang3.version>
<dagger.version>2.52</dagger.version>
<easybind.version>2.2</easybind.version>
<guava.version>33.2.1-jre</guava.version>
<jackson.version>2.17.1</jackson.version>
<javafx.version>22.0.1</javafx.version>
<guava.version>33.3.0-jre</guava.version>
<jackson.version>2.17.2</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.6</logback.version>
<slf4j.version>2.0.13</slf4j.version>
<logback.version>1.5.7</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.10.2</junit.jupiter.version>
<junit.jupiter.version>5.11.0</junit.jupiter.version>
<mockito.version>5.12.0</mockito.version>
<hamcrest.version>2.2</hamcrest.version>
<hamcrest.version>3.0</hamcrest.version>
<!-- build-time dependencies -->
<jetbrains.annotations.version>24.1.0</jetbrains.annotations.version>
<dependency-check.version>9.2.0</dependency-check.version>
<dependency-check.version>10.0.3</dependency-check.version>
<jacoco.version>0.8.12</jacoco.version>
<license-generator.version>2.4.0</license-generator.version>
<junit-tree-reporter.version>1.2.1</junit-tree-reporter.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.7.0</mvn-dependency.version>
<mvn-surefire.version>3.3.0</mvn-surefire.version>
<mvn-jar.version>3.4.1</mvn-jar.version>
<mvn-dependency.version>3.7.1</mvn-dependency.version>
<mvn-surefire.version>3.4.0</mvn-surefire.version>
<mvn-jar.version>3.4.2</mvn-jar.version>
</properties>
<dependencies>
@@ -471,7 +471,7 @@
<skipTestScope>true</skipTestScope>
<detail>true</detail>
<suppressionFile>suppression.xml</suppressionFile>
<nvdApiKey>${env.NVD_API_KEY}</nvdApiKey>
<nvdApiKeyEnvironmentVariable>NVD_API_KEY</nvdApiKeyEnvironmentVariable>
</configuration>
<executions>
<execution>
+1
View File
@@ -42,6 +42,7 @@ open module org.cryptomator.desktop {
requires com.nulabinc.zxcvbn;
requires com.tobiasdiez.easybind;
requires dagger;
requires java.compiler;
requires io.github.coffeelibs.tinyoauth2client;
requires org.slf4j;
requires org.apache.commons.lang3;
@@ -37,12 +37,18 @@ public class Settings {
static final boolean DEFAULT_START_HIDDEN = false;
static final boolean DEFAULT_AUTO_CLOSE_VAULTS = false;
static final boolean DEFAULT_USE_KEYCHAIN = true;
static final boolean DEFAULT_USE_QUICKACCESS = true;
static final int DEFAULT_PORT = 42427;
static final int DEFAULT_NUM_TRAY_NOTIFICATIONS = 3;
static final boolean DEFAULT_DEBUG_MODE = false;
static final UiTheme DEFAULT_THEME = UiTheme.LIGHT;
@Deprecated // to be changed to "whatever is available" eventually
static final String DEFAULT_KEYCHAIN_PROVIDER = SystemUtils.IS_OS_WINDOWS ? "org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess" : SystemUtils.IS_OS_MAC ? "org.cryptomator.macos.keychain.MacSystemKeychainAccess" : "org.cryptomator.linux.keychain.SecretServiceKeychainAccess";
static final String DEFAULT_KEYCHAIN_PROVIDER = SystemUtils.IS_OS_WINDOWS ? "org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess" : //
SystemUtils.IS_OS_MAC ? "org.cryptomator.macos.keychain.MacSystemKeychainAccess" : //
"org.cryptomator.linux.keychain.SecretServiceKeychainAccess";
static final String DEFAULT_QUICKACCESS_SERVICE = SystemUtils.IS_OS_WINDOWS ? "org.cryptomator.windows.quickaccess.ExplorerQuickAccessService" : //
SystemUtils.IS_OS_LINUX ? "org.cryptomator.linux.quickaccess.NautilusBookmarks" : null;
static final String DEFAULT_USER_INTERFACE_ORIENTATION = NodeOrientation.LEFT_TO_RIGHT.name();
static final boolean DEFAULT_SHOW_MINIMIZE_BUTTON = false;
public static final Instant DEFAULT_TIMESTAMP = Instant.parse("2000-01-01T00:00:00Z");
@@ -57,6 +63,8 @@ public class Settings {
public final BooleanProperty debugMode;
public final ObjectProperty<UiTheme> theme;
public final StringProperty keychainProvider;
public final BooleanProperty useQuickAccess;
public final StringProperty quickAccessService;
public final ObjectProperty<NodeOrientation> userInterfaceOrientation;
public final StringProperty licenseKey;
public final BooleanProperty showMinimizeButton;
@@ -89,6 +97,7 @@ public class Settings {
this.startHidden = new SimpleBooleanProperty(this, "startHidden", json.startHidden);
this.autoCloseVaults = new SimpleBooleanProperty(this, "autoCloseVaults", json.autoCloseVaults);
this.useKeychain = new SimpleBooleanProperty(this, "useKeychain", json.useKeychain);
this.useQuickAccess = new SimpleBooleanProperty(this, "addToQuickAccess", json.useQuickAccess);
this.port = new SimpleIntegerProperty(this, "webDavPort", json.port);
this.numTrayNotifications = new SimpleIntegerProperty(this, "numTrayNotifications", json.numTrayNotifications);
this.debugMode = new SimpleBooleanProperty(this, "debugMode", json.debugMode);
@@ -104,6 +113,7 @@ public class Settings {
this.windowHeight = new SimpleIntegerProperty(this, "windowHeight", json.windowHeight);
this.language = new SimpleStringProperty(this, "language", json.language);
this.mountService = new SimpleStringProperty(this, "mountService", json.mountService);
this.quickAccessService = new SimpleStringProperty(this, "quickAccessService", json.quickAccessService);
this.lastSuccessfulUpdateCheck = new SimpleObjectProperty<>(this, "lastSuccessfulUpdateCheck", json.lastSuccessfulUpdateCheck);
this.directories.addAll(json.directories.stream().map(VaultSettings::new).toList());
@@ -116,6 +126,7 @@ public class Settings {
startHidden.addListener(this::somethingChanged);
autoCloseVaults.addListener(this::somethingChanged);
useKeychain.addListener(this::somethingChanged);
useQuickAccess.addListener(this::somethingChanged);
port.addListener(this::somethingChanged);
numTrayNotifications.addListener(this::somethingChanged);
debugMode.addListener(this::somethingChanged);
@@ -131,6 +142,7 @@ public class Settings {
windowHeight.addListener(this::somethingChanged);
language.addListener(this::somethingChanged);
mountService.addListener(this::somethingChanged);
quickAccessService.addListener(this::somethingChanged);
lastSuccessfulUpdateCheck.addListener(this::somethingChanged);
}
@@ -170,6 +182,7 @@ public class Settings {
json.startHidden = startHidden.get();
json.autoCloseVaults = autoCloseVaults.get();
json.useKeychain = useKeychain.get();
json.useQuickAccess = useQuickAccess.get();
json.port = port.get();
json.numTrayNotifications = numTrayNotifications.get();
json.debugMode = debugMode.get();
@@ -185,6 +198,7 @@ public class Settings {
json.windowHeight = windowHeight.get();
json.language = language.get();
json.mountService = mountService.get();
json.quickAccessService = quickAccessService.get();
json.lastSuccessfulUpdateCheck = lastSuccessfulUpdateCheck.get();
return json;
}
@@ -86,4 +86,9 @@ class SettingsJson {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'", timezone = "UTC")
Instant lastSuccessfulUpdateCheck = Settings.DEFAULT_TIMESTAMP;
@JsonProperty("useQuickAccess")
boolean useQuickAccess = Settings.DEFAULT_USE_QUICKACCESS;
@JsonProperty("quickAccessService")
String quickAccessService = Settings.DEFAULT_QUICKACCESS_SERVICE;
}
@@ -58,7 +58,10 @@ public class SettingsProvider implements Supplier<Settings> {
}
private Settings load() {
Settings settings = env.getSettingsPath().flatMap(this::tryLoad).findFirst().orElseGet(() -> Settings.create(env));
Settings settings = env.getSettingsPath() //
.flatMap(this::tryLoad) //
.findFirst() //
.orElseGet(() -> Settings.create(env));
settings.setSaveCmd(this::scheduleSave);
return settings;
}
@@ -11,6 +11,7 @@ package org.cryptomator.common.vaults;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.Constants;
import org.cryptomator.common.mount.Mounter;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.common.settings.VaultSettings;
import org.cryptomator.cryptofs.CryptoFileSystem;
import org.cryptomator.cryptofs.CryptoFileSystemProperties;
@@ -23,6 +24,9 @@ import org.cryptomator.cryptolib.api.MasterkeyLoadingFailedException;
import org.cryptomator.integrations.mount.MountFailedException;
import org.cryptomator.integrations.mount.Mountpoint;
import org.cryptomator.integrations.mount.UnmountFailedException;
import org.cryptomator.integrations.quickaccess.QuickAccessService;
import org.cryptomator.integrations.quickaccess.QuickAccessServiceException;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -54,6 +58,7 @@ public class Vault {
private final VaultSettings vaultSettings;
private final AtomicReference<CryptoFileSystem> cryptoFileSystem;
private final AtomicReference<QuickAccessService.QuickAccessEntry> quickAccessEntry;
private final VaultState state;
private final ObjectProperty<Exception> lastKnownException;
private final VaultConfigCache configCache;
@@ -67,6 +72,7 @@ public class Vault {
private final BooleanBinding unknownError;
private final ObjectBinding<Mountpoint> mountPoint;
private final Mounter mounter;
private final Settings settings;
private final BooleanProperty showingStats;
private final AtomicReference<Mounter.MountHandle> mountHandle = new AtomicReference<>(null);
@@ -78,7 +84,7 @@ public class Vault {
VaultState state, //
@Named("lastKnownException") ObjectProperty<Exception> lastKnownException, //
VaultStats stats, //
Mounter mounter) {
Mounter mounter, Settings settings) {
this.vaultSettings = vaultSettings;
this.configCache = configCache;
this.cryptoFileSystem = cryptoFileSystem;
@@ -94,7 +100,9 @@ public class Vault {
this.unknownError = Bindings.createBooleanBinding(this::isUnknownError, state);
this.mountPoint = Bindings.createObjectBinding(this::getMountPoint, state);
this.mounter = mounter;
this.settings = settings;
this.showingStats = new SimpleBooleanProperty(false);
this.quickAccessEntry = new AtomicReference<>(null);
}
// ******************************************************************************
@@ -154,6 +162,9 @@ public class Vault {
var rootPath = fs.getRootDirectories().iterator().next();
var mountHandle = mounter.mount(vaultSettings, rootPath);
success = this.mountHandle.compareAndSet(null, mountHandle);
if (settings.useQuickAccess.getValue()) {
addToQuickAccess();
}
} finally {
if (!success) {
destroyCryptoFileSystem();
@@ -178,6 +189,7 @@ public class Vault {
mountHandle.mountObj().close();
mountHandle.specialCleanup().run();
} finally {
removeFromQuickAccess();
destroyCryptoFileSystem();
}
@@ -185,6 +197,52 @@ public class Vault {
LOG.info("Locked vault '{}'", getDisplayName());
}
private synchronized void addToQuickAccess() {
if (quickAccessEntry.get() != null) {
//we don't throw an exception since we don't wanna block unlocking
LOG.warn("Vault already added to quick access area. Will be removed on next lock operation.");
return;
}
QuickAccessService.get() //
.filter(s -> s.getClass().getName().equals(settings.quickAccessService.getValue())) //
.findFirst() //
.ifPresentOrElse( //
this::addToQuickAccessInternal, //
() -> LOG.warn("Unable to add Vault to quick access area: Desired implementation not available.") //
);
}
private void addToQuickAccessInternal(@NotNull QuickAccessService s) {
if (getMountPoint() instanceof Mountpoint.WithPath mp) {
try {
var entry = s.add(mp.path(), getDisplayName());
quickAccessEntry.set(entry);
} catch (QuickAccessServiceException e) {
LOG.error("Adding vault to quick access area failed", e);
}
} else {
LOG.warn("Unable to add vault to quick access area: Vault is not mounted to local system path.");
}
}
private synchronized void removeFromQuickAccess() {
if (quickAccessEntry.get() == null) {
LOG.debug("Removing vault from quick access area: Entry not found, nothing to do.");
return;
}
removeFromQuickAccessInternal();
}
private void removeFromQuickAccessInternal() {
try {
quickAccessEntry.get().remove();
quickAccessEntry.set(null);
} catch (QuickAccessServiceException e) {
LOG.error("Removing vault from quick access area failed", e);
}
}
// ******************************************************************************
// Observable Properties
// *******************************************************************************
@@ -8,11 +8,13 @@
*******************************************************************************/
package org.cryptomator.common.vaults;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.common.settings.VaultSettings;
import org.cryptomator.cryptofs.CryptoFileSystemProvider;
import org.cryptomator.cryptofs.DirStructure;
import org.cryptomator.cryptofs.migration.Migrators;
import org.cryptomator.integrations.mount.MountService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -24,6 +26,7 @@ import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.ResourceBundle;
@@ -38,14 +41,21 @@ public class VaultListManager {
private static final Logger LOG = LoggerFactory.getLogger(VaultListManager.class);
private final AutoLocker autoLocker;
private final List<MountService> mountServices;
private final VaultComponent.Factory vaultComponentFactory;
private final ObservableList<Vault> vaultList;
private final String defaultVaultName;
@Inject
public VaultListManager(ObservableList<Vault> vaultList, AutoLocker autoLocker, VaultComponent.Factory vaultComponentFactory, ResourceBundle resourceBundle, Settings settings) {
public VaultListManager(ObservableList<Vault> vaultList, //
AutoLocker autoLocker, //
List<MountService> mountServices,
VaultComponent.Factory vaultComponentFactory,
ResourceBundle resourceBundle,
Settings settings) {
this.vaultList = vaultList;
this.autoLocker = autoLocker;
this.mountServices = mountServices;
this.vaultComponentFactory = vaultComponentFactory;
this.defaultVaultName = resourceBundle.getString("defaults.vault.vaultName");
@@ -76,6 +86,15 @@ public class VaultListManager {
} else {
vaultSettings.displayName.set(defaultVaultName);
}
//due to https://github.com/cryptomator/cryptomator/issues/2880#issuecomment-1680313498
var nameOfWinfspLocalMounter = "org.cryptomator.frontend.fuse.mount.WinFspMountProvider";
if (SystemUtils.IS_OS_WINDOWS //
&& vaultSettings.path.get().toString().contains("Dropbox") //
&& mountServices.stream().anyMatch(s -> s.getClass().getName().equals(nameOfWinfspLocalMounter))) {
vaultSettings.mountService.setValue(nameOfWinfspLocalMounter);
}
return vaultSettings;
}
@@ -4,7 +4,9 @@ import org.cryptomator.common.Environment;
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.KeychainAccessProvider;
import org.cryptomator.integrations.quickaccess.QuickAccessService;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.fxapp.FxApplicationWindows;
import org.slf4j.Logger;
@@ -30,12 +32,15 @@ public class GeneralPreferencesController implements FxController {
private final Stage window;
private final Settings settings;
private final Optional<AutoStartProvider> autoStartProvider;
private final List<QuickAccessService> quickAccessServices;
private final Application application;
private final Environment environment;
private final List<KeychainAccessProvider> keychainAccessProviders;
private final FxApplicationWindows appWindows;
public CheckBox useKeychainCheckbox;
public ChoiceBox<KeychainAccessProvider> keychainBackendChoiceBox;
public CheckBox useQuickAccessCheckbox;
public ChoiceBox<QuickAccessService> quickAccessServiceChoiceBox;
public CheckBox startHiddenCheckbox;
public CheckBox autoCloseVaultsCheckbox;
public CheckBox debugModeCheckbox;
@@ -48,6 +53,7 @@ public class GeneralPreferencesController implements FxController {
this.settings = settings;
this.autoStartProvider = autoStartProvider;
this.keychainAccessProviders = keychainAccessProviders;
this.quickAccessServices = QuickAccessService.get().toList();
this.application = application;
this.environment = environment;
this.appWindows = appWindows;
@@ -60,13 +66,21 @@ public class GeneralPreferencesController implements FxController {
debugModeCheckbox.selectedProperty().bindBidirectional(settings.debugMode);
autoStartProvider.ifPresent(autoStart -> autoStartCheckbox.setSelected(autoStart.isEnabled()));
var keychainSettingsConverter = new KeychainProviderClassNameConverter(keychainAccessProviders);
var keychainSettingsConverter = new ServiceToSettingsConverter<>(keychainAccessProviders);
keychainBackendChoiceBox.getItems().addAll(keychainAccessProviders);
keychainBackendChoiceBox.setValue(keychainSettingsConverter.fromString(settings.keychainProvider.get()));
keychainBackendChoiceBox.setConverter(new KeychainProviderDisplayNameConverter());
Bindings.bindBidirectional(settings.keychainProvider, keychainBackendChoiceBox.valueProperty(), keychainSettingsConverter);
useKeychainCheckbox.selectedProperty().bindBidirectional(settings.useKeychain);
keychainBackendChoiceBox.disableProperty().bind(useKeychainCheckbox.selectedProperty().not());
useQuickAccessCheckbox.selectedProperty().bindBidirectional(settings.useQuickAccess);
var quickAccessSettingsConverter = new ServiceToSettingsConverter<>(quickAccessServices);
quickAccessServiceChoiceBox.getItems().addAll(quickAccessServices);
quickAccessServiceChoiceBox.setValue(quickAccessSettingsConverter.fromString(settings.quickAccessService.get()));
quickAccessServiceChoiceBox.setConverter(new NamedServiceConverter<>());
Bindings.bindBidirectional(settings.quickAccessService, quickAccessServiceChoiceBox.valueProperty(), quickAccessSettingsConverter);
quickAccessServiceChoiceBox.disableProperty().bind(useQuickAccessCheckbox.selectedProperty().not());
}
public boolean isAutoStartSupported() {
@@ -91,6 +105,10 @@ public class GeneralPreferencesController implements FxController {
});
}
public boolean isSomeQuickAccessServiceAvailable() {
return !quickAccessServices.isEmpty();
}
@FXML
public void showLogfileDirectory() {
environment.getLogDir().ifPresent(logDirPath -> application.getHostServices().showDocument(logDirPath.toUri().toString()));
@@ -116,29 +134,47 @@ public class GeneralPreferencesController implements FxController {
}
private static class KeychainProviderClassNameConverter extends StringConverter<KeychainAccessProvider> {
private final List<KeychainAccessProvider> keychainAccessProviders;
public KeychainProviderClassNameConverter(List<KeychainAccessProvider> keychainAccessProviders) {
this.keychainAccessProviders = keychainAccessProviders;
}
private static class NamedServiceConverter<T extends NamedServiceProvider> extends StringConverter<T> {
@Override
public String toString(KeychainAccessProvider provider) {
if (provider == null) {
public String toString(T namedService) {
if (namedService == null) {
return null;
} else {
return provider.getClass().getName();
return namedService.getName();
}
}
@Override
public KeychainAccessProvider fromString(String string) {
public T fromString(String string) {
throw new UnsupportedOperationException();
}
}
private static class ServiceToSettingsConverter<T> extends StringConverter<T> {
private final List<T> services;
public ServiceToSettingsConverter(List<T> services) {
this.services = services;
}
@Override
public String toString(T service) {
if (service == null) {
return null;
} else {
return service.getClass().getName();
}
}
@Override
public T fromString(String string) {
if (string == null) {
return null;
} else {
return keychainAccessProviders.stream().filter(provider -> provider.getClass().getName().equals(string)).findAny().orElse(null);
return services.stream().filter(provider -> provider.getClass().getName().equals(string)).findAny().orElse(null);
}
}
}
@@ -30,6 +30,8 @@ public interface PreferencesComponent {
selectedTabProperty().set(selectedTab);
Stage stage = window();
stage.setScene(scene().get());
stage.setMinWidth(420);
stage.setMinHeight(300);
stage.show();
stage.requestFocus();
return stage;
@@ -37,7 +37,7 @@ public class PreferencesController implements FxController {
this.env = env;
this.window = window;
this.selectedTabProperty = selectedTabProperty;
this.updateAvailable = updateChecker.latestVersionProperty().isNotNull();
this.updateAvailable = updateChecker.updateAvailableProperty();
}
@FXML
-2
View File
@@ -7,8 +7,6 @@
xmlns="http://javafx.com/javafx"
fx:id="tabPane"
fx:controller="org.cryptomator.ui.preferences.PreferencesController"
minWidth="-Infinity"
maxWidth="-Infinity"
prefWidth="650"
tabMinWidth="60"
tabClosingPolicy="UNAVAILABLE"
@@ -30,6 +30,10 @@
<ChoiceBox fx:id="keychainBackendChoiceBox"/>
</HBox>
<HBox spacing="12" alignment="CENTER_LEFT" visible="${controller.someQuickAccessServiceAvailable}" managed="${controller.someQuickAccessServiceAvailable}">
<CheckBox fx:id="useQuickAccessCheckbox" text="%preferences.general.quickAccessService"/>
<ChoiceBox fx:id="quickAccessServiceChoiceBox"/>
</HBox>
<Region VBox.vgrow="ALWAYS"/>
<HBox spacing="12" alignment="CENTER_LEFT">
@@ -288,6 +288,7 @@ preferences.general.debugLogging=Enable debug logging
preferences.general.debugDirectory=Reveal log files
preferences.general.autoStart=Launch Cryptomator on system start
preferences.general.keychainBackend=Store passwords with
preferences.general.quickAccessService=Add unlocked vaults to the quick access area
## Interface
preferences.interface=Interface
preferences.interface.theme=Look & Feel
@@ -173,10 +173,15 @@ hub.registerSuccess.legacy.description=للدخول إلى الخزينة، يح
### Registration Failed
hub.registerFailed.message=فشل تسجيل الجهاز
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=للمتابعة، يرجى إكمال الخطوات المطلوبة في
hub.requireAccountInit.description.1=ملف تعريف المستخدم
hub.requireAccountInit.description.2=.
### License Exceeded
hub.invalidLicense.message=ترخيص المركز غير صالح
hub.invalidLicense.description=نموذج المركز Cryptomator الخاص بك لديه ترخيص غير صالح. الرجاء إبلاغ مسؤول مركز لترقية أو تجديد الترخيص.
@@ -305,6 +310,9 @@ preferences.volume.fuseRestartRequired=لتطبيق التغييرات، يحت
preferences.volume.tcp.port=منفذ TCP الافتراضي
preferences.volume.supportedFeatures=يدعم نوع وحدة تخزين المختار الميزات التالية:
preferences.volume.feature.mountAuto=اختيار نقطة البَدْء التلقائية
preferences.volume.feature.mountToDir=مجلد مخصص كنقطة تحميل
preferences.volume.feature.mountToDriveLetter=استخدام حرف وحدة التخزين كنقطة تحميل
preferences.volume.feature.mountFlags=خيارات التثبيت المخصصة
preferences.volume.feature.readOnly=تحميل للقراءة فقط
## Updates
preferences.updates=تحديثات
@@ -312,6 +320,13 @@ preferences.updates.currentVersion=الإصدار الحالي: %s
preferences.updates.autoUpdateCheck=تحقق من التحديثات اوتوماتيكيا
preferences.updates.checkNowBtn=تحقق الان
preferences.updates.updateAvailable=التحديث إلى الإصدار %s متاح.
preferences.updates.lastUpdateCheck=آخر فحص: %s
preferences.updates.lastUpdateCheck.never=مطلقاً
preferences.updates.lastUpdateCheck.recently=مؤخراً
preferences.updates.lastUpdateCheck.daysAgo=منذ %s يوم
preferences.updates.lastUpdateCheck.hoursAgo=منذ %s ساعة
preferences.updates.checkFailed=فشل في البحث عن تحديثات البرنامج تحقق من اتصالك بالإنترنت أو حاول مرة أخرى لاحقاً.
preferences.updates.upToDate=Cryptomator محدث لاخر نسخة.
## Contribution
preferences.contribute=ادعمنا
@@ -331,13 +346,32 @@ stats.cacheHitRate=معدل استخدام الكاش
stats.read.throughput.idle=قراءة: خامل
stats.read.throughput.kibs=القراءة: %.2f KiB/s
stats.read.throughput.mibs=القراءة: %.2f MiB/s
stats.read.total.data.none=بيانات القراءة: -
stats.read.total.data.kib=بيانات القراءة: %.1f كيلوبايت
stats.read.total.data.mib=بيانات القراءة: %.1f ميجابايت
stats.read.total.data.gib=بيانات القراءة: %.1f جيجابايت
stats.decr.total.data.none=تم فك تشفير البيانات:-
stats.decr.total.data.kib=البيانات المفكوكة: %.1f كيلوبايت
stats.decr.total.data.mib=البيانات المفكوكة: %.1f ميجابايت
stats.decr.total.data.gib=البيانات المفكوكة: %.1f جيجابايت
stats.read.accessCount=مجموع القراءات: %d
## Write
stats.write.throughput.idle=الكتابة: خامل
stats.write.throughput.kibs=الكتابة: %.2f كيلوبايت/ثانية
stats.write.throughput.mibs=الكتابة: %.2f ميجابايت/ثانية
stats.write.total.data.none=البيانات المكتوبة: -
stats.write.total.data.kib=البيانات المكتوبة: %.1f كيلوبايت
stats.write.total.data.mib=البيانات المكتوبة: %.1f م.ب
stats.write.total.data.gib=البيانات المكتوبة: %.1f ج.ب
stats.encr.total.data.none=البيانات المشفرة: -
stats.encr.total.data.kib=البيانات المشفرة: %.1f كيلوبايت
stats.encr.total.data.mib=البيانات المشفرة: %.1f ميجابايت
stats.encr.total.data.gib=البيانات المشفرة: %.1f جيجابايت
stats.write.accessCount=مجموع الكتابات: %d
## Accesses
stats.access.current=الوصول: %d
stats.access.total=مجموع الوصول: %d
# Main Window
@@ -355,6 +389,8 @@ main.vaultlist.contextMenu.unlockNow=افتح الان
main.vaultlist.contextMenu.vaultoptions=إظهار خيارات المخزن
main.vaultlist.contextMenu.reveal=اظهار القرص
main.vaultlist.addVaultBtn=إضافة
main.vaultlist.addVaultBtn.menuItemNew=خزانة جديدة...
main.vaultlist.addVaultBtn.menuItemExisting=أضِف خزانة موجودة...
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=شكرا لاختيار Cryptomator لحماية ملفاتك. إذا كنت بحاجة إلى أية مساعدة، تحقق من دليل وتعليمات الإستخدام:
@@ -364,14 +400,17 @@ main.vaultDetail.unlockBtn=فتح…
main.vaultDetail.unlockNowBtn=فتح القفل الان
main.vaultDetail.optionsBtn=خيارات المخزن
main.vaultDetail.passwordSavedInKeychain=تم حفظ كلمة المرور
main.vaultDetail.share=مشاركة…
### Unlocked
main.vaultDetail.unlockedStatus=مفتوح
main.vaultDetail.accessLocation=يمكن الوصول إلى محتويات مخزنك هنا:
main.vaultDetail.revealBtn=اظهار القرص
main.vaultDetail.copyUri=نسخ الرابط
main.vaultDetail.lockBtn=قفل
main.vaultDetail.bytesPerSecondRead=قراءة:
main.vaultDetail.bytesPerSecondWritten=كتابة:
main.vaultDetail.throughput.idle=خمول
main.vaultDetail.throughput.kbps=%.1f كيلوبايت/ث
main.vaultDetail.throughput.mbps=%.1f ميجابايت/ث
main.vaultDetail.stats=إحصائيات الخزنة
main.vaultDetail.locateEncryptedFileBtn=تحديد موقع الملف المشفر
@@ -387,6 +426,9 @@ main.vaultDetail.missing.changeLocation=تغيير موقع الخزنة…
main.vaultDetail.migrateButton=ترقية الحافظة
main.vaultDetail.migratePrompt=يجب ترقية المخزن الخاص بك إلى تنسيق جديد، قبل أن تتمكن من الوصول إليه
### Error
main.vaultDetail.error.info=حدث خطأ أثناء تحميل الخزانة من القرص الصلب.
main.vaultDetail.error.reload=إعادة تحميل
main.vaultDetail.error.windowTitle=خطأ في تحميل الخزنة
# Wrong File Alert
wrongFileAlert.title=كيفية تشفير الملفات
@@ -402,24 +444,31 @@ wrongFileAlert.link=لمزيد من المساعدة، قم بزيارة
## General
vaultOptions.general=عام
vaultOptions.general.vaultName=اسم المخزن
vaultOptions.general.autoLock.lockAfterTimePart1=قفل عند الخمول لمدة
vaultOptions.general.autoLock.lockAfterTimePart2=دقائق
vaultOptions.general.unlockAfterStartup=فتح قفل المخزن عند بدء تشغيل Cryptomator
vaultOptions.general.actionAfterUnlock=بعد فتح القفل بنجاح
vaultOptions.general.actionAfterUnlock.ignore=‮لا تفعل شيئاً
vaultOptions.general.actionAfterUnlock.reveal=إظهار القرص
vaultOptions.general.actionAfterUnlock.ask=اسأل
vaultOptions.general.startHealthCheckBtn=بدء فحص الصحة
## Mount
vaultOptions.mount=القرص الوهمي
vaultOptions.mount.info=افتح تفضيلات القرص الظاهري لتغيير الإعدادات الافتراضية.
vaultOptions.mount.readonly=للقراءة فقط
vaultOptions.mount.customMountFlags=الأعلام المخصصة
vaultOptions.mount.winDriveLetterOccupied=مشغول
vaultOptions.mount.mountPoint=موقع التحميل الوهمي
vaultOptions.mount.mountPoint.auto=اختيار موقع مناسب تلقائياً
vaultOptions.mount.mountPoint.driveLetter=استخدام دالة قرص معين
vaultOptions.mount.mountPoint.custom=استخدام المجلد المختار
vaultOptions.mount.mountPoint.directoryPickerButton=اختر…
vaultOptions.mount.mountPoint.directoryPickerTitle=إختر مجلد
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=تغيير كلمة المرور
@@ -429,9 +478,12 @@ vaultOptions.masterkey.showRecoveryKeyBtn=عرض مفتاح الاسترداد
vaultOptions.masterkey.recoverPasswordBtn=إعادة تعيين كلمة المرور
## Hub
vaultOptions.hub=الإسترداد
vaultOptions.hub.convertInfo=يمكنك استخدام مفتاح الاسترداد لتحويل هذه خزانة Hub إلى خزانة تعتمد على كلمة مرور في حالة الطوارئ.
vaultOptions.hub.convertBtn=التحويل إلى خزانة قائمة على كلمة المرور
# Recovery Key
## Display Recovery Key
recoveryKey.display.title=إظهار مفتاح الاسترداد
recoveryKey.create.message=مطلوب كلمة المرور
recoveryKey.create.description=أدخل كلمة المرور الخاصة بك لإظهار مفتاح الاسترداد ل "%s":
recoveryKey.display.description=يمكن استخدام مفتاح الاسترداد التالي لاستعادة الوصول إلى "%s":
@@ -439,12 +491,23 @@ recoveryKey.display.StorageHints=حافظ عليه في مكان ما آمن ج
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=إعادة تعيين كلمة المرور
recoveryKey.recover.prompt=أدخل مفتاح الاسترداد لـ "%s":
recoveryKey.recover.correctKey=هذا مفتاح استرداد صالح
recoveryKey.recover.wrongKey=مفتاح الاسترداد هذا ينتمي إلى خزانة مختلفة
recoveryKey.recover.invalidKey=مفتاح الاسترداد غير صالح
recoveryKey.printout.heading=مفتاح استرداد Cryptomator\n"%s"\n
### Reset Password
recoveryKey.recover.resetBtn=إعادة الضبط
### Recovery Key Password Reset Success
recoveryKey.recover.resetSuccess.message=تم إعادة تعيين كلمة المرور بنجاح
recoveryKey.recover.resetSuccess.description=يمكنك فتح الخزانة الخاصة بك بكلمة المرور الجديدة.
# Convert Vault
convertVault.title=تحويل الخزانة
convertVault.convert.convertBtn.before=حوّل
convertVault.convert.convertBtn.processing=جاري التحويل…
convertVault.success.message=تم التحويل بنجاح
convertVault.hubToPassword.success.description=يمكنك الآن فتح الخزانة باستخدام كلمة المرور المختارة دون الحاجة إلى الوصول إلى Hub.
# New Password
newPassword.promptText=أدخل كلمة مرور جديدة
@@ -459,13 +522,46 @@ passwordStrength.messageLabel.3=قوية
passwordStrength.messageLabel.4=قوية جداً
# Quit
quit.title=إغلاق التطبيق
quit.message=هناك خزانات مفتوحة
quit.description=يرجى تأكيد رغبتك في الخروج. سيقوم Cryptomator بقفل جميع الخزائن غير المقفلة بشكل آمن لمنع فقدان البيانات.
quit.lockAndQuitBtn=قفل و خروج
# Forced Quit
quit.forced.message=بعض الخزائن لم أتمكن من قفلها
quit.forced.description=تم حظر قفل الخزنات بسبب العمليات المعلقة أو الملفات المفتوحة. يمكنك فرض قفل الخزنات المتبقية، ولكن قد يؤدي مقاطعة عمليات الإدخال/الإخراج إلى فقدان البيانات غير المحفوظة.
quit.forced.forceAndQuitBtn=فرض وإغلاق
# Update Reminder
updateReminder.title=التحقق من التحديث
updateReminder.message=التحقق من التحديثات؟
updateReminder.description=ابقَ على اطلاع بأحدث الميزات، وإصلاحات الأخطاء، وتحسينات الأمان. نوصي بالتحقق التلقائي من التحديثات.
updateReminder.notNow=ليس الآن
updateReminder.yesOnce=نعم، مرة واحدة
updateReminder.yesAutomatically=نعم، تلقائياً
#Dokany Support End
dokanySupportEnd.title=إشعار بإيقاف الدعم
dokanySupportEnd.message=انتهاء الدعم لـDokany
dokanySupportEnd.description=نوع وحدة التخزين Dokany لم يعد مدعوماً من قبل Cryptomator. تم تعديل إعداداتك لاستخدام نوع وحدة التخزين الافتراضي الآن. يمكنك عرض النوع الافتراضي في التفضيلات.
dokanySupportEnd.preferencesBtn=فتح التفضيلات
# Share Vault
shareVault.title=مشاركة الخزانة
shareVault.message=هل ترغب في مشاركة خزانتك مع الآخرين؟
shareVault.description=كن حذرًا دائمًا عند مشاركة خزانتك مع الآخرين. باختصار، اتبع هذه الخطوات:
shareVault.instruction.1=1. شارك الوصول إلى مجلد الخزانة المشفر عبر التخزين السحابي.
shareVault.instruction.2=2. شارك كلمة مرور الخزانة بطريقة آمنة.
shareVault.remarkBestPractices=لمزيد من المعلومات، تحقق من اقتراحات أفضل الممارسات في مستنداتنا.
shareVault.docsTooltip=افتح وثائق البرنامج Documentation لتعلم المزيد عن مشاركة الخزائن.
shareVault.hubAd.description=الطريقة الآمنة للعمل ضمن الفرق
shareVault.hubAd.keyManagement=• إدارة المفاتيح بدون معرفة
shareVault.hubAd.authentication=• مصادقة قوية
shareVault.hubAd.encryption=• التشفير من الطرف إلى الطرف
shareVault.visitHub=زيارة Cryptomator Hub
shareVault.hub.message=كيفية مشاركة خزانة Hub
shareVault.hub.description=لمشاركة محتوى الخزانة مع عضو آخر في الفريق، عليك القيام بخطوتين:
shareVault.hub.instruction.1=1. شارك الوصول إلى مجلد الخزانة المشفر عبر التخزين السحابي.
shareVault.hub.instruction.2=2. امنح الوصول لعضو الفريق في Cryptomator Hub.
shareVault.hub.openHub=زيارة Cryptomator Hub
@@ -287,6 +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=Die entsperrten Tresore zum Schnellzugriff hinzufügen
## Interface
preferences.interface=Benutzeroberfläche
preferences.interface.theme=Erscheinungsbild
@@ -541,6 +542,7 @@ updateReminder.yesOnce=Ja, einmalig
updateReminder.yesAutomatically=Ja, automatisch
#Dokany Support End
dokanySupportEnd.message=Ende der Unterstützung für Dokany
dokanySupportEnd.preferencesBtn=Einstellungen öffnen
# Share Vault
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Ενεργοποίηση καταγραφής
preferences.general.debugDirectory=Αποκάλυψη αρχείων καταγραφής
preferences.general.autoStart=Εκκίνηση Cryptomator στην εκκίνηση του συστήματος
preferences.general.keychainBackend=Αποθήκευση κωδικού πρόσβασης με
preferences.general.quickAccessService=Προσθήκη ξεκλειδωμένων Κρυπτών στην περιοχή γρήγορης πρόσβασης
## Interface
preferences.interface=Διεπαφή
preferences.interface.theme=Εμφάνιση & Αίσθηση
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Habilitar registro de depuración
preferences.general.debugDirectory=Revelar archivos de registro
preferences.general.autoStart=Cargar Cryptomator al iniciar el sistema
preferences.general.keychainBackend=Guardar contraseñas con
preferences.general.quickAccessService=Añadir bóvedas desbloqueadas al área de acceso rápido
## Interface
preferences.interface=Interfaz
preferences.interface.theme=Apariencia
@@ -92,6 +92,7 @@ lock.forced.retryBtn=تلاش مجدد
# Preferences
## General
preferences.general.quickAccessService=خزانه های قفل نشده را به دسترسی سریع اضافه کنید
## Interface
## Volume
## Updates
@@ -119,6 +120,7 @@ main.closeBtn.tooltip=ببند
main.supporterCertificateMissing.tooltip=لطفا کمک مالی در نظر بگیرند
## Vault List
main.vaultlist.contextMenu.lock=قفل
main.vaultlist.addVaultBtn=اضافه کردن
## Vault Detail
### Welcome
### Locked
@@ -141,6 +141,7 @@ unlock.error.customPath.description.hideawayNotDir=Ang pansamantalang nakatagong
unlock.error.customPath.description.couldNotBeCleaned=Hindi ma-mount ang iyong vault sa path na "%s". Pakisubukang muli o pumili ng ibang landas.
unlock.error.customPath.description.notEmptyDir=Ang custom na mount path na "%s" ay hindi isang walang laman na folder. Mangyaring pumili ng isang walang laman na folder at subukang muli.
unlock.error.customPath.description.generic=Pumili ka ng custom na mount path para sa vault na ito, ngunit nabigo ang paggamit nito sa mensaheng: %2$s
unlock.error.restartRequired.message=Hindi mabuksan ang vault
unlock.error.title=Hindi mabuksan ang "%s"
## Hub
hub.noKeychain.message=Hindi ma-access ang key ng device
@@ -157,10 +158,18 @@ hub.receive.description=Ang Cryptomator ay tumatanggap at nagpoproseso ng tugon
hub.register.message=Bagong Device
hub.register.nameLabel=Pangalan ng device
hub.register.invalidAccountKeyLabel=Di-wastong Account Key
hub.register.registerBtn=Magparehistro
### Register Device Legacy
hub.register.legacy.occupiedMsg=Ang pangalan ay nagamit na
### Registration Success
hub.registerSuccess.message=Rehistrado na ang device
hub.registerSuccess.description=Ang iyong device ay matagumpay sa pag rehistrado. Maaari mo nang buksan ang vault.
hub.registerSuccess.unlockBtn=I-unlock
hub.registerSuccess.legacy.description=Para ma-access ang vault, kailangang pahintulutan ng may-ari ng vault ang iyong device.
### Registration Failed
hub.registerFailed.message=Ang pag rehistrado ng device ay pumalya
hub.registerFailed.description.generic=Nagkaroon ng error sa proseso ng pag registrado. Para sa higit pang mga detalye, tingnan ang log ng aplikasyon.
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.
@@ -305,6 +314,11 @@ preferences.updates.currentVersion=Kasalukuyang Bersyon: %s
preferences.updates.autoUpdateCheck=Awtomatikong suriin ang mga update
preferences.updates.checkNowBtn=Tingnan ngayon
preferences.updates.updateAvailable=Available ang update sa bersyong %s.
preferences.updates.lastUpdateCheck=Huling pagsusuri: %s
preferences.updates.lastUpdateCheck.never=hindi kailanman
preferences.updates.lastUpdateCheck.recently=kamakailan
preferences.updates.lastUpdateCheck.daysAgo=%s araw ang lumipas
preferences.updates.lastUpdateCheck.hoursAgo=%s oras ang lumipas
## Contribution
preferences.contribute=Suportahan Kami
@@ -516,3 +530,10 @@ updateReminder.yesAutomatically=Oo, Awtomatiko
dokanySupportEnd.preferencesBtn=Buksan ang Mga Kagustuhan
# Share Vault
shareVault.title=Ibahagi ang Vault
shareVault.message=Gusto mo bang ibahagi ang iyong vault sa iba?
shareVault.description=Maingat palagi pag binabahagi ang iyong vault sa ibang tao. Sa maikling salita, sundin ang mga hakbangin:
shareVault.visitHub=Pagbisita ang Cryptomator Hub
shareVault.hub.message=Paano ibahagi ang Hub vault
shareVault.hub.openHub=Buksan ang Cryptomator Hub
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Activer les logs debug
preferences.general.debugDirectory=Afficher le journal
preferences.general.autoStart=Lancer Cryptomator au démarrage du système
preferences.general.keychainBackend=Stocker les mots de passe avec
preferences.general.quickAccessService=Ajouter les coffres déverrouillés à la zone d'accès rapide
## Interface
preferences.interface=Interface
preferences.interface.theme=Apparence
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Abilita la registrazione di debug
preferences.general.debugDirectory=Rivela i file di registro
preferences.general.autoStart=Avvia Cryptomator all'avvio del sistema
preferences.general.keychainBackend=Memorizza le password con
preferences.general.quickAccessService=Aggiungi cassaforte sbloccata all'area di accesso rapido
## Interface
preferences.interface=Interfaccia
preferences.interface.theme=Aspetto
@@ -331,7 +332,7 @@ preferences.updates.upToDate=Cryptomator è aggiornato.
## Contribution
preferences.contribute=Supportaci
preferences.contribute.registeredFor=Certificato del sostenitore registrato per %s
preferences.contribute.noCertificate=Supporta Cryptomator e ricevi il certificato da sostenitore. È come una chiave di licenza me per persone fantastiche che usano un software gratuito. ;-)
preferences.contribute.noCertificate=Supporta Cryptomator e ricevi un certificato di supporter. È come una chiave di licenza, ma per persone fantastiche che utilizzano software libero. ;-)
preferences.contribute.getCertificate=Non ne hai ancora uno? Scopri come puoi ottenerlo.
preferences.contribute.promptText=Incolla qui il codice del certificato da sostenitore
#<-- Add entries for donations and code/translation/documentation contribution -->
@@ -287,6 +287,7 @@ preferences.general.debugLogging=ログを有効にする
preferences.general.debugDirectory=ログ ファイルを表示
preferences.general.autoStart=システム開始時に Cryptomator を起動する
preferences.general.keychainBackend=次を利用してパスワードを保存する
preferences.general.quickAccessService=解錠された金庫をクイックアクセス領域に追加
## Interface
preferences.interface=インターフェース
preferences.interface.theme=外観
@@ -541,6 +542,8 @@ updateReminder.yesOnce=はい、一度だけ
updateReminder.yesAutomatically=自動的に行う
#Dokany Support End
dokanySupportEnd.title=サポート廃止の通知
dokanySupportEnd.message=Dokany のサポート終了
dokanySupportEnd.preferencesBtn=環境設定を開く
# Share Vault
@@ -60,6 +60,10 @@ addvaultwizard.new.validCharacters.numbers=숫자
addvaultwizard.new.validCharacters.dashes=대시 (%s) 또는 언더바 (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=전문가용 설정 활성화
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=36과 220 사이 숫자를 입력해주세요 (기본값: 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=더 자세한 정보는 관련 문서에서 볼 수 있습니다.
addvaultwizard.new.expertSettings.shorteningThreshold.title=암호화된 파일명의 최대 길이
addvaultwizard.new.expertSettings.shorteningThreshold.valid=유효
### Password
addvaultwizard.new.createVaultBtn=Vault 생성
addvaultwizard.new.generateRecoveryKeyChoice=비밀번호가 없으면 데이터에 접근할 수 없습니다. 비밀번호를 잊었을 때를 대비한 복구 키를 원하십니까?
@@ -128,13 +132,21 @@ unlock.success.revealBtn=드라이브 표시
## Hub
hub.noKeychain.openBtn=설정 열기
### Waiting
hub.auth.message=인증 대기중…
### Receive Key
### Register Device
hub.register.message=새 기기
hub.register.nameLabel=기기 이름
hub.register.invalidAccountKeyLabel=유효하지 않은 계정 키
hub.register.registerBtn=등록
### Register Device Legacy
hub.register.legacy.occupiedMsg=이미 사용 중인 이름
### Registration Success
hub.registerSuccess.message=기기 등록됨
hub.registerSuccess.unlockBtn=잠금해제
### Registration Failed
hub.registerFailed.message=기기 등록 실패
hub.registerFailed.description.generic=등록 중에 에러가 발생했습니다. 앱 로그에서 자세한 정보를 확인할 수 있습니다.
### Unauthorized
hub.unauthorized.message=액세스 거부
hub.unauthorized.description=귀하의 기기는 아직 이 저장소에 액세스할 수 있는 권한이 없습니다. Vault 소유자에게 승인을 요청하세요.
@@ -162,6 +174,7 @@ migration.start.text=Vault "%s"를 현재 버전의 Cryptomator에서 열기 위
migration.start.remarkUndone=이 업그레이드는 되돌릴 수 없습니다.
migration.start.remarkVersions=과거 버전의 Cryptomator는 업그레이드된 vault를 열 수 없습니다.
migration.start.remarkCanRun=이 vault를 열 때 사용하는 모든 장치가 현재 버전의 Cryptomator를 실행할 수 있는지 확인해야 합니다.
migration.start.remarkSynced=업그레이드하기 전에 해당 vault가 모든 기기에 정상적으로 동기화되어야 합니다.
migration.start.confirm=나는 위 정보를 읽고 정말 이해했습니다.
## Run
migration.run.enterPassword="%s"의 비밀번호를 입력하십시요.
@@ -207,11 +220,23 @@ health.check.detail.checkRunning=검사가 현재 실행중입니다...
health.check.detail.checkSkipped=선택된 검사항목이 없습니다.
health.check.detail.checkFinished=검사가 성공적으로 완료되었습니다.
health.check.detail.checkFinishedAndFound=검사가 완료되었습니다. 검사 결과를 확인해주세요.
health.check.detail.checkFailed=오류로 인해 검사가 종료되었습니다.
health.check.detail.checkCancelled=검사가 취소되었습니다
health.check.detail.listFilters.label=필터
health.check.exportBtn=보고서 내보내기
## Result view
health.result.severityFilter.all=모든 상태 표시
health.result.severityFilter.good=양호
health.result.severityFilter.warn=경고
health.result.severityFilter.crit=심각
health.result.severityTip.good=상태: 양호\n정상적인 vault 구조를 가지고 있습니다.
health.result.severityTip.crit=상태: 심각\nVault 구조가 손상되었습니다. 데이터 손실이 발생했습니다.
health.result.fixStateFilter.all=모든 문제 해결 상태
health.result.fixStateFilter.fixable=문제 해결 가능
health.result.fixStateFilter.notFixable=문제 해결 불가
health.result.fixStateFilter.fixing=문제 해결중…
health.result.fixStateFilter.fixed=문제 해결됨
health.result.fixStateFilter.fixFailed=문제 해결 실패
## Fix Application
health.fix.fixBtn=문제해결
health.fix.successTip=문제 해결이 성공적으로 완료되었습니다
@@ -243,6 +268,7 @@ preferences.interface.showTrayIcon=트레이 아이콘 보기 (재시작 필요)
## Volume
preferences.volume=가상 드라이브
preferences.volume.type.automatic=자동
preferences.volume.tcp.port=기본 TCP 포트
preferences.volume.supportedFeatures=현재 선택한 볼륨 타입은 다음과 같은 기능들을 지원합니다:
preferences.volume.feature.mountToDir=마운트할 폴더 지정
preferences.volume.feature.mountToDriveLetter=마운트할 드라이브 문자
@@ -254,6 +280,13 @@ preferences.updates.currentVersion=현재 버전: %s
preferences.updates.autoUpdateCheck=자동으로 업데이트 확인
preferences.updates.checkNowBtn=지금 확인
preferences.updates.updateAvailable=버전 %s의 업데이트가 가능합니다.
preferences.updates.lastUpdateCheck=마지막 확인: %s
preferences.updates.lastUpdateCheck.never=확인 안함
preferences.updates.lastUpdateCheck.recently=최근
preferences.updates.lastUpdateCheck.daysAgo=%s일 전
preferences.updates.lastUpdateCheck.hoursAgo=%s 시간 전
preferences.updates.checkFailed=업데이트를 확인할 수 없습니다. 인터넷 상태를 확인하거나 나중에 시도해주세요.
preferences.updates.upToDate=현재 최신 버전의 Cryptomator를 사용하고 있습니다.
## Contribution
preferences.contribute=후원하기
@@ -326,6 +359,7 @@ main.vaultDetail.unlockBtn=잠금해제...
main.vaultDetail.unlockNowBtn=지금 잠금해제
main.vaultDetail.optionsBtn=Vault 옵션
main.vaultDetail.passwordSavedInKeychain=비밀번호 저장됨
main.vaultDetail.share=공유하기
### Unlocked
main.vaultDetail.unlockedStatus=잠금해제됨
main.vaultDetail.accessLocation=이 Vault의 내용은 다음의 경로에서 접근할 수 있습니다:
@@ -385,6 +419,7 @@ vaultOptions.mount.mountPoint.driveLetter=드라이브 문자를 지정하여
vaultOptions.mount.mountPoint.custom=선택한 디렉토리 사용
vaultOptions.mount.mountPoint.directoryPickerButton=선택
vaultOptions.mount.mountPoint.directoryPickerTitle=디렉토리 선택
vaultOptions.mount.volume.tcp.port=TCP 포트
## Master Key
vaultOptions.masterkey=비밀번호
vaultOptions.masterkey.changePasswordBtn=비밀번호 변경
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Debug logging aanzetten
preferences.general.debugDirectory=Logboekbestanden bekijken
preferences.general.autoStart=Start Cryptomator als het systeem opstart
preferences.general.keychainBackend=Bewaar wachtwoorden met
preferences.general.quickAccessService=Voeg ontgrendelde kluizen toe aan snelle toegang
## Interface
preferences.interface=Uiterlijk
preferences.interface.theme=Uiterlijk
@@ -318,5 +318,7 @@ quit.lockAndQuitBtn=ਲਾਕ ਕਰੋ ਤੇ ਬਾਹਰ ਜਾਓ
# Update Reminder
#Dokany Support End
dokanySupportEnd.title=ਬਰਤਰਫ਼ੀ ਨੋਟਿਸ
dokanySupportEnd.preferencesBtn=ਪਸੰਦੀਦਾ ਖੋਲ੍ਹੋ
# Share Vault
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Włącz logowanie w trybie debug
preferences.general.debugDirectory=Pokaż pliki logowania
preferences.general.autoStart=Uruchom Cryptomator po uruchomieniu systemu
preferences.general.keychainBackend=Przechowuj hasła za pomocą
preferences.general.quickAccessService=Dodaj odblokowane sejfy do paska szybkiego dostępu
## Interface
preferences.interface=Interfejs
preferences.interface.theme=Wygląd
@@ -325,6 +326,8 @@ preferences.updates.lastUpdateCheck.never=nigdy
preferences.updates.lastUpdateCheck.recently=niedawno
preferences.updates.lastUpdateCheck.daysAgo=%s dni temu
preferences.updates.lastUpdateCheck.hoursAgo=%s godzin temu
preferences.updates.checkFailed=Nieudana próba sprawdzenia aktualizacji. Sprawdź połączenie z internetem i spróbuj ponownie.
preferences.updates.upToDate=Cryptomator jest aktualny.
## Contribution
preferences.contribute=Wesprzyj nas
@@ -539,6 +542,9 @@ updateReminder.yesOnce=Tak, raz
updateReminder.yesAutomatically=Tak, automatycznie
#Dokany Support End
dokanySupportEnd.title=Informacja o wycofaniu
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
# Share Vault
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Ativar o registo de erros
preferences.general.debugDirectory=Mostrar ficheiros de registo
preferences.general.autoStart=Iniciar o Cryptomator no início do sistema
preferences.general.keychainBackend=Guardar palavras-passe com
preferences.general.quickAccessService=Adicionar cofres desbloqueados à área de acesso rápido
## Interface
preferences.interface=Interface
preferences.interface.theme=Aspecto e Ambiente
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Ativar log de debug
preferences.general.debugDirectory=Mostrar arquivos de log
preferences.general.autoStart=Iniciar o Cryptomator ao inicializar o sistema
preferences.general.keychainBackend=Armazenar senhas com
preferences.general.quickAccessService=Adicione cofres desbloqueados à área de acesso rápido
## Interface
preferences.interface=Interface
preferences.interface.theme=Aparência
@@ -15,12 +15,12 @@ generic.button.next=Далее
generic.button.print=Печать
# Error
error.message=Ошибка: %s
error.description=Произошла непредвиденная ситуация. Попробуйте найти уже имеющиеся решения этой ошибки. Если об этой ошибке ещё не сообщали, то сообщите вы.
error.message=Произошла ошибка
error.description=Cryptomator не ожидал, что это произойдёт. Вы можете найти существующие решения по этой ошибке. Или, если об этом ещё не сообщалось, то не стесняйтесь это сделать.
error.hyperlink.lookup=Найти ошибку
error.hyperlink.report=Сообщить об ошибке
error.hyperlink.report=Сообщить об этой ошибке
error.technicalDetails=Подробности:
error.existingSolutionDescription=Произошло неожиданное событие. Однако мы нашли решение этой проблемы. Ознакомьтесь с ним по ссылке.
error.existingSolutionDescription=Cryptomator не ожидал, что это произойдёт. Однако, мы нашли существующее решение по этой проблеме. Пожалуйста, ознакомьтесь с ним по ссылке.
error.hyperlink.solution=Найти решение
error.lookupPermissionMessage=Cryptomator может поискать решение этой проблемы в Интернете. Для этого будет отправлен запрос о проблеме в нашу базу данных с вашего IP-адреса.
error.dismiss=Отклонить
@@ -279,6 +279,7 @@ preferences.general.debugLogging=Povoliť logovanie chýb
preferences.general.debugDirectory=Ukázať súbory logov
preferences.general.autoStart=Spustiť Cryptomator pri štarte systému
preferences.general.keychainBackend=Uložiť heslá v
preferences.general.quickAccessService=Pridať odomknuté trezory na plochu rýchleho prístupu
## Interface
preferences.interface=Rozhranie
preferences.interface.theme=Vzhľad a pocit
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Aktivera loggning för felsökning
preferences.general.debugDirectory=Visa loggfiler
preferences.general.autoStart=Starta Cryptomator vid systemstart
preferences.general.keychainBackend=Spara lösenord med
preferences.general.quickAccessService=Lägg till olåsta valv till snabbåtkomstområdet
## Interface
preferences.interface=Gränssnitt
preferences.interface.theme=Utseende & känsla
@@ -20,7 +20,7 @@ error.description=Cryptomator bunun olmasını beklemiyordu. Bu hata için mevcu
error.hyperlink.lookup=Bu hatayı araştır
error.hyperlink.report=Bu hatayı bildir
error.technicalDetails=Detaylar:
error.existingSolutionDescription=Cryptomator bunun olmasını beklemiyordu. Ancak bu hata için hali hazırda bir çözüm olduğunu bulduk. Lütfen aşağıdaki bağlantıya göz atın.
error.existingSolutionDescription=Cryptomator bunun olmasını beklemiyordu. Ancak bu hata için mevcut bir çözüm bulduk. Lütfen aşağıdaki bağlantıya bir göz atın.
error.hyperlink.solution=Çözüme bak
error.lookupPermissionMessage=Cryptomator bu soruna çevrimiçi bir çözüm arayabilir. Bu, sorun veritabanımıza IP adresinizden bir istek gönderecektir.
error.dismiss=Yoksay
@@ -50,7 +50,7 @@ addvaultwizard.new.locationInstruction=Cryptomator kasanızın şifreli dosyalar
addvaultwizard.new.locationLoading=Varsayılan bulut depolama dizinleri için yerel dosya sistemi denetleniyor…
addvaultwizard.new.locationLabel=Depolama konumu
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Diğer konum
addvaultwizard.new.directoryPickerLabel=Özel konum
addvaultwizard.new.directoryPickerButton=Seç…
addvaultwizard.new.directoryPickerTitle=Dizin Seç
addvaultwizard.new.fileAlreadyExists=Kasa adına sahip bir dosya veya dizin zaten mevcut
@@ -110,7 +110,7 @@ removeVault.confirmBtn=Kasayı Sil
# Change Password
changepassword.title=Şifreyi Değiştir
changepassword.enterOldPassword="%s" için mevcut şifreyi girin
changepassword.finalConfirmation=Şifremi unutursam verilerime ulaşamayacağımın farkındayım
changepassword.finalConfirmation=Şifremi unuttuğum takdirde verilerime erişemeyeceğimi anlıyorum
# Forget Password
forgetPassword.title=Şifreyi Unut
@@ -445,7 +445,7 @@ wrongFileAlert.link=Daha fazla yardım için, ziyaret edin:
vaultOptions.general=Genel
vaultOptions.general.vaultName=Kasa Adı
vaultOptions.general.autoLock.lockAfterTimePart1=Boşta olduğunda kilitle
vaultOptions.general.autoLock.lockAfterTimePart2=dk
vaultOptions.general.autoLock.lockAfterTimePart2=dakika
vaultOptions.general.unlockAfterStartup=Cryptomator başlatıldığında kasayı
vaultOptions.general.actionAfterUnlock=Başarılı kilit açmanın ardından
vaultOptions.general.actionAfterUnlock.ignore=Hiçbir şey yapma
@@ -541,6 +541,9 @@ updateReminder.yesOnce=Evet, tek seferlik
updateReminder.yesAutomatically=Evet, otomatik olarak
#Dokany Support End
dokanySupportEnd.title=Destek sonlandırma bildirimi
dokanySupportEnd.message=Dokany için destek sonu
dokanySupportEnd.description=Dokany birim türü artık Cryptomator tarafından desteklenmiyor. Ayarlarınız artık varsayılan birim türünü kullanacak şekilde ayarlanmıştır. Varsayılan birim türünü tercihlerde görüntüleyebilirsiniz.
dokanySupportEnd.preferencesBtn=Özellikleri Aç
# Share Vault
@@ -0,0 +1,118 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
# Error
# Defaults
# Tray Menu
# Add Vault Wizard
## New
### Name
### Location
### Expert Settings
### Password
### Information
## Existing
## Success
# Remove Vault
# Change Password
# Forget Password
# Unlock
## Select
## Success
## Failure
## Hub
### Waiting
### Receive Key
### Register Device
### Register Device Legacy
### Registration Success
### Registration Failed
### Unauthorized
### Requires Account Initialization
### License Exceeded
# Lock
## Force
## Failure
# Migration
## Start
## Run
## Success
## Missing file system capabilities
## Impossible
# Health Check
## Start
## Start Failure
## Check Selection
## Detail view
## Result view
## Fix Application
# Preferences
## General
## Interface
## Volume
## Updates
## Contribution
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
# Vault Statistics
## Read
## Write
## Accesses
# Main Window
## Vault List
## Vault Detail
### Welcome
### Locked
### Unlocked
### Missing
### Needs Migration
### Error
# Wrong File Alert
# Vault Options
## General
## Mount
## Master Key
## Hub
# Recovery Key
## Display Recovery Key
## Reset Password
### Enter Recovery Key
### Reset Password
### Recovery Key Password Reset Success
# Convert Vault
# New Password
# Quit
# Forced Quit
# Update Reminder
#Dokany Support End
# Share Vault
@@ -287,6 +287,7 @@ preferences.general.debugLogging=启用调试日志
preferences.general.debugDirectory=显示日志文件
preferences.general.autoStart=开机自动启动
preferences.general.keychainBackend=存储密码方式
preferences.general.quickAccessService=将已解锁的保险库添加到快速访问区域
## Interface
preferences.interface=用户界面
preferences.interface.theme=界面外观
@@ -287,6 +287,7 @@ preferences.general.debugLogging=啟用除錯日誌
preferences.general.debugDirectory=顯示日誌檔
preferences.general.autoStart=系統啟動時同時啟動 Cryptomator
preferences.general.keychainBackend=儲存密碼使用
preferences.general.quickAccessService=將已解鎖的檔案庫加入快捷工具區
## Interface
preferences.interface=介面
preferences.interface.theme=外觀
@@ -541,6 +542,9 @@ updateReminder.yesOnce=是,僅一次
updateReminder.yesAutomatically=是,自動
#Dokany Support End
dokanySupportEnd.title=棄用通知
dokanySupportEnd.message=對Dokany檔案系統結束支援
dokanySupportEnd.description=Cryptomator 不再支援 Dokany 檔案系統。已將您的設定調整為使用預設的檔案系統類型。您可以在偏好設定中查看預設的檔案系統類型。
dokanySupportEnd.preferencesBtn=開啟偏好設定
# Share Vault