mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-09-22 16:04:28 +00:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1bc256c6d5 | ||
|
|
f3581c5acf | ||
|
|
506827ffef |
@@ -7,9 +7,6 @@ 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.2+9'
|
JAVA_VERSION: '22.0.1+8'
|
||||||
|
|
||||||
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.2/openjfx-22.0.2_linux-x64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-x64_bin-jmods.zip'
|
||||||
openjfx-sha: 'd44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
|
openjfx-sha: 'fbb22f35951c2e049cc2554dd03c2c56b4f5adc4b2ae9248872f46175ac103d8'
|
||||||
- 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.2/openjfx-22.0.2_linux-aarch64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-aarch64_bin-jmods.zip'
|
||||||
openjfx-sha: '3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
|
openjfx-sha: '1982ad168a5e8d7cf4a9458a7d088b4f0552d0ac3f24f23fb88f8bc7e8d69a13'
|
||||||
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,java.compiler
|
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net
|
||||||
--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.2+9'
|
JAVA_VERSION: '22.0.1+8'
|
||||||
COFFEELIBS_JDK: 22
|
COFFEELIBS_JDK: 22
|
||||||
COFFEELIBS_JDK_VERSION: '22.0.2+9-0ppa1'
|
COFFEELIBS_JDK_VERSION: '22.0.1+8-0ppa1'
|
||||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-x64_bin-jmods.zip'
|
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-x64_bin-jmods.zip'
|
||||||
OPENJFX_JMODS_AMD64_HASH: 'd44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
|
OPENJFX_JMODS_AMD64_HASH: 'fbb22f35951c2e049cc2554dd03c2c56b4f5adc4b2ae9248872f46175ac103d8'
|
||||||
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-aarch64_bin-jmods.zip'
|
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-aarch64_bin-jmods.zip'
|
||||||
OPENJFX_JMODS_AARCH64_HASH: '3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
|
OPENJFX_JMODS_AARCH64_HASH: '1982ad168a5e8d7cf4a9458a7d088b4f0552d0ac3f24f23fb88f8bc7e8d69a13'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'zulu'
|
JAVA_DIST: 'zulu'
|
||||||
JAVA_VERSION: '22.0.2+9'
|
JAVA_VERSION: '22.0.1+8'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-version:
|
get-version:
|
||||||
@@ -32,20 +32,20 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: macos-12
|
- os: macos-11
|
||||||
architecture: x64
|
architecture: x64
|
||||||
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.2/openjfx-22.0.2_osx-x64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_osx-x64_bin-jmods.zip'
|
||||||
openjfx-sha: '115cb08bb59d880cfff6e51e0bf0dcc45785ed9d456b8b8425597b04da6ab3d4'
|
openjfx-sha: 'e07a11c112abbdebe7c058b44c151e1e475de748671d896aef3d73f32453c248'
|
||||||
- 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.2/openjfx-22.0.2_osx-aarch64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_osx-aarch64_bin-jmods.zip'
|
||||||
openjfx-sha: '813c6748f7c99cb7a579d48b48a087b4682b1fad1fc1a4fe5f9b21cf872b15a7'
|
openjfx-sha: '572fce94b9b09d316b960a49e3c2b5d35231ed0463e3b1c4020b8de89783b51d'
|
||||||
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,java.compiler
|
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.accessibility,jdk.management.jfr
|
||||||
--strip-native-commands
|
--strip-native-commands
|
||||||
--no-header-files
|
--no-header-files
|
||||||
--no-man-pages
|
--no-man-pages
|
||||||
@@ -137,11 +137,9 @@ 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
|
||||||
@@ -196,12 +194,9 @@ 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.2+9'
|
JAVA_VERSION: '22.0.1+8'
|
||||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_windows-x64_bin-jmods.zip'
|
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_windows-x64_bin-jmods.zip'
|
||||||
OPENJFX_JMODS_AMD64_HASH: 'f9376d200f5c5b85327d575c1ec1482e6455f19916577f7e2fc9be2f48bb29b6'
|
OPENJFX_JMODS_AMD64_HASH: 'de82e53179032a49bec005deb4438e8f261d08c4b58864a5c17e1d87286b09dd'
|
||||||
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,java.compiler
|
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.accessibility,jdk.management.jfr
|
||||||
--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,org.cryptomator.integrations.win"
|
--java-options "--enable-native-access=org.cryptomator.jfuse.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 }}\""
|
||||||
|
|||||||
+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,org.cryptomator.integrations.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" />
|
||||||
<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,org.cryptomator.integrations.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" />
|
||||||
<method v="2">
|
<method v="2">
|
||||||
<option name="Make" enabled="true" />
|
<option name="Make" enabled="true" />
|
||||||
</method>
|
</method>
|
||||||
|
|||||||
@@ -31,7 +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.route4me.com/"><img src="https://cryptomator.org/img/sponsors/route4me.svg" alt="Route4Me" height="56"></a></td>
|
<td><a href="https://www.easeus.com/"><img src="https://cryptomator.org/img/sponsors/easeus.png" alt="EaseUS" height="40"></a></td>
|
||||||
|
<td><a href="https://www.hassmann-it-forensik.de/"><img src="https://cryptomator.org/img/sponsors/hassmannitforensik.png" alt="Hassmann IT-Forensik" height="40"></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
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.2
|
JAVAFX_VERSION=22.0.1
|
||||||
JAVAFX_ARCH="x64"
|
JAVAFX_ARCH="x64"
|
||||||
JAVAFX_JMODS_SHA256='d44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
|
JAVAFX_JMODS_SHA256='fbb22f35951c2e049cc2554dd03c2c56b4f5adc4b2ae9248872f46175ac103d8'
|
||||||
if [ "${CPU_ARCH}" = "aarch64" ]; then
|
if [ "${CPU_ARCH}" = "aarch64" ]; then
|
||||||
JAVAFX_ARCH="aarch64"
|
JAVAFX_ARCH="aarch64"
|
||||||
JAVAFX_JMODS_SHA256='3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
|
JAVAFX_JMODS_SHA256='1982ad168a5e8d7cf4a9458a7d088b4f0552d0ac3f24f23fb88f8bc7e8d69a13'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# download javaFX jmods
|
# download javaFX jmods
|
||||||
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-${JAVAFX_VERSION}_linux-${JAVAFX_ARCH}_bin-jmods.zip"
|
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-21.0.1_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,java.compiler \
|
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net \
|
||||||
--strip-native-commands \
|
--strip-native-commands \
|
||||||
--no-header-files \
|
--no-header-files \
|
||||||
--no-man-pages \
|
--no-man-pages \
|
||||||
|
|||||||
@@ -74,9 +74,6 @@
|
|||||||
</content_rating>
|
</content_rating>
|
||||||
|
|
||||||
<releases>
|
<releases>
|
||||||
<release date="2024-09-17" version="1.14.0">
|
|
||||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.14.0</url>
|
|
||||||
</release>
|
|
||||||
<release date="2024-06-26" version="1.13.0">
|
<release date="2024-06-26" version="1.13.0">
|
||||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.13.0</url>
|
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.13.0</url>
|
||||||
</release>
|
</release>
|
||||||
|
|||||||
Vendored
+1
-2
@@ -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,java.compiler \
|
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net \
|
||||||
--strip-native-commands \
|
--strip-native-commands \
|
||||||
--no-header-files \
|
--no-header-files \
|
||||||
--no-man-pages \
|
--no-man-pages \
|
||||||
@@ -61,7 +61,6 @@ 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
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
embedded.provisionprofile
|
|
||||||
Vendored
-8
@@ -2,10 +2,6 @@
|
|||||||
<!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>
|
||||||
@@ -14,9 +10,5 @@
|
|||||||
<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,5 +5,4 @@ dmg/
|
|||||||
*.dmg
|
*.dmg
|
||||||
license.rtf
|
license.rtf
|
||||||
openjfx-jmods.zip
|
openjfx-jmods.zip
|
||||||
*.jmod
|
*.jmod
|
||||||
Cryptomator.entitlements
|
|
||||||
Vendored
+9
-20
@@ -1,15 +1,12 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# parse options
|
# parse options
|
||||||
usage() { echo "Usage: $0 [-s <codesign-identity>] [-t <team-identifier>]" 1>&2; exit 1; }
|
usage() { echo "Usage: $0 [-s <codesign-identity>]" 1>&2; exit 1; }
|
||||||
while getopts ":s:t:" o; do
|
while getopts ":s:" o; do
|
||||||
case "${o}" in
|
case "${o}" in
|
||||||
s)
|
s)
|
||||||
CODESIGN_IDENTITY=${OPTARG}
|
CODESIGN_IDENTITY=${OPTARG}
|
||||||
;;
|
;;
|
||||||
t)
|
|
||||||
TEAM_IDENTIFIER=${OPTARG}
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
usage
|
usage
|
||||||
;;
|
;;
|
||||||
@@ -32,15 +29,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_VERSION=22.0.2
|
JAVAFX_VERISON=22.0.1
|
||||||
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="813c6748f7c99cb7a579d48b48a087b4682b1fad1fc1a4fe5f9b21cf872b15a7"
|
JAVAFX_JMODS_SHA256="572fce94b9b09d316b960a49e3c2b5d35231ed0463e3b1c4020b8de89783b51d"
|
||||||
else
|
else
|
||||||
JAVAFX_ARCH="x64"
|
JAVAFX_ARCH="x64"
|
||||||
JAVAFX_JMODS_SHA256="115cb08bb59d880cfff6e51e0bf0dcc45785ed9d456b8b8425597b04da6ab3d4"
|
JAVAFX_JMODS_SHA256="e07a11c112abbdebe7c058b44c151e1e475de748671d896aef3d73f32453c248"
|
||||||
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"
|
||||||
|
|
||||||
@@ -55,7 +52,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)
|
||||||
@@ -79,7 +76,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,java.compiler \
|
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr \
|
||||||
--strip-native-commands \
|
--strip-native-commands \
|
||||||
--no-header-files \
|
--no-header-files \
|
||||||
--no-man-pages \
|
--no-man-pages \
|
||||||
@@ -124,7 +121,6 @@ ${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 \
|
||||||
@@ -137,11 +133,7 @@ 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}" ] && [ -n "${TEAM_IDENTIFIER}" ]; then
|
if [ -n "${CODESIGN_IDENTITY}" ]; 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
|
||||||
@@ -159,10 +151,7 @@ if [ -n "${CODESIGN_IDENTITY}" ] && [ -n "${TEAM_IDENTIFIER}" ]; then
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
echo "Codesigning ${APP_NAME}.app..."
|
echo "Codesigning ${APP_NAME}.app..."
|
||||||
cp ../${APP_NAME}.entitlements .
|
codesign --force --deep --entitlements ../${APP_NAME}.entitlements -o runtime -s ${CODESIGN_IDENTITY} ${APP_NAME}.app
|
||||||
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.2'
|
$javaFxVersion='22.0.1'
|
||||||
$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 = 'f9376d200f5c5b85327d575c1ec1482e6455f19916577f7e2fc9be2f48bb29b6'
|
$javaFxJmodsSHA256 = 'de82e53179032a49bec005deb4438e8f261d08c4b58864a5c17e1d87286b09dd'
|
||||||
$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,java.compiler,javafx.base,javafx.graphics,javafx.controls,javafx.fxml `
|
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.accessibility,jdk.management.jfr,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,org.cryptomator.integrations.win" `
|
--java-options "--enable-native-access=org.cryptomator.jfuse.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.14.0</version>
|
<version>1.13.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.7.0</cryptomator.cryptofs.version>
|
<cryptomator.cryptofs.version>2.6.9</cryptomator.cryptofs.version>
|
||||||
<cryptomator.integrations.version>1.4.0</cryptomator.integrations.version>
|
<cryptomator.integrations.version>1.3.1</cryptomator.integrations.version>
|
||||||
<cryptomator.integrations.win.version>1.3.0</cryptomator.integrations.win.version>
|
<cryptomator.integrations.win.version>1.2.5</cryptomator.integrations.win.version>
|
||||||
<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.5.0</cryptomator.integrations.linux.version>
|
<cryptomator.integrations.linux.version>1.4.5</cryptomator.integrations.linux.version>
|
||||||
<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.16.0</commons-lang3.version>
|
<commons-lang3.version>3.14.0</commons-lang3.version>
|
||||||
<dagger.version>2.51.1</dagger.version>
|
<dagger.version>2.51.1</dagger.version>
|
||||||
<easybind.version>2.2</easybind.version>
|
<easybind.version>2.2</easybind.version>
|
||||||
<guava.version>33.3.0-jre</guava.version>
|
<guava.version>33.2.1-jre</guava.version>
|
||||||
<jackson.version>2.17.2</jackson.version>
|
<jackson.version>2.17.1</jackson.version>
|
||||||
<javafx.version>22.0.2</javafx.version>
|
<javafx.version>22.0.1</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.7</logback.version>
|
<logback.version>1.5.6</logback.version>
|
||||||
<slf4j.version>2.0.16</slf4j.version>
|
<slf4j.version>2.0.13</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.11.0</junit.jupiter.version>
|
<junit.jupiter.version>5.10.2</junit.jupiter.version>
|
||||||
<mockito.version>5.12.0</mockito.version>
|
<mockito.version>5.12.0</mockito.version>
|
||||||
<hamcrest.version>3.0</hamcrest.version>
|
<hamcrest.version>2.2</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>10.0.3</dependency-check.version>
|
<dependency-check.version>9.2.0</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.3.0</junit-tree-reporter.version>
|
<junit-tree-reporter.version>1.2.1</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.1</mvn-dependency.version>
|
<mvn-dependency.version>3.7.0</mvn-dependency.version>
|
||||||
<mvn-surefire.version>3.4.0</mvn-surefire.version>
|
<mvn-surefire.version>3.3.0</mvn-surefire.version>
|
||||||
<mvn-jar.version>3.4.2</mvn-jar.version>
|
<mvn-jar.version>3.4.1</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>
|
||||||
<nvdApiKeyEnvironmentVariable>NVD_API_KEY</nvdApiKeyEnvironmentVariable>
|
<nvdApiKey>${env.NVD_API_KEY}</nvdApiKey>
|
||||||
</configuration>
|
</configuration>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ 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;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public class KeychainManager implements KeychainAccessProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void storePassphrase(String key, String displayName, CharSequence passphrase, boolean ignored) throws KeychainAccessException {
|
public void storePassphrase(String key, String displayName, CharSequence passphrase) throws KeychainAccessException {
|
||||||
getKeychainOrFail().storePassphrase(key, displayName, passphrase);
|
getKeychainOrFail().storePassphrase(key, displayName, passphrase);
|
||||||
setPassphraseStored(key, true);
|
setPassphraseStored(key, true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package org.cryptomator.common.settings;
|
||||||
|
|
||||||
|
import javafx.beans.Observable;
|
||||||
|
import javafx.beans.property.BooleanProperty;
|
||||||
|
import javafx.beans.property.IntegerProperty;
|
||||||
|
import javafx.beans.property.ObjectProperty;
|
||||||
|
import javafx.beans.property.SimpleBooleanProperty;
|
||||||
|
import javafx.beans.property.SimpleIntegerProperty;
|
||||||
|
import javafx.beans.property.SimpleObjectProperty;
|
||||||
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
|
import javafx.beans.property.StringProperty;
|
||||||
|
|
||||||
|
public class NetworkSettings {
|
||||||
|
|
||||||
|
public final ObjectProperty<ProxyMode> mode;
|
||||||
|
public final StringProperty httpProxy;
|
||||||
|
public final IntegerProperty httpPort;
|
||||||
|
public final BooleanProperty samePortProxyForHttpHttps;
|
||||||
|
public final StringProperty httpsProxy;
|
||||||
|
public final IntegerProperty httpsPort;
|
||||||
|
|
||||||
|
NetworkSettings(NetworkSettingsJson json){
|
||||||
|
this.mode = new SimpleObjectProperty<>(this, "mode", json.mode);
|
||||||
|
this.httpProxy = new SimpleStringProperty(this, "httpProxy", json.httpProxy);
|
||||||
|
this.httpPort = new SimpleIntegerProperty(this, "httpPort", json.httpPort);
|
||||||
|
this.samePortProxyForHttpHttps = new SimpleBooleanProperty(this, "samePortProxyForHttpHttps", json.samePortProxyForHttpHttps);
|
||||||
|
this.httpsProxy = new SimpleStringProperty(this, "httpsProxy", json.httpsProxy);
|
||||||
|
this.httpsPort = new SimpleIntegerProperty(this, "httpsPort", json.httpsPort);
|
||||||
|
}
|
||||||
|
|
||||||
|
NetworkSettingsJson serialized(){
|
||||||
|
var json = new NetworkSettingsJson();
|
||||||
|
json.mode = mode.get();
|
||||||
|
json.httpProxy = httpProxy.get();
|
||||||
|
json.httpPort = httpPort.get();
|
||||||
|
json.samePortProxyForHttpHttps = samePortProxyForHttpHttps.get();
|
||||||
|
json.httpsProxy = httpsProxy.get();
|
||||||
|
json.httpsPort = httpsPort.get();
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
Observable[] observables() {
|
||||||
|
return new Observable[]{mode, httpProxy, httpPort,httpsProxy,httpsPort};
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum ProxyMode {
|
||||||
|
NO,
|
||||||
|
SYSTEM,
|
||||||
|
MANUAL
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package org.cryptomator.common.settings;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
|
class NetworkSettingsJson {
|
||||||
|
|
||||||
|
@JsonProperty("mode")
|
||||||
|
NetworkSettings.ProxyMode mode = NetworkSettings.ProxyMode.NO;
|
||||||
|
|
||||||
|
@JsonProperty("httpProxy")
|
||||||
|
String httpProxy;
|
||||||
|
|
||||||
|
@JsonProperty("httpPort")
|
||||||
|
int httpPort;
|
||||||
|
|
||||||
|
@JsonProperty("samePortProxyForHttpHttps")
|
||||||
|
boolean samePortProxyForHttpHttps;
|
||||||
|
|
||||||
|
@JsonProperty(value = "httpsProxy")
|
||||||
|
String httpsProxy;
|
||||||
|
|
||||||
|
@JsonProperty("httpsPort")
|
||||||
|
int httpsPort;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -37,22 +37,17 @@ 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" : //
|
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";
|
||||||
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");
|
||||||
public final ObservableList<VaultSettings> directories;
|
public final ObservableList<VaultSettings> directories;
|
||||||
|
public final ObjectProperty<NetworkSettings> networkSettings;
|
||||||
public final BooleanProperty askedForUpdateCheck;
|
public final BooleanProperty askedForUpdateCheck;
|
||||||
public final BooleanProperty checkForUpdates;
|
public final BooleanProperty checkForUpdates;
|
||||||
public final BooleanProperty startHidden;
|
public final BooleanProperty startHidden;
|
||||||
@@ -63,8 +58,6 @@ 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;
|
||||||
@@ -92,12 +85,12 @@ public class Settings {
|
|||||||
*/
|
*/
|
||||||
Settings(SettingsJson json) {
|
Settings(SettingsJson json) {
|
||||||
this.directories = FXCollections.observableArrayList(VaultSettings::observables);
|
this.directories = FXCollections.observableArrayList(VaultSettings::observables);
|
||||||
|
this.networkSettings = new SimpleObjectProperty<>(this, "networkSettings", new NetworkSettings(json.networkSettings));
|
||||||
this.askedForUpdateCheck = new SimpleBooleanProperty(this, "askedForUpdateCheck", json.askedForUpdateCheck);
|
this.askedForUpdateCheck = new SimpleBooleanProperty(this, "askedForUpdateCheck", json.askedForUpdateCheck);
|
||||||
this.checkForUpdates = new SimpleBooleanProperty(this, "checkForUpdates", json.checkForUpdatesEnabled);
|
this.checkForUpdates = new SimpleBooleanProperty(this, "checkForUpdates", json.checkForUpdatesEnabled);
|
||||||
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);
|
||||||
@@ -113,7 +106,6 @@ 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());
|
||||||
@@ -121,12 +113,17 @@ public class Settings {
|
|||||||
migrateLegacySettings(json);
|
migrateLegacySettings(json);
|
||||||
|
|
||||||
directories.addListener(this::somethingChanged);
|
directories.addListener(this::somethingChanged);
|
||||||
|
networkSettings.get().mode.addListener(this::somethingChanged);
|
||||||
|
networkSettings.get().httpProxy.addListener(this::somethingChanged);
|
||||||
|
networkSettings.get().httpPort.addListener(this::somethingChanged);
|
||||||
|
networkSettings.get().samePortProxyForHttpHttps.addListener(this::somethingChanged);
|
||||||
|
networkSettings.get().httpsProxy.addListener(this::somethingChanged);
|
||||||
|
networkSettings.get().httpsPort.addListener(this::somethingChanged);
|
||||||
askedForUpdateCheck.addListener(this::somethingChanged);
|
askedForUpdateCheck.addListener(this::somethingChanged);
|
||||||
checkForUpdates.addListener(this::somethingChanged);
|
checkForUpdates.addListener(this::somethingChanged);
|
||||||
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);
|
||||||
@@ -142,7 +139,6 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,12 +173,12 @@ public class Settings {
|
|||||||
SettingsJson serialized() {
|
SettingsJson serialized() {
|
||||||
var json = new SettingsJson();
|
var json = new SettingsJson();
|
||||||
json.directories = directories.stream().map(VaultSettings::serialized).toList();
|
json.directories = directories.stream().map(VaultSettings::serialized).toList();
|
||||||
|
json.networkSettings = networkSettings.get().serialized();
|
||||||
json.askedForUpdateCheck = askedForUpdateCheck.get();
|
json.askedForUpdateCheck = askedForUpdateCheck.get();
|
||||||
json.checkForUpdatesEnabled = checkForUpdates.get();
|
json.checkForUpdatesEnabled = checkForUpdates.get();
|
||||||
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();
|
||||||
@@ -198,7 +194,6 @@ 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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ class SettingsJson {
|
|||||||
@JsonProperty("directories")
|
@JsonProperty("directories")
|
||||||
List<VaultSettingsJson> directories = List.of();
|
List<VaultSettingsJson> directories = List.of();
|
||||||
|
|
||||||
|
@JsonProperty("networkSettings")
|
||||||
|
NetworkSettingsJson networkSettings = new NetworkSettingsJson();
|
||||||
|
|
||||||
@JsonProperty("writtenByVersion")
|
@JsonProperty("writtenByVersion")
|
||||||
String writtenByVersion;
|
String writtenByVersion;
|
||||||
|
|
||||||
@@ -86,9 +89,4 @@ 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,10 +58,7 @@ public class SettingsProvider implements Supplier<Settings> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Settings load() {
|
private Settings load() {
|
||||||
Settings settings = env.getSettingsPath() //
|
Settings settings = env.getSettingsPath().flatMap(this::tryLoad).findFirst().orElseGet(() -> Settings.create(env));
|
||||||
.flatMap(this::tryLoad) //
|
|
||||||
.findFirst() //
|
|
||||||
.orElseGet(() -> Settings.create(env));
|
|
||||||
settings.setSaveCmd(this::scheduleSave);
|
settings.setSaveCmd(this::scheduleSave);
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ 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;
|
||||||
@@ -24,9 +23,6 @@ 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;
|
||||||
|
|
||||||
@@ -58,7 +54,6 @@ 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;
|
||||||
@@ -72,7 +67,6 @@ 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);
|
||||||
@@ -84,7 +78,7 @@ public class Vault {
|
|||||||
VaultState state, //
|
VaultState state, //
|
||||||
@Named("lastKnownException") ObjectProperty<Exception> lastKnownException, //
|
@Named("lastKnownException") ObjectProperty<Exception> lastKnownException, //
|
||||||
VaultStats stats, //
|
VaultStats stats, //
|
||||||
Mounter mounter, Settings settings) {
|
Mounter mounter) {
|
||||||
this.vaultSettings = vaultSettings;
|
this.vaultSettings = vaultSettings;
|
||||||
this.configCache = configCache;
|
this.configCache = configCache;
|
||||||
this.cryptoFileSystem = cryptoFileSystem;
|
this.cryptoFileSystem = cryptoFileSystem;
|
||||||
@@ -100,9 +94,7 @@ 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ******************************************************************************
|
// ******************************************************************************
|
||||||
@@ -162,9 +154,6 @@ 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();
|
||||||
@@ -189,7 +178,6 @@ public class Vault {
|
|||||||
mountHandle.mountObj().close();
|
mountHandle.mountObj().close();
|
||||||
mountHandle.specialCleanup().run();
|
mountHandle.specialCleanup().run();
|
||||||
} finally {
|
} finally {
|
||||||
removeFromQuickAccess();
|
|
||||||
destroyCryptoFileSystem();
|
destroyCryptoFileSystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,52 +185,6 @@ 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,13 +8,11 @@
|
|||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
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;
|
||||||
|
|
||||||
@@ -26,7 +24,6 @@ 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;
|
||||||
|
|
||||||
@@ -41,21 +38,14 @@ 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, //
|
public VaultListManager(ObservableList<Vault> vaultList, AutoLocker autoLocker, VaultComponent.Factory vaultComponentFactory, ResourceBundle resourceBundle, Settings settings) {
|
||||||
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");
|
||||||
|
|
||||||
@@ -86,15 +76,6 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ public enum FontAwesome5Icon {
|
|||||||
LOCK("\uF023"), //
|
LOCK("\uF023"), //
|
||||||
LOCK_OPEN("\uF3C1"), //
|
LOCK_OPEN("\uF3C1"), //
|
||||||
MAGIC("\uF0D0"), //
|
MAGIC("\uF0D0"), //
|
||||||
|
NETWORK("\uF6FF"), //
|
||||||
PENCIL("\uF303"), //
|
PENCIL("\uF303"), //
|
||||||
PLUS("\uF067"), //
|
PLUS("\uF067"), //
|
||||||
PRINT("\uF02F"), //
|
PRINT("\uF02F"), //
|
||||||
|
|||||||
@@ -4,9 +4,7 @@ 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;
|
||||||
@@ -32,15 +30,12 @@ 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;
|
||||||
@@ -53,7 +48,6 @@ 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;
|
||||||
@@ -66,21 +60,13 @@ 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 ServiceToSettingsConverter<>(keychainAccessProviders);
|
var keychainSettingsConverter = new KeychainProviderClassNameConverter(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() {
|
||||||
@@ -105,10 +91,6 @@ 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()));
|
||||||
@@ -134,47 +116,29 @@ public class GeneralPreferencesController implements FxController {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class NamedServiceConverter<T extends NamedServiceProvider> extends StringConverter<T> {
|
private static class KeychainProviderClassNameConverter extends StringConverter<KeychainAccessProvider> {
|
||||||
|
|
||||||
|
private final List<KeychainAccessProvider> keychainAccessProviders;
|
||||||
|
|
||||||
|
public KeychainProviderClassNameConverter(List<KeychainAccessProvider> keychainAccessProviders) {
|
||||||
|
this.keychainAccessProviders = keychainAccessProviders;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString(T namedService) {
|
public String toString(KeychainAccessProvider provider) {
|
||||||
if (namedService == null) {
|
if (provider == null) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
return namedService.getName();
|
return provider.getClass().getName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public T fromString(String string) {
|
public KeychainAccessProvider 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 services.stream().filter(provider -> provider.getClass().getName().equals(string)).findAny().orElse(null);
|
return keychainAccessProviders.stream().filter(provider -> provider.getClass().getName().equals(string)).findAny().orElse(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,159 @@
|
|||||||
|
package org.cryptomator.ui.preferences;
|
||||||
|
|
||||||
|
import org.cryptomator.common.settings.NetworkSettings;
|
||||||
|
import org.cryptomator.common.settings.Settings;
|
||||||
|
import org.cryptomator.ui.common.FxController;
|
||||||
|
import org.cryptomator.ui.controls.NumericTextField;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javafx.beans.property.IntegerProperty;
|
||||||
|
import javafx.beans.property.StringProperty;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.control.CheckBox;
|
||||||
|
import javafx.scene.control.RadioButton;
|
||||||
|
import javafx.scene.control.TextField;
|
||||||
|
import javafx.scene.control.ToggleGroup;
|
||||||
|
import javafx.scene.layout.HBox;
|
||||||
|
import javafx.scene.layout.VBox;
|
||||||
|
|
||||||
|
@PreferencesScoped
|
||||||
|
public class NetworkPreferencesController implements FxController {
|
||||||
|
|
||||||
|
private final Settings settings;
|
||||||
|
|
||||||
|
public ToggleGroup proxyToggleGroup;
|
||||||
|
public RadioButton noProxyBtn;
|
||||||
|
public RadioButton systemSettingsBtn;
|
||||||
|
public RadioButton manualProxyBtn;
|
||||||
|
public VBox manualProxyBox;
|
||||||
|
public HBox httpsProxyBox;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
public TextField httpProxy;
|
||||||
|
public NumericTextField httpPort;
|
||||||
|
public CheckBox samePortProxyForHttpHttps;
|
||||||
|
public TextField httpsProxy;
|
||||||
|
public NumericTextField httpsPort;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
NetworkPreferencesController(Settings settings) {
|
||||||
|
this.settings = settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
public void initialize() {
|
||||||
|
|
||||||
|
initializeTextFieldWithValidation(httpProxy, settings.networkSettings.get().httpProxy);
|
||||||
|
initializeTextFieldWithValidation(httpPort, settings.networkSettings.get().httpPort);
|
||||||
|
initializeTextFieldWithValidation(httpsProxy, settings.networkSettings.get().httpsProxy);
|
||||||
|
initializeTextFieldWithValidation(httpsPort, settings.networkSettings.get().httpsPort);
|
||||||
|
|
||||||
|
samePortProxyForHttpHttps.selectedProperty().bindBidirectional(settings.networkSettings.get().samePortProxyForHttpHttps);
|
||||||
|
httpsProxyBox.setDisable(settings.networkSettings.get().samePortProxyForHttpHttps.get());
|
||||||
|
samePortProxyForHttpHttps.selectedProperty().addListener((_, _, newValue) -> {
|
||||||
|
httpsProxyBox.setDisable(newValue);
|
||||||
|
});
|
||||||
|
|
||||||
|
switch (settings.networkSettings.get().mode.get()) {
|
||||||
|
case NO -> {
|
||||||
|
proxyToggleGroup.selectToggle(noProxyBtn);
|
||||||
|
manualProxyBox.setDisable(true);
|
||||||
|
}
|
||||||
|
case SYSTEM -> {
|
||||||
|
proxyToggleGroup.selectToggle(systemSettingsBtn);
|
||||||
|
manualProxyBox.setDisable(true);
|
||||||
|
}
|
||||||
|
case MANUAL -> {
|
||||||
|
proxyToggleGroup.selectToggle(manualProxyBtn);
|
||||||
|
manualProxyBox.setDisable(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyToggleGroup.selectedToggleProperty().addListener((_, _, newValue) -> {
|
||||||
|
if (newValue != null) {
|
||||||
|
manualProxyBox.setDisable(!newValue.equals(manualProxyBtn));
|
||||||
|
|
||||||
|
if (newValue.equals(noProxyBtn)) {
|
||||||
|
settings.networkSettings.get().mode.set(NetworkSettings.ProxyMode.NO);
|
||||||
|
} else if (newValue.equals(systemSettingsBtn)) {
|
||||||
|
settings.networkSettings.get().mode.set(NetworkSettings.ProxyMode.SYSTEM);
|
||||||
|
} else if (newValue.equals(manualProxyBtn)) {
|
||||||
|
settings.networkSettings.get().mode.set(NetworkSettings.ProxyMode.MANUAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initializeTextFieldWithValidation(TextField textField, StringProperty property) {
|
||||||
|
textField.setText(property.get());
|
||||||
|
|
||||||
|
textField.textProperty().addListener((_, _, newValue) -> {
|
||||||
|
if (isValidHttpProxy(newValue)) {
|
||||||
|
textField.setStyle("-fx-border-color: green; -fx-border-width: 2px; -fx-border-radius: 3px; -fx-padding: 3px;");
|
||||||
|
} else {
|
||||||
|
textField.setStyle("-fx-border-color: red; -fx-border-width: 2px; -fx-border-radius: 3px; -fx-padding: 3px;");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
textField.focusedProperty().addListener((_, oldValue, newValue) -> {
|
||||||
|
if (!newValue) {
|
||||||
|
String text = textField.getText();
|
||||||
|
if (isValidHttpProxy(text)) {
|
||||||
|
property.set(text);
|
||||||
|
textField.setStyle("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isValidHttpProxy(String text) {
|
||||||
|
if (text == null || text.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
String regex = "^([\\w.-]+)$";
|
||||||
|
return text.matches(regex);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initializeTextFieldWithValidation(TextField textField, IntegerProperty property) {
|
||||||
|
textField.setText(String.valueOf(property.get()));
|
||||||
|
|
||||||
|
textField.textProperty().addListener((observable, oldValue, newValue) -> {
|
||||||
|
if (isValidPort(newValue)) {
|
||||||
|
textField.setStyle("-fx-border-color: green; -fx-border-width: 2px; -fx-border-radius: 3px; -fx-padding: 3px;");
|
||||||
|
} else {
|
||||||
|
textField.setStyle("-fx-border-color: red; -fx-border-width: 2px; -fx-border-radius: 3px; -fx-padding: 3px;");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
textField.focusedProperty().addListener((_, _, newValue) -> {
|
||||||
|
if (!newValue) {
|
||||||
|
String text = textField.getText();
|
||||||
|
if (isValidPort(text)) {
|
||||||
|
property.set(Integer.parseInt(text));
|
||||||
|
textField.setText(removeLeadingZeros(textField.getText()));
|
||||||
|
textField.setStyle("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String removeLeadingZeros(String str) {
|
||||||
|
if (str == null || str.isEmpty()) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
return str.replaceFirst("^0+(?!$)", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isValidPort(String text) {
|
||||||
|
if (text == null || text.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
int value = Integer.parseInt(text);
|
||||||
|
return value >= 1024 && value <= 8888;
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -30,8 +30,6 @@ 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;
|
||||||
|
|||||||
@@ -31,13 +31,14 @@ public class PreferencesController implements FxController {
|
|||||||
public Tab updatesTab;
|
public Tab updatesTab;
|
||||||
public Tab contributeTab;
|
public Tab contributeTab;
|
||||||
public Tab aboutTab;
|
public Tab aboutTab;
|
||||||
|
public Tab networkTab;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public PreferencesController(Environment env, @PreferencesWindow Stage window, ObjectProperty<SelectedPreferencesTab> selectedTabProperty, UpdateChecker updateChecker) {
|
public PreferencesController(Environment env, @PreferencesWindow Stage window, ObjectProperty<SelectedPreferencesTab> selectedTabProperty, UpdateChecker updateChecker) {
|
||||||
this.env = env;
|
this.env = env;
|
||||||
this.window = window;
|
this.window = window;
|
||||||
this.selectedTabProperty = selectedTabProperty;
|
this.selectedTabProperty = selectedTabProperty;
|
||||||
this.updateAvailable = updateChecker.updateAvailableProperty();
|
this.updateAvailable = updateChecker.latestVersionProperty().isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
@@ -63,6 +64,7 @@ public class PreferencesController implements FxController {
|
|||||||
case UPDATES -> updatesTab;
|
case UPDATES -> updatesTab;
|
||||||
case CONTRIBUTE -> contributeTab;
|
case CONTRIBUTE -> contributeTab;
|
||||||
case ABOUT -> aboutTab;
|
case ABOUT -> aboutTab;
|
||||||
|
case NETWORK -> networkTab;
|
||||||
case ANY -> updateAvailable.get() ? updatesTab : generalTab;
|
case ANY -> updateAvailable.get() ? updatesTab : generalTab;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,4 +89,9 @@ abstract class PreferencesModule {
|
|||||||
@FxControllerKey(AboutController.class)
|
@FxControllerKey(AboutController.class)
|
||||||
abstract FxController bindAboutController(AboutController controller);
|
abstract FxController bindAboutController(AboutController controller);
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@IntoMap
|
||||||
|
@FxControllerKey(NetworkPreferencesController.class)
|
||||||
|
abstract FxController bindNetworkPreferencesController(NetworkPreferencesController controller);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,4 +35,8 @@ public enum SelectedPreferencesTab {
|
|||||||
* Show about tab
|
* Show about tab
|
||||||
*/
|
*/
|
||||||
ABOUT,
|
ABOUT,
|
||||||
|
/**
|
||||||
|
* Show network tab
|
||||||
|
*/
|
||||||
|
NETWORK
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
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"
|
||||||
@@ -44,6 +46,14 @@
|
|||||||
<fx:include source="preferences_updates.fxml"/>
|
<fx:include source="preferences_updates.fxml"/>
|
||||||
</content>
|
</content>
|
||||||
</Tab>
|
</Tab>
|
||||||
|
<Tab fx:id="network" id="NETWORK" text="%preferences.network">
|
||||||
|
<graphic>
|
||||||
|
<FontAwesome5IconView glyph="NETWORK"/>
|
||||||
|
</graphic>
|
||||||
|
<content>
|
||||||
|
<fx:include source="preferences_network.fxml"/>
|
||||||
|
</content>
|
||||||
|
</Tab>
|
||||||
<Tab fx:id="contributeTab" id="CONTRIBUTE" text="%preferences.contribute">
|
<Tab fx:id="contributeTab" id="CONTRIBUTE" text="%preferences.contribute">
|
||||||
<graphic>
|
<graphic>
|
||||||
<FontAwesome5IconView glyph="HEART"/>
|
<FontAwesome5IconView glyph="HEART"/>
|
||||||
|
|||||||
@@ -30,10 +30,6 @@
|
|||||||
<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">
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.Insets?>
|
||||||
|
<?import javafx.scene.layout.VBox?>
|
||||||
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.control.RadioButton?>
|
||||||
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
<?import javafx.scene.control.TextField?>
|
||||||
|
|
||||||
|
<?import javafx.scene.control.CheckBox?>
|
||||||
|
<?import javafx.scene.control.ToggleGroup?>
|
||||||
|
<?import org.cryptomator.ui.controls.NumericTextField?>
|
||||||
|
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||||
|
xmlns="http://javafx.com/javafx"
|
||||||
|
fx:controller="org.cryptomator.ui.preferences.NetworkPreferencesController"
|
||||||
|
spacing="24">
|
||||||
|
<fx:define>
|
||||||
|
<ToggleGroup fx:id="proxyToggleGroup"/>
|
||||||
|
</fx:define>
|
||||||
|
<padding>
|
||||||
|
<Insets topRightBottomLeft="24"/>
|
||||||
|
</padding>
|
||||||
|
<VBox>
|
||||||
|
<Label text="Configure Proxy Access to the Internet"/>
|
||||||
|
<RadioButton fx:id="noProxyBtn" text="No Proxy" toggleGroup="${proxyToggleGroup}" />
|
||||||
|
<RadioButton fx:id="systemSettingsBtn" text="Use system proxy settings" toggleGroup="${proxyToggleGroup}" />
|
||||||
|
<RadioButton fx:id="manualProxyBtn" text="Manual proxy configuration" toggleGroup="${proxyToggleGroup}" />
|
||||||
|
<VBox fx:id="manualProxyBox">
|
||||||
|
<padding>
|
||||||
|
<Insets left="24"/>
|
||||||
|
</padding>
|
||||||
|
<HBox spacing="12" alignment="CENTER_LEFT">
|
||||||
|
<Label text="HTTP Proxy" minWidth="90" />
|
||||||
|
<TextField fx:id="httpProxy" HBox.hgrow="ALWAYS" />
|
||||||
|
<Label text="Port"/>
|
||||||
|
<NumericTextField fx:id="httpPort" prefWidth="60" promptText="0" />
|
||||||
|
</HBox>
|
||||||
|
<CheckBox fx:id="samePortProxyForHttpHttps" text="Also use this proxy for HTTPS"/>
|
||||||
|
<HBox fx:id="httpsProxyBox" spacing="12" alignment="CENTER_LEFT">
|
||||||
|
<Label text="HTTPS Proxy" minWidth="90"/>
|
||||||
|
<TextField fx:id="httpsProxy" HBox.hgrow="ALWAYS" />
|
||||||
|
<Label text="Port"/>
|
||||||
|
<NumericTextField fx:id="httpsPort" prefWidth="60" promptText="0"/>
|
||||||
|
</HBox>
|
||||||
|
</VBox>
|
||||||
|
|
||||||
|
</VBox>
|
||||||
|
|
||||||
|
|
||||||
|
</VBox>
|
||||||
@@ -288,7 +288,6 @@ 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
|
||||||
@@ -329,6 +328,8 @@ preferences.updates.lastUpdateCheck.daysAgo=%s days ago
|
|||||||
preferences.updates.lastUpdateCheck.hoursAgo=%s hours ago
|
preferences.updates.lastUpdateCheck.hoursAgo=%s hours ago
|
||||||
preferences.updates.checkFailed=Looking for updates failed. Please check your internet connection or try again later.
|
preferences.updates.checkFailed=Looking for updates failed. Please check your internet connection or try again later.
|
||||||
preferences.updates.upToDate=Cryptomator is up-to-date.
|
preferences.updates.upToDate=Cryptomator is up-to-date.
|
||||||
|
## Network
|
||||||
|
preferences.network=Network
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Support Us
|
preferences.contribute=Support Us
|
||||||
|
|||||||
@@ -173,15 +173,10 @@ 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 الخاص بك لديه ترخيص غير صالح. الرجاء إبلاغ مسؤول مركز لترقية أو تجديد الترخيص.
|
||||||
@@ -310,9 +305,6 @@ 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=تحديثات
|
||||||
@@ -320,13 +312,6 @@ 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=ادعمنا
|
||||||
@@ -346,32 +331,13 @@ 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
|
||||||
@@ -389,8 +355,6 @@ 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 لحماية ملفاتك. إذا كنت بحاجة إلى أية مساعدة، تحقق من دليل وتعليمات الإستخدام:
|
||||||
@@ -400,17 +364,14 @@ 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=تحديد موقع الملف المشفر
|
||||||
@@ -426,9 +387,6 @@ 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=كيفية تشفير الملفات
|
||||||
@@ -444,31 +402,24 @@ 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=تغيير كلمة المرور
|
||||||
@@ -478,12 +429,9 @@ 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":
|
||||||
@@ -491,23 +439,12 @@ 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=أدخل كلمة مرور جديدة
|
||||||
@@ -522,46 +459,13 @@ 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
|
|
||||||
@@ -136,7 +136,7 @@ unlock.success.revealBtn=Laufwerk anzeigen
|
|||||||
## Failure
|
## Failure
|
||||||
unlock.error.customPath.message=Tresor kann nicht in benutzerdefinierten Pfad eingehängt werden
|
unlock.error.customPath.message=Tresor kann nicht in benutzerdefinierten Pfad eingehängt werden
|
||||||
unlock.error.customPath.description.notSupported=Wenn du weiterhin den benutzerdefinierten Pfad verwenden möchtest, öffne die allgemeinen Einstellungen und wähle einen unterstützten Laufwerkstyp. Andernfalls gehe zu den Tresor-Optionen und wähle einen unterstützten Einhängepunkt.
|
unlock.error.customPath.description.notSupported=Wenn du weiterhin den benutzerdefinierten Pfad verwenden möchtest, öffne die allgemeinen Einstellungen und wähle einen unterstützten Laufwerkstyp. Andernfalls gehe zu den Tresor-Optionen und wähle einen unterstützten Einhängepunkt.
|
||||||
unlock.error.customPath.description.notExists=Der benutzerdefinierte Einhängepfad existiert nicht. Erstelle ihn entweder in deinem lokalen Dateisystem oder ändere ihn in den Tresor-Optionen.
|
unlock.error.customPath.description.notExists=Der benutzerdefinierte Einhängepunkt existiert nicht. Erstelle ihn in deinem lokalen Dateisystem oder ändere ihn in den Tresor-Optionen.
|
||||||
unlock.error.customPath.description.inUse=Der Laufwerksbuchstabe oder benutzerdefinierte Einhängepunkt „%s“ wird bereits verwendet.
|
unlock.error.customPath.description.inUse=Der Laufwerksbuchstabe oder benutzerdefinierte Einhängepunkt „%s“ wird bereits verwendet.
|
||||||
unlock.error.customPath.description.hideawayNotDir=Die temporäre, versteckte Datei „%3$s“, die für das Entsperren verwendet wurde, konnte nicht entfernt werden. Bitte überprüfe die Datei und lösche sie manuell.
|
unlock.error.customPath.description.hideawayNotDir=Die temporäre, versteckte Datei „%3$s“, die für das Entsperren verwendet wurde, konnte nicht entfernt werden. Bitte überprüfe die Datei und lösche sie manuell.
|
||||||
unlock.error.customPath.description.couldNotBeCleaned=Dein Tresor konnte nicht in den Pfad „%s“ eingehängt werden. Bitte versuche es erneut oder wähle einen anderen Pfad aus.
|
unlock.error.customPath.description.couldNotBeCleaned=Dein Tresor konnte nicht in den Pfad „%s“ eingehängt werden. Bitte versuche es erneut oder wähle einen anderen Pfad aus.
|
||||||
@@ -287,7 +287,6 @@ 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
|
||||||
@@ -542,9 +541,6 @@ updateReminder.yesOnce=Ja, einmalig
|
|||||||
updateReminder.yesAutomatically=Ja, automatisch
|
updateReminder.yesAutomatically=Ja, automatisch
|
||||||
|
|
||||||
#Dokany Support End
|
#Dokany Support End
|
||||||
dokanySupportEnd.title=Hinweis: nicht mehr verwendet
|
|
||||||
dokanySupportEnd.message=Ende der Unterstützung für Dokany
|
|
||||||
dokanySupportEnd.description=Der Laufwerkstyp Dokany wird von Cryptomator nicht weiter unterstützt. Deine Einstellungen wurden angepasst, dass der Standard-Laufwerkstyp verwendet wird. Du kannst den Standardtyp in den Einstellungen anzeigen lassen.
|
|
||||||
dokanySupportEnd.preferencesBtn=Einstellungen öffnen
|
dokanySupportEnd.preferencesBtn=Einstellungen öffnen
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -287,7 +287,6 @@ 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,7 +287,6 @@ 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,7 +92,6 @@ lock.forced.retryBtn=تلاش مجدد
|
|||||||
|
|
||||||
# Preferences
|
# Preferences
|
||||||
## General
|
## General
|
||||||
preferences.general.quickAccessService=خزانه های قفل نشده را به دسترسی سریع اضافه کنید
|
|
||||||
## Interface
|
## Interface
|
||||||
## Volume
|
## Volume
|
||||||
## Updates
|
## Updates
|
||||||
@@ -120,7 +119,6 @@ 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
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ addvaultwizard.new.nameInstruction=Pangalanan ang vault
|
|||||||
addvaultwizard.new.namePrompt=Pangalan ng Vault
|
addvaultwizard.new.namePrompt=Pangalan ng Vault
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=Saan maaaring ilagay ng Cryptomator ang mga encrypted files ng iyong vault?
|
addvaultwizard.new.locationInstruction=Saan maaaring ilagay ng Cryptomator ang mga encrypted files ng iyong vault?
|
||||||
addvaultwizard.new.locationLoading=Sinusuri ang lokal na filesystem para sa mga default na direktoryo ng cloud storage…
|
|
||||||
addvaultwizard.new.locationLabel=Storage location
|
addvaultwizard.new.locationLabel=Storage location
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=Custom Location
|
addvaultwizard.new.directoryPickerLabel=Custom Location
|
||||||
@@ -142,8 +141,6 @@ 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.restartRequired.description=Baguhin ang uri ng volume sa mga opsyon sa vault o i-restart ang Cryptomator.
|
|
||||||
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
|
||||||
@@ -158,22 +155,12 @@ hub.receive.message=Pinoproseso ang tugon…
|
|||||||
hub.receive.description=Ang Cryptomator ay tumatanggap at nagpoproseso ng tugon mula sa Hub. Mangyaring maghintay.
|
hub.receive.description=Ang Cryptomator ay tumatanggap at nagpoproseso ng tugon mula sa Hub. Mangyaring maghintay.
|
||||||
### Register Device
|
### Register Device
|
||||||
hub.register.message=Bagong Device
|
hub.register.message=Bagong Device
|
||||||
hub.register.description=Ito ang unang Hub access mula sa device na ito. Mangyaring irehistro ito gamit ang iyong Account Key.
|
|
||||||
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
|
|
||||||
hub.register.legacy.description=Ito ang unang Hub access mula sa device na ito. Mangyaring irehistro ito.
|
|
||||||
### 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.
|
||||||
@@ -287,7 +274,6 @@ preferences.general.debugLogging=Paganahin ang pag-log ng debug
|
|||||||
preferences.general.debugDirectory=Magbunyag ng mga log file
|
preferences.general.debugDirectory=Magbunyag ng mga log file
|
||||||
preferences.general.autoStart=Ilunsad ang Cryptomator sa pagsisimula ng system
|
preferences.general.autoStart=Ilunsad ang Cryptomator sa pagsisimula ng system
|
||||||
preferences.general.keychainBackend=Mag-imbak ng mga password gamit ang
|
preferences.general.keychainBackend=Mag-imbak ng mga password gamit ang
|
||||||
preferences.general.quickAccessService=Magdagdag ng mga naka-unlock na vault sa lugar ng mabilisang pag-access
|
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Interface
|
preferences.interface=Interface
|
||||||
preferences.interface.theme=Tingnan at Pakiramdam
|
preferences.interface.theme=Tingnan at Pakiramdam
|
||||||
@@ -304,11 +290,9 @@ preferences.interface.showMinimizeButton=Ipakita ang pindutan ng minimize
|
|||||||
preferences.interface.showTrayIcon=Ipakita ang icon ng tray (kailangan i-restart)
|
preferences.interface.showTrayIcon=Ipakita ang icon ng tray (kailangan i-restart)
|
||||||
## Volume
|
## Volume
|
||||||
preferences.volume=Virtual Drive
|
preferences.volume=Virtual Drive
|
||||||
preferences.volume.type=Default na Uri ng Dami
|
|
||||||
preferences.volume.type.automatic=Awtomatiko
|
preferences.volume.type.automatic=Awtomatiko
|
||||||
preferences.volume.docsTooltip=Buksan ang dokumentasyon para matuto pa tungkol sa iba't ibang uri ng volume.
|
preferences.volume.docsTooltip=Buksan ang dokumentasyon para matuto pa tungkol sa iba't ibang uri ng volume.
|
||||||
preferences.volume.fuseRestartRequired=Upang mailapat ang mga pagbabago, kailangang i-restart ang Cryptomator.
|
preferences.volume.fuseRestartRequired=Upang mailapat ang mga pagbabago, kailangang i-restart ang Cryptomator.
|
||||||
preferences.volume.tcp.port=Default na TCP Port
|
|
||||||
preferences.volume.supportedFeatures=Sinusuportahan ng napiling uri ng volume ang mga sumusunod na tampok:
|
preferences.volume.supportedFeatures=Sinusuportahan ng napiling uri ng volume ang mga sumusunod na tampok:
|
||||||
preferences.volume.feature.mountAuto=Awtomatikong pagpili ng mount point
|
preferences.volume.feature.mountAuto=Awtomatikong pagpili ng mount point
|
||||||
preferences.volume.feature.mountToDir=Custom na direktoryo bilang mount point
|
preferences.volume.feature.mountToDir=Custom na direktoryo bilang mount point
|
||||||
@@ -321,13 +305,6 @@ 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
|
|
||||||
preferences.updates.checkFailed=Nabigo ang paghahanap ng mga update. Pakisuri ang iyong koneksyon sa internet o subukang muli sa ibang pagkakataon.
|
|
||||||
preferences.updates.upToDate=Ang Cryptomator ay napapanahon.
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Suportahan Kami
|
preferences.contribute=Suportahan Kami
|
||||||
@@ -401,7 +378,6 @@ main.vaultDetail.unlockBtn=I-unlock…
|
|||||||
main.vaultDetail.unlockNowBtn=I-unlock Ngayon
|
main.vaultDetail.unlockNowBtn=I-unlock Ngayon
|
||||||
main.vaultDetail.optionsBtn=Mga Pagpipilian sa Vault
|
main.vaultDetail.optionsBtn=Mga Pagpipilian sa Vault
|
||||||
main.vaultDetail.passwordSavedInKeychain=Na-save ang password
|
main.vaultDetail.passwordSavedInKeychain=Na-save ang password
|
||||||
main.vaultDetail.share=Ibahagi…
|
|
||||||
### Unlocked
|
### Unlocked
|
||||||
main.vaultDetail.unlockedStatus=NAKA-unlock
|
main.vaultDetail.unlockedStatus=NAKA-unlock
|
||||||
main.vaultDetail.accessLocation=Ang mga nilalaman ng iyong vault ay maa-access dito:
|
main.vaultDetail.accessLocation=Ang mga nilalaman ng iyong vault ay maa-access dito:
|
||||||
@@ -456,7 +432,6 @@ vaultOptions.general.startHealthCheckBtn=Simulan ang Health Check
|
|||||||
|
|
||||||
## Mount
|
## Mount
|
||||||
vaultOptions.mount=Pag-mount
|
vaultOptions.mount=Pag-mount
|
||||||
vaultOptions.mount.info=Buksan ang mga kagustuhan sa virtual drive upang baguhin ang mga default na setting.
|
|
||||||
vaultOptions.mount.readonly=Basahin lamang
|
vaultOptions.mount.readonly=Basahin lamang
|
||||||
vaultOptions.mount.customMountFlags=Mga custom na naka-mount na flag
|
vaultOptions.mount.customMountFlags=Mga custom na naka-mount na flag
|
||||||
vaultOptions.mount.winDriveLetterOccupied=inookupahan
|
vaultOptions.mount.winDriveLetterOccupied=inookupahan
|
||||||
@@ -466,10 +441,6 @@ vaultOptions.mount.mountPoint.driveLetter=Gumamit ng nakatalagang drive letter
|
|||||||
vaultOptions.mount.mountPoint.custom=Gamitin ang napiling direktoryo
|
vaultOptions.mount.mountPoint.custom=Gamitin ang napiling direktoryo
|
||||||
vaultOptions.mount.mountPoint.directoryPickerButton=Mamili…
|
vaultOptions.mount.mountPoint.directoryPickerButton=Mamili…
|
||||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Pumili ng isang direktoryo
|
vaultOptions.mount.mountPoint.directoryPickerTitle=Pumili ng isang direktoryo
|
||||||
vaultOptions.mount.volumeType.default=Default (%s)
|
|
||||||
vaultOptions.mount.volumeType.restartRequired=Upang magamit ang uri ng volume na ito, kailangang i-restart ang Cryptomator.
|
|
||||||
vaultOptions.mount.volume.tcp.port=TCP Port
|
|
||||||
vaultOptions.mount.volume.type=Uri ng Dami
|
|
||||||
## Master Key
|
## Master Key
|
||||||
vaultOptions.masterkey=Password
|
vaultOptions.masterkey=Password
|
||||||
vaultOptions.masterkey.changePasswordBtn=Palitan ANG password
|
vaultOptions.masterkey.changePasswordBtn=Palitan ANG password
|
||||||
@@ -542,27 +513,6 @@ updateReminder.yesOnce=Oo, Minsan
|
|||||||
updateReminder.yesAutomatically=Oo, Awtomatiko
|
updateReminder.yesAutomatically=Oo, Awtomatiko
|
||||||
|
|
||||||
#Dokany Support End
|
#Dokany Support End
|
||||||
dokanySupportEnd.title=Paunawa sa paghinto sa paggamit
|
|
||||||
dokanySupportEnd.message=Pagtatapos ng suporta para sa Dokany
|
|
||||||
dokanySupportEnd.description=Ang uri ng volume na Dokany ay hindi na sinusuportahan ng Cryptomator. Isinasaayos ang iyong mga setting upang magamit ang default na uri ng volume ngayon. Maaari mong tingnan ang default na uri sa mga kagustuhan.
|
|
||||||
dokanySupportEnd.preferencesBtn=Buksan ang Mga Kagustuhan
|
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.instruction.1=1. Ibahagi ang access ng naka-encrypt na folder ng vault sa pamamagitan ng cloud storage.
|
|
||||||
shareVault.instruction.2=2. Ibahagi ang password ng vault sa isang secure na paraan.
|
|
||||||
shareVault.remarkBestPractices=Para sa higit pang impormasyon, tingnan ang mga mungkahi sa pinakamahuhusay na kagawian sa aming mga doc.
|
|
||||||
shareVault.docsTooltip=Buksan ang dokumentasyon para matuto pa tungkol sa pagbabahagi ng mga vault.
|
|
||||||
shareVault.hubAd.description=Ang ligtas na paraan upang magtrabaho sa mga koponan
|
|
||||||
shareVault.hubAd.keyManagement=• Zero-knowledge key management
|
|
||||||
shareVault.hubAd.authentication=• Malakas na pagpapatunay
|
|
||||||
shareVault.hubAd.encryption=• End-to-end na pag-encrypt
|
|
||||||
shareVault.visitHub=Pagbisita ang Cryptomator Hub
|
|
||||||
|
|
||||||
shareVault.hub.message=Paano ibahagi ang Hub vault
|
|
||||||
shareVault.hub.description=Upang maibahagi ang nilalaman ng vault sa isa pang miyembro ng koponan, kailangan mong magsagawa ng dalawang hakbang:
|
|
||||||
shareVault.hub.instruction.1=1. Ibahagi ang access ng naka-encrypt na folder ng vault sa pamamagitan ng cloud storage.
|
|
||||||
shareVault.hub.instruction.2=2. Magbigay ng access sa miyembro ng team sa Cryptomator Hub.
|
|
||||||
shareVault.hub.openHub=Buksan ang Cryptomator Hub
|
|
||||||
@@ -287,7 +287,6 @@ 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,7 +287,6 @@ 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
|
||||||
@@ -332,7 +331,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 un certificato di supporter. È come una chiave di licenza, ma per persone fantastiche che utilizzano software libero. ;-)
|
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.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,7 +287,6 @@ 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=外観
|
||||||
@@ -542,8 +541,6 @@ 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,10 +60,6 @@ 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=비밀번호가 없으면 데이터에 접근할 수 없습니다. 비밀번호를 잊었을 때를 대비한 복구 키를 원하십니까?
|
||||||
@@ -132,21 +128,13 @@ 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 소유자에게 승인을 요청하세요.
|
||||||
@@ -174,7 +162,6 @@ 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"의 비밀번호를 입력하십시요.
|
||||||
@@ -220,23 +207,11 @@ 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=문제 해결이 성공적으로 완료되었습니다
|
||||||
@@ -268,7 +243,6 @@ 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=마운트할 드라이브 문자
|
||||||
@@ -280,13 +254,6 @@ 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=후원하기
|
||||||
@@ -359,7 +326,6 @@ 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의 내용은 다음의 경로에서 접근할 수 있습니다:
|
||||||
@@ -419,7 +385,6 @@ 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,7 +287,6 @@ 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
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ generic.button.next=ਅੱਗੇ
|
|||||||
generic.button.print=ਪਰਿੰਟ ਕਰੋ
|
generic.button.print=ਪਰਿੰਟ ਕਰੋ
|
||||||
|
|
||||||
# Error
|
# Error
|
||||||
error.message=ਇੱਕ ਤਰੁੱਟੀ ਆਈ ਹੈ
|
|
||||||
|
|
||||||
# Defaults
|
# Defaults
|
||||||
defaults.vault.vaultName=ਵਾਲਟ
|
defaults.vault.vaultName=ਵਾਲਟ
|
||||||
@@ -319,7 +318,5 @@ quit.lockAndQuitBtn=ਲਾਕ ਕਰੋ ਤੇ ਬਾਹਰ ਜਾਓ
|
|||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
#Dokany Support End
|
||||||
dokanySupportEnd.title=ਬਰਤਰਫ਼ੀ ਨੋਟਿਸ
|
|
||||||
dokanySupportEnd.preferencesBtn=ਪਸੰਦੀਦਾ ਖੋਲ੍ਹੋ
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -287,7 +287,6 @@ 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
|
||||||
@@ -326,8 +325,6 @@ 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
|
||||||
@@ -542,9 +539,6 @@ 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,7 +287,6 @@ 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,7 +287,6 @@ 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
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ generic.button.print=Tipărește
|
|||||||
|
|
||||||
# Error
|
# Error
|
||||||
error.message=A apărut o eroare
|
error.message=A apărut o eroare
|
||||||
error.description=Cryptomator nu se aștepta să se întâmple asta. Puteți căuta soluții existente pentru această eroare. În cazul in care nu s-a raportat încă, nu ezitați să faceți acest lucru.
|
error.description=Cryptomatorul nu se aștepta să se întâmple asta. Puteți căuta soluții existente pentru această eroare. În cazul in care nu s-a raportat încă, nu ezitați să faceți acest lucru.
|
||||||
error.hyperlink.lookup=Caută soluții pentru această eroare
|
error.hyperlink.lookup=Caută soluții pentru această eroare
|
||||||
error.hyperlink.report=Raportează această eroare
|
error.hyperlink.report=Raportează această eroare
|
||||||
error.technicalDetails=Detalii:
|
error.technicalDetails=Detalii:
|
||||||
@@ -141,9 +141,6 @@ unlock.error.customPath.description.hideawayNotDir=Fișierul ascuns, temporar "%
|
|||||||
unlock.error.customPath.description.couldNotBeCleaned=Seiful dvs. nu a putut fi montat în locația ''%s''. Vă rugăm încercați din nou sau alegeți o altă locație.
|
unlock.error.customPath.description.couldNotBeCleaned=Seiful dvs. nu a putut fi montat în locația ''%s''. Vă rugăm încercați din nou sau alegeți o altă locație.
|
||||||
unlock.error.customPath.description.notEmptyDir=Locația personalizată ''%s'' nu este un dosar gol. Vă rugăm alegeți un dosar gol și încercați din nou.
|
unlock.error.customPath.description.notEmptyDir=Locația personalizată ''%s'' nu este un dosar gol. Vă rugăm alegeți un dosar gol și încercați din nou.
|
||||||
unlock.error.customPath.description.generic=Ați selectat o locație de montare personalizată pentru acest seif, dar utilizarea acesteia a eșuat cu mesajul: %2$s
|
unlock.error.customPath.description.generic=Ați selectat o locație de montare personalizată pentru acest seif, dar utilizarea acesteia a eșuat cu mesajul: %2$s
|
||||||
unlock.error.restartRequired.message=Seiful nu a fost putut deschis
|
|
||||||
unlock.error.restartRequired.description=Schimbați tipul de volum din opțiunile de seif sau reporniți Cryptomator.
|
|
||||||
unlock.error.title=Deblocarea "%s" a eșuat
|
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=Cheia dispozitivului nu a putut fi accesată
|
hub.noKeychain.message=Cheia dispozitivului nu a putut fi accesată
|
||||||
hub.noKeychain.description=Pentru a debloca seifele de tip Hub, este necesară o cheie a dispozitivului, care este securizată prin intermediul unui keychain. Pentru a continua, activați „%s” și selectați un keychain în preferințe.
|
hub.noKeychain.description=Pentru a debloca seifele de tip Hub, este necesară o cheie a dispozitivului, care este securizată prin intermediul unui keychain. Pentru a continua, activați „%s” și selectați un keychain în preferințe.
|
||||||
@@ -157,21 +154,11 @@ hub.receive.message=Se procesează răspunsul…
|
|||||||
hub.receive.description=In acest moment Criptomatorul primește și procesează răspunsul de la Hub. Vă rugăm să așteptați.
|
hub.receive.description=In acest moment Criptomatorul primește și procesează răspunsul de la Hub. Vă rugăm să așteptați.
|
||||||
### Register Device
|
### Register Device
|
||||||
hub.register.message=Dispozitiv nou
|
hub.register.message=Dispozitiv nou
|
||||||
hub.register.description=Acesta este primul acces la Hub de pe acest dispozitiv. Vă rugăm să îl înregistrați folosind cheia de cont.
|
|
||||||
hub.register.nameLabel=Numele dispozitivului
|
hub.register.nameLabel=Numele dispozitivului
|
||||||
hub.register.invalidAccountKeyLabel=Cheie cont nevalidă
|
|
||||||
hub.register.registerBtn=Înregistrare
|
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
hub.register.legacy.occupiedMsg=Numele este deja în uz
|
|
||||||
hub.register.legacy.description=Acesta este primul acces la Hub de pe acest dispozitiv. Vă rugăm să îl înregistrați folosind cheia de cont.
|
|
||||||
### Registration Success
|
### Registration Success
|
||||||
hub.registerSuccess.message=Dispozitiv înregistrat
|
|
||||||
hub.registerSuccess.description=Dispozitivul dvs. a fost înregistrat cu succes. Acum puteți continua să deblocați seiful dvs.
|
|
||||||
hub.registerSuccess.unlockBtn=Deblocați
|
hub.registerSuccess.unlockBtn=Deblocați
|
||||||
hub.registerSuccess.legacy.description=Pentru a accesa seiful dispozitivului trebuie să fie autorizat în plus de către proprietarul seifului.
|
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=Înregistrarea dispozitivului a eșuat
|
|
||||||
hub.registerFailed.description.generic=.
|
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Acces respins
|
hub.unauthorized.message=Acces respins
|
||||||
hub.unauthorized.description=Dispozitivul dvs. nu a fost autorizat să acceseze acest seif. Solicitați proprietarului seifului să va autorizeze accesul.
|
hub.unauthorized.description=Dispozitivul dvs. nu a fost autorizat să acceseze acest seif. Solicitați proprietarului seifului să va autorizeze accesul.
|
||||||
@@ -285,7 +272,6 @@ preferences.general.debugLogging=Activează jurnalul de depanare
|
|||||||
preferences.general.debugDirectory=Dezvăluie fişierele jurnal
|
preferences.general.debugDirectory=Dezvăluie fişierele jurnal
|
||||||
preferences.general.autoStart=Lansați Cryptomator la pornirea sistemului
|
preferences.general.autoStart=Lansați Cryptomator la pornirea sistemului
|
||||||
preferences.general.keychainBackend=Salvează parolele cu
|
preferences.general.keychainBackend=Salvează parolele cu
|
||||||
preferences.general.quickAccessService=Adăugați seifuri deblocate în zona de acces rapid
|
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Interfață
|
preferences.interface=Interfață
|
||||||
preferences.interface.theme=Aspect
|
preferences.interface.theme=Aspect
|
||||||
@@ -302,11 +288,9 @@ preferences.interface.showMinimizeButton=Arată butonul de minimizare
|
|||||||
preferences.interface.showTrayIcon=Arată tray icon (necesită repornire)
|
preferences.interface.showTrayIcon=Arată tray icon (necesită repornire)
|
||||||
## Volume
|
## Volume
|
||||||
preferences.volume=Unitate virtuală
|
preferences.volume=Unitate virtuală
|
||||||
preferences.volume.type=Tip volum implicit
|
|
||||||
preferences.volume.type.automatic=Automat
|
preferences.volume.type.automatic=Automat
|
||||||
preferences.volume.docsTooltip=Deschideți documentația pentru a afla mai multe despre tipurile diferite de unități de stocare.
|
preferences.volume.docsTooltip=Deschideți documentația pentru a afla mai multe despre tipurile diferite de unități de stocare.
|
||||||
preferences.volume.fuseRestartRequired=Cryptomator trebuie repornit pentru ca modificările să fie aplicate.
|
preferences.volume.fuseRestartRequired=Cryptomator trebuie repornit pentru ca modificările să fie aplicate.
|
||||||
preferences.volume.tcp.port=Port TCP implicit
|
|
||||||
preferences.volume.supportedFeatures=Tipul de volum selectat suportă următoarele caracteristici:
|
preferences.volume.supportedFeatures=Tipul de volum selectat suportă următoarele caracteristici:
|
||||||
preferences.volume.feature.mountAuto=Selectare punct de montare automat
|
preferences.volume.feature.mountAuto=Selectare punct de montare automat
|
||||||
preferences.volume.feature.mountToDir=Director personalizat ca punct de montaj
|
preferences.volume.feature.mountToDir=Director personalizat ca punct de montaj
|
||||||
@@ -319,12 +303,6 @@ preferences.updates.currentVersion=Versiunea actuală: %s
|
|||||||
preferences.updates.autoUpdateCheck=Verificare automată actualizări
|
preferences.updates.autoUpdateCheck=Verificare automată actualizări
|
||||||
preferences.updates.checkNowBtn=Verifică acum
|
preferences.updates.checkNowBtn=Verifică acum
|
||||||
preferences.updates.updateAvailable=Actualizare la versiunea %s disponibilă.
|
preferences.updates.updateAvailable=Actualizare la versiunea %s disponibilă.
|
||||||
preferences.updates.lastUpdateCheck=Ultima verificare: %s
|
|
||||||
preferences.updates.lastUpdateCheck.never=niciodată
|
|
||||||
preferences.updates.lastUpdateCheck.recently=recent
|
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=acum %s zile
|
|
||||||
preferences.updates.checkFailed=Căutarea actualizărilor a eșuat. Verificați conexiunea la internet sau încercați din nou mai târziu.
|
|
||||||
preferences.updates.upToDate=Cryptomator este actualizat.
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Susțineți-ne
|
preferences.contribute=Susțineți-ne
|
||||||
@@ -452,7 +430,6 @@ vaultOptions.general.startHealthCheckBtn=Începe verificarea de sănătate
|
|||||||
|
|
||||||
## Mount
|
## Mount
|
||||||
vaultOptions.mount=Montare
|
vaultOptions.mount=Montare
|
||||||
vaultOptions.mount.info=Deschideți preferințele drive-ului virtual pentru a modifica setările implicite.
|
|
||||||
vaultOptions.mount.readonly=Doar citire
|
vaultOptions.mount.readonly=Doar citire
|
||||||
vaultOptions.mount.customMountFlags=Atribute de montare personalizate
|
vaultOptions.mount.customMountFlags=Atribute de montare personalizate
|
||||||
vaultOptions.mount.winDriveLetterOccupied=ocupat
|
vaultOptions.mount.winDriveLetterOccupied=ocupat
|
||||||
@@ -462,9 +439,6 @@ vaultOptions.mount.mountPoint.driveLetter=Utilizați litera de unitate atribuit
|
|||||||
vaultOptions.mount.mountPoint.custom=Folosește directorul ales
|
vaultOptions.mount.mountPoint.custom=Folosește directorul ales
|
||||||
vaultOptions.mount.mountPoint.directoryPickerButton=Alege…
|
vaultOptions.mount.mountPoint.directoryPickerButton=Alege…
|
||||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Alege un director
|
vaultOptions.mount.mountPoint.directoryPickerTitle=Alege un director
|
||||||
vaultOptions.mount.volumeType.default=Implicit (%s)
|
|
||||||
vaultOptions.mount.volumeType.restartRequired=Cryptomator trebuie repornit pentru ca modificările să fie aplicate.
|
|
||||||
vaultOptions.mount.volume.tcp.port=Portul TCP
|
|
||||||
## Master Key
|
## Master Key
|
||||||
vaultOptions.masterkey=Parolă
|
vaultOptions.masterkey=Parolă
|
||||||
vaultOptions.masterkey.changePasswordBtn=Schimbați parola
|
vaultOptions.masterkey.changePasswordBtn=Schimbați parola
|
||||||
@@ -537,22 +511,6 @@ updateReminder.yesOnce=Da, o dată
|
|||||||
updateReminder.yesAutomatically=Da, automat
|
updateReminder.yesAutomatically=Da, automat
|
||||||
|
|
||||||
#Dokany Support End
|
#Dokany Support End
|
||||||
dokanySupportEnd.description=Tipul de volum Dokany nu mai este suportat de Criptomator. Setările dvs. sunt ajustate pentru a utiliza acum tipul de volum implicit. Puteți vizualiza tipul implicit din preferințe.
|
|
||||||
dokanySupportEnd.preferencesBtn=Deschideţi preferinţele
|
dokanySupportEnd.preferencesBtn=Deschideţi preferinţele
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Partajare seif
|
|
||||||
shareVault.message=Doriți să vă împărtășiți seiful cu ceilalți?
|
|
||||||
shareVault.description=Fiți întotdeauna precauți când împărtășiți seiful cu alte persoane. Pe scurt, urmați acești pași:
|
|
||||||
shareVault.instruction.1=1. Partajarea accesului la folderul criptat din seif prin stocarea în cloud.
|
|
||||||
shareVault.instruction.2=2. Partajează parola seifului într-un mod sigur.
|
|
||||||
shareVault.remarkBestPractices=Pentru mai multe informații, consultați cele mai bune practici sugerate în documentele noastre.
|
|
||||||
shareVault.hubAd.description=Modul securizat de a lucra în echipe
|
|
||||||
shareVault.hubAd.keyManagement=• Managementul cheie al cunoașterii spațiale
|
|
||||||
shareVault.hubAd.authentication=• Autentificare puternică
|
|
||||||
shareVault.hubAd.encryption=• Criptare în ambele părți
|
|
||||||
shareVault.visitHub=Vizitează Hub pentru Criptomator
|
|
||||||
|
|
||||||
shareVault.hub.description=Pentru a partaja conținutul de seif cu un alt membru al echipei, trebuie să efectuați doi pași:
|
|
||||||
shareVault.hub.instruction.1=1. Partajarea accesului la folderul criptat din seif prin stocarea în cloud.
|
|
||||||
shareVault.hub.instruction.2=2. Acordă acces membrului echipei din hub-ul Cryptomator.
|
|
||||||
@@ -15,8 +15,8 @@ generic.button.next=Далее
|
|||||||
generic.button.print=Печать
|
generic.button.print=Печать
|
||||||
|
|
||||||
# Error
|
# Error
|
||||||
error.message=Произошла ошибка
|
error.message=Ошибка: %s
|
||||||
error.description=Произошла непредвиденная ситуация. Попробуйте найти уже имеющиеся решения этой ошибки. Если об этой ошибке ещё не сообщали, то сделайте это сами.
|
error.description=Произошла непредвиденная ситуация. Попробуйте найти уже имеющиеся решения этой ошибки. Если об этой ошибке ещё не сообщали, то сообщите вы.
|
||||||
error.hyperlink.lookup=Найти ошибку
|
error.hyperlink.lookup=Найти ошибку
|
||||||
error.hyperlink.report=Сообщить об ошибке
|
error.hyperlink.report=Сообщить об ошибке
|
||||||
error.technicalDetails=Подробности:
|
error.technicalDetails=Подробности:
|
||||||
@@ -47,7 +47,7 @@ addvaultwizard.new.nameInstruction=Выберите имя для хранили
|
|||||||
addvaultwizard.new.namePrompt=Имя хранилища
|
addvaultwizard.new.namePrompt=Имя хранилища
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=Где Cryptomator должен хранить зашифрованные файлы хранилища?
|
addvaultwizard.new.locationInstruction=Где Cryptomator должен хранить зашифрованные файлы хранилища?
|
||||||
addvaultwizard.new.locationLoading=Поиск в локальной файловой системе облачных каталогов по умолчанию…
|
addvaultwizard.new.locationLoading=Проверка локальной файловой системы на наличие облачных каталогов по умолчанию…
|
||||||
addvaultwizard.new.locationLabel=Место хранения
|
addvaultwizard.new.locationLabel=Место хранения
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=Другое место
|
addvaultwizard.new.directoryPickerLabel=Другое место
|
||||||
@@ -92,7 +92,7 @@ addvault.new.readme.accessLocation.2=Это место доступа к ваш
|
|||||||
addvault.new.readme.accessLocation.3=Любые файлы, добавленные в этот том, будут зашифрованы Cryptomator. Вы можете работать с ним как с любым другим диском или папкой. Здесь отображается только расшифрованное содержимое тома, ваши файлы остаются зашифрованными на жёстком диске постоянно.
|
addvault.new.readme.accessLocation.3=Любые файлы, добавленные в этот том, будут зашифрованы Cryptomator. Вы можете работать с ним как с любым другим диском или папкой. Здесь отображается только расшифрованное содержимое тома, ваши файлы остаются зашифрованными на жёстком диске постоянно.
|
||||||
addvault.new.readme.accessLocation.4=Этот файл можно удалить.
|
addvault.new.readme.accessLocation.4=Этот файл можно удалить.
|
||||||
## Existing
|
## Existing
|
||||||
addvaultwizard.existing.title=Добавить имеющееся хранилище
|
addvaultwizard.existing.title=Добавить существующее хранилище
|
||||||
addvaultwizard.existing.instruction=Выберите файл "vault.cryptomator" существующего хранилища. Если имеется только файл "masterkey.cryptomator", выберите его.
|
addvaultwizard.existing.instruction=Выберите файл "vault.cryptomator" существующего хранилища. Если имеется только файл "masterkey.cryptomator", выберите его.
|
||||||
addvaultwizard.existing.chooseBtn=Выбрать…
|
addvaultwizard.existing.chooseBtn=Выбрать…
|
||||||
addvaultwizard.existing.filePickerTitle=Выберите файл хранилища
|
addvaultwizard.existing.filePickerTitle=Выберите файл хранилища
|
||||||
@@ -104,7 +104,7 @@ addvaultwizard.success.unlockNow=Разблокировать
|
|||||||
# Remove Vault
|
# Remove Vault
|
||||||
removeVault.title=Удалить "%s"
|
removeVault.title=Удалить "%s"
|
||||||
removeVault.message=Удалить хранилище?
|
removeVault.message=Удалить хранилище?
|
||||||
removeVault.description=Cryptomator просто забудет это хранилище. Позже вы можете добавить его снова. Зашифрованные файлы не будут удалены с диска.
|
removeVault.description=Cryptomator просто забудет это хранилище. Позже вы можете добавить его снова. Зашифрованные файлы не будут удалены с жёсткого диска.
|
||||||
removeVault.confirmBtn=Удалить хранилище
|
removeVault.confirmBtn=Удалить хранилище
|
||||||
|
|
||||||
# Change Password
|
# Change Password
|
||||||
@@ -129,18 +129,18 @@ unlock.chooseMasterkey.description=Не удалось найти файл ма
|
|||||||
unlock.chooseMasterkey.filePickerTitle=Выберите файл MasterKey
|
unlock.chooseMasterkey.filePickerTitle=Выберите файл MasterKey
|
||||||
unlock.chooseMasterkey.filePickerMimeDesc=Мастер-ключ Cryptomator
|
unlock.chooseMasterkey.filePickerMimeDesc=Мастер-ключ Cryptomator
|
||||||
## Success
|
## Success
|
||||||
unlock.success.message=Успешно разблокировано
|
unlock.success.message=Разблокировка прошла успешно
|
||||||
unlock.success.description=Содержимое хранилища "%s" теперь доступно через его точку монтирования.
|
unlock.success.description=Разблокировка "%s" успешно выполнена! Доступ в хранилище открыт через его виртуальный диск.
|
||||||
unlock.success.rememberChoice=Запомнить выбор и больше не спрашивать
|
unlock.success.rememberChoice=Запомнить выбор и больше не спрашивать
|
||||||
unlock.success.revealBtn=Показать диск
|
unlock.success.revealBtn=Показать диск
|
||||||
## Failure
|
## Failure
|
||||||
unlock.error.customPath.message=Невозможно смонтировать хранилище к указанному пути
|
unlock.error.customPath.message=Невозможно смонтировать хранилище по указанному пути
|
||||||
unlock.error.customPath.description.notSupported=Если вы хотите продолжить использование указанного пути, перейдите в настройки и выберите тип тома, который его поддерживает. В противном случае перейдите в настройки хранилища и выберите поддерживаемую точку монтирования.
|
unlock.error.customPath.description.notSupported=Если вы хотите продолжить использование пользовательского пути, перейдите в настройки и выберите тип тома, который его поддерживает. В противном случае, перейдите в настройки хранилища и выберите поддерживаемую точку монтирования.
|
||||||
unlock.error.customPath.description.notExists=Указанный путь монтирования не существует. Либо создайте его в локальной файловой системе, либо измените в параметрах хранилища.
|
unlock.error.customPath.description.notExists=Пользовательский путь монтирования не существует. Либо создайте его в локальной файловой системе, либо измените в параметрах хранилища.
|
||||||
unlock.error.customPath.description.inUse=Буква диска или путь монтирования "%s" уже используется.
|
unlock.error.customPath.description.inUse=Буква диска или путь монтирования "%s" уже используется.
|
||||||
unlock.error.customPath.description.hideawayNotDir=Временный скрытый файл "%3$s" используется для разблокировки и не может быть удалён. Проверьте файл и затем удалите его вручную.
|
unlock.error.customPath.description.hideawayNotDir=Временный скрытый файл "%3$s" используется для разблокировки и не может быть удалён. Проверьте файл и затем удалите его вручную.
|
||||||
unlock.error.customPath.description.couldNotBeCleaned=Хранилище не может быть смонтировано к пути "%s". Попробуйте ещё раз или выберите другой путь.
|
unlock.error.customPath.description.couldNotBeCleaned=Хранилище не может быть смонтировано к пути "%s". Попробуйте ещё раз или выберите другой путь.
|
||||||
unlock.error.customPath.description.notEmptyDir=Путь монтирования "%s" - не пустая папка. Выберите пустую папку и повторите попытку.
|
unlock.error.customPath.description.notEmptyDir=Путь монтирования "%s" — не пустая папка. Выберите пустую папку и повторите попытку.
|
||||||
unlock.error.customPath.description.generic=Выбранный вами путь монтирования для хранилища не удалось использовать: %2$s
|
unlock.error.customPath.description.generic=Выбранный вами путь монтирования для хранилища не удалось использовать: %2$s
|
||||||
unlock.error.restartRequired.message=Невозможно разблокировать хранилище
|
unlock.error.restartRequired.message=Невозможно разблокировать хранилище
|
||||||
unlock.error.restartRequired.description=Измените тип тома в настройках хранилища или перезапустите Cryptomator.
|
unlock.error.restartRequired.description=Измените тип тома в настройках хранилища или перезапустите Cryptomator.
|
||||||
@@ -205,7 +205,7 @@ migration.start.remarkUndone=Это обновление не может быт
|
|||||||
migration.start.remarkVersions=Старые версии Cryptomator не смогут открыть обновлённое хранилище.
|
migration.start.remarkVersions=Старые версии Cryptomator не смогут открыть обновлённое хранилище.
|
||||||
migration.start.remarkCanRun=Вы должны быть уверены, что все устройства, с которых у вас есть доступ к хранилищу, могут запускать эту версию Cryptomator.
|
migration.start.remarkCanRun=Вы должны быть уверены, что все устройства, с которых у вас есть доступ к хранилищу, могут запускать эту версию Cryptomator.
|
||||||
migration.start.remarkSynced=Вы должны быть уверены, что хранилище перед обновлением полностью синхронизировано на этом и на других ваших устройствах.
|
migration.start.remarkSynced=Вы должны быть уверены, что хранилище перед обновлением полностью синхронизировано на этом и на других ваших устройствах.
|
||||||
migration.start.confirm=Информация выше прочитана и понятна
|
migration.start.confirm=Мной прочитана и понята информация выше
|
||||||
## Run
|
## Run
|
||||||
migration.run.enterPassword=Введите пароль для "%s"
|
migration.run.enterPassword=Введите пароль для "%s"
|
||||||
migration.run.startMigrationBtn=Перенести хранилище
|
migration.run.startMigrationBtn=Перенести хранилище
|
||||||
@@ -233,7 +233,7 @@ health.intro.text=Проверка состояния это набор тест
|
|||||||
health.intro.remarkSync=Убедитесь, что все устройства полностью синхронизированы, это решает большинство проблем.
|
health.intro.remarkSync=Убедитесь, что все устройства полностью синхронизированы, это решает большинство проблем.
|
||||||
health.intro.remarkFix=Не все проблемы могут быть исправлены.
|
health.intro.remarkFix=Не все проблемы могут быть исправлены.
|
||||||
health.intro.remarkBackup=Если данные повреждены, помочь может только резервная копия.
|
health.intro.remarkBackup=Если данные повреждены, помочь может только резервная копия.
|
||||||
health.intro.affirmation=Информация выше прочитана и понятна
|
health.intro.affirmation=Информация выше мною прочитана и понятна
|
||||||
## Start Failure
|
## Start Failure
|
||||||
health.fail.header=Ошибка при загрузке конфигурации хранилища
|
health.fail.header=Ошибка при загрузке конфигурации хранилища
|
||||||
health.fail.ioError=Ошибка при доступе и чтении конфигурационного файла.
|
health.fail.ioError=Ошибка при доступе и чтении конфигурационного файла.
|
||||||
@@ -254,7 +254,7 @@ health.check.detail.checkFinishedAndFound=Проверка завершена.
|
|||||||
health.check.detail.checkFailed=Проверка прервана из-за ошибки.
|
health.check.detail.checkFailed=Проверка прервана из-за ошибки.
|
||||||
health.check.detail.checkCancelled=Проверка была отменена.
|
health.check.detail.checkCancelled=Проверка была отменена.
|
||||||
health.check.detail.listFilters.label=Фильтр
|
health.check.detail.listFilters.label=Фильтр
|
||||||
health.check.detail.fixAllSpecificBtn=Исправить все
|
health.check.detail.fixAllSpecificBtn=Исправить все типы
|
||||||
health.check.exportBtn=Экспорт отчёта
|
health.check.exportBtn=Экспорт отчёта
|
||||||
## Result view
|
## Result view
|
||||||
health.result.severityFilter.all=Уровень - все
|
health.result.severityFilter.all=Уровень - все
|
||||||
@@ -266,9 +266,9 @@ health.result.severityTip.good=Уровень: Хорошо\nКорректна
|
|||||||
health.result.severityTip.info=Уровень: Информация\nСтруктура хранилища не повреждена, предложено исправление.
|
health.result.severityTip.info=Уровень: Информация\nСтруктура хранилища не повреждена, предложено исправление.
|
||||||
health.result.severityTip.warn=Уровень: Предупреждение\nСтруктура хранилища повреждена, срочно требуется исправление.
|
health.result.severityTip.warn=Уровень: Предупреждение\nСтруктура хранилища повреждена, срочно требуется исправление.
|
||||||
health.result.severityTip.crit=Уровень: Критический\nСтруктура хранилища повреждена, обнаружена потеря данных.
|
health.result.severityTip.crit=Уровень: Критический\nСтруктура хранилища повреждена, обнаружена потеря данных.
|
||||||
health.result.fixStateFilter.all=Исправление - Все
|
health.result.fixStateFilter.all=Исправить состояние - Все
|
||||||
health.result.fixStateFilter.fixable=Возможно исправление
|
health.result.fixStateFilter.fixable=Возможно исправление
|
||||||
health.result.fixStateFilter.notFixable=Неисправимо
|
health.result.fixStateFilter.notFixable=Исправление невозможно
|
||||||
health.result.fixStateFilter.fixing=Исправление…
|
health.result.fixStateFilter.fixing=Исправление…
|
||||||
health.result.fixStateFilter.fixed=Исправлено
|
health.result.fixStateFilter.fixed=Исправлено
|
||||||
health.result.fixStateFilter.fixFailed=Исправить не удалось
|
health.result.fixStateFilter.fixFailed=Исправить не удалось
|
||||||
@@ -287,7 +287,6 @@ 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=Отображение
|
||||||
@@ -325,7 +324,7 @@ preferences.updates.lastUpdateCheck=Последняя проверка: %s
|
|||||||
preferences.updates.lastUpdateCheck.never=никогда
|
preferences.updates.lastUpdateCheck.never=никогда
|
||||||
preferences.updates.lastUpdateCheck.recently=недавно
|
preferences.updates.lastUpdateCheck.recently=недавно
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=%s дн. назад
|
preferences.updates.lastUpdateCheck.daysAgo=%s дн. назад
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=%s ч назад
|
preferences.updates.lastUpdateCheck.hoursAgo=%s часов назад
|
||||||
preferences.updates.checkFailed=Ошибка поиска обновлений. Проверьте подключение к Интернету и повторите попытку.
|
preferences.updates.checkFailed=Ошибка поиска обновлений. Проверьте подключение к Интернету и повторите попытку.
|
||||||
preferences.updates.upToDate=У вас новейшая версия Cryptomator.
|
preferences.updates.upToDate=У вас новейшая версия Cryptomator.
|
||||||
|
|
||||||
@@ -391,7 +390,7 @@ 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.menuItemNew=Новое хранилище...
|
||||||
main.vaultlist.addVaultBtn.menuItemExisting=Имеющееся хранилище...
|
main.vaultlist.addVaultBtn.menuItemExisting=Существующее хранилище...
|
||||||
## Vault Detail
|
## Vault Detail
|
||||||
### Welcome
|
### Welcome
|
||||||
main.vaultDetail.welcomeOnboarding=Благодарим за выбор Cryptomator для защиты ваших файлов. Если требуется помощь, ознакомьтесь с документацией по началу работы:
|
main.vaultDetail.welcomeOnboarding=Благодарим за выбор Cryptomator для защиты ваших файлов. Если требуется помощь, ознакомьтесь с документацией по началу работы:
|
||||||
@@ -416,7 +415,7 @@ main.vaultDetail.throughput.mbps=%.1f МиБ/с
|
|||||||
main.vaultDetail.stats=Статистика хранилища
|
main.vaultDetail.stats=Статистика хранилища
|
||||||
main.vaultDetail.locateEncryptedFileBtn=Найти зашифрованный файл
|
main.vaultDetail.locateEncryptedFileBtn=Найти зашифрованный файл
|
||||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=Выберите файл из своего хранилища, чтобы найти его зашифрованный дубликат
|
main.vaultDetail.locateEncryptedFileBtn.tooltip=Выберите файл из своего хранилища, чтобы найти его зашифрованный дубликат
|
||||||
main.vaultDetail.encryptedPathsCopied=Пути скопированы в буфер обмена.
|
main.vaultDetail.encryptedPathsCopied=Пути скопированы в буфер обмена!
|
||||||
main.vaultDetail.filePickerTitle=Выберите файл внутри хранилища
|
main.vaultDetail.filePickerTitle=Выберите файл внутри хранилища
|
||||||
### Missing
|
### Missing
|
||||||
main.vaultDetail.missing.info=Cryptomator не смог найти хранилище по этому пути.
|
main.vaultDetail.missing.info=Cryptomator не смог найти хранилище по этому пути.
|
||||||
@@ -427,7 +426,7 @@ 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.info=Произошла ошибка при загрузке хранилища с диска.
|
||||||
main.vaultDetail.error.reload=Перезагрузить
|
main.vaultDetail.error.reload=Перезагрузить
|
||||||
main.vaultDetail.error.windowTitle=Ошибка загрузки хранилища
|
main.vaultDetail.error.windowTitle=Ошибка загрузки хранилища
|
||||||
|
|
||||||
@@ -456,7 +455,7 @@ vaultOptions.general.startHealthCheckBtn=Начать проверку сост
|
|||||||
|
|
||||||
## Mount
|
## Mount
|
||||||
vaultOptions.mount=Монтирование
|
vaultOptions.mount=Монтирование
|
||||||
vaultOptions.mount.info=Откройте настройки виртуального диска, чтобы изменить параметры по умолчанию.
|
vaultOptions.mount.info=Откройте настройки виртуального диска, чтобы изменить настройки по умолчанию.
|
||||||
vaultOptions.mount.readonly=Только чтение
|
vaultOptions.mount.readonly=Только чтение
|
||||||
vaultOptions.mount.customMountFlags=Другие флаги монтирования
|
vaultOptions.mount.customMountFlags=Другие флаги монтирования
|
||||||
vaultOptions.mount.winDriveLetterOccupied=занято
|
vaultOptions.mount.winDriveLetterOccupied=занято
|
||||||
@@ -474,7 +473,7 @@ vaultOptions.mount.volume.type=Тип тома
|
|||||||
vaultOptions.masterkey=Пароль
|
vaultOptions.masterkey=Пароль
|
||||||
vaultOptions.masterkey.changePasswordBtn=Изменить пароль
|
vaultOptions.masterkey.changePasswordBtn=Изменить пароль
|
||||||
vaultOptions.masterkey.forgetSavedPasswordBtn=Забыть сохранённый пароль
|
vaultOptions.masterkey.forgetSavedPasswordBtn=Забыть сохранённый пароль
|
||||||
vaultOptions.masterkey.recoveryKeyExplanation=При утере пароля вернуть доступ к хранилищу можно только с помощью ключа восстановления.
|
vaultOptions.masterkey.recoveryKeyExplanation=При утере пароля восстановить доступ к хранилищу можно только с помощью ключа восстановления.
|
||||||
vaultOptions.masterkey.showRecoveryKeyBtn=Показать ключ восстановления
|
vaultOptions.masterkey.showRecoveryKeyBtn=Показать ключ восстановления
|
||||||
vaultOptions.masterkey.recoverPasswordBtn=Сброс пароля
|
vaultOptions.masterkey.recoverPasswordBtn=Сброс пароля
|
||||||
## Hub
|
## Hub
|
||||||
@@ -486,7 +485,7 @@ vaultOptions.hub.convertBtn=Преобразовать в хранилище с
|
|||||||
## Display Recovery Key
|
## Display Recovery Key
|
||||||
recoveryKey.display.title=Показать ключ восстановления
|
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":
|
||||||
recoveryKey.display.StorageHints=Храните его в надёжном месте, например:\n • в диспетчере паролей\n • на флеш-накопителе USB\n • распечатанным на бумаге
|
recoveryKey.display.StorageHints=Храните его в надёжном месте, например:\n • в диспетчере паролей\n • на флеш-накопителе USB\n • распечатанным на бумаге
|
||||||
## Reset Password
|
## Reset Password
|
||||||
@@ -562,7 +561,7 @@ shareVault.hubAd.encryption=• Сквозное шифрование
|
|||||||
shareVault.visitHub=Посетить хаб Cryptomator
|
shareVault.visitHub=Посетить хаб Cryptomator
|
||||||
|
|
||||||
shareVault.hub.message=Как поделиться хранилищем в хабе
|
shareVault.hub.message=Как поделиться хранилищем в хабе
|
||||||
shareVault.hub.description=Чтобы поделиться содержимым хранилища с другим членом команды, выполните два шага:
|
shareVault.hub.description=Чтобы поделиться содержимым хранилища с другим членом команды:
|
||||||
shareVault.hub.instruction.1=1. Делитесь доступом к зашифрованной папке хранилища через облако.
|
shareVault.hub.instruction.1=1. Делитесь доступом к зашифрованной папке хранилища через облако.
|
||||||
shareVault.hub.instruction.2=2. Предоставьте доступ члену команды в хабе Cryptomator.
|
shareVault.hub.instruction.2=2. Предоставьте доступ члену команды в хабе Cryptomator.
|
||||||
shareVault.hub.openHub=Открыть хаб Cryptomator
|
shareVault.hub.openHub=Открыть хаб Cryptomator
|
||||||
@@ -279,7 +279,6 @@ 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
|
||||||
|
|||||||
@@ -71,7 +71,6 @@ unlock.unlockBtn=Odkleni
|
|||||||
### Waiting
|
### Waiting
|
||||||
### Receive Key
|
### Receive Key
|
||||||
### Register Device
|
### Register Device
|
||||||
hub.register.registerBtn=Registracija
|
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
### Registration Success
|
### Registration Success
|
||||||
hub.registerSuccess.unlockBtn=Odkleni
|
hub.registerSuccess.unlockBtn=Odkleni
|
||||||
|
|||||||
@@ -287,7 +287,6 @@ 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 mevcut bir çözüm bulduk. Lütfen aşağıdaki bağlantıya bir göz atın.
|
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.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=Özel konum
|
addvaultwizard.new.directoryPickerLabel=Diğer 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 unuttuğum takdirde verilerime erişemeyeceğimi anlıyorum
|
changepassword.finalConfirmation=Şifremi unutursam verilerime ulaşamayacağımın farkındayım
|
||||||
|
|
||||||
# Forget Password
|
# Forget Password
|
||||||
forgetPassword.title=Şifreyi Unut
|
forgetPassword.title=Şifreyi Unut
|
||||||
@@ -287,7 +287,6 @@ preferences.general.debugLogging=Hata ayıklama günlüğünü etkinleştir
|
|||||||
preferences.general.debugDirectory=Kayıt dosyalarını göster
|
preferences.general.debugDirectory=Kayıt dosyalarını göster
|
||||||
preferences.general.autoStart=Cryptomator'u sistem başlangıcında çalıştır
|
preferences.general.autoStart=Cryptomator'u sistem başlangıcında çalıştır
|
||||||
preferences.general.keychainBackend=Şifreleri şununla depola:
|
preferences.general.keychainBackend=Şifreleri şununla depola:
|
||||||
preferences.general.quickAccessService=Hızlı erişim alanına kilidi açılmış kasaları ekle
|
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Arayüz
|
preferences.interface=Arayüz
|
||||||
preferences.interface.theme=Görünüş ve Davranış
|
preferences.interface.theme=Görünüş ve Davranış
|
||||||
@@ -446,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=dakika
|
vaultOptions.general.autoLock.lockAfterTimePart2=dk
|
||||||
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
|
||||||
@@ -542,9 +541,6 @@ 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
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ error.hyperlink.lookup=Дізнатися більше про цю помилк
|
|||||||
error.hyperlink.report=Повідомити про цю помилку
|
error.hyperlink.report=Повідомити про цю помилку
|
||||||
error.technicalDetails=Докладно:
|
error.technicalDetails=Докладно:
|
||||||
error.existingSolutionDescription=Cryptomator не очікував, що це станеться. Але ми знайшли спосіб розв'язання цієї проблеми. Ознайомтесь з ним, будь ласка, далі.
|
error.existingSolutionDescription=Cryptomator не очікував, що це станеться. Але ми знайшли спосіб розв'язання цієї проблеми. Ознайомтесь з ним, будь ласка, далі.
|
||||||
error.hyperlink.solution=Ознайомтесь із рішенням
|
error.hyperlink.solution=Знайдіть рішення
|
||||||
error.lookupPermissionMessage=Cryptomator може спробувати знайти спосіб розв'язання цієї проблеми онлайн. Це передбачає відправку запиту до нашої бази даних проблем з вашої ІР.
|
error.lookupPermissionMessage=Cryptomator може спробувати знайти спосіб розв'язання цієї проблеми онлайн. Це передбачає відправку запиту до нашої бази даних проблем з вашої ІР.
|
||||||
error.dismiss=Відхилити
|
error.dismiss=Відхилити
|
||||||
error.lookUpSolution=Пошук рішення
|
error.lookUpSolution=Пошук рішення
|
||||||
@@ -288,7 +288,6 @@ 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=Колір і стиль
|
||||||
@@ -543,9 +542,6 @@ updateReminder.yesOnce=Так, лише раз
|
|||||||
updateReminder.yesAutomatically=Так, автоматично
|
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
|
||||||
|
|||||||
@@ -1,118 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
# Generics
|
# Generics
|
||||||
## Button
|
## Button
|
||||||
generic.button.apply=应用
|
generic.button.apply=应用
|
||||||
generic.button.back=后退
|
generic.button.back=返回
|
||||||
generic.button.cancel=取消
|
generic.button.cancel=取消
|
||||||
generic.button.change=更改
|
generic.button.change=更改
|
||||||
generic.button.choose=选择...
|
generic.button.choose=选择...
|
||||||
@@ -287,7 +287,6 @@ 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=界面外观
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ generic.button.apply=套用
|
|||||||
generic.button.back=上一頁
|
generic.button.back=上一頁
|
||||||
generic.button.cancel=取消
|
generic.button.cancel=取消
|
||||||
generic.button.change=修改
|
generic.button.change=修改
|
||||||
generic.button.choose=選擇…
|
generic.button.choose=选择...
|
||||||
generic.button.close=關閉
|
generic.button.close=關閉
|
||||||
generic.button.copy=複製
|
generic.button.copy=複製
|
||||||
generic.button.copied=已複製!
|
generic.button.copied=已複製!
|
||||||
@@ -208,7 +208,7 @@ migration.start.remarkSynced=您必須確保您的檔案庫在升級之前已經
|
|||||||
migration.start.confirm=我已閱讀並理解上述資訊
|
migration.start.confirm=我已閱讀並理解上述資訊
|
||||||
## Run
|
## Run
|
||||||
migration.run.enterPassword=輸入 "%s" 的密碼
|
migration.run.enterPassword=輸入 "%s" 的密碼
|
||||||
migration.run.startMigrationBtn=遷移加密檔案庫
|
migration.run.startMigrationBtn=迁移加密檔案庫
|
||||||
migration.run.progressHint=這可能需要一點時間…
|
migration.run.progressHint=這可能需要一點時間…
|
||||||
## Success
|
## Success
|
||||||
migration.success.nextStepsInstructions=已成功升級 "%s"。\n您現在可以解鎖您的加密檔案庫了。
|
migration.success.nextStepsInstructions=已成功升級 "%s"。\n您現在可以解鎖您的加密檔案庫了。
|
||||||
@@ -287,7 +287,6 @@ 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=外觀
|
||||||
@@ -542,9 +541,6 @@ 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
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.cryptomator.common.keychain;
|
package org.cryptomator.common.keychain;
|
||||||
|
|
||||||
import org.cryptomator.integrations.keychain.KeychainAccessException;
|
|
||||||
import org.cryptomator.integrations.keychain.KeychainAccessProvider;
|
import org.cryptomator.integrations.keychain.KeychainAccessProvider;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -21,7 +20,7 @@ class MapKeychainAccess implements KeychainAccessProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void storePassphrase(String key, String displayName,CharSequence passphrase, boolean ignored) {
|
public void storePassphrase(String key, String displayName,CharSequence passphrase) {
|
||||||
char[] pw = new char[passphrase.length()];
|
char[] pw = new char[passphrase.length()];
|
||||||
for (int i = 0; i < passphrase.length(); i++) {
|
for (int i = 0; i < passphrase.length(); i++) {
|
||||||
pw[i] = passphrase.charAt(i);
|
pw[i] = passphrase.charAt(i);
|
||||||
@@ -40,7 +39,7 @@ class MapKeychainAccess implements KeychainAccessProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void changePassphrase(String key, String displayName, CharSequence passphrase) throws KeychainAccessException {
|
public void changePassphrase(String key, String displayName, CharSequence passphrase) {
|
||||||
map.get(key);
|
map.get(key);
|
||||||
storePassphrase(key, displayName, passphrase);
|
storePassphrase(key, displayName, passphrase);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user