mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-09-21 23:44:42 +00:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c615ad2cd7 | ||
|
|
91a4db388f |
@@ -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: '21.0.2+13'
|
||||||
|
|
||||||
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/21.0.1/openjfx-21.0.1_linux-x64_bin-jmods.zip'
|
||||||
openjfx-sha: 'd44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
|
openjfx-sha: '7baed11ca56d5fee85995fa6612d4299f1e8b7337287228f7f12fd50407c56f8'
|
||||||
- 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/21.0.1/openjfx-21.0.1_linux-aarch64_bin-jmods.zip'
|
||||||
openjfx-sha: '3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
|
openjfx-sha: '871e7b9d7af16aef2e55c1b7830d0e0b2503b13dd8641374ba7e55ecb81d2ef9'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
@@ -68,7 +68,7 @@ jobs:
|
|||||||
- name: Set version
|
- name: Set version
|
||||||
run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }}
|
run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }}
|
||||||
- name: Run maven
|
- name: Run maven
|
||||||
run: mvn -B clean package -Plinux -DskipTests -Djavafx.platform=linux
|
run: mvn -B clean package -Plinux -DskipTests
|
||||||
- name: Patch target dir
|
- name: Patch target dir
|
||||||
run: |
|
run: |
|
||||||
cp LICENSE.txt target
|
cp LICENSE.txt target
|
||||||
@@ -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.crypto.ec,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
|
||||||
@@ -169,7 +169,7 @@ jobs:
|
|||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
- name: Publish AppImage on GitHub Releases
|
- name: Publish AppImage on GitHub Releases
|
||||||
if: startsWith(github.ref, 'refs/tags/') && github.event.action == 'published'
|
if: startsWith(github.ref, 'refs/tags/') && github.event.action == 'published'
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
curl --remote-name ${{ inputs.url }} -L
|
curl --remote-name ${{ inputs.url }} -L
|
||||||
- name: Upload to Kaspersky
|
- name: Upload to Kaspersky
|
||||||
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
|
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
|
||||||
with:
|
with:
|
||||||
protocol: ftps
|
protocol: ftps
|
||||||
server: allowlist.kaspersky-labs.com
|
server: allowlist.kaspersky-labs.com
|
||||||
@@ -31,7 +31,7 @@ jobs:
|
|||||||
username: ${{ secrets.ALLOWLIST_KASPERSKY_USERNAME }}
|
username: ${{ secrets.ALLOWLIST_KASPERSKY_USERNAME }}
|
||||||
password: ${{ secrets.ALLOWLIST_KASPERSKY_PASSWORD }}
|
password: ${{ secrets.ALLOWLIST_KASPERSKY_PASSWORD }}
|
||||||
- name: Upload to Avast
|
- name: Upload to Avast
|
||||||
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
|
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
|
||||||
with:
|
with:
|
||||||
protocol: ftp
|
protocol: ftp
|
||||||
server: whitelisting.avast.com
|
server: whitelisting.avast.com
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'zulu'
|
JAVA_DIST: 'zulu'
|
||||||
JAVA_VERSION: 22
|
JAVA_VERSION: 21
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
@@ -33,7 +33,7 @@ jobs:
|
|||||||
- name: Build and Test
|
- name: Build and Test
|
||||||
run: >
|
run: >
|
||||||
xvfb-run
|
xvfb-run
|
||||||
mvn -B verify -Djavafx.platform=linux
|
mvn -B verify
|
||||||
jacoco:report
|
jacoco:report
|
||||||
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
|
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
|
||||||
-Pcoverage
|
-Pcoverage
|
||||||
@@ -45,7 +45,7 @@ jobs:
|
|||||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||||
- name: Draft a release
|
- name: Draft a release
|
||||||
if: startsWith(github.ref, 'refs/tags/')
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: true
|
||||||
discussion_category_name: releases
|
discussion_category_name: releases
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ on:
|
|||||||
- cron: '0 0 1 * *' # run once a month at the first day of month
|
- cron: '0 0 1 * *' # run once a month at the first day of month
|
||||||
|
|
||||||
env:
|
env:
|
||||||
JDK_VERSION: '22.0.1+8'
|
JDK_VERSION: '21.0.1+12'
|
||||||
JDK_VENDOR: zulu
|
JDK_VENDOR: zulu
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'zulu'
|
JAVA_DIST: 'zulu'
|
||||||
JAVA_VERSION: '22.0.2+9'
|
JAVA_VERSION: '21.0.2+13'
|
||||||
COFFEELIBS_JDK: 22
|
COFFEELIBS_JDK: 21
|
||||||
COFFEELIBS_JDK_VERSION: '22.0.2+9-0ppa1'
|
COFFEELIBS_JDK_VERSION: '21.0.2+13-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/21.0.1/openjfx-21.0.1_linux-x64_bin-jmods.zip'
|
||||||
OPENJFX_JMODS_AMD64_HASH: 'd44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
|
OPENJFX_JMODS_AMD64_HASH: '7baed11ca56d5fee85995fa6612d4299f1e8b7337287228f7f12fd50407c56f8'
|
||||||
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/21.0.1/openjfx-21.0.1_linux-aarch64_bin-jmods.zip'
|
||||||
OPENJFX_JMODS_AARCH64_HASH: '3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
|
OPENJFX_JMODS_AARCH64_HASH: '871e7b9d7af16aef2e55c1b7830d0e0b2503b13dd8641374ba7e55ecb81d2ef9'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -53,7 +53,7 @@ jobs:
|
|||||||
check-latest: true
|
check-latest: true
|
||||||
cache: 'maven'
|
cache: 'maven'
|
||||||
- name: Run maven
|
- name: Run maven
|
||||||
run: mvn -B clean package -Plinux -Djavafx.platform=linux -DskipTests
|
run: mvn -B clean package -Plinux -DskipTests
|
||||||
- name: Download OpenJFX jmods
|
- name: Download OpenJFX jmods
|
||||||
id: download-jmods
|
id: download-jmods
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -11,8 +11,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
runner-os: 'ubuntu-latest'
|
runner-os: 'ubuntu-latest'
|
||||||
java-distribution: 'temurin'
|
java-distribution: 'temurin'
|
||||||
java-version: 22
|
java-version: 21
|
||||||
check-command: 'mvn -B validate -Pdependency-check -Djavafx.platform=linux'
|
|
||||||
secrets:
|
secrets:
|
||||||
nvd-api-key: ${{ secrets.NVD_API_KEY }}
|
nvd-api-key: ${{ secrets.NVD_API_KEY }}
|
||||||
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
|
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ jobs:
|
|||||||
git push
|
git push
|
||||||
- name: Create pull request
|
- name: Create pull request
|
||||||
run: |
|
run: |
|
||||||
printf "> [!IMPORTANT]\n> Todos:\n> - [ ] Update maven dependencies\n> - [ ] Check for JDK update\n> - [ ] Check for JFX update" > pr_body.md
|
echo "> [!IMPORTANT]\n> Todos:\n> - [ ] Update maven dependencies\n> - [ ] Check for JDK update\n> - [ ] Check for JFX update" > pr_body.md
|
||||||
PR_URL=$(gh pr create --title "Release ${{ needs.get-version.outputs.semVerStr }}" --body-file pr_body.md)
|
PR_URL=$(gh pr create --title "Release ${{ needs.get-version.outputs.semVerStr }}" --body-file pr_body.md)
|
||||||
echo "FLATHUB_PR_URL=$PR_URL" >> "$GITHUB_ENV"
|
echo "FLATHUB_PR_URL=$PR_URL" >> "$GITHUB_ENV"
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'zulu'
|
JAVA_DIST: 'zulu'
|
||||||
JAVA_VERSION: 22
|
JAVA_VERSION: 21
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
determine-version:
|
determine-version:
|
||||||
@@ -71,6 +71,6 @@ jobs:
|
|||||||
echo "revNum=${REVCOUNT}" >> $GITHUB_OUTPUT
|
echo "revNum=${REVCOUNT}" >> $GITHUB_OUTPUT
|
||||||
echo "type=${TYPE}" >> $GITHUB_OUTPUT
|
echo "type=${TYPE}" >> $GITHUB_OUTPUT
|
||||||
- name: Validate Version
|
- name: Validate Version
|
||||||
uses: skymatic/semver-validation-action@v3
|
uses: skymatic/semver-validation-action@v2
|
||||||
with:
|
with:
|
||||||
version: ${{ steps.versions.outputs.semVerStr }}
|
version: ${{ steps.versions.outputs.semVerStr }}
|
||||||
@@ -16,7 +16,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'zulu'
|
JAVA_DIST: 'zulu'
|
||||||
JAVA_VERSION: '22.0.2+9'
|
JAVA_VERSION: '21.0.2+13'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-version:
|
get-version:
|
||||||
@@ -37,15 +37,15 @@ jobs:
|
|||||||
output-suffix: x64
|
output-suffix: x64
|
||||||
xcode-path: '/Applications/Xcode_13.2.1.app'
|
xcode-path: '/Applications/Xcode_13.2.1.app'
|
||||||
fuse-lib: macFUSE
|
fuse-lib: macFUSE
|
||||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_osx-x64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_osx-x64_bin-jmods.zip'
|
||||||
openjfx-sha: '115cb08bb59d880cfff6e51e0bf0dcc45785ed9d456b8b8425597b04da6ab3d4'
|
openjfx-sha: 'bd6abab20da73d5a968dcf2fd915d81b5fb919340e3bb84979ee9a888a829939'
|
||||||
- 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/21.0.1/openjfx-21.0.1_osx-aarch64_bin-jmods.zip'
|
||||||
openjfx-sha: '813c6748f7c99cb7a579d48b48a087b4682b1fad1fc1a4fe5f9b21cf872b15a7'
|
openjfx-sha: '7afaa1c57a6cc3c384d636e597b9a5364693e2db4aaec0a6e63d2fa964400b58'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
@@ -79,7 +79,7 @@ jobs:
|
|||||||
- name: Set version
|
- name: Set version
|
||||||
run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }}
|
run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }}
|
||||||
- name: Run maven
|
- name: Run maven
|
||||||
run: mvn -B -Djavafx.platform=mac clean package -Pmac -DskipTests
|
run: mvn -B clean package -Pmac -DskipTests
|
||||||
- name: Patch target dir
|
- name: Patch target dir
|
||||||
run: |
|
run: |
|
||||||
cp LICENSE.txt target
|
cp LICENSE.txt target
|
||||||
@@ -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.crypto.ec,jdk.accessibility,jdk.management.jfr
|
||||||
--strip-native-commands
|
--strip-native-commands
|
||||||
--no-header-files
|
--no-header-files
|
||||||
--no-man-pages
|
--no-man-pages
|
||||||
@@ -137,14 +137,12 @@ 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 license:add-third-party
|
||||||
-Dlicense.thirdPartyFilename=license.rtf
|
-Dlicense.thirdPartyFilename=license.rtf
|
||||||
-Dlicense.outputDirectory=dist/mac/dmg/resources
|
-Dlicense.outputDirectory=dist/mac/dmg/resources
|
||||||
-Dlicense.fileTemplate=dist/mac/dmg/resources/licenseTemplate.ftl
|
-Dlicense.fileTemplate=dist/mac/dmg/resources/licenseTemplate.ftl
|
||||||
@@ -177,7 +175,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "Codesigning jdk files..."
|
echo "Codesigning jdk files..."
|
||||||
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
|
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
|
||||||
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ \( -name 'jspawnhelper' -o -name 'pauseengine' -o -name 'simengine' \) -exec codesign --force -o runtime -s ${CODESIGN_IDENTITY} {} \;
|
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ -name 'jspawnhelper' -exec codesign --force -o runtime -s ${CODESIGN_IDENTITY} {} \;
|
||||||
echo "Codesigning jar contents..."
|
echo "Codesigning jar contents..."
|
||||||
find Cryptomator.app/Contents/runtime/Contents/MacOS -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
|
find Cryptomator.app/Contents/runtime/Contents/MacOS -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
|
||||||
for JAR_PATH in `find Cryptomator.app -name "*.jar"`; do
|
for JAR_PATH in `find Cryptomator.app -name "*.jar"`; do
|
||||||
@@ -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
|
||||||
@@ -264,7 +259,7 @@ jobs:
|
|||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
- name: Publish dmg on GitHub Releases
|
- name: Publish dmg on GitHub Releases
|
||||||
if: startsWith(github.ref, 'refs/tags/') && github.event.action == 'published'
|
if: startsWith(github.ref, 'refs/tags/') && github.event.action == 'published'
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ jobs:
|
|||||||
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
|
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
|
||||||
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
|
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
|
||||||
- name: Publish asc on GitHub Releases
|
- name: Publish asc on GitHub Releases
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'zulu'
|
JAVA_DIST: 'zulu'
|
||||||
JAVA_VERSION: 22
|
JAVA_VERSION: 21
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
@@ -24,4 +24,4 @@ jobs:
|
|||||||
java-version: ${{ env.JAVA_VERSION }}
|
java-version: ${{ env.JAVA_VERSION }}
|
||||||
cache: 'maven'
|
cache: 'maven'
|
||||||
- name: Build and Test
|
- name: Build and Test
|
||||||
run: xvfb-run mvn -B clean install jacoco:report -Pcoverage -Djavafx.platform=linux
|
run: xvfb-run mvn -B clean install jacoco:report -Pcoverage
|
||||||
@@ -12,7 +12,7 @@ defaults:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'zulu'
|
JAVA_DIST: 'zulu'
|
||||||
JAVA_VERSION: 22
|
JAVA_VERSION: 21
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-preconditions:
|
check-preconditions:
|
||||||
@@ -60,6 +60,6 @@ jobs:
|
|||||||
- name: Run org.owasp:dependency-check plugin
|
- name: Run org.owasp:dependency-check plugin
|
||||||
id: dependency-check
|
id: dependency-check
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
run: mvn -B verify -Pdependency-check -DskipTests -Djavafx.platform=linux
|
run: mvn -B verify -Pdependency-check -DskipTests
|
||||||
env:
|
env:
|
||||||
NVD_API_KEY: ${{ secrets.NVD_API_KEY }}
|
NVD_API_KEY: ${{ secrets.NVD_API_KEY }}
|
||||||
@@ -16,9 +16,9 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'zulu'
|
JAVA_DIST: 'zulu'
|
||||||
JAVA_VERSION: '22.0.2+9'
|
JAVA_VERSION: '21.0.2+13'
|
||||||
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/21.0.1/openjfx-21.0.1_windows-x64_bin-jmods.zip'
|
||||||
OPENJFX_JMODS_AMD64_HASH: 'f9376d200f5c5b85327d575c1ec1482e6455f19916577f7e2fc9be2f48bb29b6'
|
OPENJFX_JMODS_AMD64_HASH: 'daf8acae631c016c24cfe23f88469400274d3441dd890615a42dfb501f3eb94a'
|
||||||
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'
|
||||||
|
|
||||||
@@ -40,9 +40,6 @@ jobs:
|
|||||||
LOOPBACK_ALIAS: 'cryptomator-vault'
|
LOOPBACK_ALIAS: 'cryptomator-vault'
|
||||||
WIN_CONSOLE_FLAG: ''
|
WIN_CONSOLE_FLAG: ''
|
||||||
steps:
|
steps:
|
||||||
- name: Upgrade WIX to latest version
|
|
||||||
run: choco install wixtoolset --version 3.14.1
|
|
||||||
shell: pwsh
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v4
|
||||||
@@ -77,7 +74,7 @@ jobs:
|
|||||||
- name: Set version
|
- name: Set version
|
||||||
run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }}
|
run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }}
|
||||||
- name: Run maven
|
- name: Run maven
|
||||||
run: mvn -B clean package -Pwin -DskipTests -Djavafx.platform=win
|
run: mvn -B clean package -Pwin -DskipTests
|
||||||
- name: Patch target dir
|
- name: Patch target dir
|
||||||
run: |
|
run: |
|
||||||
cp LICENSE.txt target
|
cp LICENSE.txt target
|
||||||
@@ -89,7 +86,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.crypto.ec,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 +110,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 }}\""
|
||||||
@@ -199,7 +196,7 @@ jobs:
|
|||||||
}
|
}
|
||||||
- name: Generate license for MSI
|
- name: Generate license for MSI
|
||||||
run: >
|
run: >
|
||||||
mvn -B license:add-third-party "-Djavafx.platform=win"
|
mvn -B license:add-third-party
|
||||||
"-Dlicense.thirdPartyFilename=license.rtf"
|
"-Dlicense.thirdPartyFilename=license.rtf"
|
||||||
"-Dlicense.outputDirectory=dist/win/resources"
|
"-Dlicense.outputDirectory=dist/win/resources"
|
||||||
"-Dlicense.fileTemplate=dist/win/resources/licenseTemplate.ftl"
|
"-Dlicense.fileTemplate=dist/win/resources/licenseTemplate.ftl"
|
||||||
@@ -279,7 +276,7 @@ jobs:
|
|||||||
cache: 'maven'
|
cache: 'maven'
|
||||||
- name: Generate license for exe
|
- name: Generate license for exe
|
||||||
run: >
|
run: >
|
||||||
mvn -B license:add-third-party "-Djavafx.platform=win"
|
mvn -B license:add-third-party
|
||||||
"-Dlicense.thirdPartyFilename=license.rtf"
|
"-Dlicense.thirdPartyFilename=license.rtf"
|
||||||
"-Dlicense.fileTemplate=dist/win/bundle/resources/licenseTemplate.ftl"
|
"-Dlicense.fileTemplate=dist/win/bundle/resources/licenseTemplate.ftl"
|
||||||
"-Dlicense.outputDirectory=dist/win/bundle/resources"
|
"-Dlicense.outputDirectory=dist/win/bundle/resources"
|
||||||
@@ -375,7 +372,7 @@ jobs:
|
|||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
- name: Publish .msi on GitHub Releases
|
- name: Publish .msi on GitHub Releases
|
||||||
id: publish
|
id: publish
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||||
@@ -390,14 +387,12 @@ jobs:
|
|||||||
needs: [publish]
|
needs: [publish]
|
||||||
with:
|
with:
|
||||||
url: ${{ needs.publish.outputs.download-url-msi }}
|
url: ${{ needs.publish.outputs.download-url-msi }}
|
||||||
secrets: inherit
|
|
||||||
|
|
||||||
allowlist-exe:
|
allowlist-exe:
|
||||||
uses: ./.github/workflows/av-whitelist.yml
|
uses: ./.github/workflows/av-whitelist.yml
|
||||||
needs: [publish]
|
needs: [publish]
|
||||||
with:
|
with:
|
||||||
url: ${{ needs.publish.outputs.download-url-exe }}
|
url: ${{ needs.publish.outputs.download-url-exe }}
|
||||||
secrets: inherit
|
|
||||||
|
|
||||||
notify-winget:
|
notify-winget:
|
||||||
name: Notify for winget-release
|
name: Notify for winget-release
|
||||||
|
|||||||
Generated
+12
-10
@@ -14,29 +14,31 @@
|
|||||||
<option name="dagger.fastInit" value="enabled" />
|
<option name="dagger.fastInit" value="enabled" />
|
||||||
<option name="dagger.formatGeneratedSource" value="enabled" />
|
<option name="dagger.formatGeneratedSource" value="enabled" />
|
||||||
<processorPath useClasspath="false">
|
<processorPath useClasspath="false">
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.49/dagger-compiler-2.49.jar" />
|
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.48.1/dagger-compiler-2.48.1.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.49/dagger-2.49.jar" />
|
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.48.1/dagger-2.48.1.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1.jar" />
|
<entry name="$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-spi/2.49/dagger-spi-2.49.jar" />
|
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-producers/2.48.1/dagger-producers-2.48.1.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" />
|
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/google/devtools/ksp/symbol-processing-api/1.9.20-1.0.14/symbol-processing-api-1.9.20-1.0.14.jar" />
|
|
||||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.9.0/kotlin-stdlib-jdk8-1.9.0.jar" />
|
|
||||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.9.20/kotlin-stdlib-1.9.20.jar" />
|
|
||||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar" />
|
|
||||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.9.0/kotlin-stdlib-jdk7-1.9.0.jar" />
|
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" />
|
<entry name="$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/google/guava/guava/31.0.1-jre/guava-31.0.1-jre.jar" />
|
<entry name="$MAVEN_REPOSITORY$/com/google/guava/guava/31.0.1-jre/guava-31.0.1-jre.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" />
|
<entry name="$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" />
|
||||||
|
<entry name="$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.jar" />
|
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar" />
|
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar" />
|
<entry name="$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar" />
|
||||||
|
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar" />
|
||||||
|
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-spi/2.48.1/dagger-spi-2.48.1.jar" />
|
||||||
|
<entry name="$MAVEN_REPOSITORY$/com/google/devtools/ksp/symbol-processing-api/1.9.0-1.0.12/symbol-processing-api-1.9.0-1.0.12.jar" />
|
||||||
|
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.9.0/kotlin-stdlib-1.9.0.jar" />
|
||||||
|
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.0/kotlin-stdlib-common-1.9.0.jar" />
|
||||||
|
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/squareup/javapoet/1.13.0/javapoet-1.13.0.jar" />
|
<entry name="$MAVEN_REPOSITORY$/com/squareup/javapoet/1.13.0/javapoet-1.13.0.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/google/googlejavaformat/google-java-format/1.5/google-java-format-1.5.jar" />
|
<entry name="$MAVEN_REPOSITORY$/com/google/googlejavaformat/google-java-format/1.5/google-java-format-1.5.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/javac-shaded/9-dev-r4023-3/javac-shaded-9-dev-r4023-3.jar" />
|
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/javac-shaded/9-dev-r4023-3/javac-shaded-9-dev-r4023-3.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/com/squareup/kotlinpoet/1.11.0/kotlinpoet-1.11.0.jar" />
|
<entry name="$MAVEN_REPOSITORY$/com/squareup/kotlinpoet/1.11.0/kotlinpoet-1.11.0.jar" />
|
||||||
|
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.10/kotlin-stdlib-jdk8-1.6.10.jar" />
|
||||||
|
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.10/kotlin-stdlib-jdk7-1.6.10.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/1.6.10/kotlin-reflect-1.6.10.jar" />
|
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/1.6.10/kotlin-reflect-1.6.10.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/net/ltgt/gradle/incap/incap/0.2/incap-0.2.jar" />
|
<entry name="$MAVEN_REPOSITORY$/net/ltgt/gradle/incap/incap/0.2/incap-0.2.jar" />
|
||||||
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar" />
|
|
||||||
</processorPath>
|
</processorPath>
|
||||||
<module name="cryptomator" />
|
<module name="cryptomator" />
|
||||||
</profile>
|
</profile>
|
||||||
|
|||||||
Generated
+1
-1
@@ -8,7 +8,7 @@
|
|||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_22" project-jdk-name="22" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_21_PREVIEW" project-jdk-name="21" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
+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,8 +31,9 @@ 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.hassmann-it-forensik.de/"><img src="https://cryptomator.org/img/sponsors/hassmannitforensik.png" alt="Hassmann IT-Forensik" height="56"></a></td>
|
<td><a href="https://www.easeus.com/"><img src="https://cryptomator.org/img/sponsors/easeus.png" alt="EaseUS" height="40"></a></td>
|
||||||
<td><a href="https://www.route4me.com/"><img src="https://cryptomator.org/img/sponsors/route4me.svg" alt="Route4Me" height="56"></a></td>
|
<td><a href="https://www.hassmann-it-forensik.de/"><img src="https://cryptomator.org/img/sponsors/hassmannitforensik.png" alt="Hassmann IT-Forensik" height="40"></a></td>
|
||||||
|
<td><a href="https://ente.io/"><img src="https://cryptomator.org/img/sponsors/ente.svg" alt="Ente" height="58"></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -85,7 +86,7 @@ For more information on the security details visit [cryptomator.org](https://doc
|
|||||||
|
|
||||||
### Dependencies
|
### Dependencies
|
||||||
|
|
||||||
* JDK 22 (e.g. temurin, zulu)
|
* JDK 21 (e.g. temurin, zulu)
|
||||||
* Maven 3
|
* Maven 3
|
||||||
|
|
||||||
### Run Maven
|
### Run Maven
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
# downloaded/created during build
|
# created during build
|
||||||
openjfx-jmods.zip
|
|
||||||
*.jmod
|
|
||||||
Cryptomator.AppDir
|
Cryptomator.AppDir
|
||||||
*.AppImage
|
*.AppImage
|
||||||
*.AppImage.zsync
|
*.AppImage.zsync
|
||||||
Vendored
+18
-18
@@ -12,31 +12,31 @@ command -v unzip >/dev/null 2>&1 || { echo >&2 "unzip not found."; exit 1; }
|
|||||||
|
|
||||||
VERSION=$(mvn -f ../../../pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout)
|
VERSION=$(mvn -f ../../../pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout)
|
||||||
SEMVER_STR=${VERSION}
|
SEMVER_STR=${VERSION}
|
||||||
CPU_ARCH=$(uname -p)
|
MACHINE_TYPE=$(uname -m)
|
||||||
|
|
||||||
if [[ ! "${CPU_ARCH}" =~ x86_64|aarch64 ]]; then echo "Platform ${CPU_ARCH} not supported"; exit 1; fi
|
if [[ ! "${MACHINE_TYPE}" =~ x86_64|aarch64 ]]; then echo "Platform ${MACHINE_TYPE} not supported"; exit 1; fi
|
||||||
|
|
||||||
mvn -f ../../../pom.xml versions:set -DnewVersion=${SEMVER_STR}
|
mvn -f ../../../pom.xml versions:set -DnewVersion=${SEMVER_STR}
|
||||||
|
|
||||||
# compile
|
# compile
|
||||||
mvn -B -f ../../../pom.xml clean package -Plinux -DskipTests -Djavafx.platform=linux
|
mvn -B -f ../../../pom.xml clean package -Plinux -DskipTests
|
||||||
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_ARCH="x64"
|
|
||||||
JAVAFX_JMODS_SHA256='d44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
|
|
||||||
if [ "${CPU_ARCH}" = "aarch64" ]; then
|
|
||||||
JAVAFX_ARCH="aarch64"
|
|
||||||
JAVAFX_JMODS_SHA256='3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
|
|
||||||
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"
|
OPENJFX_URL='https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_linux-x64_bin-jmods.zip'
|
||||||
|
OPENJFX_SHA='7baed11ca56d5fee85995fa6612d4299f1e8b7337287228f7f12fd50407c56f8'
|
||||||
|
OPENJFX_URL_aarch64='https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_linux-aarch64_bin-jmods.zip'
|
||||||
|
OPENJFX_SHA_aarch64='871e7b9d7af16aef2e55c1b7830d0e0b2503b13dd8641374ba7e55ecb81d2ef9'
|
||||||
|
|
||||||
|
if [[ "${MACHINE_TYPE}" = "aarch64" ]]; then
|
||||||
|
OPENJFX_URL="${OPENJFX_URL_aarch64}";
|
||||||
|
OPENJFX_SHA="${OPENJFX_SHA_aarch64}";
|
||||||
|
fi
|
||||||
|
|
||||||
curl -L ${JAVAFX_JMODS_URL} -o openjfx-jmods.zip
|
curl -L ${OPENJFX_URL} -o openjfx-jmods.zip
|
||||||
echo "${JAVAFX_JMODS_SHA256} openjfx-jmods.zip" | shasum -a256 --check
|
echo "${OPENJFX_SHA} openjfx-jmods.zip" | shasum -a256 --check
|
||||||
mkdir -p openjfx-jmods
|
mkdir -p openjfx-jmods
|
||||||
unzip -o -j openjfx-jmods.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javafx.fxml.jmod \*/javafx.graphics.jmod -d openjfx-jmods
|
unzip -o -j 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)
|
||||||
@@ -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.crypto.ec,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 \
|
||||||
@@ -114,17 +114,17 @@ ln -s usr/share/applications/org.cryptomator.Cryptomator.desktop Cryptomator.App
|
|||||||
ln -s bin/cryptomator.sh Cryptomator.AppDir/AppRun
|
ln -s bin/cryptomator.sh Cryptomator.AppDir/AppRun
|
||||||
|
|
||||||
# load AppImageTool
|
# load AppImageTool
|
||||||
curl -L https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-${CPU_ARCH}.AppImage -o /tmp/appimagetool.AppImage
|
curl -L https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-${MACHINE_TYPE}.AppImage -o /tmp/appimagetool.AppImage
|
||||||
chmod +x /tmp/appimagetool.AppImage
|
chmod +x /tmp/appimagetool.AppImage
|
||||||
|
|
||||||
# create AppImage
|
# create AppImage
|
||||||
/tmp/appimagetool.AppImage \
|
/tmp/appimagetool.AppImage \
|
||||||
Cryptomator.AppDir \
|
Cryptomator.AppDir \
|
||||||
cryptomator-${SEMVER_STR}-${CPU_ARCH}.AppImage \
|
cryptomator-${SEMVER_STR}-${MACHINE_TYPE}.AppImage \
|
||||||
-u 'gh-releases-zsync|cryptomator|cryptomator|latest|cryptomator-*-${CPU_ARCH}.AppImage.zsync'
|
-u 'gh-releases-zsync|cryptomator|cryptomator|latest|cryptomator-*-${MACHINE_TYPE}.AppImage.zsync'
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "Done. AppImage successfully created: cryptomator-${SEMVER_STR}-${CPU_ARCH}.AppImage"
|
echo "Done. AppImage successfully created: cryptomator-${SEMVER_STR}-${MACHINE_TYPE}.AppImage"
|
||||||
echo ""
|
echo ""
|
||||||
echo >&2 "To clean up, run: rm -rf Cryptomator.AppDir appdir runtime squashfs-root openjfx-jmods; rm /tmp/appimagetool.AppImage openjfx-jmods.zip"
|
echo >&2 "To clean up, run: rm -rf Cryptomator.AppDir appdir runtime squashfs-root openjfx-jmods; rm /tmp/appimagetool.AppImage openjfx-jmods.zip"
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
+1
-11
@@ -53,11 +53,6 @@
|
|||||||
</screenshot>
|
</screenshot>
|
||||||
</screenshots>
|
</screenshots>
|
||||||
|
|
||||||
<branding>
|
|
||||||
<color type="primary" scheme_preference="light">#EBF5EB</color>
|
|
||||||
<color type="primary" scheme_preference="dark">#2F4858</color>
|
|
||||||
</branding>
|
|
||||||
|
|
||||||
<url type="homepage">https://cryptomator.org/</url>
|
<url type="homepage">https://cryptomator.org/</url>
|
||||||
<url type="bugtracker">https://github.com/cryptomator/cryptomator/issues/</url>
|
<url type="bugtracker">https://github.com/cryptomator/cryptomator/issues/</url>
|
||||||
<url type="donation">https://cryptomator.org/donate</url>
|
<url type="donation">https://cryptomator.org/donate</url>
|
||||||
@@ -68,18 +63,13 @@
|
|||||||
<developer id="de.skymatic">
|
<developer id="de.skymatic">
|
||||||
<name>Skymatic GmbH</name>
|
<name>Skymatic GmbH</name>
|
||||||
</developer>
|
</developer>
|
||||||
|
|
||||||
|
|
||||||
<content_rating type="oars-1.1">
|
<content_rating type="oars-1.1">
|
||||||
<content_attribute id="social-info">mild</content_attribute> <!-- update checker connects to https://api.cryptomator.org/updates/latestVersion.json -->
|
<content_attribute id="social-info">mild</content_attribute> <!-- update checker connects to https://api.cryptomator.org/updates/latestVersion.json -->
|
||||||
</content_rating>
|
</content_rating>
|
||||||
|
|
||||||
<releases>
|
<releases>
|
||||||
<release date="2024-06-26" version="1.13.0">
|
|
||||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.13.0</url>
|
|
||||||
</release>
|
|
||||||
<release date="2024-03-27" version="1.12.4">
|
|
||||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.12.4</url>
|
|
||||||
</release>
|
|
||||||
<release date="2024-02-27" version="1.12.3">
|
<release date="2024-02-27" version="1.12.3">
|
||||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.12.3</url>
|
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.12.3</url>
|
||||||
</release>
|
</release>
|
||||||
|
|||||||
Vendored
+1
-1
@@ -2,7 +2,7 @@ Source: cryptomator
|
|||||||
Maintainer: Cryptobot <releases@cryptomator.org>
|
Maintainer: Cryptobot <releases@cryptomator.org>
|
||||||
Section: utils
|
Section: utils
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Build-Depends: debhelper (>=10), coffeelibs-jdk-22 (>= 22.0.1+8-0ppa1), libgtk-3-0, libxxf86vm1, libgl1
|
Build-Depends: debhelper (>=10), coffeelibs-jdk-21 (>= 21.0.2+12-0ppa1), libgtk-3-0, libxxf86vm1, libgl1
|
||||||
Standards-Version: 4.5.0
|
Standards-Version: 4.5.0
|
||||||
Homepage: https://cryptomator.org
|
Homepage: https://cryptomator.org
|
||||||
Vcs-Git: https://github.com/cryptomator/cryptomator.git
|
Vcs-Git: https://github.com/cryptomator/cryptomator.git
|
||||||
|
|||||||
Vendored
+2
-3
@@ -4,7 +4,7 @@
|
|||||||
# Uncomment this to turn on verbose mode.
|
# Uncomment this to turn on verbose mode.
|
||||||
#export DH_VERBOSE=1
|
#export DH_VERBOSE=1
|
||||||
|
|
||||||
JAVA_HOME = /usr/lib/jvm/java-22-coffeelibs
|
JAVA_HOME = /usr/lib/jvm/java-21-coffeelibs
|
||||||
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
|
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
|
||||||
ifeq ($(DEB_BUILD_ARCH),amd64)
|
ifeq ($(DEB_BUILD_ARCH),amd64)
|
||||||
JMODS_PATH = jmods/amd64:${JAVA_HOME}/jmods
|
JMODS_PATH = jmods/amd64:${JAVA_HOME}/jmods
|
||||||
@@ -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.crypto.ec,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>
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
# downloaded/created during build
|
# created during build
|
||||||
Cryptomator.app/
|
Cryptomator.app/
|
||||||
runtime/
|
runtime/
|
||||||
dmg/
|
dmg/
|
||||||
*.dmg
|
*.dmg
|
||||||
license.rtf
|
license.rtf
|
||||||
openjfx-jmods.zip
|
|
||||||
*.jmod
|
|
||||||
Cryptomator.entitlements
|
|
||||||
Vendored
+12
-28
@@ -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,17 +29,13 @@ 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
|
ARCH="undefined"
|
||||||
JAVAFX_ARCH="undefined"
|
|
||||||
JAVAFX_JMODS_SHA256="undefined"
|
|
||||||
if [ "$(machine)" = "arm64e" ]; then
|
if [ "$(machine)" = "arm64e" ]; then
|
||||||
JAVAFX_ARCH="aarch64"
|
ARCH="aarch64"
|
||||||
JAVAFX_JMODS_SHA256="813c6748f7c99cb7a579d48b48a087b4682b1fad1fc1a4fe5f9b21cf872b15a7"
|
|
||||||
else
|
else
|
||||||
JAVAFX_ARCH="x64"
|
ARCH="x64"
|
||||||
JAVAFX_JMODS_SHA256="115cb08bb59d880cfff6e51e0bf0dcc45785ed9d456b8b8425597b04da6ab3d4"
|
|
||||||
fi
|
fi
|
||||||
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-${JAVAFX_VERSION}_osx-${JAVAFX_ARCH}_bin-jmods.zip"
|
OPENJFX_JMODS="https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_osx-${ARCH}_bin-jmods.zip"
|
||||||
|
|
||||||
# check preconditions
|
# check preconditions
|
||||||
if [ -z "${JAVA_HOME}" ]; then echo "JAVA_HOME not set. Run using JAVA_HOME=/path/to/jdk ./build.sh"; exit 1; fi
|
if [ -z "${JAVA_HOME}" ]; then echo "JAVA_HOME not set. Run using JAVA_HOME=/path/to/jdk ./build.sh"; exit 1; fi
|
||||||
@@ -54,8 +47,7 @@ if [ -n "${CODESIGN_IDENTITY}" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# download and check jmods
|
# download and check jmods
|
||||||
curl -L ${JAVAFX_JMODS_URL} -o openjfx-jmods.zip
|
curl -L ${OPENJFX_JMODS} -o openjfx-jmods.zip
|
||||||
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)
|
||||||
@@ -71,7 +63,7 @@ if [ "${POM_JFX_VERSION}" -ne "${JMOD_VERSION}" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# compile
|
# compile
|
||||||
mvn -B -Djavafx.platform=mac -f../../../pom.xml clean package -DskipTests -Pmac
|
mvn -B -f../../../pom.xml clean package -DskipTests -Pmac
|
||||||
cp ../../../LICENSE.txt ../../../target
|
cp ../../../LICENSE.txt ../../../target
|
||||||
cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
|
cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
|
||||||
|
|
||||||
@@ -79,7 +71,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.crypto.ec,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,10 +116,9 @@ ${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 -f../../../pom.xml license:add-third-party \
|
||||||
-Dlicense.thirdPartyFilename=license.rtf \
|
-Dlicense.thirdPartyFilename=license.rtf \
|
||||||
-Dlicense.outputDirectory=dist/mac/dmg/resources \
|
-Dlicense.outputDirectory=dist/mac/dmg/resources \
|
||||||
-Dlicense.fileTemplate=resources/licenseTemplate.ftl \
|
-Dlicense.fileTemplate=resources/licenseTemplate.ftl \
|
||||||
@@ -137,11 +128,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 +146,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
|
||||||
|
|||||||
@@ -6,5 +6,4 @@ installer
|
|||||||
*.msi
|
*.msi
|
||||||
*.exe
|
*.exe
|
||||||
*.jmod
|
*.jmod
|
||||||
resources/jfxJmods.zip
|
|
||||||
license.rtf
|
license.rtf
|
||||||
Vendored
+16
-17
@@ -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
|
||||||
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,22 +51,21 @@ if ($clean -and (Test-Path -Path $runtimeImagePath)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
## download jfx jmods
|
## download jfx jmods
|
||||||
$javaFxVersion='22.0.2'
|
$jmodsVersion='21.0.1'
|
||||||
$javaFxJmodsUrl = "https://download2.gluonhq.com/openjfx/${javaFxVersion}/openjfx-${javaFxVersion}_windows-x64_bin-jmods.zip"
|
$jmodsUrl = "https://download2.gluonhq.com/openjfx/${jmodsVersion}/openjfx-${jmodsVersion}_windows-x64_bin-jmods.zip"
|
||||||
$javaFxJmodsSHA256 = 'f9376d200f5c5b85327d575c1ec1482e6455f19916577f7e2fc9be2f48bb29b6'
|
$jfxJmodsChecksum = 'daf8acae631c016c24cfe23f88469400274d3441dd890615a42dfb501f3eb94a'
|
||||||
$javaFxJmods = '.\resources\jfxJmods.zip'
|
$jfxJmodsZip = '.\resources\jfxJmods.zip'
|
||||||
if( !(Test-Path -Path $javaFxJmods) ) {
|
if( !(Test-Path -Path $jfxJmodsZip) ) {
|
||||||
Write-Output "Downloading ${javaFxJmodsUrl}..."
|
Write-Output "Downloading ${jmodsUrl}..."
|
||||||
Invoke-WebRequest $javaFxJmodsUrl -OutFile $javaFxJmods # redirects are followed by default
|
Invoke-WebRequest $jmodsUrl -OutFile $jfxJmodsZip # redirects are followed by default
|
||||||
}
|
}
|
||||||
|
|
||||||
$jmodsChecksumActual = $(Get-FileHash -Path $javaFxJmods -Algorithm SHA256).Hash
|
$jmodsChecksumActual = $(Get-FileHash -Path $jfxJmodsZip -Algorithm SHA256).Hash
|
||||||
if( $jmodsChecksumActual -ne $javaFxJmodsSHA256 ) {
|
if( $jmodsChecksumActual -ne $jfxJmodsChecksum ) {
|
||||||
Write-Error "Checksum mismatch for jfxJmods.zip. Expected: $javaFxJmodsSHA256
|
Write-Error "Checksum mismatch for jfxJmods.zip. Expected: $jfxJmodsChecksum, actual: $jmodsChecksumActual"
|
||||||
, actual: $jmodsChecksumActual"
|
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
Expand-Archive -Path $javaFxJmods -Force -DestinationPath ".\resources\"
|
Expand-Archive -Path $jfxJmodsZip -Force -DestinationPath ".\resources\"
|
||||||
Remove-Item -Recurse -Force -Path ".\resources\javafx-jmods"
|
Remove-Item -Recurse -Force -Path ".\resources\javafx-jmods"
|
||||||
Move-Item -Force -Path ".\resources\javafx-jmods-*" -Destination ".\resources\javafx-jmods" -ErrorAction Stop
|
Move-Item -Force -Path ".\resources\javafx-jmods-*" -Destination ".\resources\javafx-jmods" -ErrorAction Stop
|
||||||
|
|
||||||
@@ -75,7 +74,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.crypto.ec,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 +99,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 +121,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 `
|
||||||
"-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 +166,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 `
|
||||||
"-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\" `
|
||||||
|
|||||||
Vendored
+3
@@ -31,6 +31,7 @@
|
|||||||
</BootstrapperApplicationRef>
|
</BootstrapperApplicationRef>
|
||||||
|
|
||||||
<Chain>
|
<Chain>
|
||||||
|
<!-- WixBundleActions are defined in the BOOTSTRAPPER_ACTION enum, see https://github.com/wixtoolset/wix3/blob/473562c0c3904216f2b6963c0ad244a8cc41e9ee/src/burn/inc/IBootstrapperEngine.h#L15 -->
|
||||||
<ExePackage Cache="yes" PerMachine="yes" Permanent="no"
|
<ExePackage Cache="yes" PerMachine="yes" Permanent="no"
|
||||||
SourceFile="resources\winfsp-uninstaller.exe"
|
SourceFile="resources\winfsp-uninstaller.exe"
|
||||||
DisplayName="Removing outdated WinFsp Driver"
|
DisplayName="Removing outdated WinFsp Driver"
|
||||||
@@ -51,11 +52,13 @@ Do you want to continue?"" RepairArgument="-q" UninstallArgument="-s" />
|
|||||||
</ExePackage>
|
</ExePackage>
|
||||||
<!-- see https://wixtoolset.org/documentation/manual/v3/xsd/wix/msipackage.html-->
|
<!-- see https://wixtoolset.org/documentation/manual/v3/xsd/wix/msipackage.html-->
|
||||||
<MsiPackage
|
<MsiPackage
|
||||||
|
Cache="yes"
|
||||||
SourceFile="resources\Cryptomator.msi"
|
SourceFile="resources\Cryptomator.msi"
|
||||||
CacheId="cryptomator-bundle-cryptomator"
|
CacheId="cryptomator-bundle-cryptomator"
|
||||||
DisplayInternalUI="no"
|
DisplayInternalUI="no"
|
||||||
Visible="no"/>
|
Visible="no"/>
|
||||||
<MsiPackage
|
<MsiPackage
|
||||||
|
Cache="yes"
|
||||||
SourceFile="resources\winfsp.msi"
|
SourceFile="resources\winfsp.msi"
|
||||||
CacheId="cryptomator-bundle-winfsp"
|
CacheId="cryptomator-bundle-winfsp"
|
||||||
Visible="yes"
|
Visible="yes"
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
@echo off
|
||||||
|
:: see comments in file ./version170-migrate-settings.ps1
|
||||||
|
|
||||||
|
cd %~dp0
|
||||||
|
powershell -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -Command .\version170-migrate-settings.ps1
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# This script migrates Cryptomator settings for all local users on Windows in case the users uses custom directories as mountpoint
|
||||||
|
# See also https://github.com/cryptomator/cryptomator/pull/2654.
|
||||||
|
#
|
||||||
|
# TODO: This script should be evaluated in a yearly interval if it is still needed and if not, should be removed
|
||||||
|
#
|
||||||
|
#Requires -RunAsAdministrator
|
||||||
|
|
||||||
|
#Get all active, local user profiles
|
||||||
|
$profileList = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
|
||||||
|
Get-ChildItem $profileList | ForEach-Object {
|
||||||
|
$profilePath = $_.GetValue("ProfileImagePath")
|
||||||
|
$settingsPath = "$profilePath\AppData\Roaming\Cryptomator\settings.json"
|
||||||
|
if(!(Test-Path -Path $settingsPath -PathType Leaf)) {
|
||||||
|
#No settings file, nothing to do.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$settings = Get-Content -Path $settingsPath | ConvertFrom-Json
|
||||||
|
if($settings.preferredVolumeImpl -ne "FUSE") {
|
||||||
|
#Fuse not used, nothing to do
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#check if customMountPoints are used
|
||||||
|
$atLeastOneCustomPath = $false;
|
||||||
|
foreach ($vault in $settings.directories){
|
||||||
|
$atLeastOneCustomPath = $atLeastOneCustomPath -or ($vault.useCustomMountPath -eq "True")
|
||||||
|
}
|
||||||
|
|
||||||
|
#if so, use WinFsp Local Drive
|
||||||
|
if( $atLeastOneCustomPath ) {
|
||||||
|
Add-Member -Force -InputObject $settings -Name "mountService" -Value "org.cryptomator.frontend.fuse.mount.WinFspMountProvider" -MemberType NoteProperty
|
||||||
|
$newSettings = $settings | Select-Object * -ExcludeProperty "preferredVolumeImpl"
|
||||||
|
ConvertTo-Json $newSettings | Set-Content -Path $settingsPath
|
||||||
|
}
|
||||||
|
}
|
||||||
Vendored
+6
@@ -139,6 +139,11 @@
|
|||||||
Sequence="execute" Before="PatchWebDAV" />
|
Sequence="execute" Before="PatchWebDAV" />
|
||||||
<CustomAction Id="PatchWebDAV" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
|
<CustomAction Id="PatchWebDAV" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
|
||||||
|
|
||||||
|
<!-- Special Settings migration for 1.7.0,. Should be removed eventually, for more info, see ../contrib/version170-migrate-settings.ps1-->
|
||||||
|
<SetProperty Id="V170MigrateSettings" Value=""[INSTALLDIR]version170-migrate-settings.bat""
|
||||||
|
Sequence="execute" Before="V170MigrateSettings" />
|
||||||
|
<CustomAction Id="V170MigrateSettings" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
|
||||||
|
|
||||||
<!-- Running App detection and exit -->
|
<!-- Running App detection and exit -->
|
||||||
<Property Id="FOUNDRUNNINGAPP" Admin="yes"/>
|
<Property Id="FOUNDRUNNINGAPP" Admin="yes"/>
|
||||||
<util:CloseApplication
|
<util:CloseApplication
|
||||||
@@ -190,6 +195,7 @@
|
|||||||
<RemoveExistingProducts After="InstallValidate"/> <!-- Moved from CostInitialize, due to WixCloseApplications -->
|
<RemoveExistingProducts After="InstallValidate"/> <!-- Moved from CostInitialize, due to WixCloseApplications -->
|
||||||
|
|
||||||
<Custom Action="PatchWebDAV" After="InstallFiles">NOT Installed OR REINSTALL</Custom>
|
<Custom Action="PatchWebDAV" After="InstallFiles">NOT Installed OR REINSTALL</Custom>
|
||||||
|
<Custom Action="V170MigrateSettings" After="InstallFiles">NOT Installed OR REINSTALL</Custom>
|
||||||
</InstallExecuteSequence>
|
</InstallExecuteSequence>
|
||||||
|
|
||||||
<InstallUISequence>
|
<InstallUISequence>
|
||||||
|
|||||||
@@ -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-SNAPSHOT</version>
|
||||||
<name>Cryptomator Desktop App</name>
|
<name>Cryptomator Desktop App</name>
|
||||||
|
|
||||||
<organization>
|
<organization>
|
||||||
@@ -26,60 +26,56 @@
|
|||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.jdk.version>22</project.jdk.version>
|
<project.jdk.version>21</project.jdk.version>
|
||||||
|
|
||||||
<!-- Group IDs of jars that need to stay on the class path for now -->
|
<!-- Group IDs of jars that need to stay on the class path for now -->
|
||||||
<!-- remove them, as soon they got modularized or support is dropped (i.e., WebDAV) -->
|
<!-- remove them, as soon they got modularized or support is dropped (i.e., WebDAV) -->
|
||||||
<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-beta1</cryptomator.cryptofs.version>
|
<cryptomator.cryptofs.version>2.6.9</cryptomator.cryptofs.version>
|
||||||
<cryptomator.integrations.version>1.4.0-beta2</cryptomator.integrations.version>
|
<cryptomator.integrations.version>1.3.1</cryptomator.integrations.version>
|
||||||
<cryptomator.integrations.win.version>1.3.0-beta1</cryptomator.integrations.win.version> <!-- TODO update to 1.3.0 once released -->
|
<cryptomator.integrations.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.3</cryptomator.integrations.mac.version>
|
||||||
<cryptomator.integrations.linux.version>1.5.0-beta4</cryptomator.integrations.linux.version> <!-- TODO update to 1.5.0 once released -->
|
<cryptomator.integrations.linux.version>1.4.4</cryptomator.integrations.linux.version>
|
||||||
<cryptomator.fuse.version>5.0.0</cryptomator.fuse.version>
|
<cryptomator.fuse.version>4.0.0</cryptomator.fuse.version>
|
||||||
|
<cryptomator.dokany.version>2.0.0</cryptomator.dokany.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.50</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.0.0-jre</guava.version>
|
||||||
<jackson.version>2.17.2</jackson.version>
|
<jackson.version>2.16.1</jackson.version>
|
||||||
<javafx.version>22.0.2</javafx.version>
|
<javafx.version>21.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.0</logback.version>
|
||||||
<slf4j.version>2.0.16</slf4j.version>
|
<slf4j.version>2.0.12</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.8.2</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.10.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.0.9</dependency-check.version>
|
||||||
<jacoco.version>0.8.12</jacoco.version>
|
<jacoco.version>0.8.11</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.12.1</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.6.1</mvn-dependency.version>
|
||||||
<mvn-surefire.version>3.4.0</mvn-surefire.version>
|
<mvn-surefire.version>3.2.5</mvn-surefire.version>
|
||||||
<mvn-jar.version>3.4.2</mvn-jar.version>
|
<mvn-jar.version>3.3.0</mvn-jar.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<!-- Cryptomator Libs -->
|
<!-- Cryptomator Libs -->
|
||||||
<dependency>
|
|
||||||
<groupId>org.cryptomator</groupId>
|
|
||||||
<artifactId>cryptolib</artifactId>
|
|
||||||
<version>2.2.0</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.cryptomator</groupId>
|
<groupId>org.cryptomator</groupId>
|
||||||
<artifactId>cryptofs</artifactId>
|
<artifactId>cryptofs</artifactId>
|
||||||
@@ -90,6 +86,11 @@
|
|||||||
<artifactId>fuse-nio-adapter</artifactId>
|
<artifactId>fuse-nio-adapter</artifactId>
|
||||||
<version>${cryptomator.fuse.version}</version>
|
<version>${cryptomator.fuse.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.cryptomator</groupId>
|
||||||
|
<artifactId>dokany-nio-adapter</artifactId>
|
||||||
|
<version>${cryptomator.dokany.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.cryptomator</groupId>
|
<groupId>org.cryptomator</groupId>
|
||||||
<artifactId>webdav-nio-adapter</artifactId>
|
<artifactId>webdav-nio-adapter</artifactId>
|
||||||
@@ -163,18 +164,11 @@
|
|||||||
<artifactId>nimbus-jose-jwt</artifactId>
|
<artifactId>nimbus-jose-jwt</artifactId>
|
||||||
<version>${nimbus-jose.version}</version>
|
<version>${nimbus-jose.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Jackson -->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
<version>${jackson.version}</version>
|
<version>${jackson.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
|
||||||
<artifactId>jackson-datatype-jsr310</artifactId>
|
|
||||||
<version>${jackson.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- EasyBind -->
|
<!-- EasyBind -->
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -471,7 +465,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>
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ open module org.cryptomator.desktop {
|
|||||||
|
|
||||||
requires org.cryptomator.cryptolib;
|
requires org.cryptomator.cryptolib;
|
||||||
requires org.cryptomator.cryptofs;
|
requires org.cryptomator.cryptofs;
|
||||||
|
requires org.cryptomator.frontend.dokany;
|
||||||
requires org.cryptomator.frontend.fuse;
|
requires org.cryptomator.frontend.fuse;
|
||||||
requires org.cryptomator.frontend.webdav;
|
requires org.cryptomator.frontend.webdav;
|
||||||
requires org.cryptomator.integrations.api;
|
requires org.cryptomator.integrations.api;
|
||||||
@@ -31,18 +32,17 @@ open module org.cryptomator.desktop {
|
|||||||
requires javafx.graphics;
|
requires javafx.graphics;
|
||||||
requires javafx.controls;
|
requires javafx.controls;
|
||||||
requires javafx.fxml;
|
requires javafx.fxml;
|
||||||
|
requires jdk.crypto.ec;
|
||||||
// 3rd party:
|
// 3rd party:
|
||||||
requires ch.qos.logback.classic;
|
requires ch.qos.logback.classic;
|
||||||
requires ch.qos.logback.core;
|
requires ch.qos.logback.core;
|
||||||
requires com.auth0.jwt;
|
requires com.auth0.jwt;
|
||||||
requires com.google.common;
|
requires com.google.common;
|
||||||
requires com.fasterxml.jackson.databind;
|
requires com.fasterxml.jackson.databind;
|
||||||
requires com.fasterxml.jackson.datatype.jsr310;
|
|
||||||
requires com.nimbusds.jose.jwt;
|
requires com.nimbusds.jose.jwt;
|
||||||
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;
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class SubstitutingProperties extends PropertiesDecorator {
|
public class SubstitutingProperties extends PropertiesDecorator {
|
||||||
@@ -59,7 +58,7 @@ public class SubstitutingProperties extends PropertiesDecorator {
|
|||||||
LoggerFactory.getLogger(SubstitutingProperties.class).warn("Variable {} used for substitution not found in {}. Replaced with empty string.", key, src);
|
LoggerFactory.getLogger(SubstitutingProperties.class).warn("Variable {} used for substitution not found in {}. Replaced with empty string.", key, src);
|
||||||
return "";
|
return "";
|
||||||
} else {
|
} else {
|
||||||
return Matcher.quoteReplacement(val);
|
return val.replace("\\", "\\\\");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import javafx.beans.property.StringProperty;
|
|||||||
import javafx.collections.FXCollections;
|
import javafx.collections.FXCollections;
|
||||||
import javafx.collections.ObservableList;
|
import javafx.collections.ObservableList;
|
||||||
import javafx.geometry.NodeOrientation;
|
import javafx.geometry.NodeOrientation;
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class Settings {
|
public class Settings {
|
||||||
@@ -37,21 +36,16 @@ 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");
|
static final String DEFAULT_LAST_UPDATE_CHECK = "2000-01-01";
|
||||||
|
|
||||||
public final ObservableList<VaultSettings> directories;
|
public final ObservableList<VaultSettings> directories;
|
||||||
public final BooleanProperty askedForUpdateCheck;
|
public final BooleanProperty askedForUpdateCheck;
|
||||||
public final BooleanProperty checkForUpdates;
|
public final BooleanProperty checkForUpdates;
|
||||||
@@ -63,8 +57,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;
|
||||||
@@ -75,7 +67,7 @@ public class Settings {
|
|||||||
public final IntegerProperty windowHeight;
|
public final IntegerProperty windowHeight;
|
||||||
public final StringProperty language;
|
public final StringProperty language;
|
||||||
public final StringProperty mountService;
|
public final StringProperty mountService;
|
||||||
public final ObjectProperty<Instant> lastSuccessfulUpdateCheck;
|
public final StringProperty lastUpdateCheck;
|
||||||
|
|
||||||
private Consumer<Settings> saveCmd;
|
private Consumer<Settings> saveCmd;
|
||||||
|
|
||||||
@@ -97,7 +89,6 @@ public class Settings {
|
|||||||
this.startHidden = new SimpleBooleanProperty(this, "startHidden", json.startHidden);
|
this.startHidden = new SimpleBooleanProperty(this, "startHidden", json.startHidden);
|
||||||
this.autoCloseVaults = new SimpleBooleanProperty(this, "autoCloseVaults", json.autoCloseVaults);
|
this.autoCloseVaults = new SimpleBooleanProperty(this, "autoCloseVaults", json.autoCloseVaults);
|
||||||
this.useKeychain = new SimpleBooleanProperty(this, "useKeychain", json.useKeychain);
|
this.useKeychain = new SimpleBooleanProperty(this, "useKeychain", json.useKeychain);
|
||||||
this.useQuickAccess = new SimpleBooleanProperty(this, "addToQuickAccess", json.useQuickAccess);
|
|
||||||
this.port = new SimpleIntegerProperty(this, "webDavPort", json.port);
|
this.port = new SimpleIntegerProperty(this, "webDavPort", json.port);
|
||||||
this.numTrayNotifications = new SimpleIntegerProperty(this, "numTrayNotifications", json.numTrayNotifications);
|
this.numTrayNotifications = new SimpleIntegerProperty(this, "numTrayNotifications", json.numTrayNotifications);
|
||||||
this.debugMode = new SimpleBooleanProperty(this, "debugMode", json.debugMode);
|
this.debugMode = new SimpleBooleanProperty(this, "debugMode", json.debugMode);
|
||||||
@@ -113,8 +104,7 @@ public class Settings {
|
|||||||
this.windowHeight = new SimpleIntegerProperty(this, "windowHeight", json.windowHeight);
|
this.windowHeight = new SimpleIntegerProperty(this, "windowHeight", json.windowHeight);
|
||||||
this.language = new SimpleStringProperty(this, "language", json.language);
|
this.language = new SimpleStringProperty(this, "language", json.language);
|
||||||
this.mountService = new SimpleStringProperty(this, "mountService", json.mountService);
|
this.mountService = new SimpleStringProperty(this, "mountService", json.mountService);
|
||||||
this.quickAccessService = new SimpleStringProperty(this, "quickAccessService", json.quickAccessService);
|
this.lastUpdateCheck = new SimpleStringProperty(this, "lastUpdateCheck", json.lastUpdateCheck);
|
||||||
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());
|
||||||
|
|
||||||
@@ -126,7 +116,6 @@ public class Settings {
|
|||||||
startHidden.addListener(this::somethingChanged);
|
startHidden.addListener(this::somethingChanged);
|
||||||
autoCloseVaults.addListener(this::somethingChanged);
|
autoCloseVaults.addListener(this::somethingChanged);
|
||||||
useKeychain.addListener(this::somethingChanged);
|
useKeychain.addListener(this::somethingChanged);
|
||||||
useQuickAccess.addListener(this::somethingChanged);
|
|
||||||
port.addListener(this::somethingChanged);
|
port.addListener(this::somethingChanged);
|
||||||
numTrayNotifications.addListener(this::somethingChanged);
|
numTrayNotifications.addListener(this::somethingChanged);
|
||||||
debugMode.addListener(this::somethingChanged);
|
debugMode.addListener(this::somethingChanged);
|
||||||
@@ -142,8 +131,7 @@ public class Settings {
|
|||||||
windowHeight.addListener(this::somethingChanged);
|
windowHeight.addListener(this::somethingChanged);
|
||||||
language.addListener(this::somethingChanged);
|
language.addListener(this::somethingChanged);
|
||||||
mountService.addListener(this::somethingChanged);
|
mountService.addListener(this::somethingChanged);
|
||||||
quickAccessService.addListener(this::somethingChanged);
|
lastUpdateCheck.addListener(this::somethingChanged);
|
||||||
lastSuccessfulUpdateCheck.addListener(this::somethingChanged);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@@ -182,7 +170,6 @@ public class Settings {
|
|||||||
json.startHidden = startHidden.get();
|
json.startHidden = startHidden.get();
|
||||||
json.autoCloseVaults = autoCloseVaults.get();
|
json.autoCloseVaults = autoCloseVaults.get();
|
||||||
json.useKeychain = useKeychain.get();
|
json.useKeychain = useKeychain.get();
|
||||||
json.useQuickAccess = useQuickAccess.get();
|
|
||||||
json.port = port.get();
|
json.port = port.get();
|
||||||
json.numTrayNotifications = numTrayNotifications.get();
|
json.numTrayNotifications = numTrayNotifications.get();
|
||||||
json.debugMode = debugMode.get();
|
json.debugMode = debugMode.get();
|
||||||
@@ -198,8 +185,7 @@ public class Settings {
|
|||||||
json.windowHeight = windowHeight.get();
|
json.windowHeight = windowHeight.get();
|
||||||
json.language = language.get();
|
json.language = language.get();
|
||||||
json.mountService = mountService.get();
|
json.mountService = mountService.get();
|
||||||
json.quickAccessService = quickAccessService.get();
|
json.lastUpdateCheck = lastUpdateCheck.get();
|
||||||
json.lastSuccessfulUpdateCheck = lastSuccessfulUpdateCheck.get();
|
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
package org.cryptomator.common.settings;
|
package org.cryptomator.common.settings;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
@@ -82,13 +80,7 @@ class SettingsJson {
|
|||||||
@JsonProperty(value = "preferredVolumeImpl", access = JsonProperty.Access.WRITE_ONLY) // WRITE_ONLY means value is "written" into the java object during deserialization. Upvote this: https://github.com/FasterXML/jackson-annotations/issues/233
|
@JsonProperty(value = "preferredVolumeImpl", access = JsonProperty.Access.WRITE_ONLY) // WRITE_ONLY means value is "written" into the java object during deserialization. Upvote this: https://github.com/FasterXML/jackson-annotations/issues/233
|
||||||
String preferredVolumeImpl;
|
String preferredVolumeImpl;
|
||||||
|
|
||||||
@JsonProperty("lastSuccessfulUpdateCheck")
|
@JsonProperty("lastUpdateCheck")
|
||||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'", timezone = "UTC")
|
String lastUpdateCheck = Settings.DEFAULT_LAST_UPDATE_CHECK;
|
||||||
Instant lastSuccessfulUpdateCheck = Settings.DEFAULT_TIMESTAMP;
|
|
||||||
|
|
||||||
@JsonProperty("useQuickAccess")
|
|
||||||
boolean useQuickAccess = Settings.DEFAULT_USE_QUICKACCESS;
|
|
||||||
|
|
||||||
@JsonProperty("quickAccessService")
|
|
||||||
String quickAccessService = Settings.DEFAULT_QUICKACCESS_SERVICE;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ package org.cryptomator.common.settings;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.core.JacksonException;
|
import com.fasterxml.jackson.core.JacksonException;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
|
||||||
import com.google.common.base.Suppliers;
|
import com.google.common.base.Suppliers;
|
||||||
import org.cryptomator.common.Environment;
|
import org.cryptomator.common.Environment;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -37,7 +36,7 @@ import java.util.stream.Stream;
|
|||||||
@Singleton
|
@Singleton
|
||||||
public class SettingsProvider implements Supplier<Settings> {
|
public class SettingsProvider implements Supplier<Settings> {
|
||||||
|
|
||||||
private static final ObjectMapper JSON = new ObjectMapper().setDefaultLeniency(true).registerModule(new JavaTimeModule());
|
private static final ObjectMapper JSON = new ObjectMapper().setDefaultLeniency(true);
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(SettingsProvider.class);
|
private static final Logger LOG = LoggerFactory.getLogger(SettingsProvider.class);
|
||||||
private static final long SAVE_DELAY_MS = 1000;
|
private static final long SAVE_DELAY_MS = 1000;
|
||||||
|
|
||||||
@@ -58,10 +57,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ public enum FxmlFile {
|
|||||||
CONVERTVAULT_HUBTOPASSWORD_START("/fxml/convertvault_hubtopassword_start.fxml"), //
|
CONVERTVAULT_HUBTOPASSWORD_START("/fxml/convertvault_hubtopassword_start.fxml"), //
|
||||||
CONVERTVAULT_HUBTOPASSWORD_CONVERT("/fxml/convertvault_hubtopassword_convert.fxml"), //
|
CONVERTVAULT_HUBTOPASSWORD_CONVERT("/fxml/convertvault_hubtopassword_convert.fxml"), //
|
||||||
CONVERTVAULT_HUBTOPASSWORD_SUCCESS("/fxml/convertvault_hubtopassword_success.fxml"), //
|
CONVERTVAULT_HUBTOPASSWORD_SUCCESS("/fxml/convertvault_hubtopassword_success.fxml"), //
|
||||||
DOKANY_SUPPORT_END("/fxml/dokany_support_end.fxml"), //
|
|
||||||
ERROR("/fxml/error.fxml"), //
|
ERROR("/fxml/error.fxml"), //
|
||||||
FORGET_PASSWORD("/fxml/forget_password.fxml"), //
|
FORGET_PASSWORD("/fxml/forget_password.fxml"), //
|
||||||
HEALTH_START("/fxml/health_start.fxml"), //
|
HEALTH_START("/fxml/health_start.fxml"), //
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
package org.cryptomator.ui.dokanysupportend;
|
|
||||||
|
|
||||||
import dagger.Lazy;
|
|
||||||
import dagger.Subcomponent;
|
|
||||||
import org.cryptomator.ui.common.FxmlFile;
|
|
||||||
import org.cryptomator.ui.common.FxmlScene;
|
|
||||||
|
|
||||||
import javafx.scene.Scene;
|
|
||||||
import javafx.stage.Stage;
|
|
||||||
|
|
||||||
@DokanySupportEndScoped
|
|
||||||
@Subcomponent(modules = {DokanySupportEndModule.class})
|
|
||||||
public interface DokanySupportEndComponent {
|
|
||||||
|
|
||||||
@DokanySupportEndWindow
|
|
||||||
Stage window();
|
|
||||||
|
|
||||||
@FxmlScene(FxmlFile.DOKANY_SUPPORT_END)
|
|
||||||
Lazy<Scene> dokanySupportEndScene();
|
|
||||||
|
|
||||||
|
|
||||||
default void showDokanySupportEndWindow() {
|
|
||||||
Stage stage = window();
|
|
||||||
stage.setScene(dokanySupportEndScene().get());
|
|
||||||
stage.sizeToScene();
|
|
||||||
stage.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subcomponent.Factory
|
|
||||||
interface Factory {
|
|
||||||
|
|
||||||
DokanySupportEndComponent create();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
package org.cryptomator.ui.dokanysupportend;
|
|
||||||
|
|
||||||
import org.cryptomator.ui.common.FxController;
|
|
||||||
import org.cryptomator.ui.fxapp.FxApplicationWindows;
|
|
||||||
import org.cryptomator.ui.preferences.SelectedPreferencesTab;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import javafx.fxml.FXML;
|
|
||||||
import javafx.stage.Stage;
|
|
||||||
|
|
||||||
|
|
||||||
@DokanySupportEndScoped
|
|
||||||
public class DokanySupportEndController implements FxController {
|
|
||||||
|
|
||||||
private final Stage window;
|
|
||||||
private final FxApplicationWindows applicationWindows;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
DokanySupportEndController(@DokanySupportEndWindow Stage window, FxApplicationWindows applicationWindows) {
|
|
||||||
this.window = window;
|
|
||||||
this.applicationWindows = applicationWindows;
|
|
||||||
}
|
|
||||||
|
|
||||||
@FXML
|
|
||||||
public void close() {
|
|
||||||
window.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void openVolumePreferences() {
|
|
||||||
applicationWindows.showPreferencesWindow(SelectedPreferencesTab.VOLUME);
|
|
||||||
window.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
package org.cryptomator.ui.dokanysupportend;
|
|
||||||
|
|
||||||
import dagger.Binds;
|
|
||||||
import dagger.Module;
|
|
||||||
import dagger.Provides;
|
|
||||||
import dagger.multibindings.IntoMap;
|
|
||||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
|
||||||
import org.cryptomator.ui.common.FxController;
|
|
||||||
import org.cryptomator.ui.common.FxControllerKey;
|
|
||||||
import org.cryptomator.ui.common.FxmlFile;
|
|
||||||
import org.cryptomator.ui.common.FxmlLoaderFactory;
|
|
||||||
import org.cryptomator.ui.common.FxmlScene;
|
|
||||||
import org.cryptomator.ui.common.StageFactory;
|
|
||||||
|
|
||||||
import javax.inject.Provider;
|
|
||||||
import javafx.scene.Scene;
|
|
||||||
import javafx.stage.Modality;
|
|
||||||
import javafx.stage.Stage;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.ResourceBundle;
|
|
||||||
|
|
||||||
@Module
|
|
||||||
abstract class DokanySupportEndModule {
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
@DokanySupportEndWindow
|
|
||||||
@DokanySupportEndScoped
|
|
||||||
static FxmlLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
|
||||||
return new FxmlLoaderFactory(factories, sceneFactory, resourceBundle);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
@DokanySupportEndWindow
|
|
||||||
@DokanySupportEndScoped
|
|
||||||
static Stage provideStage(StageFactory factory, ResourceBundle resourceBundle) {
|
|
||||||
Stage stage = factory.create();
|
|
||||||
stage.setTitle(resourceBundle.getString("dokanySupportEnd.title"));
|
|
||||||
stage.setMinWidth(500);
|
|
||||||
stage.setMinHeight(100);
|
|
||||||
stage.initModality(Modality.APPLICATION_MODAL);
|
|
||||||
return stage;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
@FxmlScene(FxmlFile.DOKANY_SUPPORT_END)
|
|
||||||
@DokanySupportEndScoped
|
|
||||||
static Scene provideDokanySupportEndScene(@DokanySupportEndWindow FxmlLoaderFactory fxmlLoaders) {
|
|
||||||
return fxmlLoaders.createScene(FxmlFile.DOKANY_SUPPORT_END);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Binds
|
|
||||||
@IntoMap
|
|
||||||
@FxControllerKey(DokanySupportEndController.class)
|
|
||||||
abstract FxController bindDokanySupportEndController(DokanySupportEndController controller);
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
package org.cryptomator.ui.dokanysupportend;
|
|
||||||
|
|
||||||
import javax.inject.Scope;
|
|
||||||
import java.lang.annotation.Documented;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
|
|
||||||
@Scope
|
|
||||||
@Documented
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@interface DokanySupportEndScoped {
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package org.cryptomator.ui.dokanysupportend;
|
|
||||||
|
|
||||||
import javax.inject.Qualifier;
|
|
||||||
import java.lang.annotation.Documented;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
|
|
||||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
|
||||||
|
|
||||||
@Qualifier
|
|
||||||
@Documented
|
|
||||||
@Retention(RUNTIME)
|
|
||||||
@interface DokanySupportEndWindow {
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -3,7 +3,6 @@ package org.cryptomator.ui.fxapp;
|
|||||||
import dagger.Lazy;
|
import dagger.Lazy;
|
||||||
import org.cryptomator.common.Environment;
|
import org.cryptomator.common.Environment;
|
||||||
import org.cryptomator.common.settings.Settings;
|
import org.cryptomator.common.settings.Settings;
|
||||||
import org.cryptomator.common.settings.VaultSettings;
|
|
||||||
import org.cryptomator.ui.traymenu.TrayMenuComponent;
|
import org.cryptomator.ui.traymenu.TrayMenuComponent;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -76,27 +75,7 @@ public class FxApplication {
|
|||||||
appWindows.checkAndShowUpdateReminderWindow();
|
appWindows.checkAndShowUpdateReminderWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
migrateAndInformDokanyRemoval();
|
|
||||||
|
|
||||||
launchEventHandler.startHandlingLaunchEvents();
|
launchEventHandler.startHandlingLaunchEvents();
|
||||||
autoUnlocker.tryUnlockForTimespan(2, TimeUnit.MINUTES);
|
autoUnlocker.tryUnlockForTimespan(2, TimeUnit.MINUTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void migrateAndInformDokanyRemoval() {
|
|
||||||
var dokanyProviderId = "org.cryptomator.frontend.dokany.mount.DokanyMountProvider";
|
|
||||||
boolean dokanyFound = false;
|
|
||||||
if (settings.mountService.getValueSafe().equals(dokanyProviderId)) {
|
|
||||||
dokanyFound = true;
|
|
||||||
settings.mountService.set(null);
|
|
||||||
}
|
|
||||||
for (VaultSettings vaultSettings : settings.directories) {
|
|
||||||
if (vaultSettings.mountService.getValueSafe().equals(dokanyProviderId)) {
|
|
||||||
dokanyFound = true;
|
|
||||||
vaultSettings.mountService.set(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (dokanyFound) {
|
|
||||||
appWindows.showDokanySupportEndWindow();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ package org.cryptomator.ui.fxapp;
|
|||||||
|
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
import org.cryptomator.ui.dokanysupportend.DokanySupportEndComponent;
|
|
||||||
import org.cryptomator.ui.error.ErrorComponent;
|
import org.cryptomator.ui.error.ErrorComponent;
|
||||||
import org.cryptomator.ui.health.HealthCheckComponent;
|
import org.cryptomator.ui.health.HealthCheckComponent;
|
||||||
import org.cryptomator.ui.lock.LockComponent;
|
import org.cryptomator.ui.lock.LockComponent;
|
||||||
@@ -34,7 +33,6 @@ import java.io.InputStream;
|
|||||||
ErrorComponent.class, //
|
ErrorComponent.class, //
|
||||||
HealthCheckComponent.class, //
|
HealthCheckComponent.class, //
|
||||||
UpdateReminderComponent.class, //
|
UpdateReminderComponent.class, //
|
||||||
DokanySupportEndComponent.class, //
|
|
||||||
ShareVaultComponent.class})
|
ShareVaultComponent.class})
|
||||||
abstract class FxApplicationModule {
|
abstract class FxApplicationModule {
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import dagger.Lazy;
|
|||||||
import org.cryptomator.common.vaults.Vault;
|
import org.cryptomator.common.vaults.Vault;
|
||||||
import org.cryptomator.common.vaults.VaultState;
|
import org.cryptomator.common.vaults.VaultState;
|
||||||
import org.cryptomator.integrations.tray.TrayIntegrationProvider;
|
import org.cryptomator.integrations.tray.TrayIntegrationProvider;
|
||||||
import org.cryptomator.ui.dokanysupportend.DokanySupportEndComponent;
|
|
||||||
import org.cryptomator.ui.error.ErrorComponent;
|
import org.cryptomator.ui.error.ErrorComponent;
|
||||||
import org.cryptomator.ui.lock.LockComponent;
|
import org.cryptomator.ui.lock.LockComponent;
|
||||||
import org.cryptomator.ui.mainwindow.MainWindowComponent;
|
import org.cryptomator.ui.mainwindow.MainWindowComponent;
|
||||||
@@ -49,7 +48,6 @@ public class FxApplicationWindows {
|
|||||||
private final QuitComponent.Builder quitWindowBuilder;
|
private final QuitComponent.Builder quitWindowBuilder;
|
||||||
private final UnlockComponent.Factory unlockWorkflowFactory;
|
private final UnlockComponent.Factory unlockWorkflowFactory;
|
||||||
private final UpdateReminderComponent.Factory updateReminderWindowBuilder;
|
private final UpdateReminderComponent.Factory updateReminderWindowBuilder;
|
||||||
private final DokanySupportEndComponent.Factory dokanySupportEndWindowBuilder;
|
|
||||||
private final LockComponent.Factory lockWorkflowFactory;
|
private final LockComponent.Factory lockWorkflowFactory;
|
||||||
private final ErrorComponent.Factory errorWindowFactory;
|
private final ErrorComponent.Factory errorWindowFactory;
|
||||||
private final ExecutorService executor;
|
private final ExecutorService executor;
|
||||||
@@ -58,14 +56,13 @@ public class FxApplicationWindows {
|
|||||||
private final FilteredList<Window> visibleWindows;
|
private final FilteredList<Window> visibleWindows;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public FxApplicationWindows(@PrimaryStage Stage primaryStage, //
|
public FxApplicationWindows(@PrimaryStage Stage primaryStage,
|
||||||
Optional<TrayIntegrationProvider> trayIntegration, //
|
Optional<TrayIntegrationProvider> trayIntegration, //
|
||||||
Lazy<MainWindowComponent> mainWindow, //
|
Lazy<MainWindowComponent> mainWindow, //
|
||||||
Lazy<PreferencesComponent> preferencesWindow, //
|
Lazy<PreferencesComponent> preferencesWindow, //
|
||||||
QuitComponent.Builder quitWindowBuilder, //
|
QuitComponent.Builder quitWindowBuilder, //
|
||||||
UnlockComponent.Factory unlockWorkflowFactory, //
|
UnlockComponent.Factory unlockWorkflowFactory, //
|
||||||
UpdateReminderComponent.Factory updateReminderWindowBuilder, //
|
UpdateReminderComponent.Factory updateReminderWindowBuilder, //
|
||||||
DokanySupportEndComponent.Factory dokanySupportEndWindowBuilder, //
|
|
||||||
LockComponent.Factory lockWorkflowFactory, //
|
LockComponent.Factory lockWorkflowFactory, //
|
||||||
ErrorComponent.Factory errorWindowFactory, //
|
ErrorComponent.Factory errorWindowFactory, //
|
||||||
VaultOptionsComponent.Factory vaultOptionsWindow, //
|
VaultOptionsComponent.Factory vaultOptionsWindow, //
|
||||||
@@ -78,7 +75,6 @@ public class FxApplicationWindows {
|
|||||||
this.quitWindowBuilder = quitWindowBuilder;
|
this.quitWindowBuilder = quitWindowBuilder;
|
||||||
this.unlockWorkflowFactory = unlockWorkflowFactory;
|
this.unlockWorkflowFactory = unlockWorkflowFactory;
|
||||||
this.updateReminderWindowBuilder = updateReminderWindowBuilder;
|
this.updateReminderWindowBuilder = updateReminderWindowBuilder;
|
||||||
this.dokanySupportEndWindowBuilder = dokanySupportEndWindowBuilder;
|
|
||||||
this.lockWorkflowFactory = lockWorkflowFactory;
|
this.lockWorkflowFactory = lockWorkflowFactory;
|
||||||
this.errorWindowFactory = errorWindowFactory;
|
this.errorWindowFactory = errorWindowFactory;
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
@@ -146,11 +142,6 @@ public class FxApplicationWindows {
|
|||||||
CompletableFuture.runAsync(() -> updateReminderWindowBuilder.create().checkAndShowUpdateReminderWindow(), Platform::runLater);
|
CompletableFuture.runAsync(() -> updateReminderWindowBuilder.create().checkAndShowUpdateReminderWindow(), Platform::runLater);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showDokanySupportEndWindow() {
|
|
||||||
CompletableFuture.runAsync(() -> dokanySupportEndWindowBuilder.create().showDokanySupportEndWindow(), Platform::runLater);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public CompletionStage<Void> startUnlockWorkflow(Vault vault, @Nullable Stage owner) {
|
public CompletionStage<Void> startUnlockWorkflow(Vault vault, @Nullable Stage owner) {
|
||||||
return CompletableFuture.supplyAsync(() -> {
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
Preconditions.checkState(vault.stateProperty().transition(VaultState.Value.LOCKED, VaultState.Value.PROCESSING), "Vault not locked.");
|
Preconditions.checkState(vault.stateProperty().transition(VaultState.Value.LOCKED, VaultState.Value.PROCESSING), "Vault not locked.");
|
||||||
|
|||||||
@@ -1,57 +1,45 @@
|
|||||||
package org.cryptomator.ui.fxapp;
|
package org.cryptomator.ui.fxapp;
|
||||||
|
|
||||||
import org.cryptomator.common.Environment;
|
import org.cryptomator.common.Environment;
|
||||||
import org.cryptomator.common.SemVerComparator;
|
|
||||||
import org.cryptomator.common.settings.Settings;
|
import org.cryptomator.common.settings.Settings;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javafx.beans.binding.Bindings;
|
import javax.inject.Named;
|
||||||
import javafx.beans.binding.BooleanBinding;
|
import javafx.beans.binding.BooleanBinding;
|
||||||
import javafx.beans.property.ObjectProperty;
|
|
||||||
import javafx.beans.property.ReadOnlyStringProperty;
|
import javafx.beans.property.ReadOnlyStringProperty;
|
||||||
import javafx.beans.property.SimpleObjectProperty;
|
|
||||||
import javafx.beans.property.SimpleStringProperty;
|
|
||||||
import javafx.beans.property.StringProperty;
|
import javafx.beans.property.StringProperty;
|
||||||
import javafx.concurrent.ScheduledService;
|
import javafx.concurrent.ScheduledService;
|
||||||
import javafx.concurrent.Worker;
|
import javafx.concurrent.Worker;
|
||||||
import javafx.concurrent.WorkerStateEvent;
|
import javafx.concurrent.WorkerStateEvent;
|
||||||
import javafx.util.Duration;
|
import javafx.util.Duration;
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
|
||||||
@FxApplicationScoped
|
@FxApplicationScoped
|
||||||
public class UpdateChecker {
|
public class UpdateChecker {
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(UpdateChecker.class);
|
private static final Logger LOG = LoggerFactory.getLogger(UpdateChecker.class);
|
||||||
private static final Duration AUTO_CHECK_DELAY = Duration.seconds(5);
|
private static final Duration AUTOCHECK_DELAY = Duration.seconds(5);
|
||||||
|
|
||||||
private final Environment env;
|
private final Environment env;
|
||||||
private final Settings settings;
|
private final Settings settings;
|
||||||
private final StringProperty latestVersion = new SimpleStringProperty();
|
private final StringProperty latestVersionProperty;
|
||||||
|
private final Comparator<String> semVerComparator;
|
||||||
private final ScheduledService<String> updateCheckerService;
|
private final ScheduledService<String> updateCheckerService;
|
||||||
private final ObjectProperty<UpdateCheckState> state = new SimpleObjectProperty<>(UpdateCheckState.NOT_CHECKED);
|
|
||||||
private final ObjectProperty<Instant> lastSuccessfulUpdateCheck;
|
|
||||||
private final Comparator<String> versionComparator = new SemVerComparator();
|
|
||||||
private final BooleanBinding updateAvailable;
|
|
||||||
private final BooleanBinding checkFailed;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
UpdateChecker(Settings settings, //
|
UpdateChecker(Settings settings, Environment env, @Named("latestVersion") StringProperty latestVersionProperty, @Named("SemVer") Comparator<String> semVerComparator, ScheduledService<String> updateCheckerService) {
|
||||||
Environment env, //
|
|
||||||
ScheduledService<String> updateCheckerService) {
|
|
||||||
this.env = env;
|
this.env = env;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
|
this.latestVersionProperty = latestVersionProperty;
|
||||||
|
this.semVerComparator = semVerComparator;
|
||||||
this.updateCheckerService = updateCheckerService;
|
this.updateCheckerService = updateCheckerService;
|
||||||
this.lastSuccessfulUpdateCheck = settings.lastSuccessfulUpdateCheck;
|
|
||||||
this.updateAvailable = Bindings.createBooleanBinding(this::isUpdateAvailable, latestVersion);
|
|
||||||
this.checkFailed = Bindings.equal(UpdateCheckState.CHECK_FAILED, state);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void automaticallyCheckForUpdatesIfEnabled() {
|
public void automaticallyCheckForUpdatesIfEnabled() {
|
||||||
if (!env.disableUpdateCheck() && settings.checkForUpdates.get()) {
|
if (!env.disableUpdateCheck() && settings.checkForUpdates.get()) {
|
||||||
startCheckingForUpdates(AUTO_CHECK_DELAY);
|
startCheckingForUpdates(AUTOCHECK_DELAY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,65 +59,36 @@ public class UpdateChecker {
|
|||||||
|
|
||||||
private void checkStarted(WorkerStateEvent event) {
|
private void checkStarted(WorkerStateEvent event) {
|
||||||
LOG.debug("Checking for updates...");
|
LOG.debug("Checking for updates...");
|
||||||
state.set(UpdateCheckState.IS_CHECKING);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkSucceeded(WorkerStateEvent event) {
|
private void checkSucceeded(WorkerStateEvent event) {
|
||||||
var latestVersionString = updateCheckerService.getValue();
|
String latestVersion = updateCheckerService.getValue();
|
||||||
LOG.info("Current version: {}, latest version: {}", getCurrentVersion(), latestVersionString);
|
LOG.info("Current version: {}, lastest version: {}", getCurrentVersion(), latestVersion);
|
||||||
lastSuccessfulUpdateCheck.set(Instant.now());
|
|
||||||
latestVersion.set(latestVersionString);
|
if (semVerComparator.compare(getCurrentVersion(), latestVersion) < 0) {
|
||||||
state.set(UpdateCheckState.CHECK_SUCCESSFUL);
|
// update is available
|
||||||
|
latestVersionProperty.set(latestVersion);
|
||||||
|
} else {
|
||||||
|
latestVersionProperty.set(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkFailed(WorkerStateEvent event) {
|
private void checkFailed(WorkerStateEvent event) {
|
||||||
state.set(UpdateCheckState.CHECK_FAILED);
|
LOG.warn("Error checking for updates", event.getSource().getException());
|
||||||
}
|
|
||||||
|
|
||||||
public enum UpdateCheckState {
|
|
||||||
NOT_CHECKED,
|
|
||||||
IS_CHECKING,
|
|
||||||
CHECK_SUCCESSFUL,
|
|
||||||
CHECK_FAILED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Observable Properties */
|
/* Observable Properties */
|
||||||
|
|
||||||
public BooleanBinding checkingForUpdatesProperty() {
|
public BooleanBinding checkingForUpdatesProperty() {
|
||||||
return updateCheckerService.stateProperty().isEqualTo(Worker.State.RUNNING);
|
return updateCheckerService.stateProperty().isEqualTo(Worker.State.RUNNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReadOnlyStringProperty latestVersionProperty() {
|
public ReadOnlyStringProperty latestVersionProperty() {
|
||||||
return latestVersion;
|
return latestVersionProperty;
|
||||||
}
|
|
||||||
|
|
||||||
public BooleanBinding updateAvailableProperty() {
|
|
||||||
return updateAvailable;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BooleanBinding checkFailedProperty() {
|
|
||||||
return checkFailed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isUpdateAvailable() {
|
|
||||||
String currentVersion = getCurrentVersion();
|
|
||||||
String latestVersionString = latestVersion.get();
|
|
||||||
|
|
||||||
if (currentVersion == null || latestVersionString == null) {
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return versionComparator.compare(currentVersion, latestVersionString) < 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ObjectProperty<Instant> lastSuccessfulUpdateCheckProperty() {
|
|
||||||
return lastSuccessfulUpdateCheck;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ObjectProperty<UpdateCheckState> updateCheckStateProperty() {
|
|
||||||
return state;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCurrentVersion() {
|
public String getCurrentVersion() {
|
||||||
return env.getAppVersion();
|
return env.getAppVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ import org.slf4j.LoggerFactory;
|
|||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
import javafx.beans.binding.Bindings;
|
import javafx.beans.binding.Bindings;
|
||||||
import javafx.beans.binding.ObjectBinding;
|
import javafx.beans.binding.ObjectBinding;
|
||||||
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
|
import javafx.beans.property.StringProperty;
|
||||||
import javafx.concurrent.ScheduledService;
|
import javafx.concurrent.ScheduledService;
|
||||||
import javafx.concurrent.Task;
|
import javafx.concurrent.Task;
|
||||||
import javafx.util.Duration;
|
import javafx.util.Duration;
|
||||||
@@ -30,6 +32,13 @@ public abstract class UpdateCheckerModule {
|
|||||||
private static final Duration UPDATE_CHECK_INTERVAL = Duration.hours(3);
|
private static final Duration UPDATE_CHECK_INTERVAL = Duration.hours(3);
|
||||||
private static final Duration DISABLED_UPDATE_CHECK_INTERVAL = Duration.hours(100000); // Duration.INDEFINITE leads to overflows...
|
private static final Duration DISABLED_UPDATE_CHECK_INTERVAL = Duration.hours(100000); // Duration.INDEFINITE leads to overflows...
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Named("latestVersion")
|
||||||
|
@FxApplicationScoped
|
||||||
|
static StringProperty provideLatestVersion() {
|
||||||
|
return new SimpleStringProperty();
|
||||||
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@FxApplicationScoped
|
@FxApplicationScoped
|
||||||
static Optional<HttpClient> provideHttpClient() {
|
static Optional<HttpClient> provideHttpClient() {
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public class MainWindowTitleController implements FxController {
|
|||||||
this.appWindows = appWindows;
|
this.appWindows = appWindows;
|
||||||
this.trayMenuInitialized = trayMenu.isInitialized();
|
this.trayMenuInitialized = trayMenu.isInitialized();
|
||||||
this.updateChecker = updateChecker;
|
this.updateChecker = updateChecker;
|
||||||
this.updateAvailable = updateChecker.updateAvailableProperty();
|
this.updateAvailable = updateChecker.latestVersionProperty().isNotNull();
|
||||||
this.licenseHolder = licenseHolder;
|
this.licenseHolder = licenseHolder;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.showMinimizeButton = Bindings.createBooleanBinding(this::isShowMinimizeButton, settings.showMinimizeButton, settings.showTrayIcon);
|
this.showMinimizeButton = Bindings.createBooleanBinding(this::isShowMinimizeButton, settings.showMinimizeButton, settings.showTrayIcon);
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import org.cryptomator.cryptofs.CryptoFileSystemProvider;
|
|||||||
import org.cryptomator.cryptofs.DirStructure;
|
import org.cryptomator.cryptofs.DirStructure;
|
||||||
import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent;
|
import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent;
|
||||||
import org.cryptomator.ui.common.FxController;
|
import org.cryptomator.ui.common.FxController;
|
||||||
import org.cryptomator.ui.common.VaultService;
|
|
||||||
import org.cryptomator.ui.fxapp.FxApplicationWindows;
|
import org.cryptomator.ui.fxapp.FxApplicationWindows;
|
||||||
import org.cryptomator.ui.removevault.RemoveVaultComponent;
|
import org.cryptomator.ui.removevault.RemoveVaultComponent;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -59,7 +58,6 @@ public class VaultListController implements FxController {
|
|||||||
|
|
||||||
private final Stage mainWindow;
|
private final Stage mainWindow;
|
||||||
private final ObservableList<Vault> vaults;
|
private final ObservableList<Vault> vaults;
|
||||||
private final VaultService vaultService;
|
|
||||||
private final ObjectProperty<Vault> selectedVault;
|
private final ObjectProperty<Vault> selectedVault;
|
||||||
private final VaultListCellFactory cellFactory;
|
private final VaultListCellFactory cellFactory;
|
||||||
private final AddVaultWizardComponent.Builder addVaultWizard;
|
private final AddVaultWizardComponent.Builder addVaultWizard;
|
||||||
@@ -81,7 +79,6 @@ public class VaultListController implements FxController {
|
|||||||
ObservableList<Vault> vaults, //
|
ObservableList<Vault> vaults, //
|
||||||
ObjectProperty<Vault> selectedVault, //
|
ObjectProperty<Vault> selectedVault, //
|
||||||
VaultListCellFactory cellFactory, //
|
VaultListCellFactory cellFactory, //
|
||||||
VaultService vaultService, //
|
|
||||||
AddVaultWizardComponent.Builder addVaultWizard, //
|
AddVaultWizardComponent.Builder addVaultWizard, //
|
||||||
RemoveVaultComponent.Builder removeVaultDialogue, //
|
RemoveVaultComponent.Builder removeVaultDialogue, //
|
||||||
VaultListManager vaultListManager, //
|
VaultListManager vaultListManager, //
|
||||||
@@ -91,7 +88,6 @@ public class VaultListController implements FxController {
|
|||||||
this.vaults = vaults;
|
this.vaults = vaults;
|
||||||
this.selectedVault = selectedVault;
|
this.selectedVault = selectedVault;
|
||||||
this.cellFactory = cellFactory;
|
this.cellFactory = cellFactory;
|
||||||
this.vaultService = vaultService;
|
|
||||||
this.addVaultWizard = addVaultWizard;
|
this.addVaultWizard = addVaultWizard;
|
||||||
this.removeVaultDialogue = removeVaultDialogue;
|
this.removeVaultDialogue = removeVaultDialogue;
|
||||||
this.vaultListManager = vaultListManager;
|
this.vaultListManager = vaultListManager;
|
||||||
@@ -123,9 +119,6 @@ public class VaultListController implements FxController {
|
|||||||
Optional.ofNullable(selectedVault.get())
|
Optional.ofNullable(selectedVault.get())
|
||||||
.filter(Vault::isLocked)
|
.filter(Vault::isLocked)
|
||||||
.ifPresent(vault -> appWindows.startUnlockWorkflow(vault, mainWindow));
|
.ifPresent(vault -> appWindows.startUnlockWorkflow(vault, mainWindow));
|
||||||
Optional.ofNullable(selectedVault.get())
|
|
||||||
.filter(Vault::isUnlocked)
|
|
||||||
.ifPresent(vaultService::reveal);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class PreferencesController implements FxController {
|
|||||||
this.env = env;
|
this.env = env;
|
||||||
this.window = window;
|
this.window = window;
|
||||||
this.selectedTabProperty = selectedTabProperty;
|
this.selectedTabProperty = selectedTabProperty;
|
||||||
this.updateAvailable = updateChecker.updateAvailableProperty();
|
this.updateAvailable = updateChecker.latestVersionProperty().isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
|
|||||||
@@ -1,33 +1,18 @@
|
|||||||
package org.cryptomator.ui.preferences;
|
package org.cryptomator.ui.preferences;
|
||||||
|
|
||||||
import org.cryptomator.common.Environment;
|
|
||||||
import org.cryptomator.common.settings.Settings;
|
import org.cryptomator.common.settings.Settings;
|
||||||
import org.cryptomator.ui.common.FxController;
|
import org.cryptomator.ui.common.FxController;
|
||||||
import org.cryptomator.ui.fxapp.UpdateChecker;
|
import org.cryptomator.ui.fxapp.UpdateChecker;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javafx.animation.PauseTransition;
|
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
import javafx.beans.binding.Bindings;
|
import javafx.beans.binding.Bindings;
|
||||||
import javafx.beans.binding.BooleanBinding;
|
import javafx.beans.binding.BooleanBinding;
|
||||||
import javafx.beans.binding.ObjectBinding;
|
import javafx.beans.binding.ObjectBinding;
|
||||||
import javafx.beans.binding.StringBinding;
|
|
||||||
import javafx.beans.property.BooleanProperty;
|
|
||||||
import javafx.beans.property.ReadOnlyStringProperty;
|
import javafx.beans.property.ReadOnlyStringProperty;
|
||||||
import javafx.beans.property.SimpleBooleanProperty;
|
|
||||||
import javafx.beans.value.ObservableValue;
|
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.CheckBox;
|
import javafx.scene.control.CheckBox;
|
||||||
import javafx.scene.control.ContentDisplay;
|
import javafx.scene.control.ContentDisplay;
|
||||||
import java.time.Duration;
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.ZoneId;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.time.format.FormatStyle;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.ResourceBundle;
|
|
||||||
|
|
||||||
|
|
||||||
@PreferencesScoped
|
@PreferencesScoped
|
||||||
public class UpdatesPreferencesController implements FxController {
|
public class UpdatesPreferencesController implements FxController {
|
||||||
@@ -35,55 +20,29 @@ public class UpdatesPreferencesController implements FxController {
|
|||||||
private static final String DOWNLOADS_URI = "https://cryptomator.org/downloads";
|
private static final String DOWNLOADS_URI = "https://cryptomator.org/downloads";
|
||||||
|
|
||||||
private final Application application;
|
private final Application application;
|
||||||
private final Environment environment;
|
|
||||||
private final ResourceBundle resourceBundle;
|
|
||||||
private final Settings settings;
|
private final Settings settings;
|
||||||
private final UpdateChecker updateChecker;
|
private final UpdateChecker updateChecker;
|
||||||
private final ObjectBinding<ContentDisplay> checkForUpdatesButtonState;
|
private final ObjectBinding<ContentDisplay> checkForUpdatesButtonState;
|
||||||
private final ReadOnlyStringProperty latestVersion;
|
private final ReadOnlyStringProperty latestVersion;
|
||||||
private final ObservableValue<Instant> lastSuccessfulUpdateCheck;
|
|
||||||
private final StringBinding lastUpdateCheckMessage;
|
|
||||||
private final ObservableValue<String> timeDifferenceMessage;
|
|
||||||
private final String currentVersion;
|
private final String currentVersion;
|
||||||
private final BooleanBinding updateAvailable;
|
private final BooleanBinding updateAvailable;
|
||||||
private final BooleanBinding checkFailed;
|
|
||||||
private final BooleanProperty upToDateLabelVisible = new SimpleBooleanProperty(false);
|
|
||||||
private final DateTimeFormatter formatter;
|
|
||||||
private final BooleanBinding upToDate;
|
|
||||||
|
|
||||||
/* FXML */
|
/* FXML */
|
||||||
public CheckBox checkForUpdatesCheckbox;
|
public CheckBox checkForUpdatesCheckbox;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
UpdatesPreferencesController(Application application, Environment environment, ResourceBundle resourceBundle, Settings settings, UpdateChecker updateChecker) {
|
UpdatesPreferencesController(Application application, Settings settings, UpdateChecker updateChecker) {
|
||||||
this.application = application;
|
this.application = application;
|
||||||
this.environment = environment;
|
|
||||||
this.resourceBundle = resourceBundle;
|
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.updateChecker = updateChecker;
|
this.updateChecker = updateChecker;
|
||||||
this.checkForUpdatesButtonState = Bindings.when(updateChecker.checkingForUpdatesProperty()).then(ContentDisplay.LEFT).otherwise(ContentDisplay.TEXT_ONLY);
|
this.checkForUpdatesButtonState = Bindings.when(updateChecker.checkingForUpdatesProperty()).then(ContentDisplay.LEFT).otherwise(ContentDisplay.TEXT_ONLY);
|
||||||
this.latestVersion = updateChecker.latestVersionProperty();
|
this.latestVersion = updateChecker.latestVersionProperty();
|
||||||
this.lastSuccessfulUpdateCheck = updateChecker.lastSuccessfulUpdateCheckProperty();
|
this.updateAvailable = latestVersion.isNotNull();
|
||||||
this.timeDifferenceMessage = Bindings.createStringBinding(this::getTimeDifferenceMessage, lastSuccessfulUpdateCheck);
|
|
||||||
this.currentVersion = updateChecker.getCurrentVersion();
|
this.currentVersion = updateChecker.getCurrentVersion();
|
||||||
this.updateAvailable = updateChecker.updateAvailableProperty();
|
|
||||||
this.formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(Locale.getDefault());
|
|
||||||
this.upToDate = updateChecker.updateCheckStateProperty().isEqualTo(UpdateChecker.UpdateCheckState.CHECK_SUCCESSFUL).and(latestVersion.isEqualTo(currentVersion));
|
|
||||||
this.checkFailed = updateChecker.checkFailedProperty();
|
|
||||||
this.lastUpdateCheckMessage = Bindings.createStringBinding(this::getLastUpdateCheckMessage, lastSuccessfulUpdateCheck);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
checkForUpdatesCheckbox.selectedProperty().bindBidirectional(settings.checkForUpdates);
|
checkForUpdatesCheckbox.selectedProperty().bindBidirectional(settings.checkForUpdates);
|
||||||
|
|
||||||
upToDate.addListener((_, _, newVal) -> {
|
|
||||||
if (newVal) {
|
|
||||||
upToDateLabelVisible.set(true);
|
|
||||||
PauseTransition delay = new PauseTransition(javafx.util.Duration.seconds(5));
|
|
||||||
delay.setOnFinished(_ -> upToDateLabelVisible.set(false));
|
|
||||||
delay.play();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
@@ -96,11 +55,6 @@ public class UpdatesPreferencesController implements FxController {
|
|||||||
application.getHostServices().showDocument(DOWNLOADS_URI);
|
application.getHostServices().showDocument(DOWNLOADS_URI);
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
|
||||||
public void showLogfileDirectory() {
|
|
||||||
environment.getLogDir().ifPresent(logDirPath -> application.getHostServices().showDocument(logDirPath.toUri().toString()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Observable Properties */
|
/* Observable Properties */
|
||||||
|
|
||||||
public ObjectBinding<ContentDisplay> checkForUpdatesButtonStateProperty() {
|
public ObjectBinding<ContentDisplay> checkForUpdatesButtonStateProperty() {
|
||||||
@@ -123,46 +77,6 @@ public class UpdatesPreferencesController implements FxController {
|
|||||||
return currentVersion;
|
return currentVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StringBinding lastUpdateCheckMessageProperty() {
|
|
||||||
return lastUpdateCheckMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLastUpdateCheckMessage() {
|
|
||||||
Instant lastCheck = lastSuccessfulUpdateCheck.getValue();
|
|
||||||
if (lastCheck != null && !lastCheck.equals(Settings.DEFAULT_TIMESTAMP)) {
|
|
||||||
return formatter.format(LocalDateTime.ofInstant(lastCheck, ZoneId.systemDefault()));
|
|
||||||
} else {
|
|
||||||
return "-";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ObservableValue<String> timeDifferenceMessageProperty() {
|
|
||||||
return timeDifferenceMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTimeDifferenceMessage() {
|
|
||||||
var lastSuccessCheck = lastSuccessfulUpdateCheck.getValue();
|
|
||||||
var duration = Duration.between(lastSuccessCheck, Instant.now());
|
|
||||||
var hours = duration.toHours();
|
|
||||||
if (lastSuccessCheck.equals(Settings.DEFAULT_TIMESTAMP)) {
|
|
||||||
return resourceBundle.getString("preferences.updates.lastUpdateCheck.never");
|
|
||||||
} else if (hours < 1) {
|
|
||||||
return resourceBundle.getString("preferences.updates.lastUpdateCheck.recently");
|
|
||||||
} else if (hours < 24) {
|
|
||||||
return String.format(resourceBundle.getString("preferences.updates.lastUpdateCheck.hoursAgo"), hours);
|
|
||||||
} else {
|
|
||||||
return String.format(resourceBundle.getString("preferences.updates.lastUpdateCheck.daysAgo"), duration.toDays());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public BooleanProperty upToDateLabelVisibleProperty() {
|
|
||||||
return upToDateLabelVisible;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isUpToDateLabelVisible() {
|
|
||||||
return upToDateLabelVisible.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
public BooleanBinding updateAvailableProperty() {
|
public BooleanBinding updateAvailableProperty() {
|
||||||
return updateAvailable;
|
return updateAvailable;
|
||||||
}
|
}
|
||||||
@@ -170,13 +84,4 @@ public class UpdatesPreferencesController implements FxController {
|
|||||||
public boolean isUpdateAvailable() {
|
public boolean isUpdateAvailable() {
|
||||||
return updateAvailable.get();
|
return updateAvailable.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public BooleanBinding checkFailedProperty() {
|
|
||||||
return checkFailed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isCheckFailed() {
|
|
||||||
return checkFailed.getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,7 @@ import org.cryptomator.ui.common.FxmlScene;
|
|||||||
|
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import java.time.Duration;
|
import java.time.LocalDate;
|
||||||
import java.time.Instant;
|
|
||||||
|
|
||||||
@UpdateReminderScoped
|
@UpdateReminderScoped
|
||||||
@Subcomponent(modules = {UpdateReminderModule.class})
|
@Subcomponent(modules = {UpdateReminderModule.class})
|
||||||
@@ -24,8 +23,7 @@ public interface UpdateReminderComponent {
|
|||||||
Settings settings();
|
Settings settings();
|
||||||
|
|
||||||
default void checkAndShowUpdateReminderWindow() {
|
default void checkAndShowUpdateReminderWindow() {
|
||||||
var now = Instant.now();
|
if (LocalDate.parse(settings().lastUpdateCheck.get()).isBefore(LocalDate.now().minusDays(14)) && !settings().checkForUpdates.getValue()) {
|
||||||
if (!settings().checkForUpdates.getValue() && settings().lastSuccessfulUpdateCheck.get().isBefore(now.minus(Duration.ofDays(14)))) {
|
|
||||||
Stage stage = window();
|
Stage stage = window();
|
||||||
stage.setScene(updateReminderScene().get());
|
stage.setScene(updateReminderScene().get());
|
||||||
stage.sizeToScene();
|
stage.sizeToScene();
|
||||||
@@ -35,7 +33,6 @@ public interface UpdateReminderComponent {
|
|||||||
|
|
||||||
@Subcomponent.Factory
|
@Subcomponent.Factory
|
||||||
interface Factory {
|
interface Factory {
|
||||||
|
|
||||||
UpdateReminderComponent create();
|
UpdateReminderComponent create();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7,6 +7,8 @@ import org.cryptomator.ui.fxapp.UpdateChecker;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
@UpdateReminderScoped
|
@UpdateReminderScoped
|
||||||
public class UpdateReminderController implements FxController {
|
public class UpdateReminderController implements FxController {
|
||||||
@@ -25,17 +27,20 @@ public class UpdateReminderController implements FxController {
|
|||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void cancel() {
|
public void cancel() {
|
||||||
|
settings.lastUpdateCheck.set(LocalDate.now().format(DateTimeFormatter.ISO_DATE));
|
||||||
window.close();
|
window.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void once() {
|
public void once() {
|
||||||
|
settings.lastUpdateCheck.set(LocalDate.now().format(DateTimeFormatter.ISO_DATE));
|
||||||
updateChecker.checkForUpdatesNow();
|
updateChecker.checkForUpdatesNow();
|
||||||
window.close();
|
window.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void automatically() {
|
public void automatically() {
|
||||||
|
settings.lastUpdateCheck.set(LocalDate.now().format(DateTimeFormatter.ISO_DATE));
|
||||||
updateChecker.checkForUpdatesNow();
|
updateChecker.checkForUpdatesNow();
|
||||||
settings.checkForUpdates.set(true);
|
settings.checkForUpdates.set(true);
|
||||||
window.close();
|
window.close();
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
|
|
||||||
<?import javafx.geometry.Insets?>
|
|
||||||
<?import javafx.scene.control.Button?>
|
|
||||||
<?import javafx.scene.control.ButtonBar?>
|
|
||||||
<?import javafx.scene.control.Label?>
|
|
||||||
<?import javafx.scene.Group?>
|
|
||||||
<?import javafx.scene.layout.HBox?>
|
|
||||||
<?import javafx.scene.layout.Region?>
|
|
||||||
<?import javafx.scene.layout.StackPane?>
|
|
||||||
<?import javafx.scene.layout.VBox?>
|
|
||||||
<?import javafx.scene.shape.Circle?>
|
|
||||||
<HBox xmlns:fx="http://javafx.com/fxml"
|
|
||||||
xmlns="http://javafx.com/javafx"
|
|
||||||
fx:controller="org.cryptomator.ui.dokanysupportend.DokanySupportEndController"
|
|
||||||
minWidth="500"
|
|
||||||
prefWidth="500"
|
|
||||||
minHeight="145"
|
|
||||||
spacing="12"
|
|
||||||
alignment="TOP_LEFT">
|
|
||||||
<padding>
|
|
||||||
<Insets topRightBottomLeft="12"/>
|
|
||||||
</padding>
|
|
||||||
<children>
|
|
||||||
<Group>
|
|
||||||
<StackPane>
|
|
||||||
<padding>
|
|
||||||
<Insets topRightBottomLeft="6"/>
|
|
||||||
</padding>
|
|
||||||
<Circle styleClass="glyph-icon-primary" radius="24"/>
|
|
||||||
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="EXCLAMATION" glyphSize="24"/>
|
|
||||||
</StackPane>
|
|
||||||
</Group>
|
|
||||||
|
|
||||||
<VBox HBox.hgrow="ALWAYS">
|
|
||||||
<Label styleClass="label-large" text="%dokanySupportEnd.message" wrapText="true">
|
|
||||||
<padding>
|
|
||||||
<Insets bottom="6" top="6"/>
|
|
||||||
</padding>
|
|
||||||
</Label>
|
|
||||||
<Label text="%dokanySupportEnd.description" wrapText="true"/>
|
|
||||||
<Region VBox.vgrow="ALWAYS" minHeight="18"/>
|
|
||||||
<ButtonBar buttonMinWidth="120" buttonOrder="+UC">
|
|
||||||
<buttons>
|
|
||||||
<Button text="%dokanySupportEnd.preferencesBtn" ButtonBar.buttonData="OTHER" cancelButton="true" onAction="#openVolumePreferences"/>
|
|
||||||
<Button text="%generic.button.close" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#close" defaultButton="true"/>
|
|
||||||
</buttons>
|
|
||||||
</ButtonBar>
|
|
||||||
|
|
||||||
</VBox>
|
|
||||||
</children>
|
|
||||||
</HBox>
|
|
||||||
@@ -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"
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -1,19 +1,13 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
|
|
||||||
<?import org.cryptomator.ui.controls.FontAwesome5Spinner?>
|
|
||||||
<?import org.cryptomator.ui.controls.FormattedLabel?>
|
<?import org.cryptomator.ui.controls.FormattedLabel?>
|
||||||
<?import org.cryptomator.ui.controls.FormattedString?>
|
<?import org.cryptomator.ui.controls.FormattedString?>
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
<?import javafx.scene.control.Button?>
|
<?import javafx.scene.control.Button?>
|
||||||
<?import javafx.scene.control.CheckBox?>
|
<?import javafx.scene.control.CheckBox?>
|
||||||
<?import javafx.scene.control.Hyperlink?>
|
<?import javafx.scene.control.Hyperlink?>
|
||||||
<?import javafx.scene.control.Label?>
|
|
||||||
<?import javafx.scene.layout.HBox?>
|
|
||||||
<?import javafx.scene.layout.VBox?>
|
<?import javafx.scene.layout.VBox?>
|
||||||
<?import javafx.scene.control.Tooltip?>
|
<?import org.cryptomator.ui.controls.FontAwesome5Spinner?>
|
||||||
<?import javafx.scene.text.TextFlow?>
|
|
||||||
<?import javafx.scene.text.Text?>
|
|
||||||
<VBox xmlns:fx="http://javafx.com/fxml"
|
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||||
xmlns="http://javafx.com/javafx"
|
xmlns="http://javafx.com/javafx"
|
||||||
fx:controller="org.cryptomator.ui.preferences.UpdatesPreferencesController"
|
fx:controller="org.cryptomator.ui.preferences.UpdatesPreferencesController"
|
||||||
@@ -24,34 +18,19 @@
|
|||||||
<padding>
|
<padding>
|
||||||
<Insets topRightBottomLeft="24"/>
|
<Insets topRightBottomLeft="24"/>
|
||||||
</padding>
|
</padding>
|
||||||
<FormattedLabel format="%preferences.updates.currentVersion" arg1="${controller.currentVersion}" textAlignment="CENTER" wrapText="true"/>
|
<children>
|
||||||
|
<FormattedLabel format="%preferences.updates.currentVersion" arg1="${controller.currentVersion}" textAlignment="CENTER" wrapText="true"/>
|
||||||
|
|
||||||
<CheckBox fx:id="checkForUpdatesCheckbox" text="%preferences.updates.autoUpdateCheck"/>
|
<CheckBox fx:id="checkForUpdatesCheckbox" text="%preferences.updates.autoUpdateCheck"/>
|
||||||
|
|
||||||
<VBox alignment="CENTER" spacing="12">
|
<VBox alignment="CENTER" spacing="12">
|
||||||
<Button text="%preferences.updates.checkNowBtn" defaultButton="true" onAction="#checkNow" contentDisplay="${controller.checkForUpdatesButtonState}">
|
<Button text="%preferences.updates.checkNowBtn" defaultButton="true" onAction="#checkNow" contentDisplay="${controller.checkForUpdatesButtonState}">
|
||||||
<graphic>
|
<graphic>
|
||||||
<FontAwesome5Spinner glyphSize="12"/>
|
<FontAwesome5Spinner fx:id="spinner" glyphSize="12"/>
|
||||||
</graphic>
|
</graphic>
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<TextFlow styleClass="text-flow" textAlignment="CENTER" visible="${controller.checkFailed}" managed="${controller.checkFailed}">
|
<Hyperlink text="${linkLabel.value}" onAction="#visitDownloadsPage" textAlignment="CENTER" wrapText="true" styleClass="hyperlink-underline" visible="${controller.updateAvailable}"/>
|
||||||
<FontAwesome5IconView glyphSize="12" styleClass="glyph-icon-orange" glyph="EXCLAMATION_TRIANGLE"/>
|
</VBox>
|
||||||
<Text text=" "/>
|
</children>
|
||||||
<Text text="%preferences.updates.checkFailed"/>
|
|
||||||
<Text text=" "/>
|
|
||||||
<Hyperlink styleClass="hyperlink-underline" text="%preferences.general.debugDirectory" onAction="#showLogfileDirectory"/>
|
|
||||||
</TextFlow>
|
|
||||||
<FormattedLabel format="%preferences.updates.lastUpdateCheck" arg1="${controller.timeDifferenceMessage}" textAlignment="CENTER" wrapText="true">
|
|
||||||
<tooltip>
|
|
||||||
<Tooltip text="${controller.lastUpdateCheckMessage}" showDelay="10ms"/>
|
|
||||||
</tooltip>
|
|
||||||
</FormattedLabel>
|
|
||||||
<Label text="%preferences.updates.upToDate" visible="${controller.upToDateLabelVisible}" managed="${controller.upToDateLabelVisible}">
|
|
||||||
<graphic>
|
|
||||||
<FontAwesome5IconView glyphSize="12" styleClass="glyph-icon-primary" glyph="CHECK"/>
|
|
||||||
</graphic>
|
|
||||||
</Label>
|
|
||||||
<Hyperlink text="${linkLabel.value}" onAction="#visitDownloadsPage" textAlignment="CENTER" wrapText="true" styleClass="hyperlink-underline" visible="${controller.updateAvailable}" managed="${controller.updateAvailable}"/>
|
|
||||||
</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
|
||||||
@@ -322,14 +321,6 @@ preferences.updates.currentVersion=Current Version: %s
|
|||||||
preferences.updates.autoUpdateCheck=Check for updates automatically
|
preferences.updates.autoUpdateCheck=Check for updates automatically
|
||||||
preferences.updates.checkNowBtn=Check Now
|
preferences.updates.checkNowBtn=Check Now
|
||||||
preferences.updates.updateAvailable=Update to version %s available.
|
preferences.updates.updateAvailable=Update to version %s available.
|
||||||
preferences.updates.lastUpdateCheck=Last check: %s
|
|
||||||
preferences.updates.lastUpdateCheck.never=never
|
|
||||||
preferences.updates.lastUpdateCheck.recently=recently
|
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=%s days 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.upToDate=Cryptomator is up-to-date.
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Support Us
|
preferences.contribute=Support Us
|
||||||
preferences.contribute.registeredFor=Supporter certificate registered for %s
|
preferences.contribute.registeredFor=Supporter certificate registered for %s
|
||||||
@@ -542,12 +533,6 @@ updateReminder.notNow=Not Now
|
|||||||
updateReminder.yesOnce=Yes, Once
|
updateReminder.yesOnce=Yes, Once
|
||||||
updateReminder.yesAutomatically=Yes, Automatically
|
updateReminder.yesAutomatically=Yes, Automatically
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.title=Deprecation notice
|
|
||||||
dokanySupportEnd.message=Support end for Dokany
|
|
||||||
dokanySupportEnd.description=The volume type Dokany is no longer supported by Cryptomator. Your settings are adjusted to use the default volume type now. You can view the default type in the preferences.
|
|
||||||
dokanySupportEnd.preferencesBtn=Open Preferences
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Share Vault
|
shareVault.title=Share Vault
|
||||||
shareVault.message=Would you like to share your vault with others?
|
shareVault.message=Would you like to share your vault with others?
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ addvaultwizard.new.nameInstruction=اختر اسم للمخزن
|
|||||||
addvaultwizard.new.namePrompt=اسم الخزينة
|
addvaultwizard.new.namePrompt=اسم الخزينة
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=أين يجب على Cryptomator تخزين الملفات المشفرة للمخزن الخاص بك؟
|
addvaultwizard.new.locationInstruction=أين يجب على Cryptomator تخزين الملفات المشفرة للمخزن الخاص بك؟
|
||||||
addvaultwizard.new.locationLoading=جاري التحقق من وجود مسارات تخزين سحابية افتراضية في نظام الملفات المحلية…
|
|
||||||
addvaultwizard.new.locationLabel=موقع التخزين
|
addvaultwizard.new.locationLabel=موقع التخزين
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=موقع مخصص
|
addvaultwizard.new.directoryPickerLabel=موقع مخصص
|
||||||
@@ -142,9 +141,6 @@ unlock.error.customPath.description.hideawayNotDir=لا يمكن إزالة ال
|
|||||||
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.description=اختر نوع قرص آخر في خيارات المخزن أو اعد تشغيل Cryptomator.
|
|
||||||
unlock.error.title=فشل فتح "%s"
|
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=غير قادر على الوصول إلى مفتاح الجهاز
|
hub.noKeychain.message=غير قادر على الوصول إلى مفتاح الجهاز
|
||||||
hub.noKeychain.description=من أجل فتح مركز مخازن، مطلوب مفتاح جهاز، يتم تأمينه باستخدام سلسلة مفاتيح. للمضي قدما، قم بتمكين "%s" واختر سلسلة مفاتيح في التفضيلات.
|
hub.noKeychain.description=من أجل فتح مركز مخازن، مطلوب مفتاح جهاز، يتم تأمينه باستخدام سلسلة مفاتيح. للمضي قدما، قم بتمكين "%s" واختر سلسلة مفاتيح في التفضيلات.
|
||||||
@@ -157,31 +153,15 @@ hub.auth.loginLink=لم يتم إعادة توجيهك؟ انقر هنا لفت
|
|||||||
hub.receive.message=معالجة الاستجابة…
|
hub.receive.message=معالجة الاستجابة…
|
||||||
hub.receive.description=Cryptomator يتلقى ويعالج الاستجابة من المركز. الرجاء الانتظار.
|
hub.receive.description=Cryptomator يتلقى ويعالج الاستجابة من المركز. الرجاء الانتظار.
|
||||||
### Register Device
|
### Register Device
|
||||||
hub.register.message=جهاز جديد
|
|
||||||
hub.register.description=هذا هو أول وصول مركزي من هذا الجهاز. الرجاء تسجيله باستخدام مفتاح الحساب الخاص بك.
|
|
||||||
hub.register.nameLabel=اسم الجهاز
|
hub.register.nameLabel=اسم الجهاز
|
||||||
hub.register.invalidAccountKeyLabel=مفتاح الحساب غير صحيح
|
|
||||||
hub.register.registerBtn=تسجيل
|
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
hub.register.legacy.occupiedMsg=الاسم قيد الاستخدام
|
|
||||||
hub.register.legacy.description=هذا هو أول وصول للمركز من هذا الجهاز. الرجاء تسجيله.
|
|
||||||
### Registration Success
|
### Registration Success
|
||||||
hub.registerSuccess.message=تم تسجيل الجهاز
|
|
||||||
hub.registerSuccess.description=تم تسجيل جهازك بنجاح. يمكنك الآن المتابعة لفتح الخزنة.
|
|
||||||
hub.registerSuccess.unlockBtn=افتح
|
hub.registerSuccess.unlockBtn=افتح
|
||||||
hub.registerSuccess.legacy.description=للدخول إلى الخزينة، يحتاج جهازك كذالك إلى إذن من مالك الخزينة.
|
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=فشل تسجيل الجهاز
|
|
||||||
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 الخاص بك لديه ترخيص غير صالح. الرجاء إبلاغ مسؤول مركز لترقية أو تجديد الترخيص.
|
||||||
@@ -303,31 +283,16 @@ preferences.interface.showMinimizeButton=إظهار زر التصغير
|
|||||||
preferences.interface.showTrayIcon=إظهار أيقونة اللوحة (يتطلب إعادة تشغيل)
|
preferences.interface.showTrayIcon=إظهار أيقونة اللوحة (يتطلب إعادة تشغيل)
|
||||||
## Volume
|
## Volume
|
||||||
preferences.volume=القرص الإفتراضي
|
preferences.volume=القرص الإفتراضي
|
||||||
preferences.volume.type=نوع القرص الافتراضي
|
|
||||||
preferences.volume.type.automatic=تلقائي
|
preferences.volume.type.automatic=تلقائي
|
||||||
preferences.volume.docsTooltip=افتح الوثائق لمعرفة المزيد عن مختلف أنواع وحدة التخزين.
|
preferences.volume.docsTooltip=افتح الوثائق لمعرفة المزيد عن مختلف أنواع وحدة التخزين.
|
||||||
preferences.volume.fuseRestartRequired=لتطبيق التغييرات، يحتاج Cryptomator إلى إعادة التشغيل.
|
preferences.volume.fuseRestartRequired=لتطبيق التغييرات، يحتاج Cryptomator إلى إعادة التشغيل.
|
||||||
preferences.volume.tcp.port=منفذ TCP الافتراضي
|
|
||||||
preferences.volume.supportedFeatures=يدعم نوع وحدة تخزين المختار الميزات التالية:
|
preferences.volume.supportedFeatures=يدعم نوع وحدة تخزين المختار الميزات التالية:
|
||||||
preferences.volume.feature.mountAuto=اختيار نقطة البَدْء التلقائية
|
|
||||||
preferences.volume.feature.mountToDir=مجلد مخصص كنقطة تحميل
|
|
||||||
preferences.volume.feature.mountToDriveLetter=استخدام حرف وحدة التخزين كنقطة تحميل
|
|
||||||
preferences.volume.feature.mountFlags=خيارات التثبيت المخصصة
|
|
||||||
preferences.volume.feature.readOnly=تحميل للقراءة فقط
|
|
||||||
## Updates
|
## Updates
|
||||||
preferences.updates=تحديثات
|
preferences.updates=تحديثات
|
||||||
preferences.updates.currentVersion=الإصدار الحالي: %s
|
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=ادعمنا
|
||||||
preferences.contribute.registeredFor=شهادة الداعم مسجلة لـ %s
|
preferences.contribute.registeredFor=شهادة الداعم مسجلة لـ %s
|
||||||
@@ -344,34 +309,13 @@ stats.title=إحصائيات عن %s
|
|||||||
stats.cacheHitRate=معدل استخدام الكاش
|
stats.cacheHitRate=معدل استخدام الكاش
|
||||||
## Read
|
## Read
|
||||||
stats.read.throughput.idle=قراءة: خامل
|
stats.read.throughput.idle=قراءة: خامل
|
||||||
stats.read.throughput.kibs=القراءة: %.2f KiB/s
|
|
||||||
stats.read.throughput.mibs=القراءة: %.2f MiB/s
|
|
||||||
stats.read.total.data.none=بيانات القراءة: -
|
|
||||||
stats.read.total.data.kib=بيانات القراءة: %.1f كيلوبايت
|
|
||||||
stats.read.total.data.mib=بيانات القراءة: %.1f ميجابايت
|
|
||||||
stats.read.total.data.gib=بيانات القراءة: %.1f جيجابايت
|
|
||||||
stats.decr.total.data.none=تم فك تشفير البيانات:-
|
stats.decr.total.data.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 +333,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 +342,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 +365,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 +380,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 +407,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 +417,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 +437,10 @@ 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
|
|
||||||
dokanySupportEnd.title=إشعار بإيقاف الدعم
|
|
||||||
dokanySupportEnd.message=انتهاء الدعم لـDokany
|
|
||||||
dokanySupportEnd.description=نوع وحدة التخزين Dokany لم يعد مدعوماً من قبل Cryptomator. تم تعديل إعداداتك لاستخدام نوع وحدة التخزين الافتراضي الآن. يمكنك عرض النوع الافتراضي في التفضيلات.
|
|
||||||
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
|
|
||||||
@@ -308,7 +308,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 версияһына тиклем яңыртыу бар.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Ярҙам
|
preferences.contribute=Ярҙам
|
||||||
preferences.contribute.registeredFor=%s өсөн теркәлгән ярҙамсы сертификаты
|
preferences.contribute.registeredFor=%s өсөн теркәлгән ярҙамсы сертификаты
|
||||||
@@ -519,7 +518,4 @@ updateReminder.notNow=Хәҙер түгел
|
|||||||
updateReminder.yesOnce=Эйе, бер тапҡыр
|
updateReminder.yesOnce=Эйе, бер тапҡыр
|
||||||
updateReminder.yesAutomatically=Эйе, автоматик рәүештә
|
updateReminder.yesAutomatically=Эйе, автоматик рәүештә
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.preferencesBtn=Көйләүҙәрҙе ас
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -295,7 +295,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
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Падтрымай нас
|
preferences.contribute=Падтрымай нас
|
||||||
preferences.contribute.registeredFor=Сэртыфікат ахвяравальніка зарэгістраваны на %s
|
preferences.contribute.registeredFor=Сэртыфікат ахвяравальніка зарэгістраваны на %s
|
||||||
@@ -499,7 +498,4 @@ updateReminder.notNow=Не цяпер
|
|||||||
updateReminder.yesOnce=Так, аднойчы
|
updateReminder.yesOnce=Так, аднойчы
|
||||||
updateReminder.yesAutomatically=Так, аўтаматычна
|
updateReminder.yesAutomatically=Так, аўтаматычна
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.preferencesBtn=Адчыніць налады
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -308,7 +308,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.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Подкрепете ни
|
preferences.contribute=Подкрепете ни
|
||||||
preferences.contribute.registeredFor=Сертификатът за дарение е регистриран на %s
|
preferences.contribute.registeredFor=Сертификатът за дарение е регистриран на %s
|
||||||
@@ -519,7 +518,4 @@ updateReminder.notNow=Не сега
|
|||||||
updateReminder.yesOnce=Да, веднъж
|
updateReminder.yesOnce=Да, веднъж
|
||||||
updateReminder.yesAutomatically=Да, автоматично
|
updateReminder.yesAutomatically=Да, автоматично
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.preferencesBtn=Към настройките
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -122,7 +122,6 @@ lock.forced.retryBtn=পুনরায় চেষ্টা করুন
|
|||||||
## Interface
|
## Interface
|
||||||
## Volume
|
## Volume
|
||||||
## Updates
|
## Updates
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|
||||||
@@ -176,6 +175,4 @@ vaultOptions.mount.mountPoint.directoryPickerButton=নির্বাচন ক
|
|||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -171,7 +171,6 @@ preferences.updates.currentVersion=Trenutna verzija: %s
|
|||||||
preferences.updates.autoUpdateCheck=Automatski provjeri ima li ažuriranja
|
preferences.updates.autoUpdateCheck=Automatski provjeri ima li ažuriranja
|
||||||
preferences.updates.checkNowBtn=Provjeri sada
|
preferences.updates.checkNowBtn=Provjeri sada
|
||||||
preferences.updates.updateAvailable=Dostupno ažuriranje na verziju %s.
|
preferences.updates.updateAvailable=Dostupno ažuriranje na verziju %s.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|
||||||
@@ -318,6 +317,4 @@ quit.lockAndQuitBtn=Zaključaj i zatvori
|
|||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ addvaultwizard.new.nameInstruction=Introduiu el nom de la caixa forta
|
|||||||
addvaultwizard.new.namePrompt=Nom de la caixa forta
|
addvaultwizard.new.namePrompt=Nom de la caixa forta
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=On deu emmagatzemar Cryptomator els fitxers xifrats de la vostra caixa forta?
|
addvaultwizard.new.locationInstruction=On deu emmagatzemar Cryptomator els fitxers xifrats de la vostra caixa forta?
|
||||||
addvaultwizard.new.locationLoading=Comprovació del sistema de fitxers locals per a trobar directoris habituals d'emmagatzematge al núvol…
|
|
||||||
addvaultwizard.new.locationLabel=Ubicació de l'emmagatzematge
|
addvaultwizard.new.locationLabel=Ubicació de l'emmagatzematge
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=Ubicació personalitzada
|
addvaultwizard.new.directoryPickerLabel=Ubicació personalitzada
|
||||||
@@ -142,9 +141,6 @@ unlock.error.customPath.description.hideawayNotDir=El fitxer temporal "%3$s" uti
|
|||||||
unlock.error.customPath.description.couldNotBeCleaned=La caixa forta no es pot muntar en "%s". Intenteu-ho de nou o escolliu un destí diferent, si us plau.
|
unlock.error.customPath.description.couldNotBeCleaned=La caixa forta no es pot muntar en "%s". Intenteu-ho de nou o escolliu un destí diferent, si us plau.
|
||||||
unlock.error.customPath.description.notEmptyDir=El punt de muntatge "%s" no és una carpeta buida. Trieu una carpeta buida i proveu-ho de nou.
|
unlock.error.customPath.description.notEmptyDir=El punt de muntatge "%s" no és una carpeta buida. Trieu una carpeta buida i proveu-ho de nou.
|
||||||
unlock.error.customPath.description.generic=Al anar a desar la caixa forta en el lloc indicat ha fallat amb el missatge: %2$s
|
unlock.error.customPath.description.generic=Al anar a desar la caixa forta en el lloc indicat ha fallat amb el missatge: %2$s
|
||||||
unlock.error.restartRequired.message=No ha estat possible desblocar la caixa forta
|
|
||||||
unlock.error.restartRequired.description=Canvieu el tipus de volum en les opcions de la caixa forta o reinicieu Criptovalor.
|
|
||||||
unlock.error.title=El desblocatge de "%s" ha fallat
|
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=No es pot accedir a la clau del dispositiu
|
hub.noKeychain.message=No es pot accedir a la clau del dispositiu
|
||||||
hub.noKeychain.description=Per poder desblocar caixes fortes del Hub es requereix la clau d'un dispositiu, que s'emmagatzema de forma segura en un clauer. Per continuar, habiliti "%s" i seleccioni un clauer en les Preferències.
|
hub.noKeychain.description=Per poder desblocar caixes fortes del Hub es requereix la clau d'un dispositiu, que s'emmagatzema de forma segura en un clauer. Per continuar, habiliti "%s" i seleccioni un clauer en les Preferències.
|
||||||
@@ -158,30 +154,15 @@ hub.receive.message=S'està processant la resposta…
|
|||||||
hub.receive.description=Cryptomator està rebent i processant la resposta del Hub. Espereu, si us plau.
|
hub.receive.description=Cryptomator està rebent i processant la resposta del Hub. Espereu, si us plau.
|
||||||
### Register Device
|
### Register Device
|
||||||
hub.register.message=Nou dispositiu
|
hub.register.message=Nou dispositiu
|
||||||
hub.register.description=Aquest és el primer accés a Hub d'aquest dispositiu. Si us plau, registreu-vos-hi amb la vostra Account Key.
|
|
||||||
hub.register.nameLabel=Nom del dispositiu
|
hub.register.nameLabel=Nom del dispositiu
|
||||||
hub.register.invalidAccountKeyLabel=Account Key no és vàlida
|
|
||||||
hub.register.registerBtn=Registre
|
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
hub.register.legacy.occupiedMsg=El nom ja està en ús
|
|
||||||
hub.register.legacy.description=Aquest és el primer accés a Hub d'aquest dispositiu. Si us plau, registreu-lo.
|
|
||||||
### Registration Success
|
### Registration Success
|
||||||
hub.registerSuccess.message=Dispositiu registrat
|
|
||||||
hub.registerSuccess.description=El vostre dispositiu ha estat registrat correctament. Ara podeu desblocar la caixa forta.
|
|
||||||
hub.registerSuccess.unlockBtn=Desbloqueja
|
hub.registerSuccess.unlockBtn=Desbloqueja
|
||||||
hub.registerSuccess.legacy.description=Per a accedir a la caixa forta, el vostre dispositiu ha de ser autoritzat pel propietari de la caixa.
|
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=El registre del dispositiu ha fallat
|
|
||||||
hub.registerFailed.description.generic=S'ha produït un error en el procés de registre. Per a obtindre'n més detalls vegeu els registres de l'aplicació.
|
|
||||||
hub.registerFailed.description.deviceAlreadyExists=El dispositiu ja ha estat registrat per un altre usuari. Mireu de canviar el compte d'usuari o feu servir un dispositiu diferent.
|
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Accés denegat
|
hub.unauthorized.message=Accés denegat
|
||||||
hub.unauthorized.description=El vostre dispositiu no ha estat encara autoritzat a accedir a aquesta caixa forta. Demaneu autorització al propietari.
|
hub.unauthorized.description=El vostre dispositiu no ha estat encara autoritzat a accedir a aquesta caixa forta. Demaneu autorització al propietari.
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Acció necessària
|
|
||||||
hub.requireAccountInit.description.0=Per a continuar, si us plau, seguiu els passos necessaris en el vostre
|
|
||||||
hub.requireAccountInit.description.1=perfil d'usuari de Hub
|
|
||||||
hub.requireAccountInit.description.2=.
|
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
hub.invalidLicense.message=La llicència del Hub no és vàlida
|
hub.invalidLicense.message=La llicència del Hub no és vàlida
|
||||||
hub.invalidLicense.description=Aquest Cryptomator Hub no té una llicència vàlida. Informa si us plau a l'administrador perquè actualitzi o renovi la llicència.
|
hub.invalidLicense.description=Aquest Cryptomator Hub no té una llicència vàlida. Informa si us plau a l'administrador perquè actualitzi o renovi la llicència.
|
||||||
@@ -303,11 +284,9 @@ preferences.interface.showMinimizeButton=Mostra el botó 'minimitzar'
|
|||||||
preferences.interface.showTrayIcon=Mostra la icona en la barra (cal reiniciar)
|
preferences.interface.showTrayIcon=Mostra la icona en la barra (cal reiniciar)
|
||||||
## Volume
|
## Volume
|
||||||
preferences.volume=Unitat virtual
|
preferences.volume=Unitat virtual
|
||||||
preferences.volume.type=Tipus de volum per defecte
|
|
||||||
preferences.volume.type.automatic=Automàtic
|
preferences.volume.type.automatic=Automàtic
|
||||||
preferences.volume.docsTooltip=Obre la documentació per aprendre més sobre els diferents tipus de volums.
|
preferences.volume.docsTooltip=Obre la documentació per aprendre més sobre els diferents tipus de volums.
|
||||||
preferences.volume.fuseRestartRequired=Per aplicar els canvis Cryptomator necessita reiniciar-se.
|
preferences.volume.fuseRestartRequired=Per aplicar els canvis Cryptomator necessita reiniciar-se.
|
||||||
preferences.volume.tcp.port=Port TCP per defecte
|
|
||||||
preferences.volume.supportedFeatures=El tipus de volum escollit suporta les següents característiques:
|
preferences.volume.supportedFeatures=El tipus de volum escollit suporta les següents característiques:
|
||||||
preferences.volume.feature.mountAuto=Selecció automàtica del punt de muntatge
|
preferences.volume.feature.mountAuto=Selecció automàtica del punt de muntatge
|
||||||
preferences.volume.feature.mountToDir=Directori personalitzat com a punt de muntatge
|
preferences.volume.feature.mountToDir=Directori personalitzat com a punt de muntatge
|
||||||
@@ -320,7 +299,6 @@ preferences.updates.currentVersion=Versió actual: %s
|
|||||||
preferences.updates.autoUpdateCheck=Comprova automàticament si hi ha actualitzacions
|
preferences.updates.autoUpdateCheck=Comprova automàticament si hi ha actualitzacions
|
||||||
preferences.updates.checkNowBtn=Comprova-ho ara
|
preferences.updates.checkNowBtn=Comprova-ho ara
|
||||||
preferences.updates.updateAvailable=L'actualització a la versió %s es troba disponible.
|
preferences.updates.updateAvailable=L'actualització a la versió %s es troba disponible.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Doneu-nos suport
|
preferences.contribute=Doneu-nos suport
|
||||||
preferences.contribute.registeredFor=Certificat de col·laborador registrat per a %s
|
preferences.contribute.registeredFor=Certificat de col·laborador registrat per a %s
|
||||||
@@ -393,7 +371,6 @@ main.vaultDetail.unlockBtn=Desbloca…
|
|||||||
main.vaultDetail.unlockNowBtn=Desbloqueja ara
|
main.vaultDetail.unlockNowBtn=Desbloqueja ara
|
||||||
main.vaultDetail.optionsBtn=Opcions de la caixa forta
|
main.vaultDetail.optionsBtn=Opcions de la caixa forta
|
||||||
main.vaultDetail.passwordSavedInKeychain=Contrasenya desada
|
main.vaultDetail.passwordSavedInKeychain=Contrasenya desada
|
||||||
main.vaultDetail.share=Compateix…
|
|
||||||
### Unlocked
|
### Unlocked
|
||||||
main.vaultDetail.unlockedStatus=DESBLOQUEJADA
|
main.vaultDetail.unlockedStatus=DESBLOQUEJADA
|
||||||
main.vaultDetail.accessLocation=Els continguts de la vostra caixa forta són accessibles aquí:
|
main.vaultDetail.accessLocation=Els continguts de la vostra caixa forta són accessibles aquí:
|
||||||
@@ -448,7 +425,6 @@ vaultOptions.general.startHealthCheckBtn=Inicia la comprovació
|
|||||||
|
|
||||||
## Mount
|
## Mount
|
||||||
vaultOptions.mount=Muntatge
|
vaultOptions.mount=Muntatge
|
||||||
vaultOptions.mount.info=Obriu les preferències de la unitat virtual per a canviar les preferències per defecte.
|
|
||||||
vaultOptions.mount.readonly=Només lectura
|
vaultOptions.mount.readonly=Només lectura
|
||||||
vaultOptions.mount.customMountFlags=Senyaladors de muntatge personalitzats
|
vaultOptions.mount.customMountFlags=Senyaladors de muntatge personalitzats
|
||||||
vaultOptions.mount.winDriveLetterOccupied=ocupat
|
vaultOptions.mount.winDriveLetterOccupied=ocupat
|
||||||
@@ -458,10 +434,6 @@ vaultOptions.mount.mountPoint.driveLetter=Utilitza la lletra de la unitat assign
|
|||||||
vaultOptions.mount.mountPoint.custom=Faci servir el directori escollit
|
vaultOptions.mount.mountPoint.custom=Faci servir el directori escollit
|
||||||
vaultOptions.mount.mountPoint.directoryPickerButton=Trieu…
|
vaultOptions.mount.mountPoint.directoryPickerButton=Trieu…
|
||||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Triï un directori
|
vaultOptions.mount.mountPoint.directoryPickerTitle=Triï un directori
|
||||||
vaultOptions.mount.volumeType.default=Per defecte (%s)
|
|
||||||
vaultOptions.mount.volumeType.restartRequired=Per a fer servir aquest tipus de volum cal reiniciar Cryptomator.
|
|
||||||
vaultOptions.mount.volume.tcp.port=Port TCP
|
|
||||||
vaultOptions.mount.volume.type=Tipus de volum
|
|
||||||
## Master Key
|
## Master Key
|
||||||
vaultOptions.masterkey=Contrasenya
|
vaultOptions.masterkey=Contrasenya
|
||||||
vaultOptions.masterkey.changePasswordBtn=Canvi de contrasenya
|
vaultOptions.masterkey.changePasswordBtn=Canvi de contrasenya
|
||||||
@@ -533,25 +505,4 @@ updateReminder.notNow=Ara no
|
|||||||
updateReminder.yesOnce=Sí, una vegada
|
updateReminder.yesOnce=Sí, una vegada
|
||||||
updateReminder.yesAutomatically=Sí, automàticament
|
updateReminder.yesAutomatically=Sí, automàticament
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.preferencesBtn=Obrir les Preferències
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Comparteix la caixa forta
|
|
||||||
shareVault.message=Voleu compartir la vostra caixa forta amb altres persones?
|
|
||||||
shareVault.description=Aneu amb molt de compte quan compartiu la vostra caixa forta amb altres persones. En resum, seguiu aquests passos:
|
|
||||||
shareVault.instruction.1=1. Compartiu l'accés a la carpeta via emmagatzematge en el núvol.
|
|
||||||
shareVault.instruction.2=2. Compartiu la contrasenya de la caixa forta per un mitjà segur.
|
|
||||||
shareVault.remarkBestPractices=Si en voleu més informació, feu una ullada als suggeriments que trobareu a la nostra documentació.
|
|
||||||
shareVault.docsTooltip=Obre la documentació per aprendre més sobre compartir caixes fortes.
|
|
||||||
shareVault.hubAd.description=La forma segura de treballar en equip
|
|
||||||
shareVault.hubAd.keyManagement=* Gestió sense divulgació de mots de pas
|
|
||||||
shareVault.hubAd.authentication=* Autenticació forta
|
|
||||||
shareVault.hubAd.encryption=Xifratge d'extrem a extrem
|
|
||||||
shareVault.visitHub=Visita Cryptomator Hub
|
|
||||||
|
|
||||||
shareVault.hub.message=Com compartir una caixa forta al Hub
|
|
||||||
shareVault.hub.description=Per tal de compartir el contingut de la caixa forta amb un altre membre de l'equip, heu de seguir dos passos:
|
|
||||||
shareVault.hub.instruction.1=1. Compartiu l'accés a la carpeta via emmagatzematge en el núvol.
|
|
||||||
shareVault.hub.instruction.2=2. Doneu accés al membre de l'equip a Cryptomator Hub.
|
|
||||||
shareVault.hub.openHub=Obre Cryptomator Hub
|
|
||||||
@@ -24,7 +24,6 @@ error.existingSolutionDescription=Cryptomator neočekával, že se tak stane. Na
|
|||||||
error.hyperlink.solution=Podívejte se na řešení
|
error.hyperlink.solution=Podívejte se na řešení
|
||||||
error.lookupPermissionMessage=Cryptomator může najít řešení tohoto problému online. To odešle žádost do naší databáze problémů z vaší IP adresy.
|
error.lookupPermissionMessage=Cryptomator může najít řešení tohoto problému online. To odešle žádost do naší databáze problémů z vaší IP adresy.
|
||||||
error.dismiss=Zrušit
|
error.dismiss=Zrušit
|
||||||
error.lookUpSolution=Vyhledat řešení
|
|
||||||
|
|
||||||
# Defaults
|
# Defaults
|
||||||
defaults.vault.vaultName=Trezor
|
defaults.vault.vaultName=Trezor
|
||||||
@@ -47,7 +46,6 @@ addvaultwizard.new.nameInstruction=Zvolte jméno trezoru
|
|||||||
addvaultwizard.new.namePrompt=Název trezoru
|
addvaultwizard.new.namePrompt=Název trezoru
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=Kde by měl Cryptomator ukládat šifrované soubory vašeho trezoru?
|
addvaultwizard.new.locationInstruction=Kde by měl Cryptomator ukládat šifrované soubory vašeho trezoru?
|
||||||
addvaultwizard.new.locationLoading=Kontroluji lokální souborový systém pro výchozí cloudové úložiště…
|
|
||||||
addvaultwizard.new.locationLabel=Umístění úložiště
|
addvaultwizard.new.locationLabel=Umístění úložiště
|
||||||
addvaultwizard.new.locationPrompt=...
|
addvaultwizard.new.locationPrompt=...
|
||||||
addvaultwizard.new.directoryPickerLabel=Vlastní umístění
|
addvaultwizard.new.directoryPickerLabel=Vlastní umístění
|
||||||
@@ -137,12 +135,8 @@ unlock.success.revealBtn=Zobrazit jednotku
|
|||||||
unlock.error.customPath.message=Nelze připojit trezor k vlastní cestě
|
unlock.error.customPath.message=Nelze připojit trezor k vlastní cestě
|
||||||
unlock.error.customPath.description.notSupported=Pokud chcete pokračovat v používání vlastní cesty, přejděte do nastavení a vyberte typ hlasitosti, který ji podporuje. V opačném případě přejděte do možností trezoru a vyberte podporovaný přípojný bod.
|
unlock.error.customPath.description.notSupported=Pokud chcete pokračovat v používání vlastní cesty, přejděte do nastavení a vyberte typ hlasitosti, který ji podporuje. V opačném případě přejděte do možností trezoru a vyberte podporovaný přípojný bod.
|
||||||
unlock.error.customPath.description.notExists=Cesta k připojení neexistuje. Buď ji vytvořte ve vašem lokálním souborovém systému, nebo ji změňte v možnostech trezoru.
|
unlock.error.customPath.description.notExists=Cesta k připojení neexistuje. Buď ji vytvořte ve vašem lokálním souborovém systému, nebo ji změňte v možnostech trezoru.
|
||||||
unlock.error.restartRequired.message=Nelze odemknout trezor
|
|
||||||
unlock.error.restartRequired.description=Změňte typ svazku v možnostech trezoru nebo restartujte Cryptomator.
|
|
||||||
unlock.error.title=Odemknutí "%s" selhalo
|
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=Nelze získat přístup ke klíči zařízení
|
hub.noKeychain.message=Nelze získat přístup ke klíči zařízení
|
||||||
hub.noKeychain.description=Chcete-li odemknout Hub trezory, je potřeba použít klíč zařízení, který je zabezpečen pomocí klíčenky. Chcete-li pokračovat, povolte „%s“ a vyberte klíčenku v nastavení.
|
|
||||||
hub.noKeychain.openBtn=Otevřít předvolby
|
hub.noKeychain.openBtn=Otevřít předvolby
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Čekání na ověření…
|
hub.auth.message=Čekání na ověření…
|
||||||
@@ -150,33 +144,19 @@ hub.auth.description=Měli byste být automaticky přesměrováni na přihlašov
|
|||||||
hub.auth.loginLink=Nebyli jste přesměrováni? Klikněte zde pro otevření.
|
hub.auth.loginLink=Nebyli jste přesměrováni? Klikněte zde pro otevření.
|
||||||
### Receive Key
|
### Receive Key
|
||||||
hub.receive.message=Zpracovávání odezvy…
|
hub.receive.message=Zpracovávání odezvy…
|
||||||
hub.receive.description=Cryptomator přijímá a zpracovává odpověď od Hubu. Počkejte prosím.
|
|
||||||
### Register Device
|
### Register Device
|
||||||
hub.register.message=Nové zařízení
|
hub.register.message=Nové zařízení
|
||||||
hub.register.description=Toto je první přístup k Hub z tohoto zařízení. Zaregistrujte ho pomocí vašeho Account Key.
|
|
||||||
hub.register.nameLabel=Název zařízení
|
hub.register.nameLabel=Název zařízení
|
||||||
hub.register.invalidAccountKeyLabel=Neplatný Account Key
|
|
||||||
hub.register.registerBtn=Registrovat
|
hub.register.registerBtn=Registrovat
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
hub.register.legacy.occupiedMsg=Jméno je již používáno
|
|
||||||
hub.register.legacy.description=Toto je první přístup k Hubu z tohoto zařízení. Zaregistrujte ho.
|
|
||||||
### Registration Success
|
### Registration Success
|
||||||
hub.registerSuccess.message=Zařízení registrováno
|
|
||||||
hub.registerSuccess.description=Vaše zařízení je úspěšně zaregistrováno. Nyní můžete pokračovat v odemknutí trezoru.
|
|
||||||
hub.registerSuccess.unlockBtn=Odemknout
|
hub.registerSuccess.unlockBtn=Odemknout
|
||||||
hub.registerSuccess.legacy.description=Pro přístup k trezoru musí být vaše zařízení autorizováno majitelem trezoru.
|
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=Registrace zařízení se nezdařila
|
|
||||||
hub.registerFailed.description.generic=Došlo k chybě v registračním procesu. Pro více detailů se podívejte do logu aplikace.
|
|
||||||
hub.registerFailed.description.deviceAlreadyExists=Toto zařízení je již registrováno pro jiného uživatele. Zkuste změnit uživatelský účet nebo použijte jiné zařízení.
|
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Přístup odepřen
|
hub.unauthorized.message=Přístup odepřen
|
||||||
hub.unauthorized.description=Vaše zařízení dosud nebylo oprávněno k přístupu k tomuto trezoru. Požádejte vlastníka trezoru, aby jej autorizoval.
|
hub.unauthorized.description=Vaše zařízení dosud nebylo oprávněno k přístupu k tomuto trezoru. Požádejte vlastníka trezoru, aby jej autorizoval.
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Požadována akce
|
hub.requireAccountInit.message=Požadována akce
|
||||||
hub.requireAccountInit.description.0=Chcete-li pokračovat, vyplňte prosím požadované kroky ve vašem
|
|
||||||
hub.requireAccountInit.description.1=Uživatelský profil Hubu
|
|
||||||
hub.requireAccountInit.description.2=.
|
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
hub.invalidLicense.message=Licence Hubu je neplatná
|
hub.invalidLicense.message=Licence Hubu je neplatná
|
||||||
|
|
||||||
@@ -256,7 +236,6 @@ health.result.severityFilter.good=Dobré
|
|||||||
health.result.severityFilter.info=Informace
|
health.result.severityFilter.info=Informace
|
||||||
health.result.severityFilter.warn=Varování
|
health.result.severityFilter.warn=Varování
|
||||||
health.result.severityFilter.crit=Kritické
|
health.result.severityFilter.crit=Kritické
|
||||||
health.result.fixStateFilter.all=Stav opravy - Vše
|
|
||||||
health.result.fixStateFilter.fixable=Opravitelné
|
health.result.fixStateFilter.fixable=Opravitelné
|
||||||
health.result.fixStateFilter.notFixable=Ne opravitelné
|
health.result.fixStateFilter.notFixable=Ne opravitelné
|
||||||
health.result.fixStateFilter.fixing=Opravování…
|
health.result.fixStateFilter.fixing=Opravování…
|
||||||
@@ -272,7 +251,6 @@ preferences.title=Nastavení
|
|||||||
## General
|
## General
|
||||||
preferences.general=Obecné
|
preferences.general=Obecné
|
||||||
preferences.general.startHidden=Skrýt okno Cryptomatoru při spuštění
|
preferences.general.startHidden=Skrýt okno Cryptomatoru při spuštění
|
||||||
preferences.general.autoCloseVaults=Zamknout trezory automaticky při ukončení aplikace
|
|
||||||
preferences.general.debugLogging=Ladicí režim
|
preferences.general.debugLogging=Ladicí režim
|
||||||
preferences.general.debugDirectory=Ukázat soubory se záznamy událostí (log)
|
preferences.general.debugDirectory=Ukázat soubory se záznamy událostí (log)
|
||||||
preferences.general.autoStart=Spustit Cryptomator při spuštění systému
|
preferences.general.autoStart=Spustit Cryptomator při spuštění systému
|
||||||
@@ -295,10 +273,6 @@ preferences.interface.showTrayIcon=Zobrazit ikonu v liště (vyžaduje restart)
|
|||||||
preferences.volume=Virtuální jednotky
|
preferences.volume=Virtuální jednotky
|
||||||
preferences.volume.type=Výchozí typ jednotky
|
preferences.volume.type=Výchozí typ jednotky
|
||||||
preferences.volume.type.automatic=Automatické
|
preferences.volume.type.automatic=Automatické
|
||||||
preferences.volume.docsTooltip=Otevřete dokumentaci, abyste se dozvěděli více o různých typech svazků.
|
|
||||||
preferences.volume.fuseRestartRequired=Chcete-li použít změny, Cryptomator musí být restartován.
|
|
||||||
preferences.volume.tcp.port=Výchozí TCP port
|
|
||||||
preferences.volume.supportedFeatures=Zvolený typ svazku podporuje následující funkce:
|
|
||||||
preferences.volume.feature.mountFlags=Vlastní možnosti připojení disku
|
preferences.volume.feature.mountFlags=Vlastní možnosti připojení disku
|
||||||
preferences.volume.feature.readOnly=Připojení disku pouze pro čtení
|
preferences.volume.feature.readOnly=Připojení disku pouze pro čtení
|
||||||
## Updates
|
## Updates
|
||||||
@@ -307,7 +281,6 @@ preferences.updates.currentVersion=Aktuální verze: %s
|
|||||||
preferences.updates.autoUpdateCheck=Automaticky kontrolovat aktualizace
|
preferences.updates.autoUpdateCheck=Automaticky kontrolovat aktualizace
|
||||||
preferences.updates.checkNowBtn=Zkontrolovat nyní
|
preferences.updates.checkNowBtn=Zkontrolovat nyní
|
||||||
preferences.updates.updateAvailable=Dostupná nová verze %s.
|
preferences.updates.updateAvailable=Dostupná nová verze %s.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Podpořte nás
|
preferences.contribute=Podpořte nás
|
||||||
preferences.contribute.registeredFor=Certifikát podporovatele byl registrován pro %s
|
preferences.contribute.registeredFor=Certifikát podporovatele byl registrován pro %s
|
||||||
@@ -380,7 +353,6 @@ main.vaultDetail.unlockBtn=Odemknout…
|
|||||||
main.vaultDetail.unlockNowBtn=Odemknout nyní
|
main.vaultDetail.unlockNowBtn=Odemknout nyní
|
||||||
main.vaultDetail.optionsBtn=Možnosti trezoru
|
main.vaultDetail.optionsBtn=Možnosti trezoru
|
||||||
main.vaultDetail.passwordSavedInKeychain=Heslo uloženo
|
main.vaultDetail.passwordSavedInKeychain=Heslo uloženo
|
||||||
main.vaultDetail.share=Sdílet…
|
|
||||||
### Unlocked
|
### Unlocked
|
||||||
main.vaultDetail.unlockedStatus=ODEMKNUTO
|
main.vaultDetail.unlockedStatus=ODEMKNUTO
|
||||||
main.vaultDetail.accessLocation=Obsah vašeho trezoru je dostupný:
|
main.vaultDetail.accessLocation=Obsah vašeho trezoru je dostupný:
|
||||||
@@ -394,9 +366,7 @@ main.vaultDetail.throughput.kbps=%.1f KiB/s
|
|||||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||||
main.vaultDetail.stats=Statistiky trezoru
|
main.vaultDetail.stats=Statistiky trezoru
|
||||||
main.vaultDetail.locateEncryptedFileBtn=Najít šifrovaný soubor
|
main.vaultDetail.locateEncryptedFileBtn=Najít šifrovaný soubor
|
||||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=Vyberte soubor z vašeho trezoru, abyste našli jeho šifrovaný protějšek
|
|
||||||
main.vaultDetail.encryptedPathsCopied=Cesta souboru byla zkopírována do schránky!
|
main.vaultDetail.encryptedPathsCopied=Cesta souboru byla zkopírována do schránky!
|
||||||
main.vaultDetail.filePickerTitle=Vyberte soubor uvnitř trezoru
|
|
||||||
### Missing
|
### Missing
|
||||||
main.vaultDetail.missing.info=Cryptomator nemohl najít trezor na této cestě.
|
main.vaultDetail.missing.info=Cryptomator nemohl najít trezor na této cestě.
|
||||||
main.vaultDetail.missing.recheck=Znovu zkontrolovat
|
main.vaultDetail.missing.recheck=Znovu zkontrolovat
|
||||||
@@ -441,10 +411,8 @@ vaultOptions.mount.winDriveLetterOccupied=obsazeno
|
|||||||
vaultOptions.mount.mountPoint=Přípojný bod
|
vaultOptions.mount.mountPoint=Přípojný bod
|
||||||
vaultOptions.mount.mountPoint.auto=Automaticky vybrat vhodné místo
|
vaultOptions.mount.mountPoint.auto=Automaticky vybrat vhodné místo
|
||||||
vaultOptions.mount.mountPoint.driveLetter=Použít zvolenou jednotku
|
vaultOptions.mount.mountPoint.driveLetter=Použít zvolenou jednotku
|
||||||
vaultOptions.mount.mountPoint.custom=Použít vybraný adresář
|
|
||||||
vaultOptions.mount.mountPoint.directoryPickerButton=Vybrat...
|
vaultOptions.mount.mountPoint.directoryPickerButton=Vybrat...
|
||||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Vyberte složku
|
vaultOptions.mount.mountPoint.directoryPickerTitle=Vyberte složku
|
||||||
vaultOptions.mount.volumeType.default=Výchozí (%s)
|
|
||||||
vaultOptions.mount.volume.tcp.port=TCP port
|
vaultOptions.mount.volume.tcp.port=TCP port
|
||||||
vaultOptions.mount.volume.type=Typ jednotky
|
vaultOptions.mount.volume.type=Typ jednotky
|
||||||
## Master Key
|
## Master Key
|
||||||
@@ -469,23 +437,18 @@ recoveryKey.display.StorageHints=Uchovejte ho někde velmi bezpečně, např.\n
|
|||||||
## Reset Password
|
## Reset Password
|
||||||
### Enter Recovery Key
|
### Enter Recovery Key
|
||||||
recoveryKey.recover.title=Resetovat heslo
|
recoveryKey.recover.title=Resetovat heslo
|
||||||
recoveryKey.recover.prompt=Zadejte obnovovací klíč pro "%s":
|
|
||||||
recoveryKey.recover.correctKey=Toto je platný obnovovací klíč
|
recoveryKey.recover.correctKey=Toto je platný obnovovací klíč
|
||||||
recoveryKey.recover.wrongKey=Tento klíč pro obnovení partří k jinému trezoru
|
|
||||||
recoveryKey.recover.invalidKey=Tento klíč pro obnovení není platný
|
|
||||||
recoveryKey.printout.heading=Obnovovací klíč Cryptomator\n"%s"\n
|
recoveryKey.printout.heading=Obnovovací klíč Cryptomator\n"%s"\n
|
||||||
### Reset Password
|
### Reset Password
|
||||||
recoveryKey.recover.resetBtn=Resetovat
|
recoveryKey.recover.resetBtn=Resetovat
|
||||||
### Recovery Key Password Reset Success
|
### Recovery Key Password Reset Success
|
||||||
recoveryKey.recover.resetSuccess.message=Resetování hesla bylo úspěšné
|
recoveryKey.recover.resetSuccess.message=Resetování hesla bylo úspěšné
|
||||||
recoveryKey.recover.resetSuccess.description=Můžete odemknout váš trezor pomocí nového hesla.
|
|
||||||
|
|
||||||
# Convert Vault
|
# Convert Vault
|
||||||
convertVault.title=Převést trezor
|
convertVault.title=Převést trezor
|
||||||
convertVault.convert.convertBtn.before=Převést
|
convertVault.convert.convertBtn.before=Převést
|
||||||
convertVault.convert.convertBtn.processing=Převádění…
|
convertVault.convert.convertBtn.processing=Převádění…
|
||||||
convertVault.success.message=Konverze byla úspěšná
|
convertVault.success.message=Konverze byla úspěšná
|
||||||
convertVault.hubToPassword.success.description=Nyní můžete odemknout trezor zvoleným heslem bez nutnosti přístupu k Hubu.
|
|
||||||
|
|
||||||
# New Password
|
# New Password
|
||||||
newPassword.promptText=Zadejte nové heslo
|
newPassword.promptText=Zadejte nové heslo
|
||||||
@@ -516,26 +479,4 @@ updateReminder.notNow=Nyní ne
|
|||||||
updateReminder.yesOnce=Ano, jednou
|
updateReminder.yesOnce=Ano, jednou
|
||||||
updateReminder.yesAutomatically=Ano, automaticky
|
updateReminder.yesAutomatically=Ano, automaticky
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.title=Oznámení o zastaralosti
|
|
||||||
dokanySupportEnd.message=Konec podpory pro Dokany
|
|
||||||
dokanySupportEnd.preferencesBtn=Otevřít předvolby
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Sdílet trezor
|
|
||||||
shareVault.message=Chcete sdílet svůj trezor s ostatními?
|
|
||||||
shareVault.description=Vždy buďte opatrní při sdílení vašeho trezoru s ostatními lidmi. Stručně řečeno, postupujte podle těchto kroků:
|
|
||||||
shareVault.instruction.1=1. Sdílejte přístup ke šifrované složce trezoru prostřednictvím cloudového úložiště.
|
|
||||||
shareVault.instruction.2=2. Sdílejte heslo trezoru bezpečným způsobem.
|
|
||||||
shareVault.remarkBestPractices=Pro více informací se podívejte na návrhy osvědčených postupů v našich dokumentech.
|
|
||||||
shareVault.docsTooltip=Otevřete dokumentaci a dozvíte se více o sdílení trezorů.
|
|
||||||
shareVault.hubAd.description=Bezpečný způsob práce v týmech
|
|
||||||
shareVault.hubAd.authentication=• Silné ověření
|
|
||||||
shareVault.hubAd.encryption=• End-to-end šifrování
|
|
||||||
shareVault.visitHub=Navštivte Cryptomator Hub
|
|
||||||
|
|
||||||
shareVault.hub.message=Jak sdílet Hub trezor
|
|
||||||
shareVault.hub.description=Chcete-li sdílet obsah trezoru s jiným členem týmu, musíte provést dva kroky:
|
|
||||||
shareVault.hub.instruction.1=1. Sdílejte přístup ke šifrované složce trezoru prostřednictvím cloudového úložiště.
|
|
||||||
shareVault.hub.instruction.2=2. Udělte přístup členovi týmu v Cryptomator Hubu.
|
|
||||||
shareVault.hub.openHub=Otevřít Cryptomator Hub
|
|
||||||
@@ -47,7 +47,6 @@ addvaultwizard.new.nameInstruction=Vælg et navn til boksen
|
|||||||
addvaultwizard.new.namePrompt=Boks-navn
|
addvaultwizard.new.namePrompt=Boks-navn
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=Hvor skal Cryptomator gemme de krypterede filer af din boks?
|
addvaultwizard.new.locationInstruction=Hvor skal Cryptomator gemme de krypterede filer af din boks?
|
||||||
addvaultwizard.new.locationLoading=Tjekker lokalt filsystem for standard mappe til opbevaring i skyen…
|
|
||||||
addvaultwizard.new.locationLabel=Dataplacering
|
addvaultwizard.new.locationLabel=Dataplacering
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=Vælg placering
|
addvaultwizard.new.directoryPickerLabel=Vælg placering
|
||||||
@@ -142,9 +141,6 @@ unlock.error.customPath.description.hideawayNotDir=Den midlertidige, skjulte fil
|
|||||||
unlock.error.customPath.description.couldNotBeCleaned=Din boks kunne ikke monteres på stien "%s". Prøv venligst igen eller vælg en anden sti.
|
unlock.error.customPath.description.couldNotBeCleaned=Din boks kunne ikke monteres på stien "%s". Prøv venligst igen eller vælg en anden sti.
|
||||||
unlock.error.customPath.description.notEmptyDir=Den brugerdefinerede monteringssti "%s" er ikke en tom mappe. Vælg venligst en tom mappe og prøv igen.
|
unlock.error.customPath.description.notEmptyDir=Den brugerdefinerede monteringssti "%s" er ikke en tom mappe. Vælg venligst en tom mappe og prøv igen.
|
||||||
unlock.error.customPath.description.generic=Du har valgt en brugerdefineret monteringssti til denne boks, men det mislykkedes med følgende besked: %2$s
|
unlock.error.customPath.description.generic=Du har valgt en brugerdefineret monteringssti til denne boks, men det mislykkedes med følgende besked: %2$s
|
||||||
unlock.error.restartRequired.message=Kan ikke låse boks op
|
|
||||||
unlock.error.restartRequired.description=Skift drev typen i boksindstillinger eller genstart Cryptomator.
|
|
||||||
unlock.error.title=Oplåsning af "%s" mislykkedes
|
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=Kan ikke tilgå enhedsnøgle
|
hub.noKeychain.message=Kan ikke tilgå enhedsnøgle
|
||||||
hub.noKeychain.description=En enhedsnøgle er påkrævet for at låse Hub bokse op. Enhedsnøglen er sikret i en nøglering. For at fortsætte, aktivér “%s” og vælg en nøglering i indstillingerne.
|
hub.noKeychain.description=En enhedsnøgle er påkrævet for at låse Hub bokse op. Enhedsnøglen er sikret i en nøglering. For at fortsætte, aktivér “%s” og vælg en nøglering i indstillingerne.
|
||||||
@@ -158,30 +154,15 @@ hub.receive.message=Behandler svar…
|
|||||||
hub.receive.description=Cryptomator modtager og behandler svaret fra hubben. Vent venligst.
|
hub.receive.description=Cryptomator modtager og behandler svaret fra hubben. Vent venligst.
|
||||||
### Register Device
|
### Register Device
|
||||||
hub.register.message=Ny Enhed
|
hub.register.message=Ny Enhed
|
||||||
hub.register.description=Det er første gang Hub tilgås fra denne enhed. Registrer den venligst ved at anvende din Account Key.
|
|
||||||
hub.register.nameLabel=Enheds-navn
|
hub.register.nameLabel=Enheds-navn
|
||||||
hub.register.invalidAccountKeyLabel=Ugyldig Account Key
|
|
||||||
hub.register.registerBtn=Registrer
|
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
hub.register.legacy.occupiedMsg=Navnet er allerede i brug
|
|
||||||
hub.register.legacy.description=Det er første gang Hub tilgås fra denne enhed. Registrer den venligst.
|
|
||||||
### Registration Success
|
### Registration Success
|
||||||
hub.registerSuccess.message=Enhed registreret
|
|
||||||
hub.registerSuccess.description=Din enhed er registreret. Du kan nu fortsætte med at låse boksen op.
|
|
||||||
hub.registerSuccess.unlockBtn=Lås op
|
hub.registerSuccess.unlockBtn=Lås op
|
||||||
hub.registerSuccess.legacy.description=For at få adgang til boksen, skal din enhed desuden være godkendt af boksens ejer.
|
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=Enheds registrering mislykkedes
|
|
||||||
hub.registerFailed.description.generic=Der opstod en fejl i registreringsprocessen. Kig i applikations-loggen for flere detaljer.
|
|
||||||
hub.registerFailed.description.deviceAlreadyExists=Denne enhed er allerede registreret af en anden bruger. Prøv at ændre brugerkontoen eller brug en anden enhed.
|
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Adgang nægtet
|
hub.unauthorized.message=Adgang nægtet
|
||||||
hub.unauthorized.description=Din enhed er endnu ikke blevet godkendt til at få adgang til denne boks. Spørg boks-ejeren om godkendelse.
|
hub.unauthorized.description=Din enhed er endnu ikke blevet godkendt til at få adgang til denne boks. Spørg boks-ejeren om godkendelse.
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Handling påkrævet
|
|
||||||
hub.requireAccountInit.description.0=For at fortsætte, skal du fuldføre de nødvendige trin i din
|
|
||||||
hub.requireAccountInit.description.1=Hub brugerprofil
|
|
||||||
hub.requireAccountInit.description.2=.
|
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
hub.invalidLicense.message=Ugyldig Hub-licens
|
hub.invalidLicense.message=Ugyldig Hub-licens
|
||||||
hub.invalidLicense.description=Din Cryptomator Hub har en ugyldig licens. Få venligst en Hub administrator til at opgradere eller forny licensen.
|
hub.invalidLicense.description=Din Cryptomator Hub har en ugyldig licens. Få venligst en Hub administrator til at opgradere eller forny licensen.
|
||||||
@@ -303,11 +284,9 @@ preferences.interface.showMinimizeButton=Vis knap til minimering
|
|||||||
preferences.interface.showTrayIcon=Vis ikon i system-bakken (kræver genstart)
|
preferences.interface.showTrayIcon=Vis ikon i system-bakken (kræver genstart)
|
||||||
## Volume
|
## Volume
|
||||||
preferences.volume=Virtuelt drev
|
preferences.volume=Virtuelt drev
|
||||||
preferences.volume.type=Standard Drev Type
|
|
||||||
preferences.volume.type.automatic=Automatisk
|
preferences.volume.type.automatic=Automatisk
|
||||||
preferences.volume.docsTooltip=Åbn dokumentationen for at lære mere om de forskellige typer drev.
|
preferences.volume.docsTooltip=Åbn dokumentationen for at lære mere om de forskellige typer drev.
|
||||||
preferences.volume.fuseRestartRequired=For at anvende ændringerne skal Cryptomator genstartes.
|
preferences.volume.fuseRestartRequired=For at anvende ændringerne skal Cryptomator genstartes.
|
||||||
preferences.volume.tcp.port=Standard TCP- Port
|
|
||||||
preferences.volume.supportedFeatures=Den valgte type drev understøtter følgende funktioner:
|
preferences.volume.supportedFeatures=Den valgte type drev understøtter følgende funktioner:
|
||||||
preferences.volume.feature.mountAuto=Automatisk valg af monteringspunkt
|
preferences.volume.feature.mountAuto=Automatisk valg af monteringspunkt
|
||||||
preferences.volume.feature.mountToDir=Brugerdefineret mappe som monteringspunkt
|
preferences.volume.feature.mountToDir=Brugerdefineret mappe som monteringspunkt
|
||||||
@@ -320,7 +299,6 @@ preferences.updates.currentVersion=Nuværende version: %s
|
|||||||
preferences.updates.autoUpdateCheck=Søg automatisk efter opdateringer
|
preferences.updates.autoUpdateCheck=Søg automatisk efter opdateringer
|
||||||
preferences.updates.checkNowBtn=Kontrollér nu
|
preferences.updates.checkNowBtn=Kontrollér nu
|
||||||
preferences.updates.updateAvailable=Opdatering til version %s er tilgængelig.
|
preferences.updates.updateAvailable=Opdatering til version %s er tilgængelig.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Støt os
|
preferences.contribute=Støt os
|
||||||
preferences.contribute.registeredFor=Registreret supporter-certifikat for %s
|
preferences.contribute.registeredFor=Registreret supporter-certifikat for %s
|
||||||
@@ -393,7 +371,6 @@ main.vaultDetail.unlockBtn=Lås op…
|
|||||||
main.vaultDetail.unlockNowBtn=Lås op nu
|
main.vaultDetail.unlockNowBtn=Lås op nu
|
||||||
main.vaultDetail.optionsBtn=Boksindstillinger
|
main.vaultDetail.optionsBtn=Boksindstillinger
|
||||||
main.vaultDetail.passwordSavedInKeychain=Adgangskode gemt
|
main.vaultDetail.passwordSavedInKeychain=Adgangskode gemt
|
||||||
main.vaultDetail.share=Del…
|
|
||||||
### Unlocked
|
### Unlocked
|
||||||
main.vaultDetail.unlockedStatus=LÅST OP
|
main.vaultDetail.unlockedStatus=LÅST OP
|
||||||
main.vaultDetail.accessLocation=Boksens indhold er tilgængeligt her:
|
main.vaultDetail.accessLocation=Boksens indhold er tilgængeligt her:
|
||||||
@@ -448,7 +425,6 @@ vaultOptions.general.startHealthCheckBtn=Start sunhedstjek
|
|||||||
|
|
||||||
## Mount
|
## Mount
|
||||||
vaultOptions.mount=Montering
|
vaultOptions.mount=Montering
|
||||||
vaultOptions.mount.info=Åbn indstillinger for virtuelle drev for at ændre standardindstillinger.
|
|
||||||
vaultOptions.mount.readonly=Skrivebeskyttet
|
vaultOptions.mount.readonly=Skrivebeskyttet
|
||||||
vaultOptions.mount.customMountFlags=Brugerdefinerede monterings-flag
|
vaultOptions.mount.customMountFlags=Brugerdefinerede monterings-flag
|
||||||
vaultOptions.mount.winDriveLetterOccupied=optaget
|
vaultOptions.mount.winDriveLetterOccupied=optaget
|
||||||
@@ -458,10 +434,6 @@ vaultOptions.mount.mountPoint.driveLetter=Brug et ledigt drevbogstav
|
|||||||
vaultOptions.mount.mountPoint.custom=Brug en valgt mappe
|
vaultOptions.mount.mountPoint.custom=Brug en valgt mappe
|
||||||
vaultOptions.mount.mountPoint.directoryPickerButton=Vælg…
|
vaultOptions.mount.mountPoint.directoryPickerButton=Vælg…
|
||||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Vælg en mappe
|
vaultOptions.mount.mountPoint.directoryPickerTitle=Vælg en mappe
|
||||||
vaultOptions.mount.volumeType.default=Standard (%s)
|
|
||||||
vaultOptions.mount.volumeType.restartRequired=For bruge denne drev type skal Cryptomator genstartes.
|
|
||||||
vaultOptions.mount.volume.tcp.port=TCP Port
|
|
||||||
vaultOptions.mount.volume.type=Drev Type
|
|
||||||
## Master Key
|
## Master Key
|
||||||
vaultOptions.masterkey=Adgangskode
|
vaultOptions.masterkey=Adgangskode
|
||||||
vaultOptions.masterkey.changePasswordBtn=Skift adgangskode
|
vaultOptions.masterkey.changePasswordBtn=Skift adgangskode
|
||||||
@@ -533,25 +505,4 @@ updateReminder.notNow=Ikke nu
|
|||||||
updateReminder.yesOnce=Ja, én gang
|
updateReminder.yesOnce=Ja, én gang
|
||||||
updateReminder.yesAutomatically=Ja, automatisk
|
updateReminder.yesAutomatically=Ja, automatisk
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.preferencesBtn=Åbn Indstillinger
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Del Boks
|
|
||||||
shareVault.message=Vil du dele din boks med andre?
|
|
||||||
shareVault.description=Vær altid forsigtig, når du deler din boks med andre. Kort sagt, følg disse trin:
|
|
||||||
shareVault.instruction.1=1. Del adgang til den krypterede boks-mappe via opbevaring i skyen.
|
|
||||||
shareVault.instruction.2=2. Del boksens adgangskode på en sikker måde.
|
|
||||||
shareVault.remarkBestPractices=For mere information, tjek best practice forslag i vores dokumenter.
|
|
||||||
shareVault.docsTooltip=Åbn dokumentationen for at lære mere om deling af bokse.
|
|
||||||
shareVault.hubAd.description=Den sikre måde at arbejde i hold
|
|
||||||
shareVault.hubAd.keyManagement=Zero-knowledge nøgle håndtering
|
|
||||||
shareVault.hubAd.authentication=Stærk autentifikation
|
|
||||||
shareVault.hubAd.encryption=End-to-end-kryptering
|
|
||||||
shareVault.visitHub=Besøg Kryptomator Hub
|
|
||||||
|
|
||||||
shareVault.hub.message=Sådan deler du en Hub boks
|
|
||||||
shareVault.hub.description=For at dele indholdet i boksen med et andet holdmedlem skal du udføre to trin:
|
|
||||||
shareVault.hub.instruction.1=1. Del adgang til den krypterede boks-mappe vha. opbevaring i skyen.
|
|
||||||
shareVault.hub.instruction.2=2. Giv adgang til holdmedlem i Cryptomator Hub.
|
|
||||||
shareVault.hub.openHub=Åben Cryptomator Hub
|
|
||||||
@@ -47,7 +47,7 @@ addvaultwizard.new.nameInstruction=Wähle einen Namen für den Tresor
|
|||||||
addvaultwizard.new.namePrompt=Tresorname
|
addvaultwizard.new.namePrompt=Tresorname
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=Wo soll Cryptomator die verschlüsselten Dateien deines Tresors ablegen?
|
addvaultwizard.new.locationInstruction=Wo soll Cryptomator die verschlüsselten Dateien deines Tresors ablegen?
|
||||||
addvaultwizard.new.locationLoading=Lokales Dateisystem wird auf Standard-Cloud-Verzeichnisse überprüft …
|
addvaultwizard.new.locationLoading=Überprüfen des lokalen Dateisystems auf Standard-Cloud-Verzeichnisse…
|
||||||
addvaultwizard.new.locationLabel=Speicherort
|
addvaultwizard.new.locationLabel=Speicherort
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=Eigener Ort
|
addvaultwizard.new.directoryPickerLabel=Eigener Ort
|
||||||
@@ -169,9 +169,9 @@ hub.register.legacy.description=Dies ist der erste Hub-Zugriff von diesem Gerät
|
|||||||
hub.registerSuccess.message=Gerät registriert
|
hub.registerSuccess.message=Gerät registriert
|
||||||
hub.registerSuccess.description=Dein Gerät ist erfolgreich registriert. Du kannst den Tresor jetzt entsperren.
|
hub.registerSuccess.description=Dein Gerät ist erfolgreich registriert. Du kannst den Tresor jetzt entsperren.
|
||||||
hub.registerSuccess.unlockBtn=Entsperren
|
hub.registerSuccess.unlockBtn=Entsperren
|
||||||
hub.registerSuccess.legacy.description=Für den Zugriff auf den Tresor muss dein Gerät zusätzlich vom Tresoreigentümer autorisiert werden.
|
hub.registerSuccess.legacy.description=Um den Tresor zu öffnen muss dein Gerät zusätzlich vom Tresorbesitzer autorisiert werden.
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=Gerät konnte nicht registriert werden
|
hub.registerFailed.message=Geräteregistrierung fehlgeschlagen
|
||||||
hub.registerFailed.description.generic=Im Registrierungsprozess ist ein Fehler aufgetreten. Weitere Details findest du im Anwendungsprotokoll.
|
hub.registerFailed.description.generic=Im Registrierungsprozess ist ein Fehler aufgetreten. Weitere Details findest du im Anwendungsprotokoll.
|
||||||
hub.registerFailed.description.deviceAlreadyExists=Dieses Gerät ist bereits für einen anderen Benutzer registriert. Ändere das Benutzerkonto oder verwende ein anderes Gerät.
|
hub.registerFailed.description.deviceAlreadyExists=Dieses Gerät ist bereits für einen anderen Benutzer registriert. Ändere das Benutzerkonto oder verwende ein anderes Gerät.
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
@@ -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
|
||||||
@@ -321,14 +320,6 @@ preferences.updates.currentVersion=Aktuelle Version: %s
|
|||||||
preferences.updates.autoUpdateCheck=Automatisch nach Updates suchen
|
preferences.updates.autoUpdateCheck=Automatisch nach Updates suchen
|
||||||
preferences.updates.checkNowBtn=Jetzt prüfen
|
preferences.updates.checkNowBtn=Jetzt prüfen
|
||||||
preferences.updates.updateAvailable=Update auf Version %s verfügbar.
|
preferences.updates.updateAvailable=Update auf Version %s verfügbar.
|
||||||
preferences.updates.lastUpdateCheck=Letzte Überprüfung: %s
|
|
||||||
preferences.updates.lastUpdateCheck.never=nie
|
|
||||||
preferences.updates.lastUpdateCheck.recently=kürzlich
|
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=vor %s Tagen
|
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=vor %s Stunden
|
|
||||||
preferences.updates.checkFailed=Die Suche nach Updates ist fehlgeschlagen. Bitte überprüfe deine Internetverbindung oder versuche es später erneut.
|
|
||||||
preferences.updates.upToDate=Cryptomator ist aktuell.
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Unterstütze uns
|
preferences.contribute=Unterstütze uns
|
||||||
preferences.contribute.registeredFor=Supporter-Zertifikat registriert für %s
|
preferences.contribute.registeredFor=Supporter-Zertifikat registriert für %s
|
||||||
@@ -401,7 +392,7 @@ main.vaultDetail.unlockBtn=Entsperren …
|
|||||||
main.vaultDetail.unlockNowBtn=Jetzt entsperren
|
main.vaultDetail.unlockNowBtn=Jetzt entsperren
|
||||||
main.vaultDetail.optionsBtn=Tresoroptionen
|
main.vaultDetail.optionsBtn=Tresoroptionen
|
||||||
main.vaultDetail.passwordSavedInKeychain=Passwort gespeichert
|
main.vaultDetail.passwordSavedInKeychain=Passwort gespeichert
|
||||||
main.vaultDetail.share=Teilen …
|
main.vaultDetail.share=Teilen…
|
||||||
### Unlocked
|
### Unlocked
|
||||||
main.vaultDetail.unlockedStatus=ENTSPERRT
|
main.vaultDetail.unlockedStatus=ENTSPERRT
|
||||||
main.vaultDetail.accessLocation=Deine Tresorinhalte sind hier erreichbar:
|
main.vaultDetail.accessLocation=Deine Tresorinhalte sind hier erreichbar:
|
||||||
@@ -541,26 +532,22 @@ updateReminder.notNow=Nicht jetzt
|
|||||||
updateReminder.yesOnce=Ja, einmalig
|
updateReminder.yesOnce=Ja, einmalig
|
||||||
updateReminder.yesAutomatically=Ja, automatisch
|
updateReminder.yesAutomatically=Ja, automatisch
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.message=Ende der Unterstützung für Dokany
|
|
||||||
dokanySupportEnd.preferencesBtn=Einstellungen öffnen
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Tresor teilen
|
shareVault.title=Tresor teilen
|
||||||
shareVault.message=Möchtest du deinen Tresor mit anderen teilen?
|
shareVault.message=Möchtest du deinen Tresor mit anderen teilen?
|
||||||
shareVault.description=Sei immer vorsichtig, wenn du deinen Tresor mit anderen Personen teilst. Kurz gesagt, befolge diese Schritte:
|
shareVault.description=Seien immer vorsichtig, wenn du deinen Tresor mit anderen teilst. Um den Tresor zu teilen, muss du folgendes tun:
|
||||||
shareVault.instruction.1=1. Teile den Zugriff auf den verschlüsselten Tresorordner über den Cloud-Speicher.
|
shareVault.instruction.1=1. Teile den Zugriff auf den verschlüsselten Tresorordner in deinem Cloud-Speicher.
|
||||||
shareVault.instruction.2=2. Teile das Tresorpasswort auf einem sicheren Weg.
|
shareVault.instruction.2=2. Teile das Tresorpasswort auf einem sicheren Weg.
|
||||||
shareVault.remarkBestPractices=Weitere Informationen findest du in den Vorschlägen für bewährte Verfahren in unserer Dokumentation.
|
shareVault.remarkBestPractices=Für mehr Informationen lies dir unsere Vorschläge für bewährte Praktiken in unserer Dokumentation durch.
|
||||||
shareVault.docsTooltip=Öffne die Dokumentation, um mehr über das Teilen von Tresoren zu erfahren.
|
shareVault.docsTooltip=Öffne die Dokumentation, um mehr über das Teilen von Tresoren zu erfahren.
|
||||||
shareVault.hubAd.description=Die sichere Art der Teamarbeit
|
shareVault.hubAd.description=Der sichere Weg in Teams zu arbeiten
|
||||||
shareVault.hubAd.keyManagement=• Zero-knowledge-Schlüsselverwaltung
|
shareVault.hubAd.keyManagement=• Zero-knowledge Schlüsselverwaltung
|
||||||
shareVault.hubAd.authentication=• Starke Authentifizierung
|
shareVault.hubAd.authentication=• Starke Authentifizierung
|
||||||
shareVault.hubAd.encryption=• Ende-zu-Ende-Verschlüsselung
|
shareVault.hubAd.encryption=• Ende-zu-Ende-Verschlüsselung
|
||||||
shareVault.visitHub=Besuche Cryptomator Hub
|
shareVault.visitHub=Besuche Cryptomator Hub
|
||||||
|
|
||||||
shareVault.hub.message=Teilen eines Hub-Tresors
|
shareVault.hub.message=Wie man einen Hub Tresor teilt
|
||||||
shareVault.hub.description=Zur Freigabe des Tresorinhalts für ein anderes Teammitglied sind zwei Schritte erforderlich:
|
shareVault.hub.description=Um den Tresor mit einem anderen Teammitglied zu teilen, musst du zwei Schritte ausführen:
|
||||||
shareVault.hub.instruction.1=1. Teile den Zugriff auf den verschlüsselten Tresorordner über den Cloud-Speicher.
|
shareVault.hub.instruction.1=1. Teile den Zugriff auf den verschlüsselten Tresorordner in deinem Cloud-Speicher.
|
||||||
shareVault.hub.instruction.2=2. Füge das Teammitglied in Cryptomator Hub als Tresormitglied hinzu.
|
shareVault.hub.instruction.2=2. Füge das Teammitglied in Cryptomator Hub als Tresormitglied hinzu.
|
||||||
shareVault.hub.openHub=Cryptomator Hub öffnen
|
shareVault.hub.openHub=Cryptomator Hub öffnen
|
||||||
@@ -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=Εμφάνιση & Αίσθηση
|
||||||
@@ -321,14 +320,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=Υποστηρίξτε μας
|
||||||
preferences.contribute.registeredFor=Το πιστοποιητικό υποστήριξης καταχωρήθηκε για %s
|
preferences.contribute.registeredFor=Το πιστοποιητικό υποστήριξης καταχωρήθηκε για %s
|
||||||
@@ -541,12 +532,6 @@ updateReminder.notNow=Όχι Τώρα
|
|||||||
updateReminder.yesOnce=Ναι, Μία Φορά
|
updateReminder.yesOnce=Ναι, Μία Φορά
|
||||||
updateReminder.yesAutomatically=Ναι, Αυτόματα
|
updateReminder.yesAutomatically=Ναι, Αυτόματα
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.title=Ειδοποίηση κατάργησης
|
|
||||||
dokanySupportEnd.message=Τέλος υποστήριξης για Dokany
|
|
||||||
dokanySupportEnd.description=Ο τύπος τόμου Dokany δεν υποστηρίζεται πλέον από το Cryptomator. Οι ρυθμίσεις σας έχουν προσαρμοστεί για να χρησιμοποιούν τον προεπιλεγμένο τύπο τόμου. Μπορείτε να δείτε τον προεπιλεγμένο τύπο στις προτιμήσεις.
|
|
||||||
dokanySupportEnd.preferencesBtn=Άνοιγμα Προτιμήσεων
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Κοινή χρήση Κρύπτης
|
shareVault.title=Κοινή χρήση Κρύπτης
|
||||||
shareVault.message=Θα θέλατε να μοιραστείτε την κρύπτη σας με άλλους;
|
shareVault.message=Θα θέλατε να μοιραστείτε την κρύπτη σας με άλλους;
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ error.existingSolutionDescription=Cryptomator no esperaba que esto ocurriera, pe
|
|||||||
error.hyperlink.solution=Buscar la solución
|
error.hyperlink.solution=Buscar la solución
|
||||||
error.lookupPermissionMessage=Cryptomator puede buscar una solución en línea para este problema. Esto enviará una solicitud a nuestra base de datos de problemas desde su dirección IP.
|
error.lookupPermissionMessage=Cryptomator puede buscar una solución en línea para este problema. Esto enviará una solicitud a nuestra base de datos de problemas desde su dirección IP.
|
||||||
error.dismiss=Descartar
|
error.dismiss=Descartar
|
||||||
error.lookUpSolution=Buscar una solución
|
error.lookUpSolution=Buscar solución
|
||||||
|
|
||||||
# Defaults
|
# Defaults
|
||||||
defaults.vault.vaultName=Bóveda
|
defaults.vault.vaultName=Bóveda
|
||||||
@@ -47,7 +47,6 @@ addvaultwizard.new.nameInstruction=Elegir un nombre para la bóveda
|
|||||||
addvaultwizard.new.namePrompt=Nombre de la bóveda
|
addvaultwizard.new.namePrompt=Nombre de la bóveda
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=¿Dónde se deben almacenar los archivos cifrados de la bóveda?
|
addvaultwizard.new.locationInstruction=¿Dónde se deben almacenar los archivos cifrados de la bóveda?
|
||||||
addvaultwizard.new.locationLoading=Comprobando el sistema de archivos local en busca de los directorios de almacenamiento en la nube por defecto…
|
|
||||||
addvaultwizard.new.locationLabel=Lugar de almacenamiento
|
addvaultwizard.new.locationLabel=Lugar de almacenamiento
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=Ubicación personalizada
|
addvaultwizard.new.directoryPickerLabel=Ubicación personalizada
|
||||||
@@ -62,7 +61,7 @@ addvaultwizard.new.validName=Nombre de bóveda válido
|
|||||||
addvaultwizard.new.validCharacters.message=El nombre de la bóveda puede contener los siguientes caracteres:
|
addvaultwizard.new.validCharacters.message=El nombre de la bóveda puede contener los siguientes caracteres:
|
||||||
addvaultwizard.new.validCharacters.chars=Caracteres de la palabra (por ejemplo, a, ж o 수)
|
addvaultwizard.new.validCharacters.chars=Caracteres de la palabra (por ejemplo, a, ж o 수)
|
||||||
addvaultwizard.new.validCharacters.numbers=Números
|
addvaultwizard.new.validCharacters.numbers=Números
|
||||||
addvaultwizard.new.validCharacters.dashes=Guion (%s) o guion bajo (%s)
|
addvaultwizard.new.validCharacters.dashes=Guion (%s) o subrayado (%s)
|
||||||
### Expert Settings
|
### Expert Settings
|
||||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Habilitar ajustes expertos
|
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Habilitar ajustes expertos
|
||||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Ingrese un valor entre 36 y 220 (por defecto 220)
|
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Ingrese un valor entre 36 y 220 (por defecto 220)
|
||||||
@@ -72,7 +71,7 @@ addvaultwizard.new.expertSettings.shorteningThreshold.valid=Válido
|
|||||||
### Password
|
### Password
|
||||||
addvaultwizard.new.createVaultBtn=Crear bóveda
|
addvaultwizard.new.createVaultBtn=Crear bóveda
|
||||||
addvaultwizard.new.generateRecoveryKeyChoice=No podrá acceder a sus datos sin su contraseña. ¿Desea una clave de recuperación en caso de que pierda su contraseña?
|
addvaultwizard.new.generateRecoveryKeyChoice=No podrá acceder a sus datos sin su contraseña. ¿Desea una clave de recuperación en caso de que pierda su contraseña?
|
||||||
addvaultwizard.new.generateRecoveryKeyChoice.yes=Sí, por favor. Más vale prevenir que curar
|
addvaultwizard.new.generateRecoveryKeyChoice.yes=Sí, por favor
|
||||||
addvaultwizard.new.generateRecoveryKeyChoice.no=No, gracias
|
addvaultwizard.new.generateRecoveryKeyChoice.no=No, gracias
|
||||||
### Information
|
### Information
|
||||||
addvault.new.readme.storageLocation.fileName=IMPORTANTE.rtf
|
addvault.new.readme.storageLocation.fileName=IMPORTANTE.rtf
|
||||||
@@ -130,7 +129,7 @@ unlock.chooseMasterkey.filePickerTitle=Seleccione el archivo de la clave maestra
|
|||||||
unlock.chooseMasterkey.filePickerMimeDesc=Clave maestra de Cryptomator
|
unlock.chooseMasterkey.filePickerMimeDesc=Clave maestra de Cryptomator
|
||||||
## Success
|
## Success
|
||||||
unlock.success.message=Desbloqueo exitoso
|
unlock.success.message=Desbloqueo exitoso
|
||||||
unlock.success.description=El contenido de la caja fuerte "%s" ahora es accesible a través de su punto de montaje.
|
unlock.success.description=El contenido de la bóveda "%s" ahora es accesible a través de su punto de montaje.
|
||||||
unlock.success.rememberChoice=Recordar opción y no mostrar de nuevo
|
unlock.success.rememberChoice=Recordar opción y no mostrar de nuevo
|
||||||
unlock.success.revealBtn=Revelar unidad
|
unlock.success.revealBtn=Revelar unidad
|
||||||
## Failure
|
## Failure
|
||||||
@@ -142,8 +141,6 @@ unlock.error.customPath.description.hideawayNotDir=El archivo oculto temporal "%
|
|||||||
unlock.error.customPath.description.couldNotBeCleaned=Su bóveda no se pudo montar en la ruta "%s". Intente de nuevo o elija una ruta diferente.
|
unlock.error.customPath.description.couldNotBeCleaned=Su bóveda no se pudo montar en la ruta "%s". Intente de nuevo o elija una ruta diferente.
|
||||||
unlock.error.customPath.description.notEmptyDir=La ruta de montaje personalizada "%s" no es una carpeta vacía. Elija una carpeta vacía y vuelva a intentarlo.
|
unlock.error.customPath.description.notEmptyDir=La ruta de montaje personalizada "%s" no es una carpeta vacía. Elija una carpeta vacía y vuelva a intentarlo.
|
||||||
unlock.error.customPath.description.generic=Seleccionó una ruta de montaje personalizada para esta bóveda, pero falló al usarla con el mensaje: %2$s
|
unlock.error.customPath.description.generic=Seleccionó una ruta de montaje personalizada para esta bóveda, pero falló al usarla con el mensaje: %2$s
|
||||||
unlock.error.restartRequired.message=No se puede desbloquear la bóveda
|
|
||||||
unlock.error.restartRequired.description=Cambie el tipo de volumen en las opciones de la bóveda o reinicie Cryptomator.
|
|
||||||
unlock.error.title=Error al desbloquear "%s"
|
unlock.error.title=Error al desbloquear "%s"
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=No se puede acceder a la clave del dispositivo
|
hub.noKeychain.message=No se puede acceder a la clave del dispositivo
|
||||||
@@ -158,22 +155,13 @@ hub.receive.message=Procesando la respuesta…
|
|||||||
hub.receive.description=Cryptomator está recibiendo y procesando la respuesta del Hub. Por favor espere.
|
hub.receive.description=Cryptomator está recibiendo y procesando la respuesta del Hub. Por favor espere.
|
||||||
### Register Device
|
### Register Device
|
||||||
hub.register.message=Nuevo dispositivo
|
hub.register.message=Nuevo dispositivo
|
||||||
hub.register.description=Este es el primer acceso al Hub desde este dispositivo. Por favor, regístrelo usando su Account Key.
|
|
||||||
hub.register.nameLabel=Nombre del dispositivo
|
hub.register.nameLabel=Nombre del dispositivo
|
||||||
hub.register.invalidAccountKeyLabel=Account Key no válida
|
hub.register.invalidAccountKeyLabel=Account Key no válida
|
||||||
hub.register.registerBtn=Registrarse
|
hub.register.registerBtn=Registrarse
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
hub.register.legacy.occupiedMsg=El nombre ya está en uso
|
|
||||||
hub.register.legacy.description=Este es el primer acceso al Hub desde este dispositivo. Por favor, regístrelo.
|
|
||||||
### Registration Success
|
### Registration Success
|
||||||
hub.registerSuccess.message=Dispositivo registrado
|
|
||||||
hub.registerSuccess.description=Tu dispositivo se ha registrado correctamente. Ahora puede proceder a desbloquear la bóveda.
|
|
||||||
hub.registerSuccess.unlockBtn=Desbloquear
|
hub.registerSuccess.unlockBtn=Desbloquear
|
||||||
hub.registerSuccess.legacy.description=Para acceder a la bóveda, su dispositivo debe estar autorizado por el propietario de la bóveda.
|
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=El registro del dispositivo ha fallado
|
|
||||||
hub.registerFailed.description.generic=Ha ocurrido un error al intentar registrarse. Para más detalles, consulte el registro de la aplicación.
|
|
||||||
hub.registerFailed.description.deviceAlreadyExists=Este dispositivo ya se ha registrado para otro usuario. Intente cambiar la cuenta de usuario o utilice un dispositivo diferente.
|
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Acceso denegado
|
hub.unauthorized.message=Acceso denegado
|
||||||
hub.unauthorized.description=Su dispositivo aún no ha sido autorizado para acceder a esta bóveda. Pídale al propietario de la bóveda que lo autorice.
|
hub.unauthorized.description=Su dispositivo aún no ha sido autorizado para acceder a esta bóveda. Pídale al propietario de la bóveda que lo autorice.
|
||||||
@@ -193,8 +181,8 @@ lock.forced.description=El bloqueo de "%s" fue bloqueado por operaciones pendien
|
|||||||
lock.forced.retryBtn=Reintentar
|
lock.forced.retryBtn=Reintentar
|
||||||
lock.forced.forceBtn=Forzar bloqueo
|
lock.forced.forceBtn=Forzar bloqueo
|
||||||
## Failure
|
## Failure
|
||||||
lock.fail.message=Error al bloquear la caja fuerte
|
lock.fail.message=Error al bloquear la bóveda
|
||||||
lock.fail.description=No se pudo bloquear la caja fuerte "%s". Asegúrese de que el trabajo no guardado se ha guardado en otro lugar y las operaciones de lectura/escritura importantes han finalizado. Para cerrar la bóveda termine el proceso de Cryptomator.
|
lock.fail.description=No se pudo bloquear la bóveda "%s". Asegúrese de que el trabajo no guardado se ha guardado en otro lugar y las operaciones de lectura/escritura importantes han finalizado. Para cerrar la bóveda termine el proceso de Cryptomator.
|
||||||
|
|
||||||
# Migration
|
# Migration
|
||||||
migration.title=Actualizar bóveda
|
migration.title=Actualizar bóveda
|
||||||
@@ -287,7 +275,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
|
||||||
@@ -321,14 +308,6 @@ preferences.updates.currentVersion=Versión actual: %s
|
|||||||
preferences.updates.autoUpdateCheck=Buscar actualizaciones automáticamente
|
preferences.updates.autoUpdateCheck=Buscar actualizaciones automáticamente
|
||||||
preferences.updates.checkNowBtn=Buscar ahora
|
preferences.updates.checkNowBtn=Buscar ahora
|
||||||
preferences.updates.updateAvailable=Actualización a la versión %s disponible.
|
preferences.updates.updateAvailable=Actualización a la versión %s disponible.
|
||||||
preferences.updates.lastUpdateCheck=Última comprobación: %s
|
|
||||||
preferences.updates.lastUpdateCheck.never=nunca
|
|
||||||
preferences.updates.lastUpdateCheck.recently=recientemente
|
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=hace %s días
|
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=hace %s horas
|
|
||||||
preferences.updates.checkFailed=La comprobación de actualizaciones ha fallado. Compruebe su conexión a Internet o inténtelo más tarde.
|
|
||||||
preferences.updates.upToDate=Cryptomator está actualizado.
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Apóyenos
|
preferences.contribute=Apóyenos
|
||||||
preferences.contribute.registeredFor=Certificado de soporte registrado para %s
|
preferences.contribute.registeredFor=Certificado de soporte registrado para %s
|
||||||
@@ -401,7 +380,6 @@ main.vaultDetail.unlockBtn=Desbloquear…
|
|||||||
main.vaultDetail.unlockNowBtn=Desbloquear ahora
|
main.vaultDetail.unlockNowBtn=Desbloquear ahora
|
||||||
main.vaultDetail.optionsBtn=Opciones de la bóveda
|
main.vaultDetail.optionsBtn=Opciones de la bóveda
|
||||||
main.vaultDetail.passwordSavedInKeychain=Contraseña guardada
|
main.vaultDetail.passwordSavedInKeychain=Contraseña guardada
|
||||||
main.vaultDetail.share=Compartir…
|
|
||||||
### Unlocked
|
### Unlocked
|
||||||
main.vaultDetail.unlockedStatus=DESBLOQUEADO
|
main.vaultDetail.unlockedStatus=DESBLOQUEADO
|
||||||
main.vaultDetail.accessLocation=El contenido de la bóveda es accesible aquí:
|
main.vaultDetail.accessLocation=El contenido de la bóveda es accesible aquí:
|
||||||
@@ -467,7 +445,6 @@ vaultOptions.mount.mountPoint.custom=Usar directorio seleccionado
|
|||||||
vaultOptions.mount.mountPoint.directoryPickerButton=Elegir…
|
vaultOptions.mount.mountPoint.directoryPickerButton=Elegir…
|
||||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Seleccionar un directorio
|
vaultOptions.mount.mountPoint.directoryPickerTitle=Seleccionar un directorio
|
||||||
vaultOptions.mount.volumeType.default=Predeterminado (%s)
|
vaultOptions.mount.volumeType.default=Predeterminado (%s)
|
||||||
vaultOptions.mount.volumeType.restartRequired=Para utilizar este tipo de volumen debe reiniciar Cryptomator.
|
|
||||||
vaultOptions.mount.volume.tcp.port=Puerto TCP
|
vaultOptions.mount.volume.tcp.port=Puerto TCP
|
||||||
vaultOptions.mount.volume.type=Tipo de volumen
|
vaultOptions.mount.volume.type=Tipo de volumen
|
||||||
## Master Key
|
## Master Key
|
||||||
@@ -541,28 +518,4 @@ updateReminder.notNow=Ahora no
|
|||||||
updateReminder.yesOnce=Sí, una vez
|
updateReminder.yesOnce=Sí, una vez
|
||||||
updateReminder.yesAutomatically=Sí, automáticamente
|
updateReminder.yesAutomatically=Sí, automáticamente
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.title=Aviso de obsolescencia
|
|
||||||
dokanySupportEnd.message=Fin de soporte para Dokany
|
|
||||||
dokanySupportEnd.description=El tipo de volumen Dokany ya no está soportado por Cryptomator. Su configuración se ajusta para utilizar el tipo de volumen predeterminado ahora. Puede ver el tipo predeterminado en las preferencias.
|
|
||||||
dokanySupportEnd.preferencesBtn=Abrir preferencias
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Compartir bóveda
|
|
||||||
shareVault.message=¿Le gustaría compartir su bóveda con alguien más?
|
|
||||||
shareVault.description=Siempre tenga cuidado cuando comparta su bóveda con otras personas. En resumen, siga estos pasos:
|
|
||||||
shareVault.instruction.1=1. Comparta el acceso a la carpeta de la bóveda cifrada a través del almacenamiento en la nube.
|
|
||||||
shareVault.instruction.2=2. Comparta la contraseña de la bóveda de manera segura.
|
|
||||||
shareVault.remarkBestPractices=Para más información, consulte las sugerencias de buenas prácticas en nuestros documentos.
|
|
||||||
shareVault.docsTooltip=Abra la documentación para conocer más sobre cómo compartir sus bóvedas.
|
|
||||||
shareVault.hubAd.description=Una manera segura de trabajar en equipos
|
|
||||||
shareVault.hubAd.keyManagement=• Administración de claves de cero conocimiento
|
|
||||||
shareVault.hubAd.authentication=• Autenticación fuerte
|
|
||||||
shareVault.hubAd.encryption=• Cifrado de extremo a extremo
|
|
||||||
shareVault.visitHub=Visite Cryptomator Hub
|
|
||||||
|
|
||||||
shareVault.hub.message=Cómo compartir una bóveda de Hub
|
|
||||||
shareVault.hub.description=Para compartir el contenido de la bóveda con otro miembro del equipo, tiene que realizar dos pasos:
|
|
||||||
shareVault.hub.instruction.1=1. Comparta el acceso a la carpeta de la bóveda cifrada a través del almacenamiento en la nube.
|
|
||||||
shareVault.hub.instruction.2=2. Conceda el acceso al miembro del equipo en Cryptomator Hub.
|
|
||||||
shareVault.hub.openHub=Abrir Cryptomator Hub
|
|
||||||
@@ -92,17 +92,9 @@ lock.forced.retryBtn=تلاش مجدد
|
|||||||
|
|
||||||
# Preferences
|
# Preferences
|
||||||
## General
|
## General
|
||||||
preferences.general.quickAccessService=خزانه های قفل نشده را به دسترسی سریع اضافه کنید
|
|
||||||
## Interface
|
## Interface
|
||||||
## Volume
|
## Volume
|
||||||
## Updates
|
## Updates
|
||||||
preferences.updates.lastUpdateCheck=آخرین بررسی: %s
|
|
||||||
preferences.updates.lastUpdateCheck.never=هرگز
|
|
||||||
preferences.updates.lastUpdateCheck.recently=به تازگی
|
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=%s روز پیش
|
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=%s ساعت قبل
|
|
||||||
preferences.updates.upToDate=Cryptomator به روز می باشد.
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|
||||||
@@ -120,7 +112,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
|
||||||
@@ -158,6 +149,4 @@ vaultOptions.mount.mountPoint.directoryPickerButton=انتخاب کنید…
|
|||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -206,7 +206,6 @@ preferences.title=Asetukset
|
|||||||
## Interface
|
## Interface
|
||||||
## Volume
|
## Volume
|
||||||
## Updates
|
## Updates
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|
||||||
@@ -268,7 +267,4 @@ vaultOptions.masterkey.changePasswordBtn=Vaihda salasana
|
|||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.preferencesBtn=Avaa asetukset
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -141,7 +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.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,18 +157,10 @@ hub.receive.description=Ang Cryptomator ay tumatanggap at nagpoproseso ng tugon
|
|||||||
hub.register.message=Bagong Device
|
hub.register.message=Bagong Device
|
||||||
hub.register.nameLabel=Pangalan ng device
|
hub.register.nameLabel=Pangalan ng device
|
||||||
hub.register.invalidAccountKeyLabel=Di-wastong Account Key
|
hub.register.invalidAccountKeyLabel=Di-wastong Account Key
|
||||||
hub.register.registerBtn=Magparehistro
|
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
hub.register.legacy.occupiedMsg=Ang pangalan ay nagamit na
|
|
||||||
### Registration Success
|
### Registration Success
|
||||||
hub.registerSuccess.message=Rehistrado na ang device
|
|
||||||
hub.registerSuccess.description=Ang iyong device ay matagumpay sa pag rehistrado. Maaari mo nang buksan ang vault.
|
|
||||||
hub.registerSuccess.unlockBtn=I-unlock
|
hub.registerSuccess.unlockBtn=I-unlock
|
||||||
hub.registerSuccess.legacy.description=Para ma-access ang vault, kailangang pahintulutan ng may-ari ng vault ang iyong device.
|
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=Ang pag rehistrado ng device ay pumalya
|
|
||||||
hub.registerFailed.description.generic=Nagkaroon ng error sa proseso ng pag registrado. Para sa higit pang mga detalye, tingnan ang log ng aplikasyon.
|
|
||||||
hub.registerFailed.description.deviceAlreadyExists=Ang device na ito ay registrado na sa ibang user. Subukang palitan ang user account o gumamit ng ibang device.
|
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Walang pahintulot
|
hub.unauthorized.message=Walang pahintulot
|
||||||
hub.unauthorized.description=Hindi pa pinahihintulutan ang iyong device na i-access ang vault na ito. Hilingin sa may-ari ng vault na pahintulutan ito.
|
hub.unauthorized.description=Hindi pa pinahihintulutan ang iyong device na i-access ang vault na ito. Hilingin sa may-ari ng vault na pahintulutan ito.
|
||||||
@@ -314,12 +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
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Suportahan Kami
|
preferences.contribute=Suportahan Kami
|
||||||
preferences.contribute.registeredFor=Nakarehistro ang sertipiko ng tagasuporta para sa %s
|
preferences.contribute.registeredFor=Nakarehistro ang sertipiko ng tagasuporta para sa %s
|
||||||
@@ -526,14 +511,4 @@ updateReminder.notNow=Hindi ngayon
|
|||||||
updateReminder.yesOnce=Oo, Minsan
|
updateReminder.yesOnce=Oo, Minsan
|
||||||
updateReminder.yesAutomatically=Oo, Awtomatiko
|
updateReminder.yesAutomatically=Oo, Awtomatiko
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.preferencesBtn=Buksan ang Mga Kagustuhan
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Ibahagi ang Vault
|
|
||||||
shareVault.message=Gusto mo bang ibahagi ang iyong vault sa iba?
|
|
||||||
shareVault.description=Maingat palagi pag binabahagi ang iyong vault sa ibang tao. Sa maikling salita, sundin ang mga hakbangin:
|
|
||||||
shareVault.visitHub=Pagbisita ang Cryptomator Hub
|
|
||||||
|
|
||||||
shareVault.hub.message=Paano ibahagi ang Hub vault
|
|
||||||
shareVault.hub.openHub=Buksan ang Cryptomator Hub
|
|
||||||
@@ -287,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
|
||||||
@@ -321,14 +320,6 @@ preferences.updates.currentVersion=Version actuelle : “%s”
|
|||||||
preferences.updates.autoUpdateCheck=Vérifier automatiquement si des mises à jour sont disponibles
|
preferences.updates.autoUpdateCheck=Vérifier automatiquement si des mises à jour sont disponibles
|
||||||
preferences.updates.checkNowBtn=Vérifier maintenant
|
preferences.updates.checkNowBtn=Vérifier maintenant
|
||||||
preferences.updates.updateAvailable=Mise à jour “%s” disponible.
|
preferences.updates.updateAvailable=Mise à jour “%s” disponible.
|
||||||
preferences.updates.lastUpdateCheck=Dernière vérification : %s
|
|
||||||
preferences.updates.lastUpdateCheck.never=jamais
|
|
||||||
preferences.updates.lastUpdateCheck.recently=récemment
|
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=Il y a %s jours
|
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=il y a %s heures
|
|
||||||
preferences.updates.checkFailed=La recherche de mises à jour a échoué. Veuillez vérifier votre connexion internet ou réessayez plus tard.
|
|
||||||
preferences.updates.upToDate=Cryptomator est à jour.
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Nous soutenir
|
preferences.contribute=Nous soutenir
|
||||||
preferences.contribute.registeredFor=Certificat de soutien enregistré pour %s
|
preferences.contribute.registeredFor=Certificat de soutien enregistré pour %s
|
||||||
@@ -486,7 +477,7 @@ vaultOptions.hub.convertBtn=Convertir en coffre-fort basé sur mot de passe
|
|||||||
## Display Recovery Key
|
## Display Recovery Key
|
||||||
recoveryKey.display.title=Montrer la clé de récupération
|
recoveryKey.display.title=Montrer la clé de récupération
|
||||||
recoveryKey.create.message=Mot de passe requis
|
recoveryKey.create.message=Mot de passe requis
|
||||||
recoveryKey.create.description=Entrez le mot de passe de "%s" pour afficher sa clé de récupération.
|
recoveryKey.create.description=Entrer le mot de passe de "%s" pour afficher sa clé de récupération.
|
||||||
recoveryKey.display.description=La clé de récupération suivante peut être utilisée pour restaurer l'accès à "%s " :
|
recoveryKey.display.description=La clé de récupération suivante peut être utilisée pour restaurer l'accès à "%s " :
|
||||||
recoveryKey.display.StorageHints=Gardez-la dans un endroit sûr, par ex. :\n • Stockez-la en utilisant un gestionnaire de mots de passe\n • Enregistrez-la sur une clé USB\n • Imprimez-la
|
recoveryKey.display.StorageHints=Gardez-la dans un endroit sûr, par ex. :\n • Stockez-la en utilisant un gestionnaire de mots de passe\n • Enregistrez-la sur une clé USB\n • Imprimez-la
|
||||||
## Reset Password
|
## Reset Password
|
||||||
@@ -541,12 +532,6 @@ updateReminder.notNow=Plus tard
|
|||||||
updateReminder.yesOnce=Cette fois seulement
|
updateReminder.yesOnce=Cette fois seulement
|
||||||
updateReminder.yesAutomatically=Oui, automatiquement
|
updateReminder.yesAutomatically=Oui, automatiquement
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.title=Avis d'obsolescence
|
|
||||||
dokanySupportEnd.message=Fin de la prise en charge de Dokany
|
|
||||||
dokanySupportEnd.description=Le type de volume Dokany n'est plus pris en charge par Cryptomator. Vos paramètres sont à présent ajustés pour utiliser le type de volume par défaut. Vous pouvez voir le type par défaut dans les préférences.
|
|
||||||
dokanySupportEnd.preferencesBtn=Ouvrir les préférences
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Partager le coffre
|
shareVault.title=Partager le coffre
|
||||||
shareVault.message=Vous aimeriez partager votre coffre avec d'autres personnes ?
|
shareVault.message=Vous aimeriez partager votre coffre avec d'autres personnes ?
|
||||||
|
|||||||
@@ -77,7 +77,6 @@ lock.forced.retryBtn=Tentar de novo
|
|||||||
## Interface
|
## Interface
|
||||||
## Volume
|
## Volume
|
||||||
## Updates
|
## Updates
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|
||||||
@@ -127,6 +126,4 @@ main.closeBtn.tooltip=Pechar
|
|||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -297,7 +297,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 זמין.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=תמוך בנו
|
preferences.contribute=תמוך בנו
|
||||||
preferences.contribute.registeredFor=אישור על תמיכה על שם %s
|
preferences.contribute.registeredFor=אישור על תמיכה על שם %s
|
||||||
@@ -494,7 +493,4 @@ updateReminder.title=בדיקת עדכון
|
|||||||
updateReminder.message=חפש עדכונים?
|
updateReminder.message=חפש עדכונים?
|
||||||
updateReminder.notNow=לא עכשיו
|
updateReminder.notNow=לא עכשיו
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.preferencesBtn=פתח העדפות
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -216,7 +216,6 @@ preferences.updates=नवीनीकरण
|
|||||||
preferences.updates.currentVersion=वर्तमान संस्करण: %s
|
preferences.updates.currentVersion=वर्तमान संस्करण: %s
|
||||||
preferences.updates.checkNowBtn=अभी जाँचें
|
preferences.updates.checkNowBtn=अभी जाँचें
|
||||||
preferences.updates.updateAvailable=संस्करण %s की तरफ नवीनीकरण उपलब्ध है।
|
preferences.updates.updateAvailable=संस्करण %s की तरफ नवीनीकरण उपलब्ध है।
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=हमें सपोर्ट करें
|
preferences.contribute=हमें सपोर्ट करें
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
@@ -312,7 +311,4 @@ quit.forced.message=कुछ वॉल्ट्स लॉक नहीं ह
|
|||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.preferencesBtn=प्राथमिकताएँ खोलें
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -224,7 +224,6 @@ preferences.updates.currentVersion=Trenutna verzija: %s
|
|||||||
preferences.updates.autoUpdateCheck=Automatski provjeri nadogradnje
|
preferences.updates.autoUpdateCheck=Automatski provjeri nadogradnje
|
||||||
preferences.updates.checkNowBtn=Provjeri sada
|
preferences.updates.checkNowBtn=Provjeri sada
|
||||||
preferences.updates.updateAvailable=Nadogradnja na verziju %s dostupna.
|
preferences.updates.updateAvailable=Nadogradnja na verziju %s dostupna.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Podržite nas
|
preferences.contribute=Podržite nas
|
||||||
preferences.contribute.registeredFor=Certifikat podržavatelja registriran za %s
|
preferences.contribute.registeredFor=Certifikat podržavatelja registriran za %s
|
||||||
@@ -383,6 +382,4 @@ quit.lockAndQuitBtn=Zaključaj i napusti
|
|||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -303,7 +303,6 @@ preferences.updates.currentVersion=Jelenlegi verzió: %s
|
|||||||
preferences.updates.autoUpdateCheck=Frissítések autómatikus keresése
|
preferences.updates.autoUpdateCheck=Frissítések autómatikus keresése
|
||||||
preferences.updates.checkNowBtn=Ellenőrzés most
|
preferences.updates.checkNowBtn=Ellenőrzés most
|
||||||
preferences.updates.updateAvailable=Frissítés a %s verzióra elérhető.
|
preferences.updates.updateAvailable=Frissítés a %s verzióra elérhető.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Támogasson bennünket
|
preferences.contribute=Támogasson bennünket
|
||||||
preferences.contribute.registeredFor=Támogatói igazolás regisztrálva neki: %s
|
preferences.contribute.registeredFor=Támogatói igazolás regisztrálva neki: %s
|
||||||
@@ -510,10 +509,4 @@ updateReminder.notNow=Most nem
|
|||||||
updateReminder.yesOnce=Igen, egyszer
|
updateReminder.yesOnce=Igen, egyszer
|
||||||
updateReminder.yesAutomatically=Igen, automatikusan
|
updateReminder.yesAutomatically=Igen, automatikusan
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.title=Értesítés elavulásról
|
|
||||||
dokanySupportEnd.message=Vége a Dokany támogatásának
|
|
||||||
dokanySupportEnd.description=A Cryptomator nem támogatja tovább a Dokany kötettípust. A beállítások az alapértelmezett kötettípus használatára lettek állítva. Az alapértelmezett típust a beállítások közt tekintheted meg.
|
|
||||||
dokanySupportEnd.preferencesBtn=Beállítások megnyitása
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -20,11 +20,6 @@ error.description=Ups! Cryptomator tidak menyangka hal ini terjadi. Anda dapat m
|
|||||||
error.hyperlink.lookup=Cari error berikut
|
error.hyperlink.lookup=Cari error berikut
|
||||||
error.hyperlink.report=Laporkan error berikut
|
error.hyperlink.report=Laporkan error berikut
|
||||||
error.technicalDetails=Rincian:
|
error.technicalDetails=Rincian:
|
||||||
error.existingSolutionDescription=Maaf, Cryptomator tiba-tiba berhenti. Tapi telah ditemukan sebuah jawaban untuk masalah ini. Silahkan lihat tautan berikut.
|
|
||||||
error.hyperlink.solution=Cari tahu solusinya
|
|
||||||
error.lookupPermissionMessage=Cryptomator bisa mencari solusinya secara daring. Ini akan meneruskan pesan ke direktori masalah kami dengan alamat IP Anda.
|
|
||||||
error.dismiss=Tutup
|
|
||||||
error.lookUpSolution=Cari tahu solusinya
|
|
||||||
|
|
||||||
# Defaults
|
# Defaults
|
||||||
defaults.vault.vaultName=Vault
|
defaults.vault.vaultName=Vault
|
||||||
@@ -39,15 +34,13 @@ traymenu.vault.lock=Kunci
|
|||||||
traymenu.vault.reveal=Perlihatkan
|
traymenu.vault.reveal=Perlihatkan
|
||||||
|
|
||||||
# Add Vault Wizard
|
# Add Vault Wizard
|
||||||
addvaultwizard.title=Tambah Brankas
|
addvaultwizard.title=Tambah Vault
|
||||||
## New
|
## New
|
||||||
addvaultwizard.new.title=Tambah Vault baru
|
|
||||||
### Name
|
### Name
|
||||||
addvaultwizard.new.nameInstruction=Buat sebuah nama untuk brankas
|
addvaultwizard.new.nameInstruction=Beri nama untuk vault berikut
|
||||||
addvaultwizard.new.namePrompt=Nama Brankas
|
addvaultwizard.new.namePrompt=Nama Vault
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=Dimana Cryptomator seharusnya menyimpan vault berisi file enkripsi Anda?
|
addvaultwizard.new.locationInstruction=Dimana Cryptomator seharusnya menyimpan vault berisi file enkripsi Anda?
|
||||||
addvaultwizard.new.locationLoading=Memeriksa sistem file lokal untuk direktori default penyimpanan cloud…
|
|
||||||
addvaultwizard.new.locationLabel=Lokasi penyimpanan
|
addvaultwizard.new.locationLabel=Lokasi penyimpanan
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=Lokasi khusus
|
addvaultwizard.new.directoryPickerLabel=Lokasi khusus
|
||||||
@@ -57,18 +50,7 @@ addvaultwizard.new.fileAlreadyExists=Sudah ada file atau direktori dengan nama v
|
|||||||
addvaultwizard.new.locationDoesNotExist=Direktori pada path yang dipilih tidak tersedia atau tidak dapat diakses
|
addvaultwizard.new.locationDoesNotExist=Direktori pada path yang dipilih tidak tersedia atau tidak dapat diakses
|
||||||
addvaultwizard.new.locationIsNotWritable=Anda tidak memiliki hak akses untuk menulis pada path yang dipilih
|
addvaultwizard.new.locationIsNotWritable=Anda tidak memiliki hak akses untuk menulis pada path yang dipilih
|
||||||
addvaultwizard.new.locationIsOk=Lokasi yang sesuai dengan vault Anda
|
addvaultwizard.new.locationIsOk=Lokasi yang sesuai dengan vault Anda
|
||||||
addvaultwizard.new.invalidName=Nama Vault tidak valid
|
|
||||||
addvaultwizard.new.validName=Nama vault yang valid
|
|
||||||
addvaultwizard.new.validCharacters.message=Nama vault mungkin berisi karakter berikut:
|
|
||||||
addvaultwizard.new.validCharacters.chars=Karakter kata (mis. a, ж or 수)
|
|
||||||
addvaultwizard.new.validCharacters.numbers=Angka
|
|
||||||
addvaultwizard.new.validCharacters.dashes=Tanda hubung (%s) atau garis bawah (%s)
|
|
||||||
### Expert Settings
|
### Expert Settings
|
||||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Aktifkan pengaturan ahli
|
|
||||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Masukkan nilai antara 36 dan 220 (default 220)
|
|
||||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Buka dokumentasi untuk mempelajari lebih lanjut.
|
|
||||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Panjang maksimum nama file terenkripsi
|
|
||||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valid
|
|
||||||
### Password
|
### Password
|
||||||
addvaultwizard.new.createVaultBtn=Buat Vault
|
addvaultwizard.new.createVaultBtn=Buat Vault
|
||||||
addvaultwizard.new.generateRecoveryKeyChoice=Anda tidak dapat mengakses data tanpa kata sandi yang Anda miliki. Apa Anda ingin sebuah kunci pemulihan untuk berjaga-jaga jika seandainya Anda kehilangan kata sandi?
|
addvaultwizard.new.generateRecoveryKeyChoice=Anda tidak dapat mengakses data tanpa kata sandi yang Anda miliki. Apa Anda ingin sebuah kunci pemulihan untuk berjaga-jaga jika seandainya Anda kehilangan kata sandi?
|
||||||
@@ -92,7 +74,6 @@ addvault.new.readme.accessLocation.2=Ini adalah lokasi akses dari vault Anda.
|
|||||||
addvault.new.readme.accessLocation.3=Seluruh file yang ditambahkan ke volume ini akan dienkripsi oleh Cryptomator. Anda dapat mempergunakan isi vault seperti dalam folder/drive lain pada umumnya. Tampilan yang saat ini Anda lihat adalah tampilan dalam bentuk terdekripsi, yang sebenarnya terjadi adalah file-file Anda selalu dalam kondisi terenkripsi di dalam hard drive Anda.
|
addvault.new.readme.accessLocation.3=Seluruh file yang ditambahkan ke volume ini akan dienkripsi oleh Cryptomator. Anda dapat mempergunakan isi vault seperti dalam folder/drive lain pada umumnya. Tampilan yang saat ini Anda lihat adalah tampilan dalam bentuk terdekripsi, yang sebenarnya terjadi adalah file-file Anda selalu dalam kondisi terenkripsi di dalam hard drive Anda.
|
||||||
addvault.new.readme.accessLocation.4=Anda dapat menghapus file ini.
|
addvault.new.readme.accessLocation.4=Anda dapat menghapus file ini.
|
||||||
## Existing
|
## Existing
|
||||||
addvaultwizard.existing.title=Tambahkan Vault yang Ada
|
|
||||||
addvaultwizard.existing.instruction=Pilih file "vault.cryptomator" Anda dari vault yang ada. Jika hanya ada file bernama "masterkey.cryptomator", pilih file tersebut.
|
addvaultwizard.existing.instruction=Pilih file "vault.cryptomator" Anda dari vault yang ada. Jika hanya ada file bernama "masterkey.cryptomator", pilih file tersebut.
|
||||||
addvaultwizard.existing.chooseBtn=Pilih…
|
addvaultwizard.existing.chooseBtn=Pilih…
|
||||||
addvaultwizard.existing.filePickerTitle=Pilih File Vault
|
addvaultwizard.existing.filePickerTitle=Pilih File Vault
|
||||||
@@ -103,7 +84,6 @@ addvaultwizard.success.unlockNow=Buka Kunci Sekarang
|
|||||||
|
|
||||||
# Remove Vault
|
# Remove Vault
|
||||||
removeVault.title=Hapus Vault
|
removeVault.title=Hapus Vault
|
||||||
removeVault.message=Hapus vault?
|
|
||||||
removeVault.description=Tindakan ini hanya akan membuat Cryptomator melupakan vault ini. Anda dapat menambahkan vault ini lagi nanti. File yang telah dienkripsi tidak akan dihapus dari hard drive Anda.
|
removeVault.description=Tindakan ini hanya akan membuat Cryptomator melupakan vault ini. Anda dapat menambahkan vault ini lagi nanti. File yang telah dienkripsi tidak akan dihapus dari hard drive Anda.
|
||||||
removeVault.confirmBtn=Hapus Vault
|
removeVault.confirmBtn=Hapus Vault
|
||||||
|
|
||||||
@@ -114,7 +94,6 @@ changepassword.finalConfirmation=Saya mengerti bahwa saya tidak akan dapat menga
|
|||||||
|
|
||||||
# Forget Password
|
# Forget Password
|
||||||
forgetPassword.title=Lupa Kata Sandi
|
forgetPassword.title=Lupa Kata Sandi
|
||||||
forgetPassword.message=Lupakan kata sandi yang disimpan?
|
|
||||||
forgetPassword.description=Tindakan ini akan menghapus kata sandi vault berikut yang tersimpan dari sistem keychain Anda.
|
forgetPassword.description=Tindakan ini akan menghapus kata sandi vault berikut yang tersimpan dari sistem keychain Anda.
|
||||||
forgetPassword.confirmBtn=Lupa Kata Sandi
|
forgetPassword.confirmBtn=Lupa Kata Sandi
|
||||||
|
|
||||||
@@ -124,67 +103,25 @@ unlock.passwordPrompt=Masukkan kata sandi "%s":
|
|||||||
unlock.savePassword=Ingat Kata Sandi
|
unlock.savePassword=Ingat Kata Sandi
|
||||||
unlock.unlockBtn=Buka Kunci
|
unlock.unlockBtn=Buka Kunci
|
||||||
## Select
|
## Select
|
||||||
unlock.chooseMasterkey.message=File masterkey tidak ditemukan
|
|
||||||
unlock.chooseMasterkey.description=Tidak dapat menemukan file masterkey untuk vault ini pada lokasi yang dicari. Mohon pilih file kunci secara manual.
|
unlock.chooseMasterkey.description=Tidak dapat menemukan file masterkey untuk vault ini pada lokasi yang dicari. Mohon pilih file kunci secara manual.
|
||||||
unlock.chooseMasterkey.filePickerTitle=Pilih File Masterkey
|
unlock.chooseMasterkey.filePickerTitle=Pilih File Masterkey
|
||||||
unlock.chooseMasterkey.filePickerMimeDesc=MasterKey Cryptomator
|
unlock.chooseMasterkey.filePickerMimeDesc=MasterKey Cryptomator
|
||||||
## Success
|
## Success
|
||||||
unlock.success.message=Buka kunci berhasil
|
|
||||||
unlock.success.description="%s" berhasil dibuka! Vault Anda sekarang dapat diakses melalui drive virtual.
|
unlock.success.description="%s" berhasil dibuka! Vault Anda sekarang dapat diakses melalui drive virtual.
|
||||||
unlock.success.rememberChoice=Ingat pilihan saya, jangan perlihatkan lagi
|
unlock.success.rememberChoice=Ingat pilihan saya, jangan perlihatkan lagi
|
||||||
unlock.success.revealBtn=Tampilkan Drive
|
unlock.success.revealBtn=Tampilkan Drive
|
||||||
## Failure
|
## Failure
|
||||||
unlock.error.customPath.message=Tidak dapat memasang vault ke path kustom
|
|
||||||
unlock.error.customPath.description.notSupported=Jika Anda ingin tetap menggunakan path kustom, silakan buka preferensi dan pilih jenis volume yang mendukungnya. Jika tidak, buka opsi vault dan pilih titik mount yang didukung.
|
|
||||||
unlock.error.customPath.description.notExists=Jalur pemasangan kustom tidak ada. Baik membuatnya di sistem file lokal Anda atau mengubahnya di opsi vault.
|
|
||||||
unlock.error.customPath.description.inUse=Huruf drive atau jalur pemasangan kustom "%s" sudah digunakan.
|
|
||||||
unlock.error.customPath.description.hideawayNotDir=File sementara dan tersembunyi "%3$s" yang digunakan untuk membuka kunci tidak dapat dihapus. Silakan periksa file dan kemudian hapus secara manual.
|
|
||||||
unlock.error.customPath.description.couldNotBeCleaned=Vault Anda tidak dapat dipasang ke path "%s". Silakan coba lagi atau pilih path yang berbeda.
|
|
||||||
unlock.error.customPath.description.notEmptyDir=Path kustom pemasangan "%s" bukan folder kosong. Silakan pilih folder kosong dan coba lagi.
|
|
||||||
unlock.error.customPath.description.generic=Anda telah memilih kustom path pemasangan untuk vault ini, tetapi gagal menggunakannya dengan pesan:%2$s
|
|
||||||
unlock.error.restartRequired.message=Tidak dapat membuka kunci vault
|
|
||||||
unlock.error.restartRequired.description=Ubah jenis volume di opsi vault atau restart Cryptomator.
|
|
||||||
unlock.error.title=Gagal membuka kunci "%s"
|
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=Tidak dapat mengakses perangkat kunci
|
|
||||||
hub.noKeychain.description=Untuk membuka kunci Hub vault, diperlukan perangkat kunci, yang diamankan menggunakan keychain. Untuk melanjutkan, aktifkan “%s” dan pilih keychain di preferensi.
|
|
||||||
hub.noKeychain.openBtn=Buka Preferensi
|
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Menunggu otentikasi…
|
|
||||||
hub.auth.description=Anda secara otomatis akan diarahkan ke halaman login.
|
|
||||||
hub.auth.loginLink=Tidak diarahkan? Klik di sini untuk membukanya.
|
|
||||||
### Receive Key
|
### Receive Key
|
||||||
hub.receive.message=Respons pemrosesan…
|
|
||||||
hub.receive.description=Cryptomator menerima dan memproses respons dari Hub. Harap tunggu.
|
|
||||||
### Register Device
|
### Register Device
|
||||||
hub.register.message=Perangkat Baru
|
|
||||||
hub.register.description=Ini adalah akses Hub pertama dari perangkat ini. Silakan daftarkan menggunakan Kunci Akun Anda.
|
|
||||||
hub.register.nameLabel=Nama Perangkat
|
|
||||||
hub.register.invalidAccountKeyLabel=Kunci Akun Tidak Valid
|
|
||||||
hub.register.registerBtn=Daftar
|
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
hub.register.legacy.occupiedMsg=Nama sudah digunakan
|
|
||||||
hub.register.legacy.description=Ini adalah akses Hub pertama dari perangkat ini. Silakan daftarkan.
|
|
||||||
### Registration Success
|
### Registration Success
|
||||||
hub.registerSuccess.message=Perangkat terdaftar
|
|
||||||
hub.registerSuccess.description=Perangkat Anda berhasil terdaftar. Sekarang Anda dapat membuka kunci vault.
|
|
||||||
hub.registerSuccess.unlockBtn=Buka Kunci
|
hub.registerSuccess.unlockBtn=Buka Kunci
|
||||||
hub.registerSuccess.legacy.description=Untuk mengakses vault, perangkat Anda harus diberi wewenang tambahan oleh pemilik vault.
|
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=Registrasi perangkat gagal
|
|
||||||
hub.registerFailed.description.generic=Kesalahan terjadi dalam proses pendaftaran. Untuk detail lebih lanjut, lihat log aplikasi.
|
|
||||||
hub.registerFailed.description.deviceAlreadyExists=Perangkat ini sudah terdaftar untuk pengguna lain. Cobalah menggunakan akun pengguna atau perangkat yang berbeda.
|
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Akses ditolak
|
|
||||||
hub.unauthorized.description=Perangkat Anda belum diizinkan mengakses vault ini. Mintalah pemilik vault untuk mengizinkannya.
|
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Tindakan diperlukan
|
|
||||||
hub.requireAccountInit.description.0=Untuk melanjutkan, silakan lengkapi langkah-langkah yang diperlukan
|
|
||||||
hub.requireAccountInit.description.1=Hub profil pengguna
|
|
||||||
hub.requireAccountInit.description.2=.
|
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
hub.invalidLicense.message=Lisensi Hub tidak valid
|
|
||||||
hub.invalidLicense.description=Instans Cryptomator Hub Anda memiliki lisensi yang tidak valid. Harap informasikan kepada administrator Hub untuk meningkatkan atau memperbarui lisensi.
|
|
||||||
|
|
||||||
# Lock
|
# Lock
|
||||||
## Force
|
## Force
|
||||||
@@ -200,11 +137,6 @@ lock.fail.description=Vault "%s" tidak dapat dikunci. Pastikan bahwa file yang b
|
|||||||
migration.title=Tingkatkan Vault
|
migration.title=Tingkatkan Vault
|
||||||
## Start
|
## Start
|
||||||
migration.start.header=Tingkatkan Vault
|
migration.start.header=Tingkatkan Vault
|
||||||
migration.start.text=Untuk membuka vault Anda "%s" di Cryptomator versi baru ini, vault harus ditingkatkan ke format yang lebih baru. Sebelum melakukan ini, Anda harus tahu hal berikut:
|
|
||||||
migration.start.remarkUndone=Pembaruan ini tidak dapat dibatalkan.
|
|
||||||
migration.start.remarkVersions=Cryptomator versi yang lebih lama tidak akan dapat membuka vault yang ditingkatkan.
|
|
||||||
migration.start.remarkCanRun=Anda harus yakin bahwa setiap perangkat tempat Anda mengakses vault dapat menjalankan versi Cryptomator ini.
|
|
||||||
migration.start.remarkSynced=Anda harus yakin bahwa vault Anda sepenuhnya disinkronkan pada perangkat ini, dan pada perangkat Anda yang lain, sebelum memutakhirkannya.
|
|
||||||
migration.start.confirm=Saya telah membaca dan memahami informasi di atas
|
migration.start.confirm=Saya telah membaca dan memahami informasi di atas
|
||||||
## Run
|
## Run
|
||||||
migration.run.enterPassword=Masukkan kata sandi untuk "%s"
|
migration.run.enterPassword=Masukkan kata sandi untuk "%s"
|
||||||
@@ -253,25 +185,8 @@ health.check.detail.checkFinished=Pemeriksaan berhasil dilakukan.
|
|||||||
health.check.detail.checkFinishedAndFound=Pemeriksaan selesai. Silahkan tinjau hasilnya.
|
health.check.detail.checkFinishedAndFound=Pemeriksaan selesai. Silahkan tinjau hasilnya.
|
||||||
health.check.detail.checkFailed=Pemeriksaan terhenti karena terjadi kesalahan.
|
health.check.detail.checkFailed=Pemeriksaan terhenti karena terjadi kesalahan.
|
||||||
health.check.detail.checkCancelled=Pemeriksaan dibatalkan.
|
health.check.detail.checkCancelled=Pemeriksaan dibatalkan.
|
||||||
health.check.detail.listFilters.label=Filter
|
|
||||||
health.check.detail.fixAllSpecificBtn=Pemulihan semua jenis
|
|
||||||
health.check.exportBtn=Ekspor Laporan
|
health.check.exportBtn=Ekspor Laporan
|
||||||
## Result view
|
## Result view
|
||||||
health.result.severityFilter.all=Tingkat Keparahan - Semua
|
|
||||||
health.result.severityFilter.good=Baik
|
|
||||||
health.result.severityFilter.info=Info
|
|
||||||
health.result.severityFilter.warn=Peringatan
|
|
||||||
health.result.severityFilter.crit=Kritikal
|
|
||||||
health.result.severityTip.good=Keparahan: Baik\nStruktur vault normal.
|
|
||||||
health.result.severityTip.info=Keparahan: Info\nStruktur vault utuh, perbaikan disarankan.
|
|
||||||
health.result.severityTip.warn=Keparahan: Peringatan\nStruktur vault rusak, sangat disarankan untuk perbaikan.
|
|
||||||
health.result.severityTip.crit=Keparahan: Kritkal\nStruktur vault rusak, kemungkinan kehilangan data.
|
|
||||||
health.result.fixStateFilter.all=Status pemulihan - Semua
|
|
||||||
health.result.fixStateFilter.fixable=Dapat dipulihkan
|
|
||||||
health.result.fixStateFilter.notFixable=Tidak dapat dipulihkan
|
|
||||||
health.result.fixStateFilter.fixing=Memulihkan…
|
|
||||||
health.result.fixStateFilter.fixed=Dipulihkan
|
|
||||||
health.result.fixStateFilter.fixFailed=Pemulihan gagal
|
|
||||||
## Fix Application
|
## Fix Application
|
||||||
health.fix.fixBtn=Perbaiki
|
health.fix.fixBtn=Perbaiki
|
||||||
health.fix.successTip=Perbaikan berhasil
|
health.fix.successTip=Perbaikan berhasil
|
||||||
@@ -282,7 +197,6 @@ preferences.title=Preferensi
|
|||||||
## General
|
## General
|
||||||
preferences.general=Umum
|
preferences.general=Umum
|
||||||
preferences.general.startHidden=Sembunyikan jendela saat memulai Cryptomator
|
preferences.general.startHidden=Sembunyikan jendela saat memulai Cryptomator
|
||||||
preferences.general.autoCloseVaults=Kunci vault yang terbuka secara otomatis saat aplikasi dihentikan
|
|
||||||
preferences.general.debugLogging=Aktifkan pencatatan debug
|
preferences.general.debugLogging=Aktifkan pencatatan debug
|
||||||
preferences.general.debugDirectory=Perlihatkan file log
|
preferences.general.debugDirectory=Perlihatkan file log
|
||||||
preferences.general.autoStart=Jalankan Cryptomator saat sistem dimulai
|
preferences.general.autoStart=Jalankan Cryptomator saat sistem dimulai
|
||||||
@@ -303,24 +217,13 @@ preferences.interface.showMinimizeButton=Tampilkan tombol perkecil
|
|||||||
preferences.interface.showTrayIcon=Tampilkan ikon tray (aplikasi perlu dimuat ulang)
|
preferences.interface.showTrayIcon=Tampilkan ikon tray (aplikasi perlu dimuat ulang)
|
||||||
## Volume
|
## Volume
|
||||||
preferences.volume=Drive Virtual
|
preferences.volume=Drive Virtual
|
||||||
preferences.volume.type=Jenis Default Volume
|
|
||||||
preferences.volume.type.automatic=Otomatis
|
preferences.volume.type.automatic=Otomatis
|
||||||
preferences.volume.docsTooltip=Buka dokumentasi untuk mempelajari lebih lanjut tentang berbagai jenis volume.
|
|
||||||
preferences.volume.fuseRestartRequired=Untuk menerapkan perubahan, Cryptomator perlu dimulai kembali.
|
|
||||||
preferences.volume.tcp.port=TCP Port Default
|
|
||||||
preferences.volume.supportedFeatures=Jenis volume yang dipilih mendukung fitur-fitur berikut ini:
|
|
||||||
preferences.volume.feature.mountAuto=Pemilihan titik pemasangan secara otomatis
|
|
||||||
preferences.volume.feature.mountToDir=Direktori kustom sebagai titik pemasangan
|
|
||||||
preferences.volume.feature.mountToDriveLetter=Huruf drive sebagai titik pemasangan
|
|
||||||
preferences.volume.feature.mountFlags=Opsi pemasangan kustom
|
|
||||||
preferences.volume.feature.readOnly=Pemasangan hanya baca saja
|
|
||||||
## Updates
|
## Updates
|
||||||
preferences.updates=Pembaharuan
|
preferences.updates=Pembaharuan
|
||||||
preferences.updates.currentVersion=Versi Saat Ini: %s
|
preferences.updates.currentVersion=Versi Saat Ini: %s
|
||||||
preferences.updates.autoUpdateCheck=Otomatis periksa update
|
preferences.updates.autoUpdateCheck=Otomatis periksa update
|
||||||
preferences.updates.checkNowBtn=Periksa Sekarang
|
preferences.updates.checkNowBtn=Periksa Sekarang
|
||||||
preferences.updates.updateAvailable=Pembaharuan ke versi %s tersedia.
|
preferences.updates.updateAvailable=Pembaharuan ke versi %s tersedia.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Dukung Kami
|
preferences.contribute=Dukung Kami
|
||||||
preferences.contribute.registeredFor=Sertifikat supporter terdaftar atas nama %s
|
preferences.contribute.registeredFor=Sertifikat supporter terdaftar atas nama %s
|
||||||
@@ -337,34 +240,26 @@ stats.title=Statistik untuk %s
|
|||||||
stats.cacheHitRate=Tingkat Hit Cache
|
stats.cacheHitRate=Tingkat Hit Cache
|
||||||
## Read
|
## Read
|
||||||
stats.read.throughput.idle=Baca: diam
|
stats.read.throughput.idle=Baca: diam
|
||||||
stats.read.throughput.kibs=Membaca: %.2f KiB/s
|
|
||||||
stats.read.throughput.mibs=Baca: %.2f MiB/detik
|
stats.read.throughput.mibs=Baca: %.2f MiB/detik
|
||||||
stats.read.total.data.none=Data dibaca: -
|
stats.read.total.data.none=Data dibaca: -
|
||||||
stats.read.total.data.kib=Data yang dibaca: %.1f KiB
|
|
||||||
stats.read.total.data.mib=Data dibaca: %.1f MiB
|
stats.read.total.data.mib=Data dibaca: %.1f MiB
|
||||||
stats.read.total.data.gib=Data dibaca: %.1f GiB
|
stats.read.total.data.gib=Data dibaca: %.1f GiB
|
||||||
stats.decr.total.data.none=Data terdekripsi: -
|
stats.decr.total.data.none=Data terdekripsi: -
|
||||||
stats.decr.total.data.kib=Data yang didekripsi: %.1f KiB
|
|
||||||
stats.decr.total.data.mib=Data terdeksripsi: %.1f MiB
|
stats.decr.total.data.mib=Data terdeksripsi: %.1f MiB
|
||||||
stats.decr.total.data.gib=Data terdeksripsi: %.1f GiB
|
stats.decr.total.data.gib=Data terdeksripsi: %.1f GiB
|
||||||
stats.read.accessCount=Total dibaca: %d
|
stats.read.accessCount=Total dibaca: %d
|
||||||
## Write
|
## Write
|
||||||
stats.write.throughput.idle=Tulis: diam
|
stats.write.throughput.idle=Tulis: diam
|
||||||
stats.write.throughput.kibs=Menulis: %.2f KiB/s
|
|
||||||
stats.write.throughput.mibs=Tulis: %.2f MiB/detik
|
stats.write.throughput.mibs=Tulis: %.2f MiB/detik
|
||||||
stats.write.total.data.none=Data tertulis: -
|
stats.write.total.data.none=Data tertulis: -
|
||||||
stats.write.total.data.kib=Data yang ditulis: %.1f KiB
|
|
||||||
stats.write.total.data.mib=Data tertulis: %.1f MiB
|
stats.write.total.data.mib=Data tertulis: %.1f MiB
|
||||||
stats.write.total.data.gib=Data tertulis: %.1f GiB
|
stats.write.total.data.gib=Data tertulis: %.1f GiB
|
||||||
stats.encr.total.data.none=Data terenkripsi: -
|
stats.encr.total.data.none=Data terenkripsi: -
|
||||||
stats.encr.total.data.kib=Data yang dienkripsi: %.1f KiB
|
|
||||||
stats.encr.total.data.mib=Data terenkripsi: %.1f MiB
|
stats.encr.total.data.mib=Data terenkripsi: %.1f MiB
|
||||||
stats.encr.total.data.gib=Data terenkripsi: %.1f GiB
|
stats.encr.total.data.gib=Data terenkripsi: %.1f GiB
|
||||||
stats.write.accessCount=Total ditulis: %d
|
stats.write.accessCount=Total ditulis: %d
|
||||||
|
|
||||||
## Accesses
|
## Accesses
|
||||||
stats.access.current=Akses: %d
|
|
||||||
stats.access.total=Total yang akses: %d
|
|
||||||
|
|
||||||
|
|
||||||
# Main Window
|
# Main Window
|
||||||
@@ -381,9 +276,6 @@ main.vaultlist.contextMenu.unlock=Buka Kunci…
|
|||||||
main.vaultlist.contextMenu.unlockNow=Buka Kunci Sekarang
|
main.vaultlist.contextMenu.unlockNow=Buka Kunci Sekarang
|
||||||
main.vaultlist.contextMenu.vaultoptions=Tampilkan Opsi Vault
|
main.vaultlist.contextMenu.vaultoptions=Tampilkan Opsi Vault
|
||||||
main.vaultlist.contextMenu.reveal=Buka Drive
|
main.vaultlist.contextMenu.reveal=Buka Drive
|
||||||
main.vaultlist.addVaultBtn=Tambah
|
|
||||||
main.vaultlist.addVaultBtn.menuItemNew=Vault Baru...
|
|
||||||
main.vaultlist.addVaultBtn.menuItemExisting=Vault yang ada...
|
|
||||||
## Vault Detail
|
## Vault Detail
|
||||||
### Welcome
|
### Welcome
|
||||||
main.vaultDetail.welcomeOnboarding=Terima kasih telah memilih Cryptomator untuk melindungi file Anda. Jika Anda memerlukan bantuan, lihat panduan awal kami:
|
main.vaultDetail.welcomeOnboarding=Terima kasih telah memilih Cryptomator untuk melindungi file Anda. Jika Anda memerlukan bantuan, lihat panduan awal kami:
|
||||||
@@ -393,23 +285,16 @@ main.vaultDetail.unlockBtn=Buka Kunci…
|
|||||||
main.vaultDetail.unlockNowBtn=Buka Kunci Sekarang
|
main.vaultDetail.unlockNowBtn=Buka Kunci Sekarang
|
||||||
main.vaultDetail.optionsBtn=Opsi Vault
|
main.vaultDetail.optionsBtn=Opsi Vault
|
||||||
main.vaultDetail.passwordSavedInKeychain=Kata Sandi tersimpan
|
main.vaultDetail.passwordSavedInKeychain=Kata Sandi tersimpan
|
||||||
main.vaultDetail.share=Bagikan…
|
|
||||||
### Unlocked
|
### Unlocked
|
||||||
main.vaultDetail.unlockedStatus=TERBUKA
|
main.vaultDetail.unlockedStatus=TERBUKA
|
||||||
main.vaultDetail.accessLocation=Konten vault Anda dapat diakses di sini:
|
main.vaultDetail.accessLocation=Konten vault Anda dapat diakses di sini:
|
||||||
main.vaultDetail.revealBtn=Buka Drive
|
main.vaultDetail.revealBtn=Buka Drive
|
||||||
main.vaultDetail.copyUri=Salin URI
|
|
||||||
main.vaultDetail.lockBtn=Gembok
|
main.vaultDetail.lockBtn=Gembok
|
||||||
main.vaultDetail.bytesPerSecondRead=Read:
|
main.vaultDetail.bytesPerSecondRead=Read:
|
||||||
main.vaultDetail.bytesPerSecondWritten=Write:
|
main.vaultDetail.bytesPerSecondWritten=Write:
|
||||||
main.vaultDetail.throughput.idle=idle
|
main.vaultDetail.throughput.idle=idle
|
||||||
main.vaultDetail.throughput.kbps=%.1f KiB/s
|
|
||||||
main.vaultDetail.throughput.mbps=%.1f MiB/detik
|
main.vaultDetail.throughput.mbps=%.1f MiB/detik
|
||||||
main.vaultDetail.stats=Statistik Vault
|
main.vaultDetail.stats=Statistik Vault
|
||||||
main.vaultDetail.locateEncryptedFileBtn=Temukan File yang Dienkripsi
|
|
||||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=Pilih file dari vault Anda untuk menemukan mitra enkripsinya
|
|
||||||
main.vaultDetail.encryptedPathsCopied=Path Disalin ke Clipboard!
|
|
||||||
main.vaultDetail.filePickerTitle=Pilih File Didalam Vault
|
|
||||||
### Missing
|
### Missing
|
||||||
main.vaultDetail.missing.info=Cryptomator tidak dapat menemukan vault di path ini.
|
main.vaultDetail.missing.info=Cryptomator tidak dapat menemukan vault di path ini.
|
||||||
main.vaultDetail.missing.recheck=Periksa kembali
|
main.vaultDetail.missing.recheck=Periksa kembali
|
||||||
@@ -448,59 +333,34 @@ vaultOptions.general.startHealthCheckBtn=Mulai Pemeriksaan Kesehatan
|
|||||||
|
|
||||||
## Mount
|
## Mount
|
||||||
vaultOptions.mount=Pemasangan
|
vaultOptions.mount=Pemasangan
|
||||||
vaultOptions.mount.info=Buka preferensi drive virtual untuk mengubah pengaturan default.
|
|
||||||
vaultOptions.mount.readonly=Read-Only
|
vaultOptions.mount.readonly=Read-Only
|
||||||
vaultOptions.mount.customMountFlags=Custom Mount Flags
|
vaultOptions.mount.customMountFlags=Custom Mount Flags
|
||||||
vaultOptions.mount.winDriveLetterOccupied=terpakai
|
vaultOptions.mount.winDriveLetterOccupied=terpakai
|
||||||
vaultOptions.mount.mountPoint=Titik Pasang
|
vaultOptions.mount.mountPoint=Titik Pasang
|
||||||
vaultOptions.mount.mountPoint.auto=Secara otomatis memilih lokasi yang sesuai
|
vaultOptions.mount.mountPoint.auto=Secara otomatis memilih lokasi yang sesuai
|
||||||
vaultOptions.mount.mountPoint.driveLetter=Gunakan drive letter yang sudah ditetapkan
|
vaultOptions.mount.mountPoint.driveLetter=Gunakan drive letter yang sudah ditetapkan
|
||||||
vaultOptions.mount.mountPoint.custom=Gunakan direktori yang dipilih
|
|
||||||
vaultOptions.mount.mountPoint.directoryPickerButton=Pilih…
|
vaultOptions.mount.mountPoint.directoryPickerButton=Pilih…
|
||||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Pilih directori
|
|
||||||
vaultOptions.mount.volumeType.default=Default (%s)
|
|
||||||
vaultOptions.mount.volumeType.restartRequired=Untuk menggunakan tipe volume ini, Cryptomator perlu dimulai ulang.
|
|
||||||
vaultOptions.mount.volume.tcp.port=Port TCP
|
|
||||||
vaultOptions.mount.volume.type=Jenis Volume
|
|
||||||
## Master Key
|
## Master Key
|
||||||
vaultOptions.masterkey=Kata Sandi
|
vaultOptions.masterkey=Kata Sandi
|
||||||
vaultOptions.masterkey.changePasswordBtn=Ubah Kata Sandi
|
vaultOptions.masterkey.changePasswordBtn=Ubah Kata Sandi
|
||||||
vaultOptions.masterkey.forgetSavedPasswordBtn=Lupa Kata Sandi
|
vaultOptions.masterkey.forgetSavedPasswordBtn=Lupa Kata Sandi
|
||||||
vaultOptions.masterkey.recoveryKeyExplanation=Kunci pemulihan adalah satu-satunya cara Anda untuk memulihkan akses ke vault jika Anda kehilangan kata sandi.
|
vaultOptions.masterkey.recoveryKeyExplanation=Kunci pemulihan adalah satu-satunya cara Anda untuk memulihkan akses ke vault jika Anda kehilangan kata sandi.
|
||||||
vaultOptions.masterkey.showRecoveryKeyBtn=Tampilkan Kunci Pemulihan
|
vaultOptions.masterkey.showRecoveryKeyBtn=Tampilkan Kunci Pemulihan
|
||||||
vaultOptions.masterkey.recoverPasswordBtn=Atur Ulang Kata Sandi
|
|
||||||
## Hub
|
## Hub
|
||||||
vaultOptions.hub=Pemulihan
|
|
||||||
vaultOptions.hub.convertInfo=Anda dapat menggunakan kunci pemulihan untuk mengonversi Hub vault ini ke vault berbasis kata sandi dalam keadaan darurat.
|
|
||||||
vaultOptions.hub.convertBtn=Konversi ke Vault Berbasis Kata Sandi
|
|
||||||
|
|
||||||
# Recovery Key
|
# Recovery Key
|
||||||
## Display Recovery Key
|
## Display Recovery Key
|
||||||
recoveryKey.display.title=Tampilkan Kunci Pemulihan
|
|
||||||
recoveryKey.create.message=Diperlukan kata sandi
|
|
||||||
recoveryKey.create.description=Masukkan kata sandi untuk menampilkan kunci pemulikan untuk "%s":
|
recoveryKey.create.description=Masukkan kata sandi untuk menampilkan kunci pemulikan untuk "%s":
|
||||||
recoveryKey.display.description=Kunci pemulihan berikut dapat digunakan untuk memulihkan akses ke "%s":
|
recoveryKey.display.description=Kunci pemulihan berikut dapat digunakan untuk memulihkan akses ke "%s":
|
||||||
recoveryKey.display.StorageHints=Simpan di tempat yang sangat aman, misal.:\n • Simpan menggunakan password manager\n • Simpan di USB\n • cetak di kertas
|
recoveryKey.display.StorageHints=Simpan di tempat yang sangat aman, misal.:\n • Simpan menggunakan password manager\n • Simpan di USB\n • cetak di kertas
|
||||||
## Reset Password
|
## Reset Password
|
||||||
### Enter Recovery Key
|
### Enter Recovery Key
|
||||||
recoveryKey.recover.title=Atur Ulang Kata Sandi
|
|
||||||
recoveryKey.recover.prompt=Masukkan kunci pemulihan untuk "%s":
|
|
||||||
recoveryKey.recover.correctKey=Ini adalah kunci pemulihan yang valid
|
recoveryKey.recover.correctKey=Ini adalah kunci pemulihan yang valid
|
||||||
recoveryKey.recover.wrongKey=Kunci pemulihan ini milik vault yang lain
|
|
||||||
recoveryKey.recover.invalidKey=Kunci pemulihan ini tidak valid
|
|
||||||
recoveryKey.printout.heading=Kunci Pemulihan Cryptomator\n"%s"\n
|
recoveryKey.printout.heading=Kunci Pemulihan Cryptomator\n"%s"\n
|
||||||
### Reset Password
|
### Reset Password
|
||||||
recoveryKey.recover.resetBtn=Atur ulang
|
|
||||||
### Recovery Key Password Reset Success
|
### Recovery Key Password Reset Success
|
||||||
recoveryKey.recover.resetSuccess.message=Atur ulang kata sandi berhasil
|
|
||||||
recoveryKey.recover.resetSuccess.description=Anda dapat membuka kunci vault Anda dengan kata sandi baru.
|
|
||||||
|
|
||||||
# Convert Vault
|
# Convert Vault
|
||||||
convertVault.title=Konversi Vault
|
|
||||||
convertVault.convert.convertBtn.before=Konversi
|
|
||||||
convertVault.convert.convertBtn.processing=Mengonversi…
|
|
||||||
convertVault.success.message=Konversi berhasil
|
|
||||||
convertVault.hubToPassword.success.description=Anda sekarang dapat membuka kunci vault dengan kata sandi yang dipilih tanpa memerlukan akses Hub.
|
|
||||||
|
|
||||||
# New Password
|
# New Password
|
||||||
newPassword.promptText=Masukkan kata sandi baru
|
newPassword.promptText=Masukkan kata sandi baru
|
||||||
@@ -515,43 +375,10 @@ passwordStrength.messageLabel.3=Kuat
|
|||||||
passwordStrength.messageLabel.4=Sangat kuat
|
passwordStrength.messageLabel.4=Sangat kuat
|
||||||
|
|
||||||
# Quit
|
# Quit
|
||||||
quit.title=Hentikan Aplikasi
|
|
||||||
quit.message=Ada vault yang tidak dikunci
|
|
||||||
quit.description=Beri konfirmasi bila Anda ingin berhenti. Cryptomator akan mengunci semua vault yang terbuka agar mencegah kehilangan data.
|
|
||||||
quit.lockAndQuitBtn=Kunci dan Keluar
|
quit.lockAndQuitBtn=Kunci dan Keluar
|
||||||
|
|
||||||
# Forced Quit
|
# Forced Quit
|
||||||
quit.forced.message=Beberapa vault tidak bisa dikunci
|
|
||||||
quit.forced.description=Penguncian vault diblokir oleh operasi yang tertunda atau file yang terbuka. Anda bisa memaksa mengunci brankas yang tersisa, namun mengganggu I/O dapat mengakibatkan hilangnya data yang belum disimpan.
|
|
||||||
quit.forced.forceAndQuitBtn=Paksa dan Berhenti
|
|
||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
updateReminder.title=Periksa Pembaruan
|
|
||||||
updateReminder.message=Periksa Pembaruan?
|
|
||||||
updateReminder.description=Tetap perbarui dengan fitur baru, perbaikan bug, dan peningkatan keamanan. Kami sarankan untuk memeriksa pembaruan secara otomatis.
|
|
||||||
updateReminder.notNow=Jangan Sekarang
|
|
||||||
updateReminder.yesOnce=Ya, Sekali
|
|
||||||
updateReminder.yesAutomatically=Ya, Secara Otomatis
|
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.preferencesBtn=Buka Preferensi
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Bagikan Vault
|
|
||||||
shareVault.message=Apakah Anda ingin berbagi vault dengan orang lain?
|
|
||||||
shareVault.description=Selalu berhati-hati saat berbagi vault dengan orang lain. Singkatnya, ikuti langkah-langkah ini:
|
|
||||||
shareVault.instruction.1=1. Bagikan akses folder vault terenkripsi melalui penyimpanan cloud.
|
|
||||||
shareVault.instruction.2=2. Bagikan kata sandi vault dengan cara yang aman.
|
|
||||||
shareVault.remarkBestPractices=Untuk informasi lebih lanjut, lihat saran praktik terbaik di dokumentasi kami.
|
|
||||||
shareVault.docsTooltip=Buka dokumentasi untuk mempelajari lebih lanjut tentang berbagi vault.
|
|
||||||
shareVault.hubAd.description=Cara aman untuk bekerja dalam tim
|
|
||||||
shareVault.hubAd.keyManagement=• Manajemen kunci tanpa pengetahuan
|
|
||||||
shareVault.hubAd.authentication=• Otentikasi yang kuat
|
|
||||||
shareVault.hubAd.encryption=• Enkripsi end-to-end
|
|
||||||
shareVault.visitHub=Kunjungi Cryptomator Hub
|
|
||||||
|
|
||||||
shareVault.hub.message=Cara berbagi Hub vault
|
|
||||||
shareVault.hub.description=Untuk berbagi isi vault dengan anggota tim lain, Anda harus melakukan dua langkah:
|
|
||||||
shareVault.hub.instruction.1=1. Bagikan akses folder vault terenkripsi melalui penyimpanan cloud.
|
|
||||||
shareVault.hub.instruction.2=2. Berikan akses ke anggota tim di Cryptomator Hub.
|
|
||||||
shareVault.hub.openHub=Buka Cryptomator Hub
|
|
||||||
@@ -47,7 +47,6 @@ addvaultwizard.new.nameInstruction=Scegli un nome per la cassaforte
|
|||||||
addvaultwizard.new.namePrompt=Nome della Cassaforte
|
addvaultwizard.new.namePrompt=Nome della Cassaforte
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=Dove dovrebbe memorizzare Cryptomator i file crittografati della tua cassaforte?
|
addvaultwizard.new.locationInstruction=Dove dovrebbe memorizzare Cryptomator i file crittografati della tua cassaforte?
|
||||||
addvaultwizard.new.locationLoading=Controllo del filesystem locale per le cartelle predefinite di archiviazione cloud…
|
|
||||||
addvaultwizard.new.locationLabel=Posizione archivio
|
addvaultwizard.new.locationLabel=Posizione archivio
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=Posizione personalizzata
|
addvaultwizard.new.directoryPickerLabel=Posizione personalizzata
|
||||||
@@ -89,7 +88,7 @@ addvault.new.readme.storageLocation.10=Se hai bisogno di aiuto, leggi la documen
|
|||||||
addvault.new.readme.accessLocation.fileName=BENVENUTO.rtf
|
addvault.new.readme.accessLocation.fileName=BENVENUTO.rtf
|
||||||
addvault.new.readme.accessLocation.1=🔐 VOLUME CRITTOGRAFATO 🔐
|
addvault.new.readme.accessLocation.1=🔐 VOLUME CRITTOGRAFATO 🔐
|
||||||
addvault.new.readme.accessLocation.2=Questa è la posizione d'accesso della tua cassaforte.
|
addvault.new.readme.accessLocation.2=Questa è la posizione d'accesso della tua cassaforte.
|
||||||
addvault.new.readme.accessLocation.3=Ogni file aggiunto a questo volume sarà crittografato da Cryptomator. Puoi lavorarci come su ogni altro disco/cartella. Questa è solo una vista decrittografata del suo contenuto, i tuoi file restano sempre crittografati sul tuo disco rigido.
|
addvault.new.readme.accessLocation.3=Ogni file aggiunto a questo volume sarà crittografato da Cryptomator. Puoi lavorarci come su ogni altra unità/cartella. Questa è solo una vista decrittografata del suo contenuto, i tuoi file restano sempre crittografati sul tuo disco rigido.
|
||||||
addvault.new.readme.accessLocation.4=Sentiti libero di rimuovere questo file.
|
addvault.new.readme.accessLocation.4=Sentiti libero di rimuovere questo file.
|
||||||
## Existing
|
## Existing
|
||||||
addvaultwizard.existing.title=Aggiungi una Cassaforte Esistente
|
addvaultwizard.existing.title=Aggiungi una Cassaforte Esistente
|
||||||
@@ -132,7 +131,7 @@ unlock.chooseMasterkey.filePickerMimeDesc=Chiave principale di Cryptomator
|
|||||||
unlock.success.message=Sbloccato con successo
|
unlock.success.message=Sbloccato con successo
|
||||||
unlock.success.description="%s" sbloccato correttamente! La tua cassaforte è ora accessibile tramite la sua unità virtuale.
|
unlock.success.description="%s" sbloccato correttamente! La tua cassaforte è ora accessibile tramite la sua unità virtuale.
|
||||||
unlock.success.rememberChoice=Ricorda la scelta, non mostrarmelo più
|
unlock.success.rememberChoice=Ricorda la scelta, non mostrarmelo più
|
||||||
unlock.success.revealBtn=Rivela Unità
|
unlock.success.revealBtn=Rivela l'Unità
|
||||||
## Failure
|
## Failure
|
||||||
unlock.error.customPath.message=Impossibile montare la cassaforte sul percorso personalizzato
|
unlock.error.customPath.message=Impossibile montare la cassaforte sul percorso personalizzato
|
||||||
unlock.error.customPath.description.notSupported=Se desideri continuare a utilizzare il percorso personalizzato, vai alle preferenze e seleziona un tipo di volume che lo supporta. Altrimenti, vai alle opzioni della cassaforte e scegli un punto di montaggio supportato.
|
unlock.error.customPath.description.notSupported=Se desideri continuare a utilizzare il percorso personalizzato, vai alle preferenze e seleziona un tipo di volume che lo supporta. Altrimenti, vai alle opzioni della cassaforte e scegli un punto di montaggio supportato.
|
||||||
@@ -142,8 +141,6 @@ unlock.error.customPath.description.hideawayNotDir=Impossibile rimuovere il file
|
|||||||
unlock.error.customPath.description.couldNotBeCleaned=La tua cassaforte non può essere montata sul percorso "%s". Riprova o scegli un percorso diverso.
|
unlock.error.customPath.description.couldNotBeCleaned=La tua cassaforte non può essere montata sul percorso "%s". Riprova o scegli un percorso diverso.
|
||||||
unlock.error.customPath.description.notEmptyDir=Il percorso di montaggio selezionato "%s" non è una cartella vuota. Scegli una cartella vuota e riprova.
|
unlock.error.customPath.description.notEmptyDir=Il percorso di montaggio selezionato "%s" non è una cartella vuota. Scegli una cartella vuota e riprova.
|
||||||
unlock.error.customPath.description.generic=Hai selezionato un percorso di montaggio personalizzato per questa cassaforte, ma il suo utilizzo non è riuscito con il messaggio: %2$s
|
unlock.error.customPath.description.generic=Hai selezionato un percorso di montaggio personalizzato per questa cassaforte, ma il suo utilizzo non è riuscito con il messaggio: %2$s
|
||||||
unlock.error.restartRequired.message=Impossibile sbloccare la cassaforte
|
|
||||||
unlock.error.restartRequired.description=Cambia il tipo di unità nelle opzioni della cassaforte o riavvia Cryptomator.
|
|
||||||
unlock.error.title=Sblocco "%s" non riuscito
|
unlock.error.title=Sblocco "%s" non riuscito
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=Impossibile accedere alla chiave del dispositivo
|
hub.noKeychain.message=Impossibile accedere alla chiave del dispositivo
|
||||||
@@ -158,22 +155,13 @@ hub.receive.message=Elaborazione della risposta…
|
|||||||
hub.receive.description=Cryptomator sta ricevendo ed elaborando la risposta da Hub. Attendere prego.
|
hub.receive.description=Cryptomator sta ricevendo ed elaborando la risposta da Hub. Attendere prego.
|
||||||
### Register Device
|
### Register Device
|
||||||
hub.register.message=Nuovo dispositivo
|
hub.register.message=Nuovo dispositivo
|
||||||
hub.register.description=Questo è il primo accesso all'Hub da questo dispositivo. Per favore autorizzalo utilizzando la tua chiave dell'account.
|
|
||||||
hub.register.nameLabel=Nome Del Dispositivo
|
hub.register.nameLabel=Nome Del Dispositivo
|
||||||
hub.register.invalidAccountKeyLabel=Chiave dell'account non valida
|
hub.register.invalidAccountKeyLabel=Chiave dell'account non valida
|
||||||
hub.register.registerBtn=Registrati
|
hub.register.registerBtn=Registrati
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
hub.register.legacy.occupiedMsg=Nome già in uso
|
|
||||||
hub.register.legacy.description=Questo è il primo accesso all'Hub da questo dispositivo. Per favore autorizzalo utilizzando la tua chiave dell'account.
|
|
||||||
### Registration Success
|
### Registration Success
|
||||||
hub.registerSuccess.message=Dispositivo autorizzato
|
|
||||||
hub.registerSuccess.description=Il tuo dispositivo è stato autorizzato correttamente. Ora puoi continuare a sbloccare la cassaforte.
|
|
||||||
hub.registerSuccess.unlockBtn=Sblocca
|
hub.registerSuccess.unlockBtn=Sblocca
|
||||||
hub.registerSuccess.legacy.description=Per accedere alla cassaforte, il tuo dispositivo deve essere anche autorizzato dal proprietario.
|
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=Registrazione dispositivo fallita
|
|
||||||
hub.registerFailed.description.generic=Si è verificato un errore nel processo di registrazione. Per maggiori dettagli, consulta il registro delle applicazioni.
|
|
||||||
hub.registerFailed.description.deviceAlreadyExists=Questo dispositivo è già registrato per un utente diverso. Prova a cambiare l'account utente o usa un altro dispositivo.
|
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Accesso negato
|
hub.unauthorized.message=Accesso negato
|
||||||
hub.unauthorized.description=Il tuo dispositivo non è ancora stato autorizzato ad accedere a questa cassaforte. Chiedi al proprietario della cassaforte di autorizzarlo.
|
hub.unauthorized.description=Il tuo dispositivo non è ancora stato autorizzato ad accedere a questa cassaforte. Chiedi al proprietario della cassaforte di autorizzarlo.
|
||||||
@@ -287,7 +275,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
|
||||||
@@ -321,18 +308,10 @@ preferences.updates.currentVersion=Versione Corrente: %s
|
|||||||
preferences.updates.autoUpdateCheck=Cerca automaticamente gli aggiornamenti
|
preferences.updates.autoUpdateCheck=Cerca automaticamente gli aggiornamenti
|
||||||
preferences.updates.checkNowBtn=Controlla Ora
|
preferences.updates.checkNowBtn=Controlla Ora
|
||||||
preferences.updates.updateAvailable=Aggiornamento alla versione %s disponibile.
|
preferences.updates.updateAvailable=Aggiornamento alla versione %s disponibile.
|
||||||
preferences.updates.lastUpdateCheck=Ultimo controllo: %s
|
|
||||||
preferences.updates.lastUpdateCheck.never=mai
|
|
||||||
preferences.updates.lastUpdateCheck.recently=recentemente
|
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=%s giorni fa
|
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=%s ore fa
|
|
||||||
preferences.updates.checkFailed=Ricerca aggiornamenti non riuscita. Controlla la tua connessione internet o riprova più tardi.
|
|
||||||
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 -->
|
||||||
@@ -401,7 +380,6 @@ main.vaultDetail.unlockBtn=Sblocca…
|
|||||||
main.vaultDetail.unlockNowBtn=Sblocca Ora
|
main.vaultDetail.unlockNowBtn=Sblocca Ora
|
||||||
main.vaultDetail.optionsBtn=Opzioni della Cassaforte
|
main.vaultDetail.optionsBtn=Opzioni della Cassaforte
|
||||||
main.vaultDetail.passwordSavedInKeychain=Password salvata
|
main.vaultDetail.passwordSavedInKeychain=Password salvata
|
||||||
main.vaultDetail.share=Condividi…
|
|
||||||
### Unlocked
|
### Unlocked
|
||||||
main.vaultDetail.unlockedStatus=SBLOCCATA
|
main.vaultDetail.unlockedStatus=SBLOCCATA
|
||||||
main.vaultDetail.accessLocation=I contenuti della tua cassaforte sono accessibili qui:
|
main.vaultDetail.accessLocation=I contenuti della tua cassaforte sono accessibili qui:
|
||||||
@@ -421,7 +399,7 @@ main.vaultDetail.filePickerTitle=Seleziona File Nella Cassaforte
|
|||||||
### Missing
|
### Missing
|
||||||
main.vaultDetail.missing.info=Cryptomator non è riuscito a trovare una cassaforte in questo percorso.
|
main.vaultDetail.missing.info=Cryptomator non è riuscito a trovare una cassaforte in questo percorso.
|
||||||
main.vaultDetail.missing.recheck=Ricontrolla
|
main.vaultDetail.missing.recheck=Ricontrolla
|
||||||
main.vaultDetail.missing.remove=Rimuovi dall'elenco delle casseforti…
|
main.vaultDetail.missing.remove=Rimuovi dall'Elenco di Cassaforti…
|
||||||
main.vaultDetail.missing.changeLocation=Cambia la Posizione della Cassaforte…
|
main.vaultDetail.missing.changeLocation=Cambia la Posizione della Cassaforte…
|
||||||
### Needs Migration
|
### Needs Migration
|
||||||
main.vaultDetail.migrateButton=Aggiorna la Cassaforte
|
main.vaultDetail.migrateButton=Aggiorna la Cassaforte
|
||||||
@@ -467,9 +445,8 @@ vaultOptions.mount.mountPoint.custom=Usa la directory scelta
|
|||||||
vaultOptions.mount.mountPoint.directoryPickerButton=Scegli…
|
vaultOptions.mount.mountPoint.directoryPickerButton=Scegli…
|
||||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Scegli una directory
|
vaultOptions.mount.mountPoint.directoryPickerTitle=Scegli una directory
|
||||||
vaultOptions.mount.volumeType.default=Predefinito (%s)
|
vaultOptions.mount.volumeType.default=Predefinito (%s)
|
||||||
vaultOptions.mount.volumeType.restartRequired=Per utilizzare questo tipo di volume, Cryptomator deve essere riavviato.
|
|
||||||
vaultOptions.mount.volume.tcp.port=Porta TCP
|
vaultOptions.mount.volume.tcp.port=Porta TCP
|
||||||
vaultOptions.mount.volume.type=Tipo di Volume
|
vaultOptions.mount.volume.type=Tipo di Unità
|
||||||
## Master Key
|
## Master Key
|
||||||
vaultOptions.masterkey=Password
|
vaultOptions.masterkey=Password
|
||||||
vaultOptions.masterkey.changePasswordBtn=Modifica password
|
vaultOptions.masterkey.changePasswordBtn=Modifica password
|
||||||
@@ -488,7 +465,7 @@ recoveryKey.display.title=Mostra Chiave Di Recupero
|
|||||||
recoveryKey.create.message=Password richiesta
|
recoveryKey.create.message=Password richiesta
|
||||||
recoveryKey.create.description=Inserisci la password per visualizzare la chiave di recupero per "%s":
|
recoveryKey.create.description=Inserisci la password per visualizzare la chiave di recupero per "%s":
|
||||||
recoveryKey.display.description=La seguente chiave di recupero può essere utilizzata per ripristinare l'accesso a %s":
|
recoveryKey.display.description=La seguente chiave di recupero può essere utilizzata per ripristinare l'accesso a %s":
|
||||||
recoveryKey.display.StorageHints=Conservala da qualche parte in modo sicuro, es.\n • Archiviarla usando un gestore di password\n • Salvarla su un'unità flash USB\n • Stamparla su carta
|
recoveryKey.display.StorageHints=Mantienilo da qualche parte molto sicuro, ad es.\n • Archivialo usando un gestore di password\n • Salvarlo su un'unità flash USB\n • Stamparlo su carta
|
||||||
## Reset Password
|
## Reset Password
|
||||||
### Enter Recovery Key
|
### Enter Recovery Key
|
||||||
recoveryKey.recover.title=Reimposta Password
|
recoveryKey.recover.title=Reimposta Password
|
||||||
@@ -541,28 +518,4 @@ updateReminder.notNow=Non adesso
|
|||||||
updateReminder.yesOnce=Sì, una volta
|
updateReminder.yesOnce=Sì, una volta
|
||||||
updateReminder.yesAutomatically=Sì, automaticamente
|
updateReminder.yesAutomatically=Sì, automaticamente
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.title=Avviso di obsolescenza
|
|
||||||
dokanySupportEnd.message=Supporto terminato per Dokany
|
|
||||||
dokanySupportEnd.description=Il tipo di volume Dokany non è più supportato da Cryptomator. Le impostazioni sono state aggiornate per utilizzare il tipo di volume ora predefinito. È possibile visualizzare il tipo predefinito nelle preferenze.
|
|
||||||
dokanySupportEnd.preferencesBtn=Apri Preferenze
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Condividi cassaforte
|
|
||||||
shareVault.message=Vuoi condividere la tua cassaforte con altri?
|
|
||||||
shareVault.description=Fai sempre attenzione quando condividi la tua cassaforte con altre persone. In breve, segui questi passaggi:
|
|
||||||
shareVault.instruction.1=1. Condividi l'accesso alla cartella della cassaforte crittografata tramite l'archiviazione cloud.
|
|
||||||
shareVault.instruction.2=2. Condividi la password della cassaforte in modo sicuro.
|
|
||||||
shareVault.remarkBestPractices=Per ulteriori informazioni, dai un'occhiata ai documenti con i consigli sulle le migliori pratiche.
|
|
||||||
shareVault.docsTooltip=Apri la documentazione per saperne di più circa la condivisione delle casseforti.
|
|
||||||
shareVault.hubAd.description=Il modo sicuro di lavorare in gruppi
|
|
||||||
shareVault.hubAd.keyManagement=Gestione delle chiavi a Conoscenza-Zero
|
|
||||||
shareVault.hubAd.authentication=• Autenticazione forte
|
|
||||||
shareVault.hubAd.encryption=• Crittografia end-to-end
|
|
||||||
shareVault.visitHub=Visita Hub Cryptomator
|
|
||||||
|
|
||||||
shareVault.hub.message=Come condividere una cassaforte Hub
|
|
||||||
shareVault.hub.description=Per condividere il contenuto della cassaforte con un altro membro del gruppo, è necessario eseguire due passaggi:
|
|
||||||
shareVault.hub.instruction.1=1. Condividi l'accesso alla cartella della cassaforte crittografata tramite l'archiviazione cloud.
|
|
||||||
shareVault.hub.instruction.2=2. Concedi l'accesso ai membri del gruppo nell'Hub Cryptomator.
|
|
||||||
shareVault.hub.openHub=Apri l'Hub Cryptomator
|
|
||||||
@@ -47,7 +47,6 @@ addvaultwizard.new.nameInstruction=金庫の名前を入力してください
|
|||||||
addvaultwizard.new.namePrompt=金庫の名前
|
addvaultwizard.new.namePrompt=金庫の名前
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=金庫の暗号化済みファイルをどの場所に保存しますか?
|
addvaultwizard.new.locationInstruction=金庫の暗号化済みファイルをどの場所に保存しますか?
|
||||||
addvaultwizard.new.locationLoading=デフォルトのクラウド・ストレージ・ディレクトリについてローカル・ファイルシステムをチェックする...
|
|
||||||
addvaultwizard.new.locationLabel=保存場所
|
addvaultwizard.new.locationLabel=保存場所
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=ユーザー設定
|
addvaultwizard.new.directoryPickerLabel=ユーザー設定
|
||||||
@@ -144,7 +143,6 @@ unlock.error.customPath.description.notEmptyDir=カスタムマウントパス
|
|||||||
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を再起動してください。
|
||||||
unlock.error.title=ロック解除 "%s" に失敗しました。
|
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=デバイス キーにアクセスできません
|
hub.noKeychain.message=デバイス キーにアクセスできません
|
||||||
hub.noKeychain.description=ハブ金庫を解錠するには、キーチェーンが保護するデバイス キーが必要です。続行するには、"%s" を有効にし環境設定からキーチェーンを選択します。
|
hub.noKeychain.description=ハブ金庫を解錠するには、キーチェーンが保護するデバイス キーが必要です。続行するには、"%s" を有効にし環境設定からキーチェーンを選択します。
|
||||||
@@ -160,7 +158,6 @@ hub.receive.description=Cryptomator が Hub からの応答を受信、処理中
|
|||||||
hub.register.message=新しいデバイス
|
hub.register.message=新しいデバイス
|
||||||
hub.register.description=このデバイスからの最初のハブアクセスです。アカウントキーを使用して登録してください。
|
hub.register.description=このデバイスからの最初のハブアクセスです。アカウントキーを使用して登録してください。
|
||||||
hub.register.nameLabel=デバイス名
|
hub.register.nameLabel=デバイス名
|
||||||
hub.register.invalidAccountKeyLabel=無効なアカウントキー
|
|
||||||
hub.register.registerBtn=登録
|
hub.register.registerBtn=登録
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
hub.register.legacy.occupiedMsg=この名前は既に使われています
|
hub.register.legacy.occupiedMsg=この名前は既に使われています
|
||||||
@@ -287,7 +284,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=外観
|
||||||
@@ -304,11 +300,9 @@ preferences.interface.showMinimizeButton=最小化ボタンを表示
|
|||||||
preferences.interface.showTrayIcon=トレイアイコンを表示 (再起動が必要)
|
preferences.interface.showTrayIcon=トレイアイコンを表示 (再起動が必要)
|
||||||
## Volume
|
## Volume
|
||||||
preferences.volume=仮想ドライブ
|
preferences.volume=仮想ドライブ
|
||||||
preferences.volume.type=デフォルトのボリュームタイプ
|
|
||||||
preferences.volume.type.automatic=自動
|
preferences.volume.type.automatic=自動
|
||||||
preferences.volume.docsTooltip=異なるボリュームタイプの詳細については、ドキュメントを確認してください。
|
preferences.volume.docsTooltip=異なるボリュームタイプの詳細については、ドキュメントを確認してください。
|
||||||
preferences.volume.fuseRestartRequired=変更を適用するには、Cryptomator を再起動する必要があります。
|
preferences.volume.fuseRestartRequired=変更を適用するには、Cryptomator を再起動する必要があります。
|
||||||
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.mountToDir=カスタム ディレクトリをマウント先に指定
|
||||||
@@ -321,14 +315,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=支援する
|
||||||
preferences.contribute.registeredFor=サポート証明書 (%s) が登録されました
|
preferences.contribute.registeredFor=サポート証明書 (%s) が登録されました
|
||||||
@@ -401,7 +387,6 @@ 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=金庫の内容はこちらからアクセスできます:
|
||||||
@@ -456,7 +441,6 @@ 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=使用中
|
||||||
@@ -466,10 +450,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.volumeType.default=既定値 (%s)
|
|
||||||
vaultOptions.mount.volumeType.restartRequired=このボリュームタイプを使用するには、Cryptomatorを再起動する必要があります。
|
|
||||||
vaultOptions.mount.volume.tcp.port=TCPポート
|
|
||||||
vaultOptions.mount.volume.type=ボリュームタイプ
|
|
||||||
## Master Key
|
## Master Key
|
||||||
vaultOptions.masterkey=パスワード
|
vaultOptions.masterkey=パスワード
|
||||||
vaultOptions.masterkey.changePasswordBtn=パスワードの変更
|
vaultOptions.masterkey.changePasswordBtn=パスワードの変更
|
||||||
@@ -541,27 +521,4 @@ updateReminder.notNow=また後で
|
|||||||
updateReminder.yesOnce=はい、一度だけ
|
updateReminder.yesOnce=はい、一度だけ
|
||||||
updateReminder.yesAutomatically=自動的に行う
|
updateReminder.yesAutomatically=自動的に行う
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.title=サポート廃止の通知
|
|
||||||
dokanySupportEnd.message=Dokany のサポート終了
|
|
||||||
dokanySupportEnd.preferencesBtn=環境設定を開く
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=保管庫を共有する
|
|
||||||
shareVault.message=保管庫を他の人と共有しますか?
|
|
||||||
shareVault.description=あなたの保管庫を他の人と共有するときは、常に注意してください。要するに、以下の手順に従ってください:
|
|
||||||
shareVault.instruction.1=1. クラウドストレージ経由で暗号化された保管庫フォルダへのアクセスを共有します。
|
|
||||||
shareVault.instruction.2=2. 保管庫のパスワードを安全な方法で共有する。
|
|
||||||
shareVault.remarkBestPractices=詳しくは、ドキュメントにあるベストプラクティスの提案をご覧ください。
|
|
||||||
shareVault.docsTooltip=保管庫の共有についての詳細は、ドキュメントをご覧ください。
|
|
||||||
shareVault.hubAd.description=チームワークの安全な方法
|
|
||||||
shareVault.hubAd.keyManagement=• ゼロ知識キー管理
|
|
||||||
shareVault.hubAd.authentication=• 強固な認証
|
|
||||||
shareVault.hubAd.encryption=• エンドツーエンドの暗号化
|
|
||||||
shareVault.visitHub=Cryptomator Hubを訪問
|
|
||||||
|
|
||||||
shareVault.hub.message=ハブ保管庫の共有方法
|
|
||||||
shareVault.hub.description=データ保管庫のコンテンツを他のチームメンバーと共有するには、2つの手順を実行する必要があります:
|
|
||||||
shareVault.hub.instruction.1=1. クラウドストレージ経由で暗号化された保管庫フォルダへのアクセスを共有します。
|
|
||||||
shareVault.hub.instruction.2=2. Cryptomator Hubでチームメンバーにアクセスを許可する。
|
|
||||||
shareVault.hub.openHub=Cryptomator Hubを開く
|
|
||||||
@@ -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,14 +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=후원하기
|
||||||
preferences.contribute.registeredFor=%s (으)로 후원자 인증 등록됨
|
preferences.contribute.registeredFor=%s (으)로 후원자 인증 등록됨
|
||||||
@@ -359,7 +325,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 +384,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=비밀번호 변경
|
||||||
@@ -480,7 +444,4 @@ quit.forced.forceAndQuitBtn=Vault 강제 잠금 후 종료하기
|
|||||||
updateReminder.title=업데이트 확인
|
updateReminder.title=업데이트 확인
|
||||||
updateReminder.notNow=나중에
|
updateReminder.notNow=나중에
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.preferencesBtn=설정 열기
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -167,7 +167,6 @@ preferences.updates.currentVersion=Pašreizējā versija: %s
|
|||||||
preferences.updates.autoUpdateCheck=Automātiski pārbaudīt atjauninājumus
|
preferences.updates.autoUpdateCheck=Automātiski pārbaudīt atjauninājumus
|
||||||
preferences.updates.checkNowBtn=Pārbaudīt tagad
|
preferences.updates.checkNowBtn=Pārbaudīt tagad
|
||||||
preferences.updates.updateAvailable=Pieejams atjauninājums uz versiju %s.
|
preferences.updates.updateAvailable=Pieejams atjauninājums uz versiju %s.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|
||||||
@@ -280,6 +279,4 @@ quit.lockAndQuitBtn=Aizslēgt un aizvērt
|
|||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -106,7 +106,6 @@ preferences.title=Поставки
|
|||||||
## Interface
|
## Interface
|
||||||
## Volume
|
## Volume
|
||||||
## Updates
|
## Updates
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|
||||||
@@ -161,6 +160,4 @@ vaultOptions.mount.mountPoint.directoryPickerButton=Избор…
|
|||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -64,7 +64,6 @@
|
|||||||
## Interface
|
## Interface
|
||||||
## Volume
|
## Volume
|
||||||
## Updates
|
## Updates
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|
||||||
@@ -113,6 +112,4 @@
|
|||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ addvaultwizard.new.nameInstruction=Navngi hvelvet
|
|||||||
addvaultwizard.new.namePrompt=Navn på hvelvet
|
addvaultwizard.new.namePrompt=Navn på hvelvet
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=Hvor skal Cryptomator lagre de krypterte filene dine?
|
addvaultwizard.new.locationInstruction=Hvor skal Cryptomator lagre de krypterte filene dine?
|
||||||
addvaultwizard.new.locationLoading=Sjekker lokalt filsystem for standard skylagringskatalog…
|
|
||||||
addvaultwizard.new.locationLabel=Lagringssted
|
addvaultwizard.new.locationLabel=Lagringssted
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=Tilpasset lagringssted
|
addvaultwizard.new.directoryPickerLabel=Tilpasset lagringssted
|
||||||
@@ -142,8 +141,6 @@ unlock.error.customPath.description.hideawayNotDir=Den midlertidige, skjulte fil
|
|||||||
unlock.error.customPath.description.couldNotBeCleaned=Hvelvet ditt kan ikke monteres i banen "%s". Prøv igjen eller velg en annen sti.
|
unlock.error.customPath.description.couldNotBeCleaned=Hvelvet ditt kan ikke monteres i banen "%s". Prøv igjen eller velg en annen sti.
|
||||||
unlock.error.customPath.description.notEmptyDir=Tilpasset monterings sti "%s" er ikke en tom mappe. Velg en tom mappe og prøv igjen.
|
unlock.error.customPath.description.notEmptyDir=Tilpasset monterings sti "%s" er ikke en tom mappe. Velg en tom mappe og prøv igjen.
|
||||||
unlock.error.customPath.description.generic=Du har valgt en egendefinert monterings sti for dette hvelvet, men bruk av den mislyktes med meldingen: %2$s
|
unlock.error.customPath.description.generic=Du har valgt en egendefinert monterings sti for dette hvelvet, men bruk av den mislyktes med meldingen: %2$s
|
||||||
unlock.error.restartRequired.message=Kan ikke låse opp hvelvet
|
|
||||||
unlock.error.restartRequired.description=Endre volumtype i innstillinger for hvelvet eller start Cryptomator på nytt.
|
|
||||||
unlock.error.title=Lås opp "%s" mislyktes
|
unlock.error.title=Lås opp "%s" mislyktes
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=Får ikke tilgang til enhetsnøkkel
|
hub.noKeychain.message=Får ikke tilgang til enhetsnøkkel
|
||||||
@@ -158,22 +155,13 @@ hub.receive.message=Prosesserer svar…
|
|||||||
hub.receive.description=Cryptomator mottar og behandler svaret fra Hub. Vennligst vent.
|
hub.receive.description=Cryptomator mottar og behandler svaret fra Hub. Vennligst vent.
|
||||||
### Register Device
|
### Register Device
|
||||||
hub.register.message=Ny Enhet
|
hub.register.message=Ny Enhet
|
||||||
hub.register.description=Dette er første hub tilgang fra denne enheten. Vennligst registrert dette med din kontonøkkel.
|
|
||||||
hub.register.nameLabel=Enhetsnavn
|
hub.register.nameLabel=Enhetsnavn
|
||||||
hub.register.invalidAccountKeyLabel=Ugyldig kontonøkkel
|
hub.register.invalidAccountKeyLabel=Ugyldig kontonøkkel
|
||||||
hub.register.registerBtn=Registrer
|
hub.register.registerBtn=Registrer
|
||||||
### Register Device Legacy
|
### Register Device Legacy
|
||||||
hub.register.legacy.occupiedMsg=Navnet er allerede i bruk
|
|
||||||
hub.register.legacy.description=Dette er første gang Hub blir benyttet fra denne enheten. Vennligst registrer den.
|
|
||||||
### Registration Success
|
### Registration Success
|
||||||
hub.registerSuccess.message=Enhet registrert
|
|
||||||
hub.registerSuccess.description=Enheten din er registrert. Du kan nå fortsette å låse opp hvelvet.
|
|
||||||
hub.registerSuccess.unlockBtn=Lås opp
|
hub.registerSuccess.unlockBtn=Lås opp
|
||||||
hub.registerSuccess.legacy.description=For å få tilgangen til hvelvet, må enheten din i tillegg godkjennes av hvelv eier.
|
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=Enhetsregistrering mislyktes
|
|
||||||
hub.registerFailed.description.generic=En feil ble gjort under registreringsprossen. For mer detaljer, se i applikasjonsloggen.
|
|
||||||
hub.registerFailed.description.deviceAlreadyExists=Denne enheten er allerede registrert for en annen bruker. Prøv å endre brukerkontoen eller bruk en annen enhet.
|
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Ingen tilgang
|
hub.unauthorized.message=Ingen tilgang
|
||||||
hub.unauthorized.description=Enheten din har ikke blitt autorisert til å få tilgang til dette hvelvet ennå. Spør hvelveieren om å tillate det.
|
hub.unauthorized.description=Enheten din har ikke blitt autorisert til å få tilgang til dette hvelvet ennå. Spør hvelveieren om å tillate det.
|
||||||
@@ -320,14 +308,6 @@ preferences.updates.currentVersion=Gjeldende versjon: %s
|
|||||||
preferences.updates.autoUpdateCheck=Se automatisk etter oppdateringer
|
preferences.updates.autoUpdateCheck=Se automatisk etter oppdateringer
|
||||||
preferences.updates.checkNowBtn=Sjekk nå
|
preferences.updates.checkNowBtn=Sjekk nå
|
||||||
preferences.updates.updateAvailable=Oppdatering til versjon %s er tilgjengelig.
|
preferences.updates.updateAvailable=Oppdatering til versjon %s er tilgjengelig.
|
||||||
preferences.updates.lastUpdateCheck=Siste sjekk: %s
|
|
||||||
preferences.updates.lastUpdateCheck.never=aldri
|
|
||||||
preferences.updates.lastUpdateCheck.recently=nylig
|
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=%s dager siden
|
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=%s timer siden
|
|
||||||
preferences.updates.checkFailed=Kunne ikke lete etter oppdateringer. Sjekk internett tilkoblingen din og prøv igjen senere.
|
|
||||||
preferences.updates.upToDate=Cryptomator er oppdatert.
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Støtt oss
|
preferences.contribute=Støtt oss
|
||||||
preferences.contribute.registeredFor=Supporter sertifikat registrert for %s
|
preferences.contribute.registeredFor=Supporter sertifikat registrert for %s
|
||||||
@@ -400,7 +380,6 @@ main.vaultDetail.unlockBtn=Lås opp…
|
|||||||
main.vaultDetail.unlockNowBtn=Lås opp nå
|
main.vaultDetail.unlockNowBtn=Lås opp nå
|
||||||
main.vaultDetail.optionsBtn=Alternativer for hvelvet
|
main.vaultDetail.optionsBtn=Alternativer for hvelvet
|
||||||
main.vaultDetail.passwordSavedInKeychain=Passordet er lagret
|
main.vaultDetail.passwordSavedInKeychain=Passordet er lagret
|
||||||
main.vaultDetail.share=Del…
|
|
||||||
### Unlocked
|
### Unlocked
|
||||||
main.vaultDetail.unlockedStatus=ULÅST
|
main.vaultDetail.unlockedStatus=ULÅST
|
||||||
main.vaultDetail.accessLocation=Innholdet i hvelvet ditt er tilgjengelig her:
|
main.vaultDetail.accessLocation=Innholdet i hvelvet ditt er tilgjengelig her:
|
||||||
@@ -466,7 +445,6 @@ vaultOptions.mount.mountPoint.custom=Bruk valgt mappe
|
|||||||
vaultOptions.mount.mountPoint.directoryPickerButton=Velg…
|
vaultOptions.mount.mountPoint.directoryPickerButton=Velg…
|
||||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Velg en mappe
|
vaultOptions.mount.mountPoint.directoryPickerTitle=Velg en mappe
|
||||||
vaultOptions.mount.volumeType.default=Standard (%s)
|
vaultOptions.mount.volumeType.default=Standard (%s)
|
||||||
vaultOptions.mount.volumeType.restartRequired=For å bruke denne volumtypen, må Cryptomator startes på nytt.
|
|
||||||
vaultOptions.mount.volume.tcp.port=TCP Port
|
vaultOptions.mount.volume.tcp.port=TCP Port
|
||||||
vaultOptions.mount.volume.type=Volumtype
|
vaultOptions.mount.volume.type=Volumtype
|
||||||
## Master Key
|
## Master Key
|
||||||
@@ -540,22 +518,4 @@ updateReminder.notNow=Ikke nå
|
|||||||
updateReminder.yesOnce=Ja, en gang
|
updateReminder.yesOnce=Ja, en gang
|
||||||
updateReminder.yesAutomatically=Ja, automatisk
|
updateReminder.yesAutomatically=Ja, automatisk
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.title=Avskrivingsvarsel
|
|
||||||
dokanySupportEnd.message=Støtte for Dokany er avsluttet
|
|
||||||
dokanySupportEnd.description=Volumtypen Dokany støttes ikke lenger av Cryptomator. Innstillingene dine er justert for å bruke standard volumtype nå. Du kan se standardtypen i innstillingene.
|
|
||||||
dokanySupportEnd.preferencesBtn=Åpne innstillinger
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Del hvelv
|
|
||||||
shareVault.message=Vil du dele hvelvet ditt med andre?
|
|
||||||
shareVault.hubAd.description=Den sikre måten å jobbe i et lag på
|
|
||||||
shareVault.hubAd.authentication=• Sterk autentisering
|
|
||||||
shareVault.hubAd.encryption=• Ende-til-ende kryptering
|
|
||||||
shareVault.visitHub=Besøk Cryptomator hub
|
|
||||||
|
|
||||||
shareVault.hub.message=Hvordan dele et Hub-hvelv
|
|
||||||
shareVault.hub.description=For å dele hvelvets innhold med et annet lagmedlem må du utføre to trinn:
|
|
||||||
shareVault.hub.instruction.1=1. Del tilgang til den krypterte hvelvmappen via skylagring.
|
|
||||||
shareVault.hub.instruction.2=2. Gi tilgang til lagmedlem i Cryptomator Hub.
|
|
||||||
shareVault.hub.openHub=Åpne Cryptomator hub
|
|
||||||
@@ -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
|
||||||
@@ -321,14 +320,6 @@ preferences.updates.currentVersion=Huidige Versie: "%s"
|
|||||||
preferences.updates.autoUpdateCheck=Automatisch controleren op updates
|
preferences.updates.autoUpdateCheck=Automatisch controleren op updates
|
||||||
preferences.updates.checkNowBtn=Controleer nu
|
preferences.updates.checkNowBtn=Controleer nu
|
||||||
preferences.updates.updateAvailable=Update naar versie "%s" beschikbaar.
|
preferences.updates.updateAvailable=Update naar versie "%s" beschikbaar.
|
||||||
preferences.updates.lastUpdateCheck=Laatst gecontroleerd: %s
|
|
||||||
preferences.updates.lastUpdateCheck.never=nooit
|
|
||||||
preferences.updates.lastUpdateCheck.recently=recent
|
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=%s dagen geleden
|
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=%s uur geleden
|
|
||||||
preferences.updates.checkFailed=Zoeken naar updates is mislukt. Controleer je internetverbinding of probeer het later opnieuw.
|
|
||||||
preferences.updates.upToDate=Cryptomator is up-to-date.
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Steun ons
|
preferences.contribute=Steun ons
|
||||||
preferences.contribute.registeredFor=Supporter certificaat geregistreerd voor %s
|
preferences.contribute.registeredFor=Supporter certificaat geregistreerd voor %s
|
||||||
@@ -541,12 +532,6 @@ updateReminder.notNow=Niet nu
|
|||||||
updateReminder.yesOnce=Ja, Eenmaal
|
updateReminder.yesOnce=Ja, Eenmaal
|
||||||
updateReminder.yesAutomatically=Ja, automatisch
|
updateReminder.yesAutomatically=Ja, automatisch
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.title=Kennisgeving van beëindiging
|
|
||||||
dokanySupportEnd.message=Ondersteuning beëindigd voor Dokany
|
|
||||||
dokanySupportEnd.description=Het volumetype Dokany wordt niet langer ondersteund door Cryptomator. Uw instellingen zijn aangepast om nu het standaard volumetype te gebruiken. U kunt het standaardtype bekijken in de voorkeuren.
|
|
||||||
dokanySupportEnd.preferencesBtn=Open Voorkeuren
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Kluis delen
|
shareVault.title=Kluis delen
|
||||||
shareVault.message=Wilt u uw kluis met anderen delen?
|
shareVault.message=Wilt u uw kluis met anderen delen?
|
||||||
|
|||||||
@@ -159,7 +159,6 @@ preferences.updates.currentVersion=Gjeldande versjon: %s
|
|||||||
preferences.updates.autoUpdateCheck=Sjå etter oppdateringar automatisk
|
preferences.updates.autoUpdateCheck=Sjå etter oppdateringar automatisk
|
||||||
preferences.updates.checkNowBtn=Sjekk no
|
preferences.updates.checkNowBtn=Sjekk no
|
||||||
preferences.updates.updateAvailable=Oppdatering til versjon %s er tilgjengeleg.
|
preferences.updates.updateAvailable=Oppdatering til versjon %s er tilgjengeleg.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|
||||||
@@ -278,6 +277,4 @@ quit.lockAndQuitBtn=Lås og avslutt
|
|||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
|
|||||||
@@ -168,7 +168,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 ਵਰਜ਼ਨ ਲਈ ਅੱਪਡੇਟ ਕਰੋ।
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|
||||||
@@ -317,8 +316,4 @@ quit.lockAndQuitBtn=ਲਾਕ ਕਰੋ ਤੇ ਬਾਹਰ ਜਾਓ
|
|||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
|
|
||||||
#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
|
||||||
@@ -321,14 +320,6 @@ preferences.updates.currentVersion=Obecna wersja: %s
|
|||||||
preferences.updates.autoUpdateCheck=Automatycznie sprawdzaj aktualizacje
|
preferences.updates.autoUpdateCheck=Automatycznie sprawdzaj aktualizacje
|
||||||
preferences.updates.checkNowBtn=Sprawdź teraz
|
preferences.updates.checkNowBtn=Sprawdź teraz
|
||||||
preferences.updates.updateAvailable=Dostępna jest aktualizacja do wersji %s.
|
preferences.updates.updateAvailable=Dostępna jest aktualizacja do wersji %s.
|
||||||
preferences.updates.lastUpdateCheck=Ostatnio sprawdzano: %s
|
|
||||||
preferences.updates.lastUpdateCheck.never=nigdy
|
|
||||||
preferences.updates.lastUpdateCheck.recently=niedawno
|
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=%s dni temu
|
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=%s godzin temu
|
|
||||||
preferences.updates.checkFailed=Nieudana próba sprawdzenia aktualizacji. Sprawdź połączenie z internetem i spróbuj ponownie.
|
|
||||||
preferences.updates.upToDate=Cryptomator jest aktualny.
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Wesprzyj nas
|
preferences.contribute=Wesprzyj nas
|
||||||
preferences.contribute.registeredFor=Certyfikat darczyńcy zarejestrowany dla %s
|
preferences.contribute.registeredFor=Certyfikat darczyńcy zarejestrowany dla %s
|
||||||
@@ -541,12 +532,6 @@ updateReminder.notNow=Nie teraz
|
|||||||
updateReminder.yesOnce=Tak, raz
|
updateReminder.yesOnce=Tak, raz
|
||||||
updateReminder.yesAutomatically=Tak, automatycznie
|
updateReminder.yesAutomatically=Tak, automatycznie
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.title=Informacja o wycofaniu
|
|
||||||
dokanySupportEnd.message=Koniec wsparcia dla Dokany
|
|
||||||
dokanySupportEnd.description=Typ udziału Dokany nie jest już wspierany przez Cryptomator. Twoje ustawienia zostały dostosowane do domyślnego typu udziału. Możesz sprawdzić jaki jest domyślny typ w ustawieniach.
|
|
||||||
dokanySupportEnd.preferencesBtn=Otwórz ustawienia
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Udostępnij sejf
|
shareVault.title=Udostępnij sejf
|
||||||
shareVault.message=Czy chcesz udostępnić swój sejf innym?
|
shareVault.message=Czy chcesz udostępnić swój sejf innym?
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ addvaultwizard.new.nameInstruction=Escolha um nome para o cofre
|
|||||||
addvaultwizard.new.namePrompt=Nome do Cofre
|
addvaultwizard.new.namePrompt=Nome do Cofre
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=Onde deve o Cryptomator armazenar os arquivos criptografados do cofre?
|
addvaultwizard.new.locationInstruction=Onde deve o Cryptomator armazenar os arquivos criptografados do cofre?
|
||||||
addvaultwizard.new.locationLoading=Verificando o sistema de ficheiros local para directórios de armazenamento predefinidos na nuvem…
|
addvaultwizard.new.locationLoading=Verificando o sistema de arquivos por diretórios padrão de armazenamento na nuvem…
|
||||||
addvaultwizard.new.locationLabel=Local de armazenamento
|
addvaultwizard.new.locationLabel=Local de armazenamento
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=Outro Local
|
addvaultwizard.new.directoryPickerLabel=Outro Local
|
||||||
@@ -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
|
||||||
@@ -321,14 +320,6 @@ preferences.updates.currentVersion=Versão atual: %s
|
|||||||
preferences.updates.autoUpdateCheck=Verificar automaticamente por atualizações
|
preferences.updates.autoUpdateCheck=Verificar automaticamente por atualizações
|
||||||
preferences.updates.checkNowBtn=Verificar Agora
|
preferences.updates.checkNowBtn=Verificar Agora
|
||||||
preferences.updates.updateAvailable=Atualização para a versão %s disponível.
|
preferences.updates.updateAvailable=Atualização para a versão %s disponível.
|
||||||
preferences.updates.lastUpdateCheck=Última verificação: %s
|
|
||||||
preferences.updates.lastUpdateCheck.never=nunca
|
|
||||||
preferences.updates.lastUpdateCheck.recently=recentemente
|
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=%s dias atrás
|
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=%s horas atrás
|
|
||||||
preferences.updates.checkFailed=A procura de actualizações falhou. Verifique a sua ligação à Internet ou tente novamente mais tarde.
|
|
||||||
preferences.updates.upToDate=Cryptomator está atualizado.
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Apoie-nos
|
preferences.contribute=Apoie-nos
|
||||||
preferences.contribute.registeredFor=Certificado de apoiador registado para %s
|
preferences.contribute.registeredFor=Certificado de apoiador registado para %s
|
||||||
@@ -541,12 +532,6 @@ updateReminder.notNow=Agora não
|
|||||||
updateReminder.yesOnce=Sim, Uma Vez
|
updateReminder.yesOnce=Sim, Uma Vez
|
||||||
updateReminder.yesAutomatically=Sim, Automaticamente
|
updateReminder.yesAutomatically=Sim, Automaticamente
|
||||||
|
|
||||||
#Dokany Support End
|
|
||||||
dokanySupportEnd.title=Aviso de descontinuação
|
|
||||||
dokanySupportEnd.message=Suporte termina para o Dokany
|
|
||||||
dokanySupportEnd.description=O tipo de volume Dokany não é mais suportado pelo Cryptomator. As configurações serão ajustadas para usar o tipo de volume padrão por agora. Pode ver o tipo padrão nas preferências.
|
|
||||||
dokanySupportEnd.preferencesBtn=Abrir preferências
|
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Partilhar cofre
|
shareVault.title=Partilhar cofre
|
||||||
shareVault.message=Quer partilhar o seu cofre com outros?
|
shareVault.message=Quer partilhar o seu cofre com outros?
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user