mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-09-22 07:54:19 +00:00
Compare commits
43
Commits
1.13.0
...
1.14.0-beta1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2b03477d31 | ||
|
|
f25e23da82 | ||
|
|
82368e2632 | ||
|
|
9057090b56 | ||
|
|
357937e0bf | ||
|
|
f84a2396eb | ||
|
|
193dcad6e8 | ||
|
|
257f4427b8 | ||
|
|
4778ba0770 | ||
|
|
77b908199e | ||
|
|
d448c42f87 | ||
|
|
b9403222ba | ||
|
|
93d0fd41a6 | ||
|
|
067bd4752c | ||
|
|
fb4f9fc68f | ||
|
|
a20667a156 | ||
|
|
4d47544244 | ||
|
|
d59f149f7c | ||
|
|
028f6e7a02 | ||
|
|
71e4f98665 | ||
|
|
d60ced52fe | ||
|
|
45c7d2b071 | ||
|
|
7a789d2eed | ||
|
|
cc1e542146 | ||
|
|
e4e84d46b6 | ||
|
|
61fc53bf9c | ||
|
|
f8386a5a99 | ||
|
|
da7e89fc72 | ||
|
|
6b57a0ad9c | ||
|
|
f1eb997804 | ||
|
|
2fe5180721 | ||
|
|
2fa88490bd | ||
|
|
5f5b5a5426 | ||
|
|
cb054bb4f5 | ||
|
|
b4f9bc62ca | ||
|
|
34bface2d7 | ||
|
|
70e52b1a31 | ||
|
|
59a2398c4c | ||
|
|
e5003c1783 | ||
|
|
d6fd012f71 | ||
|
|
d9d8c84230 | ||
|
|
1ad2cc3ee5 | ||
|
|
2eac09f6be |
@@ -7,6 +7,9 @@ updates:
|
|||||||
day: "monday"
|
day: "monday"
|
||||||
time: "06:00"
|
time: "06:00"
|
||||||
timezone: "Etc/UTC"
|
timezone: "Etc/UTC"
|
||||||
|
ignore:
|
||||||
|
- dependency-name: "org.cryptomator:integrations-api"
|
||||||
|
versions: ["2.0.0-alpha1"]
|
||||||
groups:
|
groups:
|
||||||
java-test-dependencies:
|
java-test-dependencies:
|
||||||
patterns:
|
patterns:
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'zulu'
|
JAVA_DIST: 'zulu'
|
||||||
JAVA_VERSION: '22.0.1+8'
|
JAVA_VERSION: '22.0.2+9'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-version:
|
get-version:
|
||||||
@@ -29,12 +29,12 @@ jobs:
|
|||||||
include:
|
include:
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
appimage-suffix: x86_64
|
appimage-suffix: x86_64
|
||||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-x64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-x64_bin-jmods.zip'
|
||||||
openjfx-sha: 'fbb22f35951c2e049cc2554dd03c2c56b4f5adc4b2ae9248872f46175ac103d8'
|
openjfx-sha: 'd44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
|
||||||
- os: [self-hosted, Linux, ARM64]
|
- os: [self-hosted, Linux, ARM64]
|
||||||
appimage-suffix: aarch64
|
appimage-suffix: aarch64
|
||||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-aarch64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-aarch64_bin-jmods.zip'
|
||||||
openjfx-sha: '1982ad168a5e8d7cf4a9458a7d088b4f0552d0ac3f24f23fb88f8bc7e8d69a13'
|
openjfx-sha: '3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
@@ -80,7 +80,7 @@ jobs:
|
|||||||
--verbose
|
--verbose
|
||||||
--output runtime
|
--output runtime
|
||||||
--module-path "${JAVA_HOME}/jmods:openjfx-jmods"
|
--module-path "${JAVA_HOME}/jmods:openjfx-jmods"
|
||||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.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
|
--strip-native-commands
|
||||||
--no-header-files
|
--no-header-files
|
||||||
--no-man-pages
|
--no-man-pages
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'zulu'
|
JAVA_DIST: 'zulu'
|
||||||
JAVA_VERSION: '22.0.1+8'
|
JAVA_VERSION: '22.0.2+9'
|
||||||
COFFEELIBS_JDK: 22
|
COFFEELIBS_JDK: 22
|
||||||
COFFEELIBS_JDK_VERSION: '22.0.1+8-0ppa1'
|
COFFEELIBS_JDK_VERSION: '22.0.2+9-0ppa1'
|
||||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-x64_bin-jmods.zip'
|
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-x64_bin-jmods.zip'
|
||||||
OPENJFX_JMODS_AMD64_HASH: 'fbb22f35951c2e049cc2554dd03c2c56b4f5adc4b2ae9248872f46175ac103d8'
|
OPENJFX_JMODS_AMD64_HASH: 'd44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
|
||||||
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-aarch64_bin-jmods.zip'
|
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-aarch64_bin-jmods.zip'
|
||||||
OPENJFX_JMODS_AARCH64_HASH: '1982ad168a5e8d7cf4a9458a7d088b4f0552d0ac3f24f23fb88f8bc7e8d69a13'
|
OPENJFX_JMODS_AARCH64_HASH: '3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'zulu'
|
JAVA_DIST: 'zulu'
|
||||||
JAVA_VERSION: '22.0.1+8'
|
JAVA_VERSION: '22.0.2+9'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-version:
|
get-version:
|
||||||
@@ -37,15 +37,15 @@ jobs:
|
|||||||
output-suffix: x64
|
output-suffix: x64
|
||||||
xcode-path: '/Applications/Xcode_13.2.1.app'
|
xcode-path: '/Applications/Xcode_13.2.1.app'
|
||||||
fuse-lib: macFUSE
|
fuse-lib: macFUSE
|
||||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_osx-x64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_osx-x64_bin-jmods.zip'
|
||||||
openjfx-sha: 'e07a11c112abbdebe7c058b44c151e1e475de748671d896aef3d73f32453c248'
|
openjfx-sha: '115cb08bb59d880cfff6e51e0bf0dcc45785ed9d456b8b8425597b04da6ab3d4'
|
||||||
- os: [self-hosted, macOS, ARM64]
|
- os: [self-hosted, macOS, ARM64]
|
||||||
architecture: aarch64
|
architecture: aarch64
|
||||||
output-suffix: arm64
|
output-suffix: arm64
|
||||||
xcode-path: '/Applications/Xcode_13.2.1.app'
|
xcode-path: '/Applications/Xcode_13.2.1.app'
|
||||||
fuse-lib: FUSE-T
|
fuse-lib: FUSE-T
|
||||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_osx-aarch64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_osx-aarch64_bin-jmods.zip'
|
||||||
openjfx-sha: '572fce94b9b09d316b960a49e3c2b5d35231ed0463e3b1c4020b8de89783b51d'
|
openjfx-sha: '813c6748f7c99cb7a579d48b48a087b4682b1fad1fc1a4fe5f9b21cf872b15a7'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
@@ -91,7 +91,7 @@ jobs:
|
|||||||
--verbose
|
--verbose
|
||||||
--output runtime
|
--output runtime
|
||||||
--module-path "${JAVA_HOME}/jmods:openjfx-jmods"
|
--module-path "${JAVA_HOME}/jmods:openjfx-jmods"
|
||||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.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
|
--strip-native-commands
|
||||||
--no-header-files
|
--no-header-files
|
||||||
--no-man-pages
|
--no-man-pages
|
||||||
@@ -137,9 +137,11 @@ jobs:
|
|||||||
mv dist/mac/resources/Cryptomator-Vault.icns Cryptomator.app/Contents/Resources/
|
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_SHORT_VERSION_STRING###|${VERSION_NO}|g" Cryptomator.app/Contents/Info.plist
|
||||||
sed -i '' "s|###BUNDLE_VERSION###|${REVISION_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:
|
env:
|
||||||
VERSION_NO: ${{ needs.get-version.outputs.semVerNum }}
|
VERSION_NO: ${{ needs.get-version.outputs.semVerNum }}
|
||||||
REVISION_NO: ${{ needs.get-version.outputs.revNum }}
|
REVISION_NO: ${{ needs.get-version.outputs.revNum }}
|
||||||
|
PROVISIONING_PROFILE_BASE64: ${{ secrets.MACOS_PROVISIONING_PROFILE_BASE64 }}
|
||||||
- name: Generate license for dmg
|
- name: Generate license for dmg
|
||||||
run: >
|
run: >
|
||||||
mvn -B -Djavafx.platform=mac license:add-third-party
|
mvn -B -Djavafx.platform=mac license:add-third-party
|
||||||
@@ -194,9 +196,12 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
echo "Codesigning Cryptomator.app..."
|
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
|
codesign --force --deep --entitlements dist/mac/Cryptomator.entitlements -o runtime -s ${CODESIGN_IDENTITY} Cryptomator.app
|
||||||
env:
|
env:
|
||||||
CODESIGN_IDENTITY: ${{ secrets.MACOS_CODESIGN_IDENTITY }}
|
CODESIGN_IDENTITY: ${{ secrets.MACOS_CODESIGN_IDENTITY }}
|
||||||
|
TEAM_IDENTIFIER: ${{ secrets.MACOS_TEAM_IDENTIFIER }}
|
||||||
- name: Prepare .dmg contents
|
- name: Prepare .dmg contents
|
||||||
run: |
|
run: |
|
||||||
mkdir dmg
|
mkdir dmg
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'zulu'
|
JAVA_DIST: 'zulu'
|
||||||
JAVA_VERSION: '22.0.1+8'
|
JAVA_VERSION: '22.0.2+9'
|
||||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_windows-x64_bin-jmods.zip'
|
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_windows-x64_bin-jmods.zip'
|
||||||
OPENJFX_JMODS_AMD64_HASH: 'de82e53179032a49bec005deb4438e8f261d08c4b58864a5c17e1d87286b09dd'
|
OPENJFX_JMODS_AMD64_HASH: 'f9376d200f5c5b85327d575c1ec1482e6455f19916577f7e2fc9be2f48bb29b6'
|
||||||
WINFSP_MSI: 'https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi'
|
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'
|
WINFSP_UNINSTALLER: 'https://github.com/cryptomator/winfsp-uninstaller/releases/latest/download/winfsp-uninstaller.exe'
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ jobs:
|
|||||||
--verbose
|
--verbose
|
||||||
--output runtime
|
--output runtime
|
||||||
--module-path "jfxjmods;${JAVA_HOME}/jmods"
|
--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
|
--strip-native-commands
|
||||||
--no-header-files
|
--no-header-files
|
||||||
--no-man-pages
|
--no-man-pages
|
||||||
@@ -113,7 +113,7 @@ jobs:
|
|||||||
--copyright "(C) 2016 - 2024 Skymatic GmbH"
|
--copyright "(C) 2016 - 2024 Skymatic GmbH"
|
||||||
--app-version "${{ needs.get-version.outputs.semVerNum }}.${{ needs.get-version.outputs.revNum }}"
|
--app-version "${{ needs.get-version.outputs.semVerNum }}.${{ needs.get-version.outputs.revNum }}"
|
||||||
--java-options "--enable-preview"
|
--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 "-Xss5m"
|
||||||
--java-options "-Xmx256m"
|
--java-options "-Xmx256m"
|
||||||
--java-options "-Dcryptomator.appVersion=\"${{ needs.get-version.outputs.semVerStr }}\""
|
--java-options "-Dcryptomator.appVersion=\"${{ needs.get-version.outputs.semVerStr }}\""
|
||||||
@@ -390,12 +390,14 @@ jobs:
|
|||||||
needs: [publish]
|
needs: [publish]
|
||||||
with:
|
with:
|
||||||
url: ${{ needs.publish.outputs.download-url-msi }}
|
url: ${{ needs.publish.outputs.download-url-msi }}
|
||||||
|
secrets: inherit
|
||||||
|
|
||||||
allowlist-exe:
|
allowlist-exe:
|
||||||
uses: ./.github/workflows/av-whitelist.yml
|
uses: ./.github/workflows/av-whitelist.yml
|
||||||
needs: [publish]
|
needs: [publish]
|
||||||
with:
|
with:
|
||||||
url: ${{ needs.publish.outputs.download-url-exe }}
|
url: ${{ needs.publish.outputs.download-url-exe }}
|
||||||
|
secrets: inherit
|
||||||
|
|
||||||
notify-winget:
|
notify-winget:
|
||||||
name: Notify for winget-release
|
name: Notify for winget-release
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
<configuration default="false" name="Cryptomator Windows" type="Application" factoryName="Application">
|
<configuration default="false" name="Cryptomator Windows" type="Application" factoryName="Application">
|
||||||
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
|
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
|
||||||
<module name="cryptomator" />
|
<module name="cryptomator" />
|
||||||
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{appdata}/Cryptomator/settings.json;@{userhome}/AppData/Roaming/Cryptomator/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/Cryptomator/ipc.socket" -Dcryptomator.logDir="@{localappdata}/Cryptomator" -Dcryptomator.pluginDir="@{appdata}/Cryptomator/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/Cryptomator/keychain.json;@{userhome}/AppData/Roaming/Cryptomator/keychain.json" -Dcryptomator.p12Path="@{appdata}/Cryptomator/key.p12;@{userhome}/AppData/Roaming/Cryptomator/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator" -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win" />
|
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{appdata}/Cryptomator/settings.json;@{userhome}/AppData/Roaming/Cryptomator/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/Cryptomator/ipc.socket" -Dcryptomator.logDir="@{localappdata}/Cryptomator" -Dcryptomator.pluginDir="@{appdata}/Cryptomator/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/Cryptomator/keychain.json;@{userhome}/AppData/Roaming/Cryptomator/keychain.json" -Dcryptomator.p12Path="@{appdata}/Cryptomator/key.p12;@{userhome}/AppData/Roaming/Cryptomator/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator" -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win" />
|
||||||
<method v="2">
|
<method v="2">
|
||||||
<option name="Make" enabled="true" />
|
<option name="Make" enabled="true" />
|
||||||
</method>
|
</method>
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
<configuration default="false" name="Cryptomator Windows Dev" type="Application" factoryName="Application">
|
<configuration default="false" name="Cryptomator Windows Dev" type="Application" factoryName="Application">
|
||||||
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
|
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
|
||||||
<module name="cryptomator" />
|
<module name="cryptomator" />
|
||||||
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{appdata}/Cryptomator-Dev/settings.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/Cryptomator-Dev/ipc.socket" -Dcryptomator.logDir="@{localappdata}/Cryptomator-Dev" -Dcryptomator.pluginDir="@{appdata}/Cryptomator-Dev/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/Cryptomator-Dev/keychain.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/keychain.json" -Dcryptomator.p12Path="@{appdata}/Cryptomator-Dev/key.p12;@{userhome}/AppData/Roaming/Cryptomator-Dev/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator-Dev" -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win" />
|
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{appdata}/Cryptomator-Dev/settings.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/Cryptomator-Dev/ipc.socket" -Dcryptomator.logDir="@{localappdata}/Cryptomator-Dev" -Dcryptomator.pluginDir="@{appdata}/Cryptomator-Dev/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/Cryptomator-Dev/keychain.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/keychain.json" -Dcryptomator.p12Path="@{appdata}/Cryptomator-Dev/key.p12;@{userhome}/AppData/Roaming/Cryptomator-Dev/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator-Dev" -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win" />
|
||||||
<method v="2">
|
<method v="2">
|
||||||
<option name="Make" enabled="true" />
|
<option name="Make" enabled="true" />
|
||||||
</method>
|
</method>
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ Cryptomator is provided free of charge as an open-source project despite the hig
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<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://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="56"></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.route4me.com/"><img src="https://cryptomator.org/img/sponsors/route4me.svg" alt="Route4Me" height="56"></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -85,7 +85,7 @@ For more information on the security details visit [cryptomator.org](https://doc
|
|||||||
|
|
||||||
### Dependencies
|
### Dependencies
|
||||||
|
|
||||||
* JDK 21 (e.g. temurin, zulu)
|
* JDK 22 (e.g. temurin, zulu)
|
||||||
* Maven 3
|
* Maven 3
|
||||||
|
|
||||||
### Run Maven
|
### Run Maven
|
||||||
|
|||||||
Vendored
+5
-5
@@ -23,16 +23,16 @@ mvn -B -f ../../../pom.xml clean package -Plinux -DskipTests -Djavafx.platform=l
|
|||||||
cp ../../../LICENSE.txt ../../../target
|
cp ../../../LICENSE.txt ../../../target
|
||||||
cp ../../../target/cryptomator-*.jar ../../../target/mods
|
cp ../../../target/cryptomator-*.jar ../../../target/mods
|
||||||
|
|
||||||
JAVAFX_VERSION=22.0.1
|
JAVAFX_VERSION=22.0.2
|
||||||
JAVAFX_ARCH="x64"
|
JAVAFX_ARCH="x64"
|
||||||
JAVAFX_JMODS_SHA256='fbb22f35951c2e049cc2554dd03c2c56b4f5adc4b2ae9248872f46175ac103d8'
|
JAVAFX_JMODS_SHA256='d44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
|
||||||
if [ "${CPU_ARCH}" = "aarch64" ]; then
|
if [ "${CPU_ARCH}" = "aarch64" ]; then
|
||||||
JAVAFX_ARCH="aarch64"
|
JAVAFX_ARCH="aarch64"
|
||||||
JAVAFX_JMODS_SHA256='1982ad168a5e8d7cf4a9458a7d088b4f0552d0ac3f24f23fb88f8bc7e8d69a13'
|
JAVAFX_JMODS_SHA256='3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# download javaFX jmods
|
# 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
|
curl -L ${JAVAFX_JMODS_URL} -o openjfx-jmods.zip
|
||||||
@@ -56,7 +56,7 @@ ${JAVA_HOME}/bin/jlink \
|
|||||||
--verbose \
|
--verbose \
|
||||||
--output runtime \
|
--output runtime \
|
||||||
--module-path "${JAVA_HOME}/jmods:openjfx-jmods" \
|
--module-path "${JAVA_HOME}/jmods:openjfx-jmods" \
|
||||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.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 \
|
--strip-native-commands \
|
||||||
--no-header-files \
|
--no-header-files \
|
||||||
--no-man-pages \
|
--no-man-pages \
|
||||||
|
|||||||
@@ -68,7 +68,6 @@
|
|||||||
<developer id="de.skymatic">
|
<developer id="de.skymatic">
|
||||||
<name>Skymatic GmbH</name>
|
<name>Skymatic GmbH</name>
|
||||||
</developer>
|
</developer>
|
||||||
|
|
||||||
|
|
||||||
<content_rating type="oars-1.1">
|
<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_attribute id="social-info">mild</content_attribute> <!-- update checker connects to https://api.cryptomator.org/updates/latestVersion.json -->
|
||||||
|
|||||||
Vendored
+2
-1
@@ -28,7 +28,7 @@ override_dh_auto_build:
|
|||||||
$(JAVA_HOME)/bin/jlink \
|
$(JAVA_HOME)/bin/jlink \
|
||||||
--output runtime \
|
--output runtime \
|
||||||
--module-path "${JMODS_PATH}" \
|
--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 \
|
--strip-native-commands \
|
||||||
--no-header-files \
|
--no-header-files \
|
||||||
--no-man-pages \
|
--no-man-pages \
|
||||||
@@ -61,6 +61,7 @@ override_dh_auto_build:
|
|||||||
--java-options "-Dcryptomator.buildNumber=\"deb-${REVISION_NUM}\"" \
|
--java-options "-Dcryptomator.buildNumber=\"deb-${REVISION_NUM}\"" \
|
||||||
--java-options "-Dcryptomator.appVersion=\"${SEMVER_STR}\"" \
|
--java-options "-Dcryptomator.appVersion=\"${SEMVER_STR}\"" \
|
||||||
--java-options "-Dcryptomator.disableUpdateCheck=\"${DISABLE_UPDATE_CHECK}\"" \
|
--java-options "-Dcryptomator.disableUpdateCheck=\"${DISABLE_UPDATE_CHECK}\"" \
|
||||||
|
--java-options "-Dcryptomator.integrationsLinux.autoStartCmd=\"cryptomator\"" \
|
||||||
--app-version "${VERSION_NUM}.${REVISION_NUM}" \
|
--app-version "${VERSION_NUM}.${REVISION_NUM}" \
|
||||||
--resource-dir resources \
|
--resource-dir resources \
|
||||||
--verbose
|
--verbose
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
embedded.provisionprofile
|
||||||
Vendored
+8
@@ -2,6 +2,10 @@
|
|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<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>
|
<key>com.apple.security.cs.allow-jit</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||||
@@ -10,5 +14,9 @@
|
|||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.cs.disable-library-validation</key>
|
<key>com.apple.security.cs.disable-library-validation</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
<key>keychain-access-groups</key>
|
||||||
|
<array>
|
||||||
|
<string>###APP_IDENTIFIER_PREFIX###org.cryptomator</string>
|
||||||
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
@@ -5,4 +5,5 @@ dmg/
|
|||||||
*.dmg
|
*.dmg
|
||||||
license.rtf
|
license.rtf
|
||||||
openjfx-jmods.zip
|
openjfx-jmods.zip
|
||||||
*.jmod
|
*.jmod
|
||||||
|
Cryptomator.entitlements
|
||||||
|
|||||||
Vendored
+20
-9
@@ -1,12 +1,15 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# parse options
|
# parse options
|
||||||
usage() { echo "Usage: $0 [-s <codesign-identity>]" 1>&2; exit 1; }
|
usage() { echo "Usage: $0 [-s <codesign-identity>] [-t <team-identifier>]" 1>&2; exit 1; }
|
||||||
while getopts ":s:" o; do
|
while getopts ":s:t:" o; do
|
||||||
case "${o}" in
|
case "${o}" in
|
||||||
s)
|
s)
|
||||||
CODESIGN_IDENTITY=${OPTARG}
|
CODESIGN_IDENTITY=${OPTARG}
|
||||||
;;
|
;;
|
||||||
|
t)
|
||||||
|
TEAM_IDENTIFIER=${OPTARG}
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
usage
|
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'`
|
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"
|
FUSE_LIB="FUSE-T"
|
||||||
|
|
||||||
JAVAFX_VERISON=22.0.1
|
JAVAFX_VERSION=22.0.2
|
||||||
JAVAFX_ARCH="undefined"
|
JAVAFX_ARCH="undefined"
|
||||||
JAVAFX_JMODS_SHA256="undefined"
|
JAVAFX_JMODS_SHA256="undefined"
|
||||||
if [ "$(machine)" = "arm64e" ]; then
|
if [ "$(machine)" = "arm64e" ]; then
|
||||||
JAVAFX_ARCH="aarch64"
|
JAVAFX_ARCH="aarch64"
|
||||||
JAVAFX_JMODS_SHA256="572fce94b9b09d316b960a49e3c2b5d35231ed0463e3b1c4020b8de89783b51d"
|
JAVAFX_JMODS_SHA256="813c6748f7c99cb7a579d48b48a087b4682b1fad1fc1a4fe5f9b21cf872b15a7"
|
||||||
else
|
else
|
||||||
JAVAFX_ARCH="x64"
|
JAVAFX_ARCH="x64"
|
||||||
JAVAFX_JMODS_SHA256="e07a11c112abbdebe7c058b44c151e1e475de748671d896aef3d73f32453c248"
|
JAVAFX_JMODS_SHA256="115cb08bb59d880cfff6e51e0bf0dcc45785ed9d456b8b8425597b04da6ab3d4"
|
||||||
fi
|
fi
|
||||||
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-${JAVAFX_VERSION}_osx-${JAVAFX_ARCH}_bin-jmods.zip"
|
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
|
# download and check jmods
|
||||||
curl -L ${JAVAFX_JMODS_URL} -o openjfx-jmods.zip
|
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/
|
mkdir -p openjfx-jmods/
|
||||||
unzip -jo openjfx-jmods.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javafx.fxml.jmod \*/javafx.graphics.jmod -d 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)
|
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 \
|
${JAVA_HOME}/bin/jlink \
|
||||||
--output runtime \
|
--output runtime \
|
||||||
--module-path "${JAVA_HOME}/jmods:openjfx-jmods" \
|
--module-path "${JAVA_HOME}/jmods:openjfx-jmods" \
|
||||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.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 \
|
--strip-native-commands \
|
||||||
--no-header-files \
|
--no-header-files \
|
||||||
--no-man-pages \
|
--no-man-pages \
|
||||||
@@ -121,6 +124,7 @@ ${JAVA_HOME}/bin/jpackage \
|
|||||||
cp ../resources/${APP_NAME}-Vault.icns ${APP_NAME}.app/Contents/Resources/
|
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_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
|
sed -i '' "s|###BUNDLE_VERSION###|${REVISION_NO}|g" ${APP_NAME}.app/Contents/Info.plist
|
||||||
|
cp ../embedded.provisionprofile ${APP_NAME}.app/Contents/
|
||||||
|
|
||||||
# generate license
|
# generate license
|
||||||
mvn -B -Djavafx.platform=mac -f../../../pom.xml license:add-third-party \
|
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
|
-Dlicense.licenseMergesUrl=file://$(pwd)/../../../license/merges
|
||||||
|
|
||||||
# codesign
|
# 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} {} \;
|
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
|
for JAR_PATH in `find ${APP_NAME}.app -name "*.jar"`; do
|
||||||
if [[ `unzip -l ${JAR_PATH} | grep '.dylib\|.jnilib'` ]]; then
|
if [[ `unzip -l ${JAR_PATH} | grep '.dylib\|.jnilib'` ]]; then
|
||||||
@@ -151,7 +159,10 @@ if [ -n "${CODESIGN_IDENTITY}" ]; then
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
echo "Codesigning ${APP_NAME}.app..."
|
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
|
fi
|
||||||
|
|
||||||
# prepare dmg contents
|
# prepare dmg contents
|
||||||
|
|||||||
Vendored
+7
-7
@@ -41,7 +41,7 @@ Write-Output "`$Env:JAVA_HOME=$Env:JAVA_HOME"
|
|||||||
$copyright = "(C) $CopyrightStartYear - $((Get-Date).Year) $Vendor"
|
$copyright = "(C) $CopyrightStartYear - $((Get-Date).Year) $Vendor"
|
||||||
|
|
||||||
# compile
|
# 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"
|
Copy-Item "$buildDir\..\..\target\$MainJarGlob.jar" -Destination "$buildDir\..\..\target\mods"
|
||||||
|
|
||||||
# add runtime
|
# add runtime
|
||||||
@@ -51,9 +51,9 @@ if ($clean -and (Test-Path -Path $runtimeImagePath)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
## download jfx jmods
|
## 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"
|
$javaFxJmodsUrl = "https://download2.gluonhq.com/openjfx/${javaFxVersion}/openjfx-${javaFxVersion}_windows-x64_bin-jmods.zip"
|
||||||
$javaFxJmodsSHA256 = 'de82e53179032a49bec005deb4438e8f261d08c4b58864a5c17e1d87286b09dd'
|
$javaFxJmodsSHA256 = 'f9376d200f5c5b85327d575c1ec1482e6455f19916577f7e2fc9be2f48bb29b6'
|
||||||
$javaFxJmods = '.\resources\jfxJmods.zip'
|
$javaFxJmods = '.\resources\jfxJmods.zip'
|
||||||
if( !(Test-Path -Path $javaFxJmods) ) {
|
if( !(Test-Path -Path $javaFxJmods) ) {
|
||||||
Write-Output "Downloading ${javaFxJmodsUrl}..."
|
Write-Output "Downloading ${javaFxJmodsUrl}..."
|
||||||
@@ -75,7 +75,7 @@ Move-Item -Force -Path ".\resources\javafx-jmods-*" -Destination ".\resources\ja
|
|||||||
--verbose `
|
--verbose `
|
||||||
--output runtime `
|
--output runtime `
|
||||||
--module-path "$Env:JAVA_HOME/jmods;$buildDir/resources/javafx-jmods" `
|
--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 `
|
--strip-native-commands `
|
||||||
--no-header-files `
|
--no-header-files `
|
||||||
--no-man-pages `
|
--no-man-pages `
|
||||||
@@ -100,7 +100,7 @@ if ($clean -and (Test-Path -Path $appPath)) {
|
|||||||
--vendor $Vendor `
|
--vendor $Vendor `
|
||||||
--copyright $copyright `
|
--copyright $copyright `
|
||||||
--java-options "--enable-preview" `
|
--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 "-Xss5m" `
|
||||||
--java-options "-Xmx256m" `
|
--java-options "-Xmx256m" `
|
||||||
--java-options "-Dcryptomator.appVersion=`"$semVerNo`"" `
|
--java-options "-Dcryptomator.appVersion=`"$semVerNo`"" `
|
||||||
@@ -122,7 +122,7 @@ if ($clean -and (Test-Path -Path $appPath)) {
|
|||||||
--icon resources/$AppName.ico
|
--icon resources/$AppName.ico
|
||||||
|
|
||||||
#Create RTF license for msi
|
#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.thirdPartyFilename=license.rtf" `
|
||||||
"-Dlicense.fileTemplate=$buildDir\resources\licenseTemplate.ftl" `
|
"-Dlicense.fileTemplate=$buildDir\resources\licenseTemplate.ftl" `
|
||||||
"-Dlicense.outputDirectory=$buildDir\resources\" `
|
"-Dlicense.outputDirectory=$buildDir\resources\" `
|
||||||
@@ -167,7 +167,7 @@ $Env:JP_WIXHELPER_DIR = "."
|
|||||||
--file-associations resources/FAvaultFile.properties
|
--file-associations resources/FAvaultFile.properties
|
||||||
|
|
||||||
#Create RTF license for bundle
|
#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.thirdPartyFilename=license.rtf" `
|
||||||
"-Dlicense.fileTemplate=$buildDir\bundle\resources\licenseTemplate.ftl" `
|
"-Dlicense.fileTemplate=$buildDir\bundle\resources\licenseTemplate.ftl" `
|
||||||
"-Dlicense.outputDirectory=$buildDir\bundle\resources\" `
|
"-Dlicense.outputDirectory=$buildDir\bundle\resources\" `
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.cryptomator</groupId>
|
<groupId>org.cryptomator</groupId>
|
||||||
<artifactId>cryptomator</artifactId>
|
<artifactId>cryptomator</artifactId>
|
||||||
<version>1.13.0</version>
|
<version>1.14.0</version>
|
||||||
<name>Cryptomator Desktop App</name>
|
<name>Cryptomator Desktop App</name>
|
||||||
|
|
||||||
<organization>
|
<organization>
|
||||||
@@ -33,44 +33,44 @@
|
|||||||
<nonModularGroupIds>org.ow2.asm,org.apache.jackrabbit,org.apache.httpcomponents</nonModularGroupIds>
|
<nonModularGroupIds>org.ow2.asm,org.apache.jackrabbit,org.apache.httpcomponents</nonModularGroupIds>
|
||||||
|
|
||||||
<!-- cryptomator dependencies -->
|
<!-- cryptomator dependencies -->
|
||||||
<cryptomator.cryptofs.version>2.6.9</cryptomator.cryptofs.version>
|
<cryptomator.cryptofs.version>2.7.0-beta1</cryptomator.cryptofs.version>
|
||||||
<cryptomator.integrations.version>1.3.1</cryptomator.integrations.version>
|
<cryptomator.integrations.version>1.4.0-beta2</cryptomator.integrations.version>
|
||||||
<cryptomator.integrations.win.version>1.2.5</cryptomator.integrations.win.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.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.fuse.version>5.0.0</cryptomator.fuse.version>
|
||||||
<cryptomator.webdav.version>2.0.6</cryptomator.webdav.version>
|
<cryptomator.webdav.version>2.0.6</cryptomator.webdav.version>
|
||||||
|
|
||||||
<!-- 3rd party dependencies -->
|
<!-- 3rd party dependencies -->
|
||||||
<commons-lang3.version>3.14.0</commons-lang3.version>
|
<commons-lang3.version>3.16.0</commons-lang3.version>
|
||||||
<dagger.version>2.51.1</dagger.version>
|
<dagger.version>2.52</dagger.version>
|
||||||
<easybind.version>2.2</easybind.version>
|
<easybind.version>2.2</easybind.version>
|
||||||
<guava.version>33.2.1-jre</guava.version>
|
<guava.version>33.3.0-jre</guava.version>
|
||||||
<jackson.version>2.17.1</jackson.version>
|
<jackson.version>2.17.2</jackson.version>
|
||||||
<javafx.version>22.0.1</javafx.version>
|
<javafx.version>22.0.2</javafx.version>
|
||||||
<jwt.version>4.4.0</jwt.version>
|
<jwt.version>4.4.0</jwt.version>
|
||||||
<nimbus-jose.version>9.37.3</nimbus-jose.version>
|
<nimbus-jose.version>9.37.3</nimbus-jose.version>
|
||||||
<logback.version>1.5.6</logback.version>
|
<logback.version>1.5.7</logback.version>
|
||||||
<slf4j.version>2.0.13</slf4j.version>
|
<slf4j.version>2.0.16</slf4j.version>
|
||||||
<tinyoauth2.version>0.8.0</tinyoauth2.version>
|
<tinyoauth2.version>0.8.0</tinyoauth2.version>
|
||||||
<zxcvbn.version>1.9.0</zxcvbn.version>
|
<zxcvbn.version>1.9.0</zxcvbn.version>
|
||||||
|
|
||||||
<!-- test dependencies -->
|
<!-- 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>
|
<mockito.version>5.12.0</mockito.version>
|
||||||
<hamcrest.version>2.2</hamcrest.version>
|
<hamcrest.version>3.0</hamcrest.version>
|
||||||
|
|
||||||
<!-- build-time dependencies -->
|
<!-- build-time dependencies -->
|
||||||
<jetbrains.annotations.version>24.1.0</jetbrains.annotations.version>
|
<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>
|
<jacoco.version>0.8.12</jacoco.version>
|
||||||
<license-generator.version>2.4.0</license-generator.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-compiler.version>3.13.0</mvn-compiler.version>
|
||||||
<mvn-resources.version>3.3.1</mvn-resources.version>
|
<mvn-resources.version>3.3.1</mvn-resources.version>
|
||||||
<mvn-dependency.version>3.7.0</mvn-dependency.version>
|
<mvn-dependency.version>3.7.1</mvn-dependency.version>
|
||||||
<mvn-surefire.version>3.3.0</mvn-surefire.version>
|
<mvn-surefire.version>3.4.0</mvn-surefire.version>
|
||||||
<mvn-jar.version>3.4.1</mvn-jar.version>
|
<mvn-jar.version>3.4.2</mvn-jar.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
@@ -471,7 +471,7 @@
|
|||||||
<skipTestScope>true</skipTestScope>
|
<skipTestScope>true</skipTestScope>
|
||||||
<detail>true</detail>
|
<detail>true</detail>
|
||||||
<suppressionFile>suppression.xml</suppressionFile>
|
<suppressionFile>suppression.xml</suppressionFile>
|
||||||
<nvdApiKey>${env.NVD_API_KEY}</nvdApiKey>
|
<nvdApiKeyEnvironmentVariable>NVD_API_KEY</nvdApiKeyEnvironmentVariable>
|
||||||
</configuration>
|
</configuration>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ open module org.cryptomator.desktop {
|
|||||||
requires com.nulabinc.zxcvbn;
|
requires com.nulabinc.zxcvbn;
|
||||||
requires com.tobiasdiez.easybind;
|
requires com.tobiasdiez.easybind;
|
||||||
requires dagger;
|
requires dagger;
|
||||||
|
requires java.compiler;
|
||||||
requires io.github.coffeelibs.tinyoauth2client;
|
requires io.github.coffeelibs.tinyoauth2client;
|
||||||
requires org.slf4j;
|
requires org.slf4j;
|
||||||
requires org.apache.commons.lang3;
|
requires org.apache.commons.lang3;
|
||||||
|
|||||||
@@ -37,12 +37,18 @@ public class Settings {
|
|||||||
static final boolean DEFAULT_START_HIDDEN = false;
|
static final boolean DEFAULT_START_HIDDEN = false;
|
||||||
static final boolean DEFAULT_AUTO_CLOSE_VAULTS = false;
|
static final boolean DEFAULT_AUTO_CLOSE_VAULTS = false;
|
||||||
static final boolean DEFAULT_USE_KEYCHAIN = true;
|
static final boolean DEFAULT_USE_KEYCHAIN = true;
|
||||||
|
static final boolean DEFAULT_USE_QUICKACCESS = true;
|
||||||
static final int DEFAULT_PORT = 42427;
|
static final int DEFAULT_PORT = 42427;
|
||||||
static final int DEFAULT_NUM_TRAY_NOTIFICATIONS = 3;
|
static final int DEFAULT_NUM_TRAY_NOTIFICATIONS = 3;
|
||||||
static final boolean DEFAULT_DEBUG_MODE = false;
|
static final boolean DEFAULT_DEBUG_MODE = false;
|
||||||
static final UiTheme DEFAULT_THEME = UiTheme.LIGHT;
|
static final UiTheme DEFAULT_THEME = UiTheme.LIGHT;
|
||||||
@Deprecated // to be changed to "whatever is available" eventually
|
@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 String DEFAULT_USER_INTERFACE_ORIENTATION = NodeOrientation.LEFT_TO_RIGHT.name();
|
||||||
static final boolean DEFAULT_SHOW_MINIMIZE_BUTTON = false;
|
static final boolean DEFAULT_SHOW_MINIMIZE_BUTTON = false;
|
||||||
public static final Instant DEFAULT_TIMESTAMP = Instant.parse("2000-01-01T00:00:00Z");
|
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 BooleanProperty debugMode;
|
||||||
public final ObjectProperty<UiTheme> theme;
|
public final ObjectProperty<UiTheme> theme;
|
||||||
public final StringProperty keychainProvider;
|
public final StringProperty keychainProvider;
|
||||||
|
public final BooleanProperty useQuickAccess;
|
||||||
|
public final StringProperty quickAccessService;
|
||||||
public final ObjectProperty<NodeOrientation> userInterfaceOrientation;
|
public final ObjectProperty<NodeOrientation> userInterfaceOrientation;
|
||||||
public final StringProperty licenseKey;
|
public final StringProperty licenseKey;
|
||||||
public final BooleanProperty showMinimizeButton;
|
public final BooleanProperty showMinimizeButton;
|
||||||
@@ -89,6 +97,7 @@ public class Settings {
|
|||||||
this.startHidden = new SimpleBooleanProperty(this, "startHidden", json.startHidden);
|
this.startHidden = new SimpleBooleanProperty(this, "startHidden", json.startHidden);
|
||||||
this.autoCloseVaults = new SimpleBooleanProperty(this, "autoCloseVaults", json.autoCloseVaults);
|
this.autoCloseVaults = new SimpleBooleanProperty(this, "autoCloseVaults", json.autoCloseVaults);
|
||||||
this.useKeychain = new SimpleBooleanProperty(this, "useKeychain", json.useKeychain);
|
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.port = new SimpleIntegerProperty(this, "webDavPort", json.port);
|
||||||
this.numTrayNotifications = new SimpleIntegerProperty(this, "numTrayNotifications", json.numTrayNotifications);
|
this.numTrayNotifications = new SimpleIntegerProperty(this, "numTrayNotifications", json.numTrayNotifications);
|
||||||
this.debugMode = new SimpleBooleanProperty(this, "debugMode", json.debugMode);
|
this.debugMode = new SimpleBooleanProperty(this, "debugMode", json.debugMode);
|
||||||
@@ -104,6 +113,7 @@ public class Settings {
|
|||||||
this.windowHeight = new SimpleIntegerProperty(this, "windowHeight", json.windowHeight);
|
this.windowHeight = new SimpleIntegerProperty(this, "windowHeight", json.windowHeight);
|
||||||
this.language = new SimpleStringProperty(this, "language", json.language);
|
this.language = new SimpleStringProperty(this, "language", json.language);
|
||||||
this.mountService = new SimpleStringProperty(this, "mountService", json.mountService);
|
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.lastSuccessfulUpdateCheck = new SimpleObjectProperty<>(this, "lastSuccessfulUpdateCheck", json.lastSuccessfulUpdateCheck);
|
||||||
|
|
||||||
this.directories.addAll(json.directories.stream().map(VaultSettings::new).toList());
|
this.directories.addAll(json.directories.stream().map(VaultSettings::new).toList());
|
||||||
@@ -116,6 +126,7 @@ public class Settings {
|
|||||||
startHidden.addListener(this::somethingChanged);
|
startHidden.addListener(this::somethingChanged);
|
||||||
autoCloseVaults.addListener(this::somethingChanged);
|
autoCloseVaults.addListener(this::somethingChanged);
|
||||||
useKeychain.addListener(this::somethingChanged);
|
useKeychain.addListener(this::somethingChanged);
|
||||||
|
useQuickAccess.addListener(this::somethingChanged);
|
||||||
port.addListener(this::somethingChanged);
|
port.addListener(this::somethingChanged);
|
||||||
numTrayNotifications.addListener(this::somethingChanged);
|
numTrayNotifications.addListener(this::somethingChanged);
|
||||||
debugMode.addListener(this::somethingChanged);
|
debugMode.addListener(this::somethingChanged);
|
||||||
@@ -131,6 +142,7 @@ public class Settings {
|
|||||||
windowHeight.addListener(this::somethingChanged);
|
windowHeight.addListener(this::somethingChanged);
|
||||||
language.addListener(this::somethingChanged);
|
language.addListener(this::somethingChanged);
|
||||||
mountService.addListener(this::somethingChanged);
|
mountService.addListener(this::somethingChanged);
|
||||||
|
quickAccessService.addListener(this::somethingChanged);
|
||||||
lastSuccessfulUpdateCheck.addListener(this::somethingChanged);
|
lastSuccessfulUpdateCheck.addListener(this::somethingChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,6 +182,7 @@ public class Settings {
|
|||||||
json.startHidden = startHidden.get();
|
json.startHidden = startHidden.get();
|
||||||
json.autoCloseVaults = autoCloseVaults.get();
|
json.autoCloseVaults = autoCloseVaults.get();
|
||||||
json.useKeychain = useKeychain.get();
|
json.useKeychain = useKeychain.get();
|
||||||
|
json.useQuickAccess = useQuickAccess.get();
|
||||||
json.port = port.get();
|
json.port = port.get();
|
||||||
json.numTrayNotifications = numTrayNotifications.get();
|
json.numTrayNotifications = numTrayNotifications.get();
|
||||||
json.debugMode = debugMode.get();
|
json.debugMode = debugMode.get();
|
||||||
@@ -185,6 +198,7 @@ public class Settings {
|
|||||||
json.windowHeight = windowHeight.get();
|
json.windowHeight = windowHeight.get();
|
||||||
json.language = language.get();
|
json.language = language.get();
|
||||||
json.mountService = mountService.get();
|
json.mountService = mountService.get();
|
||||||
|
json.quickAccessService = quickAccessService.get();
|
||||||
json.lastSuccessfulUpdateCheck = lastSuccessfulUpdateCheck.get();
|
json.lastSuccessfulUpdateCheck = lastSuccessfulUpdateCheck.get();
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,4 +86,9 @@ class SettingsJson {
|
|||||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'", timezone = "UTC")
|
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'", timezone = "UTC")
|
||||||
Instant lastSuccessfulUpdateCheck = Settings.DEFAULT_TIMESTAMP;
|
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() {
|
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);
|
settings.setSaveCmd(this::scheduleSave);
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ package org.cryptomator.common.vaults;
|
|||||||
import org.apache.commons.lang3.SystemUtils;
|
import org.apache.commons.lang3.SystemUtils;
|
||||||
import org.cryptomator.common.Constants;
|
import org.cryptomator.common.Constants;
|
||||||
import org.cryptomator.common.mount.Mounter;
|
import org.cryptomator.common.mount.Mounter;
|
||||||
|
import org.cryptomator.common.settings.Settings;
|
||||||
import org.cryptomator.common.settings.VaultSettings;
|
import org.cryptomator.common.settings.VaultSettings;
|
||||||
import org.cryptomator.cryptofs.CryptoFileSystem;
|
import org.cryptomator.cryptofs.CryptoFileSystem;
|
||||||
import org.cryptomator.cryptofs.CryptoFileSystemProperties;
|
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.MountFailedException;
|
||||||
import org.cryptomator.integrations.mount.Mountpoint;
|
import org.cryptomator.integrations.mount.Mountpoint;
|
||||||
import org.cryptomator.integrations.mount.UnmountFailedException;
|
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.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -54,6 +58,7 @@ public class Vault {
|
|||||||
|
|
||||||
private final VaultSettings vaultSettings;
|
private final VaultSettings vaultSettings;
|
||||||
private final AtomicReference<CryptoFileSystem> cryptoFileSystem;
|
private final AtomicReference<CryptoFileSystem> cryptoFileSystem;
|
||||||
|
private final AtomicReference<QuickAccessService.QuickAccessEntry> quickAccessEntry;
|
||||||
private final VaultState state;
|
private final VaultState state;
|
||||||
private final ObjectProperty<Exception> lastKnownException;
|
private final ObjectProperty<Exception> lastKnownException;
|
||||||
private final VaultConfigCache configCache;
|
private final VaultConfigCache configCache;
|
||||||
@@ -67,6 +72,7 @@ public class Vault {
|
|||||||
private final BooleanBinding unknownError;
|
private final BooleanBinding unknownError;
|
||||||
private final ObjectBinding<Mountpoint> mountPoint;
|
private final ObjectBinding<Mountpoint> mountPoint;
|
||||||
private final Mounter mounter;
|
private final Mounter mounter;
|
||||||
|
private final Settings settings;
|
||||||
private final BooleanProperty showingStats;
|
private final BooleanProperty showingStats;
|
||||||
|
|
||||||
private final AtomicReference<Mounter.MountHandle> mountHandle = new AtomicReference<>(null);
|
private final AtomicReference<Mounter.MountHandle> mountHandle = new AtomicReference<>(null);
|
||||||
@@ -78,7 +84,7 @@ public class Vault {
|
|||||||
VaultState state, //
|
VaultState state, //
|
||||||
@Named("lastKnownException") ObjectProperty<Exception> lastKnownException, //
|
@Named("lastKnownException") ObjectProperty<Exception> lastKnownException, //
|
||||||
VaultStats stats, //
|
VaultStats stats, //
|
||||||
Mounter mounter) {
|
Mounter mounter, Settings settings) {
|
||||||
this.vaultSettings = vaultSettings;
|
this.vaultSettings = vaultSettings;
|
||||||
this.configCache = configCache;
|
this.configCache = configCache;
|
||||||
this.cryptoFileSystem = cryptoFileSystem;
|
this.cryptoFileSystem = cryptoFileSystem;
|
||||||
@@ -94,7 +100,9 @@ public class Vault {
|
|||||||
this.unknownError = Bindings.createBooleanBinding(this::isUnknownError, state);
|
this.unknownError = Bindings.createBooleanBinding(this::isUnknownError, state);
|
||||||
this.mountPoint = Bindings.createObjectBinding(this::getMountPoint, state);
|
this.mountPoint = Bindings.createObjectBinding(this::getMountPoint, state);
|
||||||
this.mounter = mounter;
|
this.mounter = mounter;
|
||||||
|
this.settings = settings;
|
||||||
this.showingStats = new SimpleBooleanProperty(false);
|
this.showingStats = new SimpleBooleanProperty(false);
|
||||||
|
this.quickAccessEntry = new AtomicReference<>(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ******************************************************************************
|
// ******************************************************************************
|
||||||
@@ -154,6 +162,9 @@ public class Vault {
|
|||||||
var rootPath = fs.getRootDirectories().iterator().next();
|
var rootPath = fs.getRootDirectories().iterator().next();
|
||||||
var mountHandle = mounter.mount(vaultSettings, rootPath);
|
var mountHandle = mounter.mount(vaultSettings, rootPath);
|
||||||
success = this.mountHandle.compareAndSet(null, mountHandle);
|
success = this.mountHandle.compareAndSet(null, mountHandle);
|
||||||
|
if (settings.useQuickAccess.getValue()) {
|
||||||
|
addToQuickAccess();
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (!success) {
|
if (!success) {
|
||||||
destroyCryptoFileSystem();
|
destroyCryptoFileSystem();
|
||||||
@@ -178,6 +189,7 @@ public class Vault {
|
|||||||
mountHandle.mountObj().close();
|
mountHandle.mountObj().close();
|
||||||
mountHandle.specialCleanup().run();
|
mountHandle.specialCleanup().run();
|
||||||
} finally {
|
} finally {
|
||||||
|
removeFromQuickAccess();
|
||||||
destroyCryptoFileSystem();
|
destroyCryptoFileSystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,6 +197,52 @@ public class Vault {
|
|||||||
LOG.info("Locked vault '{}'", getDisplayName());
|
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
|
// Observable Properties
|
||||||
// *******************************************************************************
|
// *******************************************************************************
|
||||||
|
|||||||
@@ -8,11 +8,13 @@
|
|||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.cryptomator.common.vaults;
|
package org.cryptomator.common.vaults;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.SystemUtils;
|
||||||
import org.cryptomator.common.settings.Settings;
|
import org.cryptomator.common.settings.Settings;
|
||||||
import org.cryptomator.common.settings.VaultSettings;
|
import org.cryptomator.common.settings.VaultSettings;
|
||||||
import org.cryptomator.cryptofs.CryptoFileSystemProvider;
|
import org.cryptomator.cryptofs.CryptoFileSystemProvider;
|
||||||
import org.cryptomator.cryptofs.DirStructure;
|
import org.cryptomator.cryptofs.DirStructure;
|
||||||
import org.cryptomator.cryptofs.migration.Migrators;
|
import org.cryptomator.cryptofs.migration.Migrators;
|
||||||
|
import org.cryptomator.integrations.mount.MountService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -24,6 +26,7 @@ import java.nio.file.Files;
|
|||||||
import java.nio.file.NoSuchFileException;
|
import java.nio.file.NoSuchFileException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
@@ -38,14 +41,21 @@ public class VaultListManager {
|
|||||||
private static final Logger LOG = LoggerFactory.getLogger(VaultListManager.class);
|
private static final Logger LOG = LoggerFactory.getLogger(VaultListManager.class);
|
||||||
|
|
||||||
private final AutoLocker autoLocker;
|
private final AutoLocker autoLocker;
|
||||||
|
private final List<MountService> mountServices;
|
||||||
private final VaultComponent.Factory vaultComponentFactory;
|
private final VaultComponent.Factory vaultComponentFactory;
|
||||||
private final ObservableList<Vault> vaultList;
|
private final ObservableList<Vault> vaultList;
|
||||||
private final String defaultVaultName;
|
private final String defaultVaultName;
|
||||||
|
|
||||||
@Inject
|
@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.vaultList = vaultList;
|
||||||
this.autoLocker = autoLocker;
|
this.autoLocker = autoLocker;
|
||||||
|
this.mountServices = mountServices;
|
||||||
this.vaultComponentFactory = vaultComponentFactory;
|
this.vaultComponentFactory = vaultComponentFactory;
|
||||||
this.defaultVaultName = resourceBundle.getString("defaults.vault.vaultName");
|
this.defaultVaultName = resourceBundle.getString("defaults.vault.vaultName");
|
||||||
|
|
||||||
@@ -76,6 +86,15 @@ public class VaultListManager {
|
|||||||
} else {
|
} else {
|
||||||
vaultSettings.displayName.set(defaultVaultName);
|
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;
|
return vaultSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,9 @@ import org.cryptomator.common.Environment;
|
|||||||
import org.cryptomator.common.settings.Settings;
|
import org.cryptomator.common.settings.Settings;
|
||||||
import org.cryptomator.integrations.autostart.AutoStartProvider;
|
import org.cryptomator.integrations.autostart.AutoStartProvider;
|
||||||
import org.cryptomator.integrations.autostart.ToggleAutoStartFailedException;
|
import org.cryptomator.integrations.autostart.ToggleAutoStartFailedException;
|
||||||
|
import org.cryptomator.integrations.common.NamedServiceProvider;
|
||||||
import org.cryptomator.integrations.keychain.KeychainAccessProvider;
|
import org.cryptomator.integrations.keychain.KeychainAccessProvider;
|
||||||
|
import org.cryptomator.integrations.quickaccess.QuickAccessService;
|
||||||
import org.cryptomator.ui.common.FxController;
|
import org.cryptomator.ui.common.FxController;
|
||||||
import org.cryptomator.ui.fxapp.FxApplicationWindows;
|
import org.cryptomator.ui.fxapp.FxApplicationWindows;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -30,12 +32,15 @@ public class GeneralPreferencesController implements FxController {
|
|||||||
private final Stage window;
|
private final Stage window;
|
||||||
private final Settings settings;
|
private final Settings settings;
|
||||||
private final Optional<AutoStartProvider> autoStartProvider;
|
private final Optional<AutoStartProvider> autoStartProvider;
|
||||||
|
private final List<QuickAccessService> quickAccessServices;
|
||||||
private final Application application;
|
private final Application application;
|
||||||
private final Environment environment;
|
private final Environment environment;
|
||||||
private final List<KeychainAccessProvider> keychainAccessProviders;
|
private final List<KeychainAccessProvider> keychainAccessProviders;
|
||||||
private final FxApplicationWindows appWindows;
|
private final FxApplicationWindows appWindows;
|
||||||
public CheckBox useKeychainCheckbox;
|
public CheckBox useKeychainCheckbox;
|
||||||
public ChoiceBox<KeychainAccessProvider> keychainBackendChoiceBox;
|
public ChoiceBox<KeychainAccessProvider> keychainBackendChoiceBox;
|
||||||
|
public CheckBox useQuickAccessCheckbox;
|
||||||
|
public ChoiceBox<QuickAccessService> quickAccessServiceChoiceBox;
|
||||||
public CheckBox startHiddenCheckbox;
|
public CheckBox startHiddenCheckbox;
|
||||||
public CheckBox autoCloseVaultsCheckbox;
|
public CheckBox autoCloseVaultsCheckbox;
|
||||||
public CheckBox debugModeCheckbox;
|
public CheckBox debugModeCheckbox;
|
||||||
@@ -48,6 +53,7 @@ public class GeneralPreferencesController implements FxController {
|
|||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.autoStartProvider = autoStartProvider;
|
this.autoStartProvider = autoStartProvider;
|
||||||
this.keychainAccessProviders = keychainAccessProviders;
|
this.keychainAccessProviders = keychainAccessProviders;
|
||||||
|
this.quickAccessServices = QuickAccessService.get().toList();
|
||||||
this.application = application;
|
this.application = application;
|
||||||
this.environment = environment;
|
this.environment = environment;
|
||||||
this.appWindows = appWindows;
|
this.appWindows = appWindows;
|
||||||
@@ -60,13 +66,21 @@ public class GeneralPreferencesController implements FxController {
|
|||||||
debugModeCheckbox.selectedProperty().bindBidirectional(settings.debugMode);
|
debugModeCheckbox.selectedProperty().bindBidirectional(settings.debugMode);
|
||||||
autoStartProvider.ifPresent(autoStart -> autoStartCheckbox.setSelected(autoStart.isEnabled()));
|
autoStartProvider.ifPresent(autoStart -> autoStartCheckbox.setSelected(autoStart.isEnabled()));
|
||||||
|
|
||||||
var keychainSettingsConverter = new KeychainProviderClassNameConverter(keychainAccessProviders);
|
var keychainSettingsConverter = new ServiceToSettingsConverter<>(keychainAccessProviders);
|
||||||
keychainBackendChoiceBox.getItems().addAll(keychainAccessProviders);
|
keychainBackendChoiceBox.getItems().addAll(keychainAccessProviders);
|
||||||
keychainBackendChoiceBox.setValue(keychainSettingsConverter.fromString(settings.keychainProvider.get()));
|
keychainBackendChoiceBox.setValue(keychainSettingsConverter.fromString(settings.keychainProvider.get()));
|
||||||
keychainBackendChoiceBox.setConverter(new KeychainProviderDisplayNameConverter());
|
keychainBackendChoiceBox.setConverter(new KeychainProviderDisplayNameConverter());
|
||||||
Bindings.bindBidirectional(settings.keychainProvider, keychainBackendChoiceBox.valueProperty(), keychainSettingsConverter);
|
Bindings.bindBidirectional(settings.keychainProvider, keychainBackendChoiceBox.valueProperty(), keychainSettingsConverter);
|
||||||
useKeychainCheckbox.selectedProperty().bindBidirectional(settings.useKeychain);
|
useKeychainCheckbox.selectedProperty().bindBidirectional(settings.useKeychain);
|
||||||
keychainBackendChoiceBox.disableProperty().bind(useKeychainCheckbox.selectedProperty().not());
|
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() {
|
public boolean isAutoStartSupported() {
|
||||||
@@ -91,6 +105,10 @@ public class GeneralPreferencesController implements FxController {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isSomeQuickAccessServiceAvailable() {
|
||||||
|
return !quickAccessServices.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void showLogfileDirectory() {
|
public void showLogfileDirectory() {
|
||||||
environment.getLogDir().ifPresent(logDirPath -> application.getHostServices().showDocument(logDirPath.toUri().toString()));
|
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 static class NamedServiceConverter<T extends NamedServiceProvider> extends StringConverter<T> {
|
||||||
|
|
||||||
private final List<KeychainAccessProvider> keychainAccessProviders;
|
|
||||||
|
|
||||||
public KeychainProviderClassNameConverter(List<KeychainAccessProvider> keychainAccessProviders) {
|
|
||||||
this.keychainAccessProviders = keychainAccessProviders;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString(KeychainAccessProvider provider) {
|
public String toString(T namedService) {
|
||||||
if (provider == null) {
|
if (namedService == null) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
return provider.getClass().getName();
|
return namedService.getName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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) {
|
if (string == null) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} 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);
|
selectedTabProperty().set(selectedTab);
|
||||||
Stage stage = window();
|
Stage stage = window();
|
||||||
stage.setScene(scene().get());
|
stage.setScene(scene().get());
|
||||||
|
stage.setMinWidth(420);
|
||||||
|
stage.setMinHeight(300);
|
||||||
stage.show();
|
stage.show();
|
||||||
stage.requestFocus();
|
stage.requestFocus();
|
||||||
return stage;
|
return stage;
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class PreferencesController implements FxController {
|
|||||||
this.env = env;
|
this.env = env;
|
||||||
this.window = window;
|
this.window = window;
|
||||||
this.selectedTabProperty = selectedTabProperty;
|
this.selectedTabProperty = selectedTabProperty;
|
||||||
this.updateAvailable = updateChecker.latestVersionProperty().isNotNull();
|
this.updateAvailable = updateChecker.updateAvailableProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
|
|||||||
@@ -7,8 +7,6 @@
|
|||||||
xmlns="http://javafx.com/javafx"
|
xmlns="http://javafx.com/javafx"
|
||||||
fx:id="tabPane"
|
fx:id="tabPane"
|
||||||
fx:controller="org.cryptomator.ui.preferences.PreferencesController"
|
fx:controller="org.cryptomator.ui.preferences.PreferencesController"
|
||||||
minWidth="-Infinity"
|
|
||||||
maxWidth="-Infinity"
|
|
||||||
prefWidth="650"
|
prefWidth="650"
|
||||||
tabMinWidth="60"
|
tabMinWidth="60"
|
||||||
tabClosingPolicy="UNAVAILABLE"
|
tabClosingPolicy="UNAVAILABLE"
|
||||||
|
|||||||
@@ -30,6 +30,10 @@
|
|||||||
<ChoiceBox fx:id="keychainBackendChoiceBox"/>
|
<ChoiceBox fx:id="keychainBackendChoiceBox"/>
|
||||||
</HBox>
|
</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"/>
|
<Region VBox.vgrow="ALWAYS"/>
|
||||||
|
|
||||||
<HBox spacing="12" alignment="CENTER_LEFT">
|
<HBox spacing="12" alignment="CENTER_LEFT">
|
||||||
|
|||||||
@@ -288,6 +288,7 @@ preferences.general.debugLogging=Enable debug logging
|
|||||||
preferences.general.debugDirectory=Reveal log files
|
preferences.general.debugDirectory=Reveal log files
|
||||||
preferences.general.autoStart=Launch Cryptomator on system start
|
preferences.general.autoStart=Launch Cryptomator on system start
|
||||||
preferences.general.keychainBackend=Store passwords with
|
preferences.general.keychainBackend=Store passwords with
|
||||||
|
preferences.general.quickAccessService=Add unlocked vaults to the quick access area
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Interface
|
preferences.interface=Interface
|
||||||
preferences.interface.theme=Look & Feel
|
preferences.interface.theme=Look & Feel
|
||||||
|
|||||||
@@ -173,10 +173,15 @@ hub.registerSuccess.legacy.description=للدخول إلى الخزينة، يح
|
|||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=فشل تسجيل الجهاز
|
hub.registerFailed.message=فشل تسجيل الجهاز
|
||||||
hub.registerFailed.description.generic=حدث خطأ في عملية تسجيل الاسم. لمزيد من التفاصيل، راجع سجل التطبيق.
|
hub.registerFailed.description.generic=حدث خطأ في عملية تسجيل الاسم. لمزيد من التفاصيل، راجع سجل التطبيق.
|
||||||
|
hub.registerFailed.description.deviceAlreadyExists=هذا الجهاز مسجل لمستخدم مختلف بالفعل. حاول تغيير حساب المستخدم أو استخدام جهاز مختلف.
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=تم رفض الوصول
|
hub.unauthorized.message=تم رفض الوصول
|
||||||
hub.unauthorized.description=لم يتم بعد منح الإذن لجهازك بالوصول إلى هذا المخزن. اطلب من مالك المخزن أن يأذن بذلك.
|
hub.unauthorized.description=لم يتم بعد منح الإذن لجهازك بالوصول إلى هذا المخزن. اطلب من مالك المخزن أن يأذن بذلك.
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
|
hub.requireAccountInit.message=مطلوب اتخاذ إجراء
|
||||||
|
hub.requireAccountInit.description.0=للمتابعة، يرجى إكمال الخطوات المطلوبة في
|
||||||
|
hub.requireAccountInit.description.1=ملف تعريف المستخدم
|
||||||
|
hub.requireAccountInit.description.2=.
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
hub.invalidLicense.message=ترخيص المركز غير صالح
|
hub.invalidLicense.message=ترخيص المركز غير صالح
|
||||||
hub.invalidLicense.description=نموذج المركز Cryptomator الخاص بك لديه ترخيص غير صالح. الرجاء إبلاغ مسؤول مركز لترقية أو تجديد الترخيص.
|
hub.invalidLicense.description=نموذج المركز Cryptomator الخاص بك لديه ترخيص غير صالح. الرجاء إبلاغ مسؤول مركز لترقية أو تجديد الترخيص.
|
||||||
@@ -305,6 +310,9 @@ preferences.volume.fuseRestartRequired=لتطبيق التغييرات، يحت
|
|||||||
preferences.volume.tcp.port=منفذ TCP الافتراضي
|
preferences.volume.tcp.port=منفذ TCP الافتراضي
|
||||||
preferences.volume.supportedFeatures=يدعم نوع وحدة تخزين المختار الميزات التالية:
|
preferences.volume.supportedFeatures=يدعم نوع وحدة تخزين المختار الميزات التالية:
|
||||||
preferences.volume.feature.mountAuto=اختيار نقطة البَدْء التلقائية
|
preferences.volume.feature.mountAuto=اختيار نقطة البَدْء التلقائية
|
||||||
|
preferences.volume.feature.mountToDir=مجلد مخصص كنقطة تحميل
|
||||||
|
preferences.volume.feature.mountToDriveLetter=استخدام حرف وحدة التخزين كنقطة تحميل
|
||||||
|
preferences.volume.feature.mountFlags=خيارات التثبيت المخصصة
|
||||||
preferences.volume.feature.readOnly=تحميل للقراءة فقط
|
preferences.volume.feature.readOnly=تحميل للقراءة فقط
|
||||||
## Updates
|
## Updates
|
||||||
preferences.updates=تحديثات
|
preferences.updates=تحديثات
|
||||||
@@ -312,6 +320,13 @@ preferences.updates.currentVersion=الإصدار الحالي: %s
|
|||||||
preferences.updates.autoUpdateCheck=تحقق من التحديثات اوتوماتيكيا
|
preferences.updates.autoUpdateCheck=تحقق من التحديثات اوتوماتيكيا
|
||||||
preferences.updates.checkNowBtn=تحقق الان
|
preferences.updates.checkNowBtn=تحقق الان
|
||||||
preferences.updates.updateAvailable=التحديث إلى الإصدار %s متاح.
|
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
|
## Contribution
|
||||||
preferences.contribute=ادعمنا
|
preferences.contribute=ادعمنا
|
||||||
@@ -331,13 +346,32 @@ stats.cacheHitRate=معدل استخدام الكاش
|
|||||||
stats.read.throughput.idle=قراءة: خامل
|
stats.read.throughput.idle=قراءة: خامل
|
||||||
stats.read.throughput.kibs=القراءة: %.2f KiB/s
|
stats.read.throughput.kibs=القراءة: %.2f KiB/s
|
||||||
stats.read.throughput.mibs=القراءة: %.2f MiB/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.none=تم فك تشفير البيانات:-
|
||||||
|
stats.decr.total.data.kib=البيانات المفكوكة: %.1f كيلوبايت
|
||||||
|
stats.decr.total.data.mib=البيانات المفكوكة: %.1f ميجابايت
|
||||||
|
stats.decr.total.data.gib=البيانات المفكوكة: %.1f جيجابايت
|
||||||
|
stats.read.accessCount=مجموع القراءات: %d
|
||||||
## Write
|
## 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.mib=البيانات المكتوبة: %.1f م.ب
|
||||||
stats.write.total.data.gib=البيانات المكتوبة: %.1f ج.ب
|
stats.write.total.data.gib=البيانات المكتوبة: %.1f ج.ب
|
||||||
stats.encr.total.data.none=البيانات المشفرة: -
|
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
|
## Accesses
|
||||||
|
stats.access.current=الوصول: %d
|
||||||
|
stats.access.total=مجموع الوصول: %d
|
||||||
|
|
||||||
|
|
||||||
# Main Window
|
# Main Window
|
||||||
@@ -355,6 +389,8 @@ main.vaultlist.contextMenu.unlockNow=افتح الان
|
|||||||
main.vaultlist.contextMenu.vaultoptions=إظهار خيارات المخزن
|
main.vaultlist.contextMenu.vaultoptions=إظهار خيارات المخزن
|
||||||
main.vaultlist.contextMenu.reveal=اظهار القرص
|
main.vaultlist.contextMenu.reveal=اظهار القرص
|
||||||
main.vaultlist.addVaultBtn=إضافة
|
main.vaultlist.addVaultBtn=إضافة
|
||||||
|
main.vaultlist.addVaultBtn.menuItemNew=خزانة جديدة...
|
||||||
|
main.vaultlist.addVaultBtn.menuItemExisting=أضِف خزانة موجودة...
|
||||||
## Vault Detail
|
## Vault Detail
|
||||||
### Welcome
|
### Welcome
|
||||||
main.vaultDetail.welcomeOnboarding=شكرا لاختيار Cryptomator لحماية ملفاتك. إذا كنت بحاجة إلى أية مساعدة، تحقق من دليل وتعليمات الإستخدام:
|
main.vaultDetail.welcomeOnboarding=شكرا لاختيار Cryptomator لحماية ملفاتك. إذا كنت بحاجة إلى أية مساعدة، تحقق من دليل وتعليمات الإستخدام:
|
||||||
@@ -364,14 +400,17 @@ main.vaultDetail.unlockBtn=فتح…
|
|||||||
main.vaultDetail.unlockNowBtn=فتح القفل الان
|
main.vaultDetail.unlockNowBtn=فتح القفل الان
|
||||||
main.vaultDetail.optionsBtn=خيارات المخزن
|
main.vaultDetail.optionsBtn=خيارات المخزن
|
||||||
main.vaultDetail.passwordSavedInKeychain=تم حفظ كلمة المرور
|
main.vaultDetail.passwordSavedInKeychain=تم حفظ كلمة المرور
|
||||||
|
main.vaultDetail.share=مشاركة…
|
||||||
### Unlocked
|
### Unlocked
|
||||||
main.vaultDetail.unlockedStatus=مفتوح
|
main.vaultDetail.unlockedStatus=مفتوح
|
||||||
main.vaultDetail.accessLocation=يمكن الوصول إلى محتويات مخزنك هنا:
|
main.vaultDetail.accessLocation=يمكن الوصول إلى محتويات مخزنك هنا:
|
||||||
main.vaultDetail.revealBtn=اظهار القرص
|
main.vaultDetail.revealBtn=اظهار القرص
|
||||||
|
main.vaultDetail.copyUri=نسخ الرابط
|
||||||
main.vaultDetail.lockBtn=قفل
|
main.vaultDetail.lockBtn=قفل
|
||||||
main.vaultDetail.bytesPerSecondRead=قراءة:
|
main.vaultDetail.bytesPerSecondRead=قراءة:
|
||||||
main.vaultDetail.bytesPerSecondWritten=كتابة:
|
main.vaultDetail.bytesPerSecondWritten=كتابة:
|
||||||
main.vaultDetail.throughput.idle=خمول
|
main.vaultDetail.throughput.idle=خمول
|
||||||
|
main.vaultDetail.throughput.kbps=%.1f كيلوبايت/ث
|
||||||
main.vaultDetail.throughput.mbps=%.1f ميجابايت/ث
|
main.vaultDetail.throughput.mbps=%.1f ميجابايت/ث
|
||||||
main.vaultDetail.stats=إحصائيات الخزنة
|
main.vaultDetail.stats=إحصائيات الخزنة
|
||||||
main.vaultDetail.locateEncryptedFileBtn=تحديد موقع الملف المشفر
|
main.vaultDetail.locateEncryptedFileBtn=تحديد موقع الملف المشفر
|
||||||
@@ -387,6 +426,9 @@ main.vaultDetail.missing.changeLocation=تغيير موقع الخزنة…
|
|||||||
main.vaultDetail.migrateButton=ترقية الحافظة
|
main.vaultDetail.migrateButton=ترقية الحافظة
|
||||||
main.vaultDetail.migratePrompt=يجب ترقية المخزن الخاص بك إلى تنسيق جديد، قبل أن تتمكن من الوصول إليه
|
main.vaultDetail.migratePrompt=يجب ترقية المخزن الخاص بك إلى تنسيق جديد، قبل أن تتمكن من الوصول إليه
|
||||||
### Error
|
### Error
|
||||||
|
main.vaultDetail.error.info=حدث خطأ أثناء تحميل الخزانة من القرص الصلب.
|
||||||
|
main.vaultDetail.error.reload=إعادة تحميل
|
||||||
|
main.vaultDetail.error.windowTitle=خطأ في تحميل الخزنة
|
||||||
|
|
||||||
# Wrong File Alert
|
# Wrong File Alert
|
||||||
wrongFileAlert.title=كيفية تشفير الملفات
|
wrongFileAlert.title=كيفية تشفير الملفات
|
||||||
@@ -402,24 +444,31 @@ wrongFileAlert.link=لمزيد من المساعدة، قم بزيارة
|
|||||||
## General
|
## General
|
||||||
vaultOptions.general=عام
|
vaultOptions.general=عام
|
||||||
vaultOptions.general.vaultName=اسم المخزن
|
vaultOptions.general.vaultName=اسم المخزن
|
||||||
|
vaultOptions.general.autoLock.lockAfterTimePart1=قفل عند الخمول لمدة
|
||||||
vaultOptions.general.autoLock.lockAfterTimePart2=دقائق
|
vaultOptions.general.autoLock.lockAfterTimePart2=دقائق
|
||||||
vaultOptions.general.unlockAfterStartup=فتح قفل المخزن عند بدء تشغيل Cryptomator
|
vaultOptions.general.unlockAfterStartup=فتح قفل المخزن عند بدء تشغيل Cryptomator
|
||||||
vaultOptions.general.actionAfterUnlock=بعد فتح القفل بنجاح
|
vaultOptions.general.actionAfterUnlock=بعد فتح القفل بنجاح
|
||||||
vaultOptions.general.actionAfterUnlock.ignore=لا تفعل شيئاً
|
vaultOptions.general.actionAfterUnlock.ignore=لا تفعل شيئاً
|
||||||
vaultOptions.general.actionAfterUnlock.reveal=إظهار القرص
|
vaultOptions.general.actionAfterUnlock.reveal=إظهار القرص
|
||||||
vaultOptions.general.actionAfterUnlock.ask=اسأل
|
vaultOptions.general.actionAfterUnlock.ask=اسأل
|
||||||
|
vaultOptions.general.startHealthCheckBtn=بدء فحص الصحة
|
||||||
|
|
||||||
## Mount
|
## Mount
|
||||||
vaultOptions.mount=القرص الوهمي
|
vaultOptions.mount=القرص الوهمي
|
||||||
|
vaultOptions.mount.info=افتح تفضيلات القرص الظاهري لتغيير الإعدادات الافتراضية.
|
||||||
vaultOptions.mount.readonly=للقراءة فقط
|
vaultOptions.mount.readonly=للقراءة فقط
|
||||||
vaultOptions.mount.customMountFlags=الأعلام المخصصة
|
vaultOptions.mount.customMountFlags=الأعلام المخصصة
|
||||||
vaultOptions.mount.winDriveLetterOccupied=مشغول
|
vaultOptions.mount.winDriveLetterOccupied=مشغول
|
||||||
vaultOptions.mount.mountPoint=موقع التحميل الوهمي
|
vaultOptions.mount.mountPoint=موقع التحميل الوهمي
|
||||||
vaultOptions.mount.mountPoint.auto=اختيار موقع مناسب تلقائياً
|
vaultOptions.mount.mountPoint.auto=اختيار موقع مناسب تلقائياً
|
||||||
vaultOptions.mount.mountPoint.driveLetter=استخدام دالة قرص معين
|
vaultOptions.mount.mountPoint.driveLetter=استخدام دالة قرص معين
|
||||||
|
vaultOptions.mount.mountPoint.custom=استخدام المجلد المختار
|
||||||
vaultOptions.mount.mountPoint.directoryPickerButton=اختر…
|
vaultOptions.mount.mountPoint.directoryPickerButton=اختر…
|
||||||
|
vaultOptions.mount.mountPoint.directoryPickerTitle=إختر مجلد
|
||||||
vaultOptions.mount.volumeType.default=الافتراضي (%s)
|
vaultOptions.mount.volumeType.default=الافتراضي (%s)
|
||||||
|
vaultOptions.mount.volumeType.restartRequired=لاستخدام هذا النوع من وحدة التخزين يحتاج Cryptomator إلى إعادة تشغيله.
|
||||||
vaultOptions.mount.volume.tcp.port=منفذ TCP
|
vaultOptions.mount.volume.tcp.port=منفذ TCP
|
||||||
|
vaultOptions.mount.volume.type=نوع وحدة التخزين
|
||||||
## Master Key
|
## Master Key
|
||||||
vaultOptions.masterkey=كلمة المرور
|
vaultOptions.masterkey=كلمة المرور
|
||||||
vaultOptions.masterkey.changePasswordBtn=تغيير كلمة المرور
|
vaultOptions.masterkey.changePasswordBtn=تغيير كلمة المرور
|
||||||
@@ -429,9 +478,12 @@ vaultOptions.masterkey.showRecoveryKeyBtn=عرض مفتاح الاسترداد
|
|||||||
vaultOptions.masterkey.recoverPasswordBtn=إعادة تعيين كلمة المرور
|
vaultOptions.masterkey.recoverPasswordBtn=إعادة تعيين كلمة المرور
|
||||||
## Hub
|
## Hub
|
||||||
vaultOptions.hub=الإسترداد
|
vaultOptions.hub=الإسترداد
|
||||||
|
vaultOptions.hub.convertInfo=يمكنك استخدام مفتاح الاسترداد لتحويل هذه خزانة Hub إلى خزانة تعتمد على كلمة مرور في حالة الطوارئ.
|
||||||
|
vaultOptions.hub.convertBtn=التحويل إلى خزانة قائمة على كلمة المرور
|
||||||
|
|
||||||
# Recovery Key
|
# Recovery Key
|
||||||
## Display Recovery Key
|
## Display Recovery Key
|
||||||
|
recoveryKey.display.title=إظهار مفتاح الاسترداد
|
||||||
recoveryKey.create.message=مطلوب كلمة المرور
|
recoveryKey.create.message=مطلوب كلمة المرور
|
||||||
recoveryKey.create.description=أدخل كلمة المرور الخاصة بك لإظهار مفتاح الاسترداد ل "%s":
|
recoveryKey.create.description=أدخل كلمة المرور الخاصة بك لإظهار مفتاح الاسترداد ل "%s":
|
||||||
recoveryKey.display.description=يمكن استخدام مفتاح الاسترداد التالي لاستعادة الوصول إلى "%s":
|
recoveryKey.display.description=يمكن استخدام مفتاح الاسترداد التالي لاستعادة الوصول إلى "%s":
|
||||||
@@ -439,12 +491,23 @@ recoveryKey.display.StorageHints=حافظ عليه في مكان ما آمن ج
|
|||||||
## Reset Password
|
## Reset Password
|
||||||
### Enter Recovery Key
|
### Enter Recovery Key
|
||||||
recoveryKey.recover.title=إعادة تعيين كلمة المرور
|
recoveryKey.recover.title=إعادة تعيين كلمة المرور
|
||||||
|
recoveryKey.recover.prompt=أدخل مفتاح الاسترداد لـ "%s":
|
||||||
recoveryKey.recover.correctKey=هذا مفتاح استرداد صالح
|
recoveryKey.recover.correctKey=هذا مفتاح استرداد صالح
|
||||||
|
recoveryKey.recover.wrongKey=مفتاح الاسترداد هذا ينتمي إلى خزانة مختلفة
|
||||||
|
recoveryKey.recover.invalidKey=مفتاح الاسترداد غير صالح
|
||||||
recoveryKey.printout.heading=مفتاح استرداد Cryptomator\n"%s"\n
|
recoveryKey.printout.heading=مفتاح استرداد Cryptomator\n"%s"\n
|
||||||
### Reset Password
|
### Reset Password
|
||||||
|
recoveryKey.recover.resetBtn=إعادة الضبط
|
||||||
### Recovery Key Password Reset Success
|
### Recovery Key Password Reset Success
|
||||||
|
recoveryKey.recover.resetSuccess.message=تم إعادة تعيين كلمة المرور بنجاح
|
||||||
|
recoveryKey.recover.resetSuccess.description=يمكنك فتح الخزانة الخاصة بك بكلمة المرور الجديدة.
|
||||||
|
|
||||||
# Convert Vault
|
# Convert Vault
|
||||||
|
convertVault.title=تحويل الخزانة
|
||||||
|
convertVault.convert.convertBtn.before=حوّل
|
||||||
|
convertVault.convert.convertBtn.processing=جاري التحويل…
|
||||||
|
convertVault.success.message=تم التحويل بنجاح
|
||||||
|
convertVault.hubToPassword.success.description=يمكنك الآن فتح الخزانة باستخدام كلمة المرور المختارة دون الحاجة إلى الوصول إلى Hub.
|
||||||
|
|
||||||
# New Password
|
# New Password
|
||||||
newPassword.promptText=أدخل كلمة مرور جديدة
|
newPassword.promptText=أدخل كلمة مرور جديدة
|
||||||
@@ -459,13 +522,46 @@ passwordStrength.messageLabel.3=قوية
|
|||||||
passwordStrength.messageLabel.4=قوية جداً
|
passwordStrength.messageLabel.4=قوية جداً
|
||||||
|
|
||||||
# Quit
|
# Quit
|
||||||
|
quit.title=إغلاق التطبيق
|
||||||
|
quit.message=هناك خزانات مفتوحة
|
||||||
|
quit.description=يرجى تأكيد رغبتك في الخروج. سيقوم Cryptomator بقفل جميع الخزائن غير المقفلة بشكل آمن لمنع فقدان البيانات.
|
||||||
quit.lockAndQuitBtn=قفل و خروج
|
quit.lockAndQuitBtn=قفل و خروج
|
||||||
|
|
||||||
# Forced Quit
|
# Forced Quit
|
||||||
|
quit.forced.message=بعض الخزائن لم أتمكن من قفلها
|
||||||
|
quit.forced.description=تم حظر قفل الخزنات بسبب العمليات المعلقة أو الملفات المفتوحة. يمكنك فرض قفل الخزنات المتبقية، ولكن قد يؤدي مقاطعة عمليات الإدخال/الإخراج إلى فقدان البيانات غير المحفوظة.
|
||||||
|
quit.forced.forceAndQuitBtn=فرض وإغلاق
|
||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
updateReminder.title=التحقق من التحديث
|
||||||
|
updateReminder.message=التحقق من التحديثات؟
|
||||||
|
updateReminder.description=ابقَ على اطلاع بأحدث الميزات، وإصلاحات الأخطاء، وتحسينات الأمان. نوصي بالتحقق التلقائي من التحديثات.
|
||||||
|
updateReminder.notNow=ليس الآن
|
||||||
|
updateReminder.yesOnce=نعم، مرة واحدة
|
||||||
|
updateReminder.yesAutomatically=نعم، تلقائياً
|
||||||
|
|
||||||
#Dokany Support End
|
#Dokany Support End
|
||||||
|
dokanySupportEnd.title=إشعار بإيقاف الدعم
|
||||||
|
dokanySupportEnd.message=انتهاء الدعم لـDokany
|
||||||
|
dokanySupportEnd.description=نوع وحدة التخزين Dokany لم يعد مدعوماً من قبل Cryptomator. تم تعديل إعداداتك لاستخدام نوع وحدة التخزين الافتراضي الآن. يمكنك عرض النوع الافتراضي في التفضيلات.
|
||||||
dokanySupportEnd.preferencesBtn=فتح التفضيلات
|
dokanySupportEnd.preferencesBtn=فتح التفضيلات
|
||||||
|
|
||||||
# Share Vault
|
# 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.debugDirectory=Protokolldateien anzeigen
|
||||||
preferences.general.autoStart=Cryptomator beim Systemstart starten
|
preferences.general.autoStart=Cryptomator beim Systemstart starten
|
||||||
preferences.general.keychainBackend=Passwörter speichern mit
|
preferences.general.keychainBackend=Passwörter speichern mit
|
||||||
|
preferences.general.quickAccessService=Die entsperrten Tresore zum Schnellzugriff hinzufügen
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Benutzeroberfläche
|
preferences.interface=Benutzeroberfläche
|
||||||
preferences.interface.theme=Erscheinungsbild
|
preferences.interface.theme=Erscheinungsbild
|
||||||
@@ -541,6 +542,7 @@ updateReminder.yesOnce=Ja, einmalig
|
|||||||
updateReminder.yesAutomatically=Ja, automatisch
|
updateReminder.yesAutomatically=Ja, automatisch
|
||||||
|
|
||||||
#Dokany Support End
|
#Dokany Support End
|
||||||
|
dokanySupportEnd.message=Ende der Unterstützung für Dokany
|
||||||
dokanySupportEnd.preferencesBtn=Einstellungen öffnen
|
dokanySupportEnd.preferencesBtn=Einstellungen öffnen
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Ενεργοποίηση καταγραφής
|
|||||||
preferences.general.debugDirectory=Αποκάλυψη αρχείων καταγραφής
|
preferences.general.debugDirectory=Αποκάλυψη αρχείων καταγραφής
|
||||||
preferences.general.autoStart=Εκκίνηση Cryptomator στην εκκίνηση του συστήματος
|
preferences.general.autoStart=Εκκίνηση Cryptomator στην εκκίνηση του συστήματος
|
||||||
preferences.general.keychainBackend=Αποθήκευση κωδικού πρόσβασης με
|
preferences.general.keychainBackend=Αποθήκευση κωδικού πρόσβασης με
|
||||||
|
preferences.general.quickAccessService=Προσθήκη ξεκλειδωμένων Κρυπτών στην περιοχή γρήγορης πρόσβασης
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Διεπαφή
|
preferences.interface=Διεπαφή
|
||||||
preferences.interface.theme=Εμφάνιση & Αίσθηση
|
preferences.interface.theme=Εμφάνιση & Αίσθηση
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Habilitar registro de depuración
|
|||||||
preferences.general.debugDirectory=Revelar archivos de registro
|
preferences.general.debugDirectory=Revelar archivos de registro
|
||||||
preferences.general.autoStart=Cargar Cryptomator al iniciar el sistema
|
preferences.general.autoStart=Cargar Cryptomator al iniciar el sistema
|
||||||
preferences.general.keychainBackend=Guardar contraseñas con
|
preferences.general.keychainBackend=Guardar contraseñas con
|
||||||
|
preferences.general.quickAccessService=Añadir bóvedas desbloqueadas al área de acceso rápido
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Interfaz
|
preferences.interface=Interfaz
|
||||||
preferences.interface.theme=Apariencia
|
preferences.interface.theme=Apariencia
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ lock.forced.retryBtn=تلاش مجدد
|
|||||||
|
|
||||||
# Preferences
|
# Preferences
|
||||||
## General
|
## General
|
||||||
|
preferences.general.quickAccessService=خزانه های قفل نشده را به دسترسی سریع اضافه کنید
|
||||||
## Interface
|
## Interface
|
||||||
## Volume
|
## Volume
|
||||||
## Updates
|
## Updates
|
||||||
@@ -119,6 +120,7 @@ main.closeBtn.tooltip=ببند
|
|||||||
main.supporterCertificateMissing.tooltip=لطفا کمک مالی در نظر بگیرند
|
main.supporterCertificateMissing.tooltip=لطفا کمک مالی در نظر بگیرند
|
||||||
## Vault List
|
## Vault List
|
||||||
main.vaultlist.contextMenu.lock=قفل
|
main.vaultlist.contextMenu.lock=قفل
|
||||||
|
main.vaultlist.addVaultBtn=اضافه کردن
|
||||||
## Vault Detail
|
## Vault Detail
|
||||||
### Welcome
|
### Welcome
|
||||||
### Locked
|
### 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.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.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.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"
|
unlock.error.title=Hindi mabuksan ang "%s"
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=Hindi ma-access ang key ng device
|
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.message=Bagong Device
|
||||||
hub.register.nameLabel=Pangalan ng device
|
hub.register.nameLabel=Pangalan ng device
|
||||||
hub.register.invalidAccountKeyLabel=Di-wastong Account Key
|
hub.register.invalidAccountKeyLabel=Di-wastong Account Key
|
||||||
|
hub.register.registerBtn=Magparehistro
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
|
hub.register.legacy.occupiedMsg=Ang pangalan ay nagamit na
|
||||||
### Registration Success
|
### 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.unlockBtn=I-unlock
|
||||||
|
hub.registerSuccess.legacy.description=Para ma-access ang vault, kailangang pahintulutan ng may-ari ng vault ang iyong device.
|
||||||
### Registration Failed
|
### 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
|
### Unauthorized
|
||||||
hub.unauthorized.message=Walang pahintulot
|
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.
|
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.autoUpdateCheck=Awtomatikong suriin ang mga update
|
||||||
preferences.updates.checkNowBtn=Tingnan ngayon
|
preferences.updates.checkNowBtn=Tingnan ngayon
|
||||||
preferences.updates.updateAvailable=Available ang update sa bersyong %s.
|
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
|
## Contribution
|
||||||
preferences.contribute=Suportahan Kami
|
preferences.contribute=Suportahan Kami
|
||||||
@@ -516,3 +530,10 @@ updateReminder.yesAutomatically=Oo, Awtomatiko
|
|||||||
dokanySupportEnd.preferencesBtn=Buksan ang Mga Kagustuhan
|
dokanySupportEnd.preferencesBtn=Buksan ang Mga Kagustuhan
|
||||||
|
|
||||||
# Share Vault
|
# 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.debugDirectory=Afficher le journal
|
||||||
preferences.general.autoStart=Lancer Cryptomator au démarrage du système
|
preferences.general.autoStart=Lancer Cryptomator au démarrage du système
|
||||||
preferences.general.keychainBackend=Stocker les mots de passe avec
|
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
|
## Interface
|
||||||
preferences.interface=Interface
|
preferences.interface=Interface
|
||||||
preferences.interface.theme=Apparence
|
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.debugDirectory=Rivela i file di registro
|
||||||
preferences.general.autoStart=Avvia Cryptomator all'avvio del sistema
|
preferences.general.autoStart=Avvia Cryptomator all'avvio del sistema
|
||||||
preferences.general.keychainBackend=Memorizza le password con
|
preferences.general.keychainBackend=Memorizza le password con
|
||||||
|
preferences.general.quickAccessService=Aggiungi cassaforte sbloccata all'area di accesso rapido
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Interfaccia
|
preferences.interface=Interfaccia
|
||||||
preferences.interface.theme=Aspetto
|
preferences.interface.theme=Aspetto
|
||||||
@@ -331,7 +332,7 @@ preferences.updates.upToDate=Cryptomator è aggiornato.
|
|||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Supportaci
|
preferences.contribute=Supportaci
|
||||||
preferences.contribute.registeredFor=Certificato del sostenitore registrato per %s
|
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.getCertificate=Non ne hai ancora uno? Scopri come puoi ottenerlo.
|
||||||
preferences.contribute.promptText=Incolla qui il codice del certificato da sostenitore
|
preferences.contribute.promptText=Incolla qui il codice del certificato da sostenitore
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ preferences.general.debugLogging=ログを有効にする
|
|||||||
preferences.general.debugDirectory=ログ ファイルを表示
|
preferences.general.debugDirectory=ログ ファイルを表示
|
||||||
preferences.general.autoStart=システム開始時に Cryptomator を起動する
|
preferences.general.autoStart=システム開始時に Cryptomator を起動する
|
||||||
preferences.general.keychainBackend=次を利用してパスワードを保存する
|
preferences.general.keychainBackend=次を利用してパスワードを保存する
|
||||||
|
preferences.general.quickAccessService=解錠された金庫をクイックアクセス領域に追加
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=インターフェース
|
preferences.interface=インターフェース
|
||||||
preferences.interface.theme=外観
|
preferences.interface.theme=外観
|
||||||
@@ -541,6 +542,8 @@ updateReminder.yesOnce=はい、一度だけ
|
|||||||
updateReminder.yesAutomatically=自動的に行う
|
updateReminder.yesAutomatically=自動的に行う
|
||||||
|
|
||||||
#Dokany Support End
|
#Dokany Support End
|
||||||
|
dokanySupportEnd.title=サポート廃止の通知
|
||||||
|
dokanySupportEnd.message=Dokany のサポート終了
|
||||||
dokanySupportEnd.preferencesBtn=環境設定を開く
|
dokanySupportEnd.preferencesBtn=環境設定を開く
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -60,6 +60,10 @@ addvaultwizard.new.validCharacters.numbers=숫자
|
|||||||
addvaultwizard.new.validCharacters.dashes=대시 (%s) 또는 언더바 (%s)
|
addvaultwizard.new.validCharacters.dashes=대시 (%s) 또는 언더바 (%s)
|
||||||
### Expert Settings
|
### 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=암호화된 파일명의 최대 길이
|
||||||
|
addvaultwizard.new.expertSettings.shorteningThreshold.valid=유효
|
||||||
### Password
|
### Password
|
||||||
addvaultwizard.new.createVaultBtn=Vault 생성
|
addvaultwizard.new.createVaultBtn=Vault 생성
|
||||||
addvaultwizard.new.generateRecoveryKeyChoice=비밀번호가 없으면 데이터에 접근할 수 없습니다. 비밀번호를 잊었을 때를 대비한 복구 키를 원하십니까?
|
addvaultwizard.new.generateRecoveryKeyChoice=비밀번호가 없으면 데이터에 접근할 수 없습니다. 비밀번호를 잊었을 때를 대비한 복구 키를 원하십니까?
|
||||||
@@ -128,13 +132,21 @@ unlock.success.revealBtn=드라이브 표시
|
|||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.openBtn=설정 열기
|
hub.noKeychain.openBtn=설정 열기
|
||||||
### Waiting
|
### Waiting
|
||||||
|
hub.auth.message=인증 대기중…
|
||||||
### Receive Key
|
### Receive Key
|
||||||
### Register Device
|
### Register Device
|
||||||
|
hub.register.message=새 기기
|
||||||
hub.register.nameLabel=기기 이름
|
hub.register.nameLabel=기기 이름
|
||||||
|
hub.register.invalidAccountKeyLabel=유효하지 않은 계정 키
|
||||||
|
hub.register.registerBtn=등록
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
|
hub.register.legacy.occupiedMsg=이미 사용 중인 이름
|
||||||
### Registration Success
|
### Registration Success
|
||||||
|
hub.registerSuccess.message=기기 등록됨
|
||||||
hub.registerSuccess.unlockBtn=잠금해제
|
hub.registerSuccess.unlockBtn=잠금해제
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
|
hub.registerFailed.message=기기 등록 실패
|
||||||
|
hub.registerFailed.description.generic=등록 중에 에러가 발생했습니다. 앱 로그에서 자세한 정보를 확인할 수 있습니다.
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=액세스 거부
|
hub.unauthorized.message=액세스 거부
|
||||||
hub.unauthorized.description=귀하의 기기는 아직 이 저장소에 액세스할 수 있는 권한이 없습니다. Vault 소유자에게 승인을 요청하세요.
|
hub.unauthorized.description=귀하의 기기는 아직 이 저장소에 액세스할 수 있는 권한이 없습니다. Vault 소유자에게 승인을 요청하세요.
|
||||||
@@ -162,6 +174,7 @@ migration.start.text=Vault "%s"를 현재 버전의 Cryptomator에서 열기 위
|
|||||||
migration.start.remarkUndone=이 업그레이드는 되돌릴 수 없습니다.
|
migration.start.remarkUndone=이 업그레이드는 되돌릴 수 없습니다.
|
||||||
migration.start.remarkVersions=과거 버전의 Cryptomator는 업그레이드된 vault를 열 수 없습니다.
|
migration.start.remarkVersions=과거 버전의 Cryptomator는 업그레이드된 vault를 열 수 없습니다.
|
||||||
migration.start.remarkCanRun=이 vault를 열 때 사용하는 모든 장치가 현재 버전의 Cryptomator를 실행할 수 있는지 확인해야 합니다.
|
migration.start.remarkCanRun=이 vault를 열 때 사용하는 모든 장치가 현재 버전의 Cryptomator를 실행할 수 있는지 확인해야 합니다.
|
||||||
|
migration.start.remarkSynced=업그레이드하기 전에 해당 vault가 모든 기기에 정상적으로 동기화되어야 합니다.
|
||||||
migration.start.confirm=나는 위 정보를 읽고 정말 이해했습니다.
|
migration.start.confirm=나는 위 정보를 읽고 정말 이해했습니다.
|
||||||
## Run
|
## Run
|
||||||
migration.run.enterPassword="%s"의 비밀번호를 입력하십시요.
|
migration.run.enterPassword="%s"의 비밀번호를 입력하십시요.
|
||||||
@@ -207,11 +220,23 @@ health.check.detail.checkRunning=검사가 현재 실행중입니다...
|
|||||||
health.check.detail.checkSkipped=선택된 검사항목이 없습니다.
|
health.check.detail.checkSkipped=선택된 검사항목이 없습니다.
|
||||||
health.check.detail.checkFinished=검사가 성공적으로 완료되었습니다.
|
health.check.detail.checkFinished=검사가 성공적으로 완료되었습니다.
|
||||||
health.check.detail.checkFinishedAndFound=검사가 완료되었습니다. 검사 결과를 확인해주세요.
|
health.check.detail.checkFinishedAndFound=검사가 완료되었습니다. 검사 결과를 확인해주세요.
|
||||||
|
health.check.detail.checkFailed=오류로 인해 검사가 종료되었습니다.
|
||||||
health.check.detail.checkCancelled=검사가 취소되었습니다
|
health.check.detail.checkCancelled=검사가 취소되었습니다
|
||||||
health.check.detail.listFilters.label=필터
|
health.check.detail.listFilters.label=필터
|
||||||
health.check.exportBtn=보고서 내보내기
|
health.check.exportBtn=보고서 내보내기
|
||||||
## Result view
|
## Result view
|
||||||
|
health.result.severityFilter.all=모든 상태 표시
|
||||||
|
health.result.severityFilter.good=양호
|
||||||
health.result.severityFilter.warn=경고
|
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
|
## Fix Application
|
||||||
health.fix.fixBtn=문제해결
|
health.fix.fixBtn=문제해결
|
||||||
health.fix.successTip=문제 해결이 성공적으로 완료되었습니다
|
health.fix.successTip=문제 해결이 성공적으로 완료되었습니다
|
||||||
@@ -243,6 +268,7 @@ preferences.interface.showTrayIcon=트레이 아이콘 보기 (재시작 필요)
|
|||||||
## Volume
|
## Volume
|
||||||
preferences.volume=가상 드라이브
|
preferences.volume=가상 드라이브
|
||||||
preferences.volume.type.automatic=자동
|
preferences.volume.type.automatic=자동
|
||||||
|
preferences.volume.tcp.port=기본 TCP 포트
|
||||||
preferences.volume.supportedFeatures=현재 선택한 볼륨 타입은 다음과 같은 기능들을 지원합니다:
|
preferences.volume.supportedFeatures=현재 선택한 볼륨 타입은 다음과 같은 기능들을 지원합니다:
|
||||||
preferences.volume.feature.mountToDir=마운트할 폴더 지정
|
preferences.volume.feature.mountToDir=마운트할 폴더 지정
|
||||||
preferences.volume.feature.mountToDriveLetter=마운트할 드라이브 문자
|
preferences.volume.feature.mountToDriveLetter=마운트할 드라이브 문자
|
||||||
@@ -254,6 +280,13 @@ preferences.updates.currentVersion=현재 버전: %s
|
|||||||
preferences.updates.autoUpdateCheck=자동으로 업데이트 확인
|
preferences.updates.autoUpdateCheck=자동으로 업데이트 확인
|
||||||
preferences.updates.checkNowBtn=지금 확인
|
preferences.updates.checkNowBtn=지금 확인
|
||||||
preferences.updates.updateAvailable=버전 %s의 업데이트가 가능합니다.
|
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
|
## Contribution
|
||||||
preferences.contribute=후원하기
|
preferences.contribute=후원하기
|
||||||
@@ -326,6 +359,7 @@ main.vaultDetail.unlockBtn=잠금해제...
|
|||||||
main.vaultDetail.unlockNowBtn=지금 잠금해제
|
main.vaultDetail.unlockNowBtn=지금 잠금해제
|
||||||
main.vaultDetail.optionsBtn=Vault 옵션
|
main.vaultDetail.optionsBtn=Vault 옵션
|
||||||
main.vaultDetail.passwordSavedInKeychain=비밀번호 저장됨
|
main.vaultDetail.passwordSavedInKeychain=비밀번호 저장됨
|
||||||
|
main.vaultDetail.share=공유하기
|
||||||
### Unlocked
|
### Unlocked
|
||||||
main.vaultDetail.unlockedStatus=잠금해제됨
|
main.vaultDetail.unlockedStatus=잠금해제됨
|
||||||
main.vaultDetail.accessLocation=이 Vault의 내용은 다음의 경로에서 접근할 수 있습니다:
|
main.vaultDetail.accessLocation=이 Vault의 내용은 다음의 경로에서 접근할 수 있습니다:
|
||||||
@@ -385,6 +419,7 @@ vaultOptions.mount.mountPoint.driveLetter=드라이브 문자를 지정하여
|
|||||||
vaultOptions.mount.mountPoint.custom=선택한 디렉토리 사용
|
vaultOptions.mount.mountPoint.custom=선택한 디렉토리 사용
|
||||||
vaultOptions.mount.mountPoint.directoryPickerButton=선택
|
vaultOptions.mount.mountPoint.directoryPickerButton=선택
|
||||||
vaultOptions.mount.mountPoint.directoryPickerTitle=디렉토리 선택
|
vaultOptions.mount.mountPoint.directoryPickerTitle=디렉토리 선택
|
||||||
|
vaultOptions.mount.volume.tcp.port=TCP 포트
|
||||||
## Master Key
|
## Master Key
|
||||||
vaultOptions.masterkey=비밀번호
|
vaultOptions.masterkey=비밀번호
|
||||||
vaultOptions.masterkey.changePasswordBtn=비밀번호 변경
|
vaultOptions.masterkey.changePasswordBtn=비밀번호 변경
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Debug logging aanzetten
|
|||||||
preferences.general.debugDirectory=Logboekbestanden bekijken
|
preferences.general.debugDirectory=Logboekbestanden bekijken
|
||||||
preferences.general.autoStart=Start Cryptomator als het systeem opstart
|
preferences.general.autoStart=Start Cryptomator als het systeem opstart
|
||||||
preferences.general.keychainBackend=Bewaar wachtwoorden met
|
preferences.general.keychainBackend=Bewaar wachtwoorden met
|
||||||
|
preferences.general.quickAccessService=Voeg ontgrendelde kluizen toe aan snelle toegang
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Uiterlijk
|
preferences.interface=Uiterlijk
|
||||||
preferences.interface.theme=Uiterlijk
|
preferences.interface.theme=Uiterlijk
|
||||||
|
|||||||
@@ -318,5 +318,7 @@ quit.lockAndQuitBtn=ਲਾਕ ਕਰੋ ਤੇ ਬਾਹਰ ਜਾਓ
|
|||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
#Dokany Support End
|
||||||
|
dokanySupportEnd.title=ਬਰਤਰਫ਼ੀ ਨੋਟਿਸ
|
||||||
|
dokanySupportEnd.preferencesBtn=ਪਸੰਦੀਦਾ ਖੋਲ੍ਹੋ
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Włącz logowanie w trybie debug
|
|||||||
preferences.general.debugDirectory=Pokaż pliki logowania
|
preferences.general.debugDirectory=Pokaż pliki logowania
|
||||||
preferences.general.autoStart=Uruchom Cryptomator po uruchomieniu systemu
|
preferences.general.autoStart=Uruchom Cryptomator po uruchomieniu systemu
|
||||||
preferences.general.keychainBackend=Przechowuj hasła za pomocą
|
preferences.general.keychainBackend=Przechowuj hasła za pomocą
|
||||||
|
preferences.general.quickAccessService=Dodaj odblokowane sejfy do paska szybkiego dostępu
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Interfejs
|
preferences.interface=Interfejs
|
||||||
preferences.interface.theme=Wygląd
|
preferences.interface.theme=Wygląd
|
||||||
@@ -325,6 +326,8 @@ preferences.updates.lastUpdateCheck.never=nigdy
|
|||||||
preferences.updates.lastUpdateCheck.recently=niedawno
|
preferences.updates.lastUpdateCheck.recently=niedawno
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=%s dni temu
|
preferences.updates.lastUpdateCheck.daysAgo=%s dni temu
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=%s godzin 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
|
## Contribution
|
||||||
preferences.contribute=Wesprzyj nas
|
preferences.contribute=Wesprzyj nas
|
||||||
@@ -539,6 +542,9 @@ updateReminder.yesOnce=Tak, raz
|
|||||||
updateReminder.yesAutomatically=Tak, automatycznie
|
updateReminder.yesAutomatically=Tak, automatycznie
|
||||||
|
|
||||||
#Dokany Support End
|
#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
|
dokanySupportEnd.preferencesBtn=Otwórz ustawienia
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ preferences.general.debugLogging=Ativar o registo de erros
|
|||||||
preferences.general.debugDirectory=Mostrar ficheiros de registo
|
preferences.general.debugDirectory=Mostrar ficheiros de registo
|
||||||
preferences.general.autoStart=Iniciar o Cryptomator no início do sistema
|
preferences.general.autoStart=Iniciar o Cryptomator no início do sistema
|
||||||
preferences.general.keychainBackend=Guardar palavras-passe com
|
preferences.general.keychainBackend=Guardar palavras-passe com
|
||||||
|
preferences.general.quickAccessService=Adicionar cofres desbloqueados à área de acesso rápido
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Interface
|
preferences.interface=Interface
|
||||||
preferences.interface.theme=Aspecto e Ambiente
|
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.debugDirectory=Mostrar arquivos de log
|
||||||
preferences.general.autoStart=Iniciar o Cryptomator ao inicializar o sistema
|
preferences.general.autoStart=Iniciar o Cryptomator ao inicializar o sistema
|
||||||
preferences.general.keychainBackend=Armazenar senhas com
|
preferences.general.keychainBackend=Armazenar senhas com
|
||||||
|
preferences.general.quickAccessService=Adicione cofres desbloqueados à área de acesso rápido
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Interface
|
preferences.interface=Interface
|
||||||
preferences.interface.theme=Aparência
|
preferences.interface.theme=Aparência
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ generic.button.next=Далее
|
|||||||
generic.button.print=Печать
|
generic.button.print=Печать
|
||||||
|
|
||||||
# Error
|
# Error
|
||||||
error.message=Ошибка: %s
|
error.message=Произошла ошибка
|
||||||
error.description=Произошла непредвиденная ситуация. Попробуйте найти уже имеющиеся решения этой ошибки. Если об этой ошибке ещё не сообщали, то сообщите вы.
|
error.description=Cryptomator не ожидал, что это произойдёт. Вы можете найти существующие решения по этой ошибке. Или, если об этом ещё не сообщалось, то не стесняйтесь это сделать.
|
||||||
error.hyperlink.lookup=Найти ошибку
|
error.hyperlink.lookup=Найти ошибку
|
||||||
error.hyperlink.report=Сообщить об ошибке
|
error.hyperlink.report=Сообщить об этой ошибке
|
||||||
error.technicalDetails=Подробности:
|
error.technicalDetails=Подробности:
|
||||||
error.existingSolutionDescription=Произошло неожиданное событие. Однако мы нашли решение этой проблемы. Ознакомьтесь с ним по ссылке.
|
error.existingSolutionDescription=Cryptomator не ожидал, что это произойдёт. Однако, мы нашли существующее решение по этой проблеме. Пожалуйста, ознакомьтесь с ним по ссылке.
|
||||||
error.hyperlink.solution=Найти решение
|
error.hyperlink.solution=Найти решение
|
||||||
error.lookupPermissionMessage=Cryptomator может поискать решение этой проблемы в Интернете. Для этого будет отправлен запрос о проблеме в нашу базу данных с вашего IP-адреса.
|
error.lookupPermissionMessage=Cryptomator может поискать решение этой проблемы в Интернете. Для этого будет отправлен запрос о проблеме в нашу базу данных с вашего IP-адреса.
|
||||||
error.dismiss=Отклонить
|
error.dismiss=Отклонить
|
||||||
|
|||||||
@@ -279,6 +279,7 @@ preferences.general.debugLogging=Povoliť logovanie chýb
|
|||||||
preferences.general.debugDirectory=Ukázať súbory logov
|
preferences.general.debugDirectory=Ukázať súbory logov
|
||||||
preferences.general.autoStart=Spustiť Cryptomator pri štarte systému
|
preferences.general.autoStart=Spustiť Cryptomator pri štarte systému
|
||||||
preferences.general.keychainBackend=Uložiť heslá v
|
preferences.general.keychainBackend=Uložiť heslá v
|
||||||
|
preferences.general.quickAccessService=Pridať odomknuté trezory na plochu rýchleho prístupu
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Rozhranie
|
preferences.interface=Rozhranie
|
||||||
preferences.interface.theme=Vzhľad a pocit
|
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.debugDirectory=Visa loggfiler
|
||||||
preferences.general.autoStart=Starta Cryptomator vid systemstart
|
preferences.general.autoStart=Starta Cryptomator vid systemstart
|
||||||
preferences.general.keychainBackend=Spara lösenord med
|
preferences.general.keychainBackend=Spara lösenord med
|
||||||
|
preferences.general.quickAccessService=Lägg till olåsta valv till snabbåtkomstområdet
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Gränssnitt
|
preferences.interface=Gränssnitt
|
||||||
preferences.interface.theme=Utseende & känsla
|
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.lookup=Bu hatayı araştır
|
||||||
error.hyperlink.report=Bu hatayı bildir
|
error.hyperlink.report=Bu hatayı bildir
|
||||||
error.technicalDetails=Detaylar:
|
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.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.lookupPermissionMessage=Cryptomator bu soruna çevrimiçi bir çözüm arayabilir. Bu, sorun veritabanımıza IP adresinizden bir istek gönderecektir.
|
||||||
error.dismiss=Yoksay
|
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.locationLoading=Varsayılan bulut depolama dizinleri için yerel dosya sistemi denetleniyor…
|
||||||
addvaultwizard.new.locationLabel=Depolama konumu
|
addvaultwizard.new.locationLabel=Depolama konumu
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=Diğer konum
|
addvaultwizard.new.directoryPickerLabel=Özel konum
|
||||||
addvaultwizard.new.directoryPickerButton=Seç…
|
addvaultwizard.new.directoryPickerButton=Seç…
|
||||||
addvaultwizard.new.directoryPickerTitle=Dizin Seç
|
addvaultwizard.new.directoryPickerTitle=Dizin Seç
|
||||||
addvaultwizard.new.fileAlreadyExists=Kasa adına sahip bir dosya veya dizin zaten mevcut
|
addvaultwizard.new.fileAlreadyExists=Kasa adına sahip bir dosya veya dizin zaten mevcut
|
||||||
@@ -110,7 +110,7 @@ removeVault.confirmBtn=Kasayı Sil
|
|||||||
# Change Password
|
# Change Password
|
||||||
changepassword.title=Şifreyi Değiştir
|
changepassword.title=Şifreyi Değiştir
|
||||||
changepassword.enterOldPassword="%s" için mevcut şifreyi girin
|
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
|
# Forget Password
|
||||||
forgetPassword.title=Şifreyi Unut
|
forgetPassword.title=Şifreyi Unut
|
||||||
@@ -445,7 +445,7 @@ wrongFileAlert.link=Daha fazla yardım için, ziyaret edin:
|
|||||||
vaultOptions.general=Genel
|
vaultOptions.general=Genel
|
||||||
vaultOptions.general.vaultName=Kasa Adı
|
vaultOptions.general.vaultName=Kasa Adı
|
||||||
vaultOptions.general.autoLock.lockAfterTimePart1=Boşta olduğunda kilitle
|
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ı aç
|
vaultOptions.general.unlockAfterStartup=Cryptomator başlatıldığında kasayı aç
|
||||||
vaultOptions.general.actionAfterUnlock=Başarılı kilit açmanın ardından
|
vaultOptions.general.actionAfterUnlock=Başarılı kilit açmanın ardından
|
||||||
vaultOptions.general.actionAfterUnlock.ignore=Hiçbir şey yapma
|
vaultOptions.general.actionAfterUnlock.ignore=Hiçbir şey yapma
|
||||||
@@ -541,6 +541,9 @@ updateReminder.yesOnce=Evet, tek seferlik
|
|||||||
updateReminder.yesAutomatically=Evet, otomatik olarak
|
updateReminder.yesAutomatically=Evet, otomatik olarak
|
||||||
|
|
||||||
#Dokany Support End
|
#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ç
|
dokanySupportEnd.preferencesBtn=Özellikleri Aç
|
||||||
|
|
||||||
# Share Vault
|
# 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.debugDirectory=显示日志文件
|
||||||
preferences.general.autoStart=开机自动启动
|
preferences.general.autoStart=开机自动启动
|
||||||
preferences.general.keychainBackend=存储密码方式
|
preferences.general.keychainBackend=存储密码方式
|
||||||
|
preferences.general.quickAccessService=将已解锁的保险库添加到快速访问区域
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=用户界面
|
preferences.interface=用户界面
|
||||||
preferences.interface.theme=界面外观
|
preferences.interface.theme=界面外观
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ preferences.general.debugLogging=啟用除錯日誌
|
|||||||
preferences.general.debugDirectory=顯示日誌檔
|
preferences.general.debugDirectory=顯示日誌檔
|
||||||
preferences.general.autoStart=系統啟動時同時啟動 Cryptomator
|
preferences.general.autoStart=系統啟動時同時啟動 Cryptomator
|
||||||
preferences.general.keychainBackend=儲存密碼使用
|
preferences.general.keychainBackend=儲存密碼使用
|
||||||
|
preferences.general.quickAccessService=將已解鎖的檔案庫加入快捷工具區
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=介面
|
preferences.interface=介面
|
||||||
preferences.interface.theme=外觀
|
preferences.interface.theme=外觀
|
||||||
@@ -541,6 +542,9 @@ updateReminder.yesOnce=是,僅一次
|
|||||||
updateReminder.yesAutomatically=是,自動
|
updateReminder.yesAutomatically=是,自動
|
||||||
|
|
||||||
#Dokany Support End
|
#Dokany Support End
|
||||||
|
dokanySupportEnd.title=棄用通知
|
||||||
|
dokanySupportEnd.message=對Dokany檔案系統結束支援
|
||||||
|
dokanySupportEnd.description=Cryptomator 不再支援 Dokany 檔案系統。已將您的設定調整為使用預設的檔案系統類型。您可以在偏好設定中查看預設的檔案系統類型。
|
||||||
dokanySupportEnd.preferencesBtn=開啟偏好設定
|
dokanySupportEnd.preferencesBtn=開啟偏好設定
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
Reference in New Issue
Block a user